Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* This file tests setAndFetchFaviconForPage when it is called with invalid
* arguments, and when no favicon is stored for the given arguments.
*/
let faviconURI = Services.io.newURI(
);
add_task(async function () {
registerCleanupFunction(async function () {
await PlacesUtils.bookmarks.eraseEverything();
await PlacesUtils.history.clear();
});
// We'll listen for favicon changes for the whole test, to ensure only the
// last one will send a notification. Due to thread serialization, at that
// point we can be sure previous calls didn't send a notification.
let lastPageURI = Services.io.newURI("http://example.com/verification");
let promiseIconChanged = PlacesTestUtils.waitForNotification(
"favicon-changed",
events =>
events.some(
e => e.url == lastPageURI.spec && e.faviconUrl == SMALLPNG_DATA_URI.spec
)
);
info("Test null page uri");
Assert.throws(
() => {
PlacesUtils.favicons.setAndFetchFaviconForPage(
null,
faviconURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
},
/NS_ERROR_ILLEGAL_VALUE/,
"Exception expected because aPageURI is null"
);
info("Test null favicon uri");
Assert.throws(
() => {
PlacesUtils.favicons.setAndFetchFaviconForPage(
Services.io.newURI("http://example.com/null_faviconURI"),
null,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
},
/NS_ERROR_ILLEGAL_VALUE/,
"Exception expected because aFaviconURI is null."
);
info("Test about uri");
PlacesUtils.favicons.setAndFetchFaviconForPage(
Services.io.newURI("about:testAboutURI"),
faviconURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
info("Test private browsing non bookmarked uri");
let pageURI = Services.io.newURI("http://example.com/privateBrowsing");
await PlacesTestUtils.addVisits({
uri: pageURI,
transitionType: TRANSITION_TYPED,
});
PlacesUtils.favicons.setAndFetchFaviconForPage(
pageURI,
faviconURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
info("Test disabled history");
pageURI = Services.io.newURI("http://example.com/disabledHistory");
await PlacesTestUtils.addVisits({
uri: pageURI,
transition: TRANSITION_TYPED,
});
Services.prefs.setBoolPref("places.history.enabled", false);
PlacesUtils.favicons.setAndFetchFaviconForPage(
pageURI,
faviconURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
// The setAndFetchFaviconForPage function calls CanAddURI synchronously, thus
// we can set the preference back to true immediately.
Services.prefs.setBoolPref("places.history.enabled", true);
info("Test error icon");
// This error icon must stay in sync with FAVICON_ERRORPAGE_URL in
// nsIFaviconService.idl and aboutNetError.html.
let faviconErrorPageURI = Services.io.newURI(
);
pageURI = Services.io.newURI("http://example.com/errorIcon");
await PlacesTestUtils.addVisits({
uri: pageURI,
transition: TRANSITION_TYPED,
});
PlacesUtils.favicons.setAndFetchFaviconForPage(
pageURI,
faviconErrorPageURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
info("Test nonexisting page");
PlacesUtils.favicons.setAndFetchFaviconForPage(
Services.io.newURI("http://example.com/nonexistingPage"),
faviconURI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
info("Final sanity check");
// This is the only test that should cause the waitForFaviconChanged
// callback to be invoked.
await PlacesTestUtils.addVisits({
uri: lastPageURI,
transition: TRANSITION_TYPED,
});
PlacesUtils.favicons.setAndFetchFaviconForPage(
lastPageURI,
SMALLPNG_DATA_URI,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
null,
Services.scriptSecurityManager.getSystemPrincipal()
);
await promiseIconChanged;
});