Closed Infocatcher closed 10 years ago
mozIAsyncFavicons.getFaviconURLForPage()
works only if page was already loaded in non-private mode. :(
Testcase for protocolRedirect.html:
var uri = Services.io.newURI(spec, null, null); // We accept only valid URIs
//try {
// setFavicon(uri.scheme + "://" + uri.hostPort + "/favicon.ico");
//}
//catch(e2) {
//}
if(location.protocol == "private:")
setBookmarkFavicon(document.documentURIObject, uri);
location.replace(spec);
...
function setBookmarkFavicon(bookmarkURI, pageURI) {
try {
// Note: works only if that page was already loaded in non-preivate mode
var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"]
.getService(Components.interfaces.mozIAsyncFavicons);
faviconService.getFaviconURLForPage(pageURI, {
onComplete: function(uri, dataLen, data, mimeType) {
uri && faviconService.setAndFetchFaviconForPage(
bookmarkURI,
uri,
false /*aForceReload*/,
faviconService.FAVICON_LOAD_PRIVATE
);
}
});
}
catch(e) {
Components.utils.reportError(e);
}
}
(and the same with true /*aForceReload*/
)
Requested here: https://addons.mozilla.org/addon/private-tab/reviews/591920/
We currently use hardcoded
/favicon.ico
link (like https://www.google.com/favicon.ico): https://github.com/Infocatcher/Private_Tab/blob/0.1.7.2/protocolRedirect.html#L85-L89We should try to use something like mozIAsyncFavicons.getFaviconURLForPage() -> setAndFetchFaviconForPage() https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozIAsyncFavicons
Testcase with custom favicon: http://infocatcher.ucoz.net/test/favicon.html http://fiddle.jshell.net/93Gy3/2/show/