Add an option to process favicons.

This optimizes the size for UI display and strips animations.
Default disabled. This resolves #899.
pull/1/head
wolfbeast 4 years ago committed by Roy Tam
parent f295b5c91b
commit 9afb4d52f2
  1. 3
      application/palemoon/app/profile/palemoon.js
  2. 29
      application/palemoon/base/content/tabbrowser.xml

@ -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

@ -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>

Loading…
Cancel
Save