Add an option to process favicons.

This optimizes the size for UI display and strips animations.
Default disabled. This resolves #899.
This commit is contained in:
wolfbeast 2018-12-06 22:23:58 +01:00 committed by Roy Tam
commit 9afb4d52f2
2 changed files with 31 additions and 1 deletions

View file

@ -264,6 +264,9 @@ pref("browser.slowStartup.maxSamples", 5);
pref("browser.enable_automatic_image_resizing", true);
pref("browser.chrome.site_icons", true);
pref("browser.chrome.favicons", true);
// If enabled, will process favicons by drawing them on a canvas,
// optimizing display size for the UI. This also strips animations.
pref("browser.chrome.favicons.process", false);
// browser.warnOnQuit == false will override all other possible prompts when quitting or restarting
pref("browser.warnOnQuit", true);
// browser.showQuitWarning specifically controls the quit warning dialog. We

View file

@ -831,13 +831,40 @@
"-moz-resolution=" + size + "," + size;
}
if (sizedIconUrl != aTab.getAttribute("image")) {
if (browser.mIconURL) //PMed
if (browser.mIconURL)
aTab.setAttribute("image", sizedIconUrl);
else
aTab.removeAttribute("image");
this._tabAttrModified(aTab, ["image"]);
}
if (Services.prefs.getBoolPref("browser.chrome.favicons.process")) {
let favImage = new Image;
favImage.src = browser.mIconURL;
var tabBrowser = this;
favImage.onload = function () {
try {
// Draw the icon on a hidden canvas
var canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
var tabImg = document.getAnonymousElementByAttribute(aTab, "anonid", "tab-icon");
var w = tabImg.boxObject.width;
var h = tabImg.boxObject.height;
canvas.width = w;
canvas.height = h;
var ctx = canvas.getContext('2d');
ctx.drawImage(favImage, 0, 0, w, h);
icon = canvas.toDataURL();
browser.mIconURL = icon;
aTab.setAttribute("image", icon);
}
catch (e) {
console.warn("Processing of favicon failed.");
// Canvas failed: icon remains as it was
}
tabBrowser._callProgressListeners(browser, "onLinkIconAvailable", [browser.mIconURL]);
}
}
this._callProgressListeners(browser, "onLinkIconAvailable", [browser.mIconURL]);
]]>
</body>