diff options
author | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 20:40:13 +0000 |
---|---|---|
committer | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 20:40:13 +0000 |
commit | f4f0459fb9b0a457f96062a081f9571c5ba11d57 (patch) | |
tree | b34a47474b6aa6b3a514ebc626436d3eaa3c8c5e /chrome/renderer | |
parent | 31648ae08b34c0940a4aa5571314efdf7f3926b5 (diff) | |
download | chromium_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.js | 58 |
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() { |