fallback to 'path' when Canvas is blocked in FF

fixes #335
This commit is contained in:
tophf 2018-01-30 19:42:30 +03:00
parent 95a24cd29b
commit f6991c4f57

View File

@ -357,13 +357,18 @@ function updateIcon({tab, styles}) {
if (tabIcon.iconType !== iconset + postfix) { if (tabIcon.iconType !== iconset + postfix) {
tabIcon.iconType = iconset + postfix; tabIcon.iconType = iconset + postfix;
const sizes = FIREFOX || CHROME >= 2883 && !VIVALDI ? [16, 32] : [19, 38]; const sizes = FIREFOX || CHROME >= 2883 && !VIVALDI ? [16, 32] : [19, 38];
const usePath = tabIcons.get('usePath');
Promise.all(sizes.map(size => { Promise.all(sizes.map(size => {
const src = `/images/icon/${iconset}${size}${postfix}.png`; const src = `/images/icon/${iconset}${size}${postfix}.png`;
return tabIcons.get(src) || loadIcon(src); return usePath ? src : tabIcons.get(src) || loadIcon(src);
})).then(data => { })).then(data => {
const imageKey = typeof data[0] === 'string' ? 'path' : 'imageData';
const imageData = {}; const imageData = {};
sizes.forEach((size, i) => (imageData[size] = data[i])); sizes.forEach((size, i) => (imageData[size] = data[i]));
chrome.browserAction.setIcon({tabId: tab.id, imageData}, ignoreChromeError); chrome.browserAction.setIcon({
tabId: tab.id,
[imageKey]: imageData,
}, ignoreChromeError);
}); });
} }
if (tab.id === undefined) return; if (tab.id === undefined) return;
@ -400,6 +405,16 @@ function updateIcon({tab, styles}) {
ctx.clearRect(0, 0, w, h); ctx.clearRect(0, 0, w, h);
ctx.drawImage(img, 0, 0, w, h); ctx.drawImage(img, 0, 0, w, h);
const data = ctx.getImageData(0, 0, w, h); const data = ctx.getImageData(0, 0, w, h);
// Firefox breaks Canvas when privacy.resistFingerprinting=true, https://bugzil.la/1412961
let usePath = tabIcons.get('usePath');
if (usePath === undefined) {
usePath = data.data.every(b => b === 255);
tabIcons.set('usePath', usePath);
}
if (usePath) {
resolve(src);
return;
}
tabIcons.set(src, data); tabIcons.set(src, data);
resolve(data); resolve(data);
}; };