diff --git a/platform/chromium/img/browsericons/icon19-off.png b/platform/chromium/img/browsericons/icon19-off.png deleted file mode 100644 index 79fb3b823..000000000 Binary files a/platform/chromium/img/browsericons/icon19-off.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon19.png b/platform/chromium/img/browsericons/icon19.png deleted file mode 100644 index e6d57bdda..000000000 Binary files a/platform/chromium/img/browsericons/icon19.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon38-off.png b/platform/chromium/img/browsericons/icon38-off.png deleted file mode 100644 index a1b5c00bf..000000000 Binary files a/platform/chromium/img/browsericons/icon38-off.png and /dev/null differ diff --git a/platform/chromium/img/browsericons/icon38.png b/platform/chromium/img/browsericons/icon38.png deleted file mode 100644 index 09a57d2ff..000000000 Binary files a/platform/chromium/img/browsericons/icon38.png and /dev/null differ diff --git a/platform/chromium/manifest.json b/platform/chromium/manifest.json index c7a94a19d..b1e753dc7 100644 --- a/platform/chromium/manifest.json +++ b/platform/chromium/manifest.json @@ -5,8 +5,8 @@ }, "browser_action": { "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" + "16": "img/icon_16.png", + "32": "img/icon_32.png" }, "default_title": "uBlock Origin", "default_popup": "popup.html" diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js index 42dc2e27d..7dfa9dae6 100644 --- a/platform/chromium/vapi-background.js +++ b/platform/chromium/vapi-background.js @@ -638,29 +638,65 @@ vAPI.tabs.injectScript = function(tabId, details, callback) { // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browserAction#Browser_compatibility // Firefox for Android does no support browser.browserAction.setIcon(). +// Performance: use ImageData for platforms supporting it. vAPI.setIcon = (function() { - var browserAction = chrome.browserAction, + let browserAction = chrome.browserAction, titleTemplate = chrome.runtime.getManifest().name + ' ({badge})'; - var iconPaths = [ + let icons = [ { - '19': 'img/browsericons/icon19-off.png', - '38': 'img/browsericons/icon38-off.png' + tabId: 0, + path: { '16': 'img/icon_16-off.png', '32': 'img/icon_32-off.png' } }, { - '19': 'img/browsericons/icon19.png', - '38': 'img/browsericons/icon38.png' + tabId: 0, + path: { '16': 'img/icon_16.png', '32': 'img/icon_32.png' } } ]; + (function() { + if ( browserAction.setIcon === undefined ) { return; } + if ( + vAPI.webextFlavor.soup.has('chromium') === false && + vAPI.webextFlavor.soup.has('firefox') === false + ) { + return; + } + let imgs = [ + { i: 0, p: '16' }, { i: 0, p: '32' }, + { i: 1, p: '16' }, { i: 1, p: '32' }, + ]; + let onLoaded = function() { + for ( let img of imgs ) { + if ( img.r.complete === false ) { return; } + } + let ctx = document.createElement('canvas').getContext('2d'); + let iconData = [ null, null ]; + for ( let img of imgs ) { + let w = img.r.naturalWidth, h = img.r.naturalHeight; + ctx.width = w; ctx.height = h; + ctx.clearRect(0, 0, w, h); + ctx.drawImage(img.r, 0, 0); + if ( iconData[img.i] === null ) { iconData[img.i] = {}; } + iconData[img.i][img.p] = ctx.getImageData(0, 0, w, h); + } + icons[0] = { tabId: 0, imageData: iconData[0] }; + icons[1] = { tabId: 0, imageData: iconData[1] }; + }; + for ( let img of imgs ) { + img.r = new Image(); + img.r.addEventListener('load', onLoaded, { once: true }); + img.r.src = icons[img.i].path[img.p]; + } + })(); + var onTabReady = function(tab, status, badge) { if ( vAPI.lastError() || !tab ) { return; } if ( browserAction.setIcon !== undefined ) { - browserAction.setIcon({ - tabId: tab.id, - path: iconPaths[status === 'on' ? 1 : 0] - }); + let details = icons[status === 'on' ? 1 : 0]; + details.tabId = tab.id; + browserAction.setIcon(details); browserAction.setBadgeText({ tabId: tab.id, text: badge diff --git a/platform/firefox/manifest.json b/platform/firefox/manifest.json index 70619abca..9f5469693 100644 --- a/platform/firefox/manifest.json +++ b/platform/firefox/manifest.json @@ -12,8 +12,8 @@ "browser_action": { "browser_style": false, "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" + "16": "img/icon_16.png", + "32": "img/icon_32.png" }, "default_title": "uBlock Origin", "default_popup": "popup.html" diff --git a/platform/opera/manifest.json b/platform/opera/manifest.json index d6656c927..28164a7be 100644 --- a/platform/opera/manifest.json +++ b/platform/opera/manifest.json @@ -5,8 +5,8 @@ }, "browser_action": { "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon19.png" + "16": "img/icon_16.png", + "32": "img/icon_32.png" }, "default_popup": "popup.html", "default_title": "uBlock Origin" @@ -78,8 +78,8 @@ "short_name": "uBlockâ‚€", "sidebar_action": { "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon19.png" + "16": "img/icon_16.png", + "32": "img/icon_32.png" }, "default_panel": "logger-ui.html", "default_title": "__MSG_statsPageName__" diff --git a/platform/webext/manifest.json b/platform/webext/manifest.json index 39b65e8f3..d0fc97aef 100644 --- a/platform/webext/manifest.json +++ b/platform/webext/manifest.json @@ -12,8 +12,8 @@ "browser_action": { "browser_style": false, "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" + "16": "img/icon_16.png", + "32": "img/icon_32.png" }, "default_title": "uBlock Origin", "default_popup": "popup.html" diff --git a/tools/make-chromium.sh b/tools/make-chromium.sh index 4bc039165..786fe46a0 100755 --- a/tools/make-chromium.sh +++ b/tools/make-chromium.sh @@ -18,7 +18,6 @@ cp -R src/lib $DES/ cp -R src/_locales $DES/ cp src/*.html $DES/ cp platform/chromium/*.js $DES/js/ -cp -R platform/chromium/img $DES/ cp platform/chromium/*.html $DES/ cp platform/chromium/*.json $DES/ cp LICENSE.txt $DES/ diff --git a/tools/make-firefox.sh b/tools/make-firefox.sh index a428ad2d9..6afcc7946 100755 --- a/tools/make-firefox.sh +++ b/tools/make-firefox.sh @@ -18,7 +18,6 @@ cp -R src/lib $DES/ cp -R src/_locales $DES/ cp -R $DES/_locales/nb $DES/_locales/no cp src/*.html $DES/ -cp -R platform/chromium/img $DES/ cp platform/chromium/*.js $DES/js/ cp platform/chromium/*.html $DES/ cp platform/chromium/*.json $DES/ diff --git a/tools/make-opera.sh b/tools/make-opera.sh index b778753b5..6de39fdb2 100755 --- a/tools/make-opera.sh +++ b/tools/make-opera.sh @@ -18,7 +18,6 @@ cp -R src/lib $DES/ cp -R src/_locales $DES/ cp src/*.html $DES/ cp platform/chromium/*.js $DES/js/ -cp -R platform/chromium/img $DES/ cp platform/chromium/*.html $DES/ cp platform/chromium/*.json $DES/ cp LICENSE.txt $DES/ diff --git a/tools/make-webext.sh b/tools/make-webext.sh index dcc7a0e16..c77b5c0df 100755 --- a/tools/make-webext.sh +++ b/tools/make-webext.sh @@ -18,7 +18,6 @@ cp -R src/lib $DES/ cp -R src/_locales $DES/ cp -R $DES/_locales/nb $DES/_locales/no cp src/*.html $DES/ -cp -R platform/chromium/img $DES/ cp platform/chromium/*.js $DES/js/ cp platform/chromium/*.html $DES/ cp platform/chromium/*.json $DES/