summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 20:40:13 +0000
committerasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 20:40:13 +0000
commitf4f0459fb9b0a457f96062a081f9571c5ba11d57 (patch)
treeb34a47474b6aa6b3a514ebc626436d3eaa3c8c5e /chrome/renderer
parent31648ae08b34c0940a4aa5571314efdf7f3926b5 (diff)
downloadchromium_src-f4f0459fb9b0a457f96062a081f9571c5ba11d57.zip
chromium_src-f4f0459fb9b0a457f96062a081f9571c5ba11d57.tar.gz
chromium_src-f4f0459fb9b0a457f96062a081f9571c5ba11d57.tar.bz2
More cleanup of extensions context menu API.
This changes the contextMenus.create method to synchronously return an id instead of aysynchronously in the callback. This meant moving the generating of id's from a globally unique integer in C++ code to an extension-unique integer in javascript. The C++ unique id thus becomes a pair of <extension_id,int>. Also a couple of small drive-by cleanups while I was in some of the files. BUG=48198 TEST=The context menu API should work normally, given the changes described above. Review URL: http://codereview.chromium.org/2911007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52384 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/resources/extension_process_bindings.js58
1 files changed, 46 insertions, 12 deletions
diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js
index 9614959..5e7697b 100644
--- a/chrome/renderer/resources/extension_process_bindings.js
+++ b/chrome/renderer/resources/extension_process_bindings.js
@@ -263,12 +263,16 @@ var chrome = chrome || {};
}
function setupHiddenContextMenuEvent(extensionId) {
+ chromeHidden.contextMenus = {};
+ chromeHidden.contextMenus.nextId = 1;
+ chromeHidden.contextMenus.handlers = {};
var eventName = "contextMenus/" + extensionId;
- chromeHidden.contextMenuEvent = new chrome.Event(eventName);
- chromeHidden.contextMenuHandlers = {};
- chromeHidden.contextMenuEvent.addListener(function() {
- var menuItemId = arguments[0].menuItemId;
- var onclick = chromeHidden.contextMenuHandlers[menuItemId];
+ chromeHidden.contextMenus.event = new chrome.Event(eventName);
+ chromeHidden.contextMenus.event.addListener(function() {
+ // An extension context menu item has been clicked on - fire the onclick
+ // if there is one.
+ var id = arguments[0].menuItemId;
+ var onclick = chromeHidden.contextMenus.handlers[id];
if (onclick) {
onclick.apply(onclick, arguments);
}
@@ -591,27 +595,57 @@ var chrome = chrome || {};
details, this.name, this.definition.parameters, "page action");
};
+ apiFunctions["experimental.contextMenus.create"].handleRequest =
+ function() {
+ var args = arguments;
+ var id = chromeHidden.contextMenus.nextId++;
+ args[0].generatedId = id;
+ sendRequest(this.name, args, this.definition.parameters,
+ this.customCallback);
+ return id;
+ };
+
apiFunctions["experimental.contextMenus.create"].customCallback =
function(name, request, response) {
- if (chrome.extension.lastError || !response) {
+ if (chrome.extension.lastError) {
return;
}
+ var id = request.args[0].generatedId;
+
// Set up the onclick handler if we were passed one in the request.
var onclick = request.args.length ? request.args[0].onclick : null;
if (onclick) {
- var menuItemId = chromeHidden.JSON.parse(response);
- chromeHidden.contextMenuHandlers[menuItemId] = onclick;
+ chromeHidden.contextMenus.handlers[id] = onclick;
}
};
apiFunctions["experimental.contextMenus.remove"].customCallback =
function(name, request, response) {
- // Remove any onclick handler we had registered for this menu item.
- if (request.args.length > 0) {
- var menuItemId = request.args[0];
- delete chromeHidden.contextMenuHandlers[menuItemId];
+ if (chrome.extension.lastError) {
+ return;
+ }
+ var id = request.args[0];
+ delete chromeHidden.contextMenus.handlers[id];
+ };
+
+ apiFunctions["experimental.contextMenus.update"].customCallback =
+ function(name, request, response) {
+ if (chrome.extension.lastError) {
+ return;
+ }
+ var id = request.args[0];
+ if (request.args[1].onclick) {
+ chromeHidden.contextMenus.handlers[id] = request.args[1].onclick;
+ }
+ };
+
+ apiFunctions["experimental.contextMenus.removeAll"].customCallback =
+ function(name, request, response) {
+ if (chrome.extension.lastError) {
+ return;
}
+ chromeHidden.contextMenus.handlers = {};
};
apiFunctions["tabs.captureVisibleTab"].updateArguments = function() {