diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-15 00:02:24 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-15 00:02:24 +0000 |
commit | 1288ba0949c899dce33fc6fcc8e212aee704bc48 (patch) | |
tree | bc9c5b2a1c969670e1b8a32bc5736b6dc1bb7f63 /chrome/renderer | |
parent | be1c57d6ca0e4661760202621db55b536c189041 (diff) | |
download | chromium_src-1288ba0949c899dce33fc6fcc8e212aee704bc48.zip chromium_src-1288ba0949c899dce33fc6fcc8e212aee704bc48.tar.gz chromium_src-1288ba0949c899dce33fc6fcc8e212aee704bc48.tar.bz2 |
Update browser actions api to be like new design doc.
BUG=23879
TEST=Install sample gmail browser action sample.
Review URL: http://codereview.chromium.org/264046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29068 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/extensions/extension_process_bindings.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/resources/extension_process_bindings.js | 26 |
2 files changed, 23 insertions, 7 deletions
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc index 197bb42..801fb9d 100644 --- a/chrome/renderer/extensions/extension_process_bindings.cc +++ b/chrome/renderer/extensions/extension_process_bindings.cc @@ -411,7 +411,9 @@ class ExtensionImpl : public ExtensionBase { // accepts a canvas ImageData object, so it needs to do extra processing // before sending the request to the browser. static v8::Handle<v8::Value> SetBrowserActionIcon(const v8::Arguments& args) { - v8::Local<v8::Object> image_data = args[1]->ToObject(); + v8::Local<v8::Object> details = args[1]->ToObject(); + v8::Local<v8::Object> image_data = + details->Get(v8::String::New("imageData"))->ToObject(); v8::Local<v8::Object> data = image_data->Get(v8::String::New("data"))->ToObject(); int width = image_data->Get(v8::String::New("width"))->Int32Value(); diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js index 3ca88c4..c0e94a1 100644 --- a/chrome/renderer/resources/extension_process_bindings.js +++ b/chrome/renderer/resources/extension_process_bindings.js @@ -333,18 +333,32 @@ var chrome = chrome || {}; return GetL10nMessage(message_name, placeholders); } - apiFunctions["browserAction.setIcon"].handleRequest = - function(idOrImageData) { - if (typeof(idOrImageData) == "number") { + apiFunctions["browserAction.setIcon"].handleRequest = function(details) { + if ("iconIndex" in details) { sendRequest(this.name, arguments, this.definition.parameters); - } else if (typeof(idOrImageData) == "object") { + } else if ("imageData" in details) { + // Verify that this at least looks like an ImageData element. + // Unfortunately, we cannot use instanceof because the ImageData + // constructor is not public. + // + // We do this manually instead of using JSONSchema to avoid having these + // properties show up in the doc. + if (!("width" in details.imageData) || + !("height" in details.imageData) || + !("data" in details.imageData)) { + throw new Error( + "The imageData property must contain an ImageData object."); + } sendCustomRequest(SetBrowserActionIcon, "browserAction.setIcon", - idOrImageData, this.definition.parameters); + details, this.definition.parameters); + } else { + throw new Error( + "Either the iconIndex or imageData property must be specified."); } } - setupPageActionEvents(extensionId); setupBrowserActionEvent(extensionId); + setupPageActionEvents(extensionId); setupToolstripEvents(GetRenderViewId()); }); })(); |