gecko/toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage.js

153 lines
5.5 KiB
JavaScript

/* 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 the normal operation of setAndFetchFaviconForPage.
function test() {
// Initialization
waitForExplicitFinish();
let windowsToClose = [];
let testURI = "https://www.mozilla.org/en-US/";
let favIconLocation =
"http://example.org/tests/toolkit/components/places/tests/browser/favicon-normal32.png";
let favIconURI = NetUtil.newURI(favIconLocation);
let favIconMimeType= "image/png";
let pageURI;
let favIconData;
function testOnWindow(aOptions, aCallback) {
whenNewWindowLoaded(aOptions, function(aWin) {
windowsToClose.push(aWin);
executeSoon(function() aCallback(aWin));
});
};
// This function is called after calling finish() on the test.
registerCleanupFunction(function() {
windowsToClose.forEach(function(aWin) {
aWin.close();
});
});
function getIconFile(aCallback) {
NetUtil.asyncFetch2(
favIconLocation,
function(inputStream, status) {
if (!Components.isSuccessCode(status)) {
ok(false, "Could not get the icon file");
// Handle error.
return;
}
// Check the returned size versus the expected size.
let size = inputStream.available();
favIconData = NetUtil.readInputStreamToString(inputStream, size);
is(size, favIconData.length, "Check correct icon size");
// Check that the favicon loaded correctly before starting the actual tests.
is(favIconData.length, 344, "Check correct icon length (344)");
if (aCallback) {
aCallback();
} else {
finish();
}
},
null, // aLoadingNode
Services.scriptSecurityManager.getSystemPrincipal(),
null, // aTriggeringPrincipal
Ci.nsILoadInfo.SEC_NORMAL,
Ci.nsIContentPolicy.TYPE_IMAGE);
}
function testNormal(aWindow, aCallback) {
pageURI = NetUtil.newURI("http://example.com/normal");
waitForFaviconChanged(pageURI, favIconURI, aWindow,
function testNormalCallback() {
checkFaviconDataForPage(pageURI, favIconMimeType, favIconData, aWindow,
aCallback);
}
);
addVisits({uri: pageURI, transition: TRANSITION_TYPED}, aWindow,
function () {
aWindow.PlacesUtils.favicons.setAndFetchFaviconForPage(pageURI,
favIconURI, true, aWindow.PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE);
}
);
}
function testAboutURIBookmarked(aWindow, aCallback) {
pageURI = NetUtil.newURI("about:testAboutURI_bookmarked");
waitForFaviconChanged(pageURI, favIconURI, aWindow,
function testAboutURIBookmarkedCallback() {
checkFaviconDataForPage(pageURI, favIconMimeType, favIconData, aWindow,
aCallback);
}
);
aWindow.PlacesUtils.bookmarks.insertBookmark(
aWindow.PlacesUtils.unfiledBookmarksFolderId, pageURI,
aWindow.PlacesUtils.bookmarks.DEFAULT_INDEX, pageURI.spec);
aWindow.PlacesUtils.favicons.setAndFetchFaviconForPage(pageURI, favIconURI,
true, aWindow.PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE);
}
function testPrivateBrowsingBookmarked(aWindow, aCallback) {
pageURI = NetUtil.newURI("http://example.com/privateBrowsing_bookmarked");
waitForFaviconChanged(pageURI, favIconURI, aWindow,
function testPrivateBrowsingBookmarkedCallback() {
checkFaviconDataForPage(pageURI, favIconMimeType, favIconData, aWindow,
aCallback);
}
);
aWindow.PlacesUtils.bookmarks.insertBookmark(
aWindow.PlacesUtils.unfiledBookmarksFolderId, pageURI,
aWindow.PlacesUtils.bookmarks.DEFAULT_INDEX, pageURI.spec);
aWindow.PlacesUtils.favicons.setAndFetchFaviconForPage(pageURI, favIconURI,
true, aWindow.PlacesUtils.favicons.FAVICON_LOAD_PRIVATE);
}
function testDisabledHistoryBookmarked(aWindow, aCallback) {
pageURI = NetUtil.newURI("http://example.com/disabledHistory_bookmarked");
waitForFaviconChanged(pageURI, favIconURI, aWindow,
function testDisabledHistoryBookmarkedCallback() {
checkFaviconDataForPage(pageURI, favIconMimeType, favIconData, aWindow,
aCallback);
}
);
// Disable history while changing the favicon.
aWindow.Services.prefs.setBoolPref("places.history.enabled", false);
aWindow.PlacesUtils.bookmarks.insertBookmark(
aWindow.PlacesUtils.unfiledBookmarksFolderId, pageURI,
aWindow.PlacesUtils.bookmarks.DEFAULT_INDEX, pageURI.spec);
aWindow.PlacesUtils.favicons.setAndFetchFaviconForPage(pageURI, favIconURI,
true, aWindow.PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE);
// The setAndFetchFaviconForPage function calls CanAddURI synchronously, thus
// we can set the preference back to true immediately. We don't clear the
// preference because not all products enable Places by default.
aWindow.Services.prefs.setBoolPref("places.history.enabled", true);
}
getIconFile(function () {
testOnWindow({}, function(aWin) {
testNormal(aWin, function () {
testOnWindow({}, function(aWin) {
testAboutURIBookmarked(aWin, function () {
testOnWindow({private: true}, function(aWin) {
testPrivateBrowsingBookmarked(aWin, function () {
testOnWindow({}, function(aWin) {
testDisabledHistoryBookmarked(aWin, finish);
});
});
});
});
});
});
});
});
}