summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/favicons/test_setFaviconForPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/favicons/test_setFaviconForPage.js')
-rw-r--r--toolkit/components/places/tests/favicons/test_setFaviconForPage.js245
1 files changed, 245 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/favicons/test_setFaviconForPage.js b/toolkit/components/places/tests/favicons/test_setFaviconForPage.js
new file mode 100644
index 0000000000..22364e5410
--- /dev/null
+++ b/toolkit/components/places/tests/favicons/test_setFaviconForPage.js
@@ -0,0 +1,245 @@
+/* Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Tests for setFaviconForPage()
+ */
+
+add_task(async function test_validHistoryURI() {
+ let pageURI = uri("http://test1.bar/");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ let favicon = await createFavicon("favicon1.png");
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI: favicon.uri,
+ dataURL: await createDataURLForFavicon(favicon),
+ expectedFaviconData: favicon.data,
+ expectedFaviconMimeType: favicon.mimeType,
+ });
+
+ await IOUtils.remove(favicon.file.path);
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_overrideDefaultFavicon() {
+ let pageURI = uri("http://test2.bar/");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ let firstFavicon = await createFavicon("favicon2.png");
+ let secondFavicon = await createFavicon("favicon3.png");
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI: firstFavicon.uri,
+ dataURL: await createDataURLForFavicon(secondFavicon),
+ expectedFaviconData: secondFavicon.data,
+ expectedFaviconMimeType: secondFavicon.mimeType,
+ });
+
+ await IOUtils.remove(firstFavicon.file.path);
+ await IOUtils.remove(secondFavicon.file.path);
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_replaceExisting() {
+ let pageURI = uri("http://test3.bar");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ let firstFavicon = await createFavicon("favicon4.png");
+ let secondFavicon = await createFavicon("favicon5.png");
+
+ await new Promise(resolve => {
+ PlacesUtils.favicons.setAndFetchFaviconForPage(
+ pageURI,
+ firstFavicon.uri,
+ true,
+ PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
+ function test_replaceExisting_firstSet_check(
+ aURI,
+ aDataLen,
+ aData,
+ aMimeType
+ ) {
+ Assert.equal(aMimeType, firstFavicon.mimeType);
+ Assert.ok(compareArrays(aData, firstFavicon.data));
+ checkFaviconDataForPage(
+ pageURI,
+ firstFavicon.mimeType,
+ firstFavicon.data,
+ resolve
+ );
+ },
+ Services.scriptSecurityManager.getSystemPrincipal()
+ );
+ });
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI: firstFavicon.uri,
+ dataURL: await createDataURLForFavicon(secondFavicon),
+ expectedFaviconData: secondFavicon.data,
+ expectedFaviconMimeType: secondFavicon.mimeType,
+ });
+
+ await IOUtils.remove(firstFavicon.file.path);
+ await IOUtils.remove(secondFavicon.file.path);
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_twiceReplace() {
+ let pageURI = uri("http://test5.bar/");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ let firstFavicon = await createFavicon("favicon9.png");
+ let secondFavicon = await createFavicon("favicon10.png");
+
+ let firstFaviconDataURL = await createDataURLForFavicon(firstFavicon);
+ await new Promise(resolve => {
+ PlacesUtils.favicons.setFaviconForPage(
+ pageURI,
+ firstFavicon.uri,
+ firstFaviconDataURL,
+ null,
+ resolve
+ );
+ });
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI: firstFavicon.uri,
+ dataURL: await createDataURLForFavicon(secondFavicon),
+ expectedFaviconData: secondFavicon.data,
+ expectedFaviconMimeType: secondFavicon.mimeType,
+ });
+
+ await IOUtils.remove(firstFavicon.file.path);
+ await IOUtils.remove(secondFavicon.file.path);
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_userpass() {
+ let pageURI = uri("http://user:pass@test1.bar/");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ let favicon = await createFavicon("favicon1.png");
+ let faviconURI = uri("http://user:pass@test1.bar/favicon1.png");
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI,
+ dataURL: await createDataURLForFavicon(favicon),
+ expectedFaviconData: favicon.data,
+ expectedFaviconMimeType: favicon.mimeType,
+ });
+
+ await IOUtils.remove(favicon.file.path);
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_svg() {
+ let pageURI = uri("http://example.com/");
+ await PlacesTestUtils.addVisits(pageURI);
+
+ const svgContent = "<svg><rect width='1px' height='1px%'/></svg>";
+
+ await doTestSetFaviconForPage({
+ pageURI,
+ faviconURI: uri("http://example.com/favicon.svg"),
+ dataURL: uri(`data:image/svg+xml;utf8,${svgContent}`),
+ expectedFaviconData: Array.from(new TextEncoder().encode(svgContent)),
+ expectedFaviconMimeType: "image/svg+xml",
+ });
+
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_invalidPageURI() {
+ await PlacesTestUtils.addVisits(uri("http://example.com/"));
+ let favicon = await createFavicon("favicon-invalidPageURI.png");
+
+ for (let invalidURI of [null, "", "http://example.com"]) {
+ try {
+ info(`Invalid page URI test for [${invalidURI}]`);
+ PlacesUtils.favicons.setFaviconForPage(
+ invalidURI,
+ favicon.uri,
+ await createDataURLForFavicon(favicon)
+ );
+ Assert.ok(false, "Error should happened");
+ } catch (e) {
+ Assert.ok(true, `Expected error happend [${e.message}]`);
+ }
+ }
+});
+
+add_task(async function test_invalidFaviconURI() {
+ let pageURI = uri("http://example.com/");
+ await PlacesTestUtils.addVisits(pageURI);
+ let favicon = await createFavicon("favicon-invalidFaviconURI.png");
+
+ for (let invalidURI of [null, "", favicon.uri.spec]) {
+ try {
+ info(`Invalid favicon URI test for [${invalidURI}]`);
+ PlacesUtils.favicons.setFaviconForPage(
+ pageURI,
+ invalidURI,
+ await createDataURLForFavicon(favicon)
+ );
+ Assert.ok(false, "Error should happened");
+ } catch (e) {
+ Assert.ok(true, `Expected error happend [${e.message}]`);
+ }
+ }
+});
+
+add_task(async function test_invalidFaviconDataURI() {
+ let pageURI = uri("http://example.com/");
+ await PlacesTestUtils.addVisits(pageURI);
+ let favicon = createFavicon("favicon-invalidFaviconDataURI.png");
+
+ for (let invalidURI of [
+ null,
+ "",
+ "data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==",
+ ]) {
+ try {
+ info(`Invalid favicon data URI test for [${invalidURI}]`);
+ PlacesUtils.favicons.setFaviconForPage(pageURI, favicon.uri, invalidURI);
+ Assert.ok(false, "Error should happened");
+ } catch (e) {
+ Assert.ok(true, `Expected error happend [${e.message}]`);
+ }
+ }
+});
+
+async function doTestSetFaviconForPage({
+ pageURI,
+ faviconURI,
+ dataURL,
+ expectedFaviconData,
+ expectedFaviconMimeType,
+}) {
+ let result = await new Promise(resolve => {
+ PlacesUtils.favicons.setFaviconForPage(
+ pageURI,
+ faviconURI,
+ dataURL,
+ null,
+ resolve
+ );
+ });
+
+ info("Check the result of setFaviconForPage");
+ Assert.equal(result, 0);
+
+ await new Promise(resolve => {
+ checkFaviconDataForPage(
+ pageURI,
+ expectedFaviconMimeType,
+ expectedFaviconData,
+ resolve
+ );
+ });
+}