 Chromium Code Reviews
 Chromium Code Reviews Issue 269103:
  Implement chrome.browserAction.setIcon({path:...});  (Closed)
    
  
    Issue 269103:
  Implement chrome.browserAction.setIcon({path:...});  (Closed) 
  | Index: chrome/renderer/resources/extension_process_bindings.js | 
| diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js | 
| index 29416441f174ddfccf52abb5d8cd9a6695f230aa..110147e8ae2cdd17ad15a2868b201e007fd10127 100644 | 
| --- a/chrome/renderer/resources/extension_process_bindings.js | 
| +++ b/chrome/renderer/resources/extension_process_bindings.js | 
| @@ -333,6 +333,7 @@ var chrome = chrome || {}; | 
| return GetL10nMessage(message_name, placeholders); | 
| } | 
| + var canvas_context; | 
| apiFunctions["browserAction.setIcon"].handleRequest = function(details) { | 
| if ("iconIndex" in details) { | 
| sendRequest(this.name, arguments, this.definition.parameters); | 
| @@ -352,6 +353,30 @@ var chrome = chrome || {}; | 
| sendCustomRequest(SetBrowserActionIcon, "browserAction.setIcon", | 
| details, this.definition.parameters); | 
| + } else if ("path" in details) { | 
| + if (!canvas_context) { | 
| + var canvas = document.createElement("canvas"); | 
| + canvas.width = 19; | 
| 
Matt Perry
2009/10/16 19:06:05
isn't it 21 now?
 | 
| + canvas.height = 19; | 
| + canvas_context = canvas.getContext('2d'); | 
| + } | 
| + | 
| + var img = new Image(); | 
| + var self = this; | 
| + img.onerror = function() { | 
| + console.error("Could not load browser action icon '" + details.path + | 
| + "'."); | 
| + } | 
| + img.onload = function() { | 
| + canvas_context.clearRect(0, 0, context.width, context.height); | 
| + canvas_context.drawImage(img, 0, 0, context.width, context.height); | 
| + delete details.path; | 
| + details.imageData = canvas_context.getImageData(0, 0, context.width, | 
| + context.height); | 
| + sendCustomRequest(SetBrowserActionIcon, "browserAction.setIcon", | 
| + details, self.definition.parameters); | 
| + } | 
| + img.src = details.path; | 
| } else { | 
| throw new Error( | 
| "Either the iconIndex or imageData property must be specified."); |