summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-15 00:02:24 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-15 00:02:24 +0000
commit1288ba0949c899dce33fc6fcc8e212aee704bc48 (patch)
treebc9c5b2a1c969670e1b8a32bc5736b6dc1bb7f63 /chrome/renderer
parentbe1c57d6ca0e4661760202621db55b536c189041 (diff)
downloadchromium_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.cc4
-rw-r--r--chrome/renderer/resources/extension_process_bindings.js26
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());
});
})();