Index: chrome/ext/background.js |
diff --git a/chrome/ext/background.js b/chrome/ext/background.js |
index fe0cd37f2fa1b68ff83ab00a5ab9a4f46811777b..1ad48281c1e10bfb20f8e2cddd9c54b55c87d1c5 100644 |
--- a/chrome/ext/background.js |
+++ b/chrome/ext/background.js |
@@ -170,27 +170,49 @@ |
/* Browser actions */ |
+ var supportedIconSizes = ["19", "38", "16", "32", "20", "40"]; |
+ |
var BrowserAction = function(tabId) |
{ |
this._tabId = tabId; |
this._changes = null; |
}; |
BrowserAction.prototype = { |
+ _safeChromeSetIcon: function(details) |
+ { |
+ try |
+ { |
+ chrome.browserAction.setIcon(details); |
+ } |
+ catch (e) |
+ { |
+ // Edge and newer versions of Chrome prefer different icon sizes, but |
+ // older versions of Chrome cannot handle them being present! |
+ supportedIconSizes.splice(2); |
+ |
+ for (var key of ["path", "imageData"]) |
+ { |
+ if (!(key in details)) |
+ continue; |
+ |
+ for (var size in details[key]) |
+ { |
+ if (details[key].hasOwnProperty(size) && |
+ supportedIconSizes.indexOf(size) == -1) |
+ delete details[key][size]; |
+ } |
+ } |
+ chrome.browserAction.setIcon(details); |
+ } |
+ }, |
_applyChanges: function() |
{ |
if ("iconPath" in this._changes) |
{ |
- chrome.browserAction.setIcon({ |
- tabId: this._tabId, |
- path: { |
- 16: this._changes.iconPath.replace("$size", "16"), |
- 19: this._changes.iconPath.replace("$size", "19"), |
- 20: this._changes.iconPath.replace("$size", "20"), |
- 32: this._changes.iconPath.replace("$size", "32"), |
- 38: this._changes.iconPath.replace("$size", "38"), |
- 40: this._changes.iconPath.replace("$size", "40") |
- } |
- }); |
+ var details = {tabId: this._tabId, path: {}}; |
+ for (var size of supportedIconSizes) |
+ details.path[size] = this._changes.iconPath.replace("$size", size); |
+ this._safeChromeSetIcon(details); |
} |
if ("badgeText" in this._changes) |