Source code

Revision control

Copy as Markdown

Other Tools

const TEST_URI1 = Services.io.newURI("http://mozilla.com/");
const TEST_URI2 = Services.io.newURI("http://places.com/");
const TEST_URI3 = Services.io.newURI("http://bookmarked.com/");
const TEST_LOCAL_URI = Services.io.newURI(
"chrome://branding/content/icon32.png"
);
const LOAD_NON_PRIVATE = PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE;
const LOAD_PRIVATE = PlacesUtils.favicons.FAVICON_LOAD_PRIVATE;
function promisePageChanged(url) {
return PlacesTestUtils.waitForNotification("favicon-changed", events =>
events.some(e => e.url == url)
);
}
add_task(async function test_tryCopyFavicons_inputcheck() {
try {
await PlacesUtils.favicons.tryCopyFavicons(null, TEST_URI2, LOAD_PRIVATE);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
try {
await PlacesUtils.favicons.tryCopyFavicons(TEST_URI1, null, LOAD_PRIVATE);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
try {
await PlacesUtils.favicons.tryCopyFavicons(TEST_URI1, TEST_URI2, 3);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
try {
await PlacesUtils.favicons.tryCopyFavicons(TEST_URI1, TEST_URI2, -1);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
try {
await PlacesUtils.favicons.tryCopyFavicons(TEST_URI1, TEST_URI2, null);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
});
add_task(async function test_tryCopyFavicons_noop() {
info("Unknown uris");
Assert.equal(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_NON_PRIVATE
),
false,
"Icon should not have been copied"
);
info("Unknown dest uri");
await PlacesTestUtils.addVisits(TEST_URI1);
Assert.equal(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_NON_PRIVATE
),
false,
"Icon should not have been copied"
);
info("Unknown dest uri, source has icon");
await PlacesTestUtils.setFaviconForPage(
TEST_URI1,
SMALLPNG_DATA_URI,
SMALLPNG_DATA_URI
);
await PlacesTestUtils.addVisits(TEST_URI1);
Assert.equal(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_NON_PRIVATE
),
false,
"Icon should not have been copied"
);
info("Known uris, source has icon, private");
await PlacesTestUtils.addVisits(TEST_URI2);
Assert.equal(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_PRIVATE
),
false,
"Icon should not have been copied"
);
PlacesUtils.favicons.expireAllFavicons();
await PlacesUtils.history.clear();
});
add_task(async function test_tryCopyFavicons() {
info("Normal copy across 2 pages");
await PlacesTestUtils.addVisits(TEST_URI1);
await PlacesTestUtils.setFaviconForPage(
TEST_URI1,
SMALLPNG_DATA_URI,
SMALLPNG_DATA_URI
);
await PlacesTestUtils.setFaviconForPage(
TEST_URI1,
SMALLSVG_DATA_URI,
SMALLSVG_DATA_URI
);
await PlacesTestUtils.addVisits(TEST_URI2);
let promiseChange = promisePageChanged(TEST_URI2.spec);
Assert.ok(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_NON_PRIVATE
),
"Icon should have been copied"
);
await promiseChange;
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI2, 1)).uri.spec,
SMALLPNG_DATA_URI.spec,
"Small icon found"
);
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI2)).uri.spec,
SMALLSVG_DATA_URI.spec,
"Large icon found"
);
info("Private copy to a bookmarked page");
await PlacesUtils.bookmarks.insert({
url: TEST_URI3,
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
});
promiseChange = promisePageChanged(TEST_URI3.spec);
Assert.ok(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI3,
LOAD_PRIVATE
),
"Icon should have been copied"
);
await promiseChange;
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI3, 1)).uri.spec,
SMALLPNG_DATA_URI.spec,
"Small icon found"
);
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI3)).uri.spec,
SMALLSVG_DATA_URI.spec,
"Large icon found"
);
PlacesUtils.favicons.expireAllFavicons();
await PlacesUtils.history.clear();
});
add_task(async function test_tryCopyFavicons_overlap() {
info("Copy to a page that has one of the favicons already");
await PlacesTestUtils.addVisits(TEST_URI1);
await PlacesTestUtils.setFaviconForPage(
TEST_URI1,
SMALLPNG_DATA_URI,
SMALLPNG_DATA_URI
);
await PlacesTestUtils.setFaviconForPage(
TEST_URI1,
SMALLSVG_DATA_URI,
SMALLSVG_DATA_URI
);
await PlacesTestUtils.addVisits(TEST_URI2);
await PlacesTestUtils.setFaviconForPage(
TEST_URI2,
SMALLPNG_DATA_URI,
SMALLPNG_DATA_URI
);
let promiseChange = promisePageChanged(TEST_URI2.spec);
Assert.ok(
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_URI2,
LOAD_NON_PRIVATE
),
"Icon should have been copied"
);
await promiseChange;
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI2, 1)).uri.spec,
SMALLPNG_DATA_URI.spec,
"Small icon found"
);
Assert.equal(
(await PlacesTestUtils.getFaviconForPage(TEST_URI2)).uri.spec,
SMALLSVG_DATA_URI.spec,
"Large icon found"
);
});
add_task(async function test_tryCopyFavicons_local_uri() {
await PlacesTestUtils.addVisits(TEST_URI1);
try {
await PlacesUtils.favicons.tryCopyFavicons(
TEST_URI1,
TEST_LOCAL_URI,
LOAD_NON_PRIVATE
);
Assert.ok(false);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
}
});