Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(623)

Side by Side Diff: chrome/renderer/resources/extensions/context_menus_custom_bindings.js

Issue 15841013: Make miscellaneous_bindings and event_bindings Required as needed. Previously (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Custom binding for the contextMenus API. 5 // Custom binding for the contextMenus API.
6 6
7 var binding = require('binding').Binding.create('contextMenus'); 7 var binding = require('binding').Binding.create('contextMenus');
8 8
9 var contextMenus = requireNative('context_menus'); 9 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
10 var GetNextContextMenuId = contextMenus.GetNextContextMenuId; 10 var contextMenuNatives = requireNative('context_menus');
11 var sendRequest = require('sendRequest').sendRequest; 11 var sendRequest = require('sendRequest').sendRequest;
12 12 var Event = require('event_bindings').Event;
13 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
14 13
15 binding.registerCustomHook(function(bindingsAPI) { 14 binding.registerCustomHook(function(bindingsAPI) {
16 var apiFunctions = bindingsAPI.apiFunctions; 15 var apiFunctions = bindingsAPI.apiFunctions;
17 16
18 chromeHidden.contextMenus = {}; 17 chromeHidden.contextMenus = {};
19 chromeHidden.contextMenus.generatedIdHandlers = {}; 18 chromeHidden.contextMenus.generatedIdHandlers = {};
20 chromeHidden.contextMenus.stringIdHandlers = {}; 19 chromeHidden.contextMenus.stringIdHandlers = {};
21 var eventName = 'contextMenus'; 20 var eventName = 'contextMenus';
22 chromeHidden.contextMenus.event = new chrome.Event(eventName); 21 chromeHidden.contextMenus.event = new Event(eventName);
23 chromeHidden.contextMenus.getIdFromCreateProperties = function(prop) { 22 chromeHidden.contextMenus.getIdFromCreateProperties = function(prop) {
24 if (typeof(prop.id) !== 'undefined') 23 if (typeof(prop.id) !== 'undefined')
25 return prop.id; 24 return prop.id;
26 return prop.generatedId; 25 return prop.generatedId;
27 }; 26 };
28 chromeHidden.contextMenus.handlersForId = function(id) { 27 chromeHidden.contextMenus.handlersForId = function(id) {
29 if (typeof(id) === 'number') 28 if (typeof(id) === 'number')
30 return chromeHidden.contextMenus.generatedIdHandlers; 29 return chromeHidden.contextMenus.generatedIdHandlers;
31 return chromeHidden.contextMenus.stringIdHandlers; 30 return chromeHidden.contextMenus.stringIdHandlers;
32 }; 31 };
33 chromeHidden.contextMenus.ensureListenerSetup = function() { 32 chromeHidden.contextMenus.ensureListenerSetup = function() {
34 if (chromeHidden.contextMenus.listening) { 33 if (chromeHidden.contextMenus.listening) {
35 return; 34 return;
36 } 35 }
37 chromeHidden.contextMenus.listening = true; 36 chromeHidden.contextMenus.listening = true;
38 chromeHidden.contextMenus.event.addListener(function() { 37 chromeHidden.contextMenus.event.addListener(function() {
39 // An extension context menu item has been clicked on - fire the onclick 38 // An extension context menu item has been clicked on - fire the onclick
40 // if there is one. 39 // if there is one.
41 var id = arguments[0].menuItemId; 40 var id = arguments[0].menuItemId;
42 var onclick = chromeHidden.contextMenus.handlersForId(id)[id]; 41 var onclick = chromeHidden.contextMenus.handlersForId(id)[id];
43 if (onclick) { 42 if (onclick) {
44 onclick.apply(null, arguments); 43 onclick.apply(null, arguments);
45 } 44 }
46 }); 45 });
47 }; 46 };
48 47
49 apiFunctions.setHandleRequest('create', function() { 48 apiFunctions.setHandleRequest('create', function() {
50 var args = arguments; 49 var args = arguments;
51 var id = GetNextContextMenuId(); 50 var id = contextMenuNatives.GetNextContextMenuId();
52 args[0].generatedId = id; 51 args[0].generatedId = id;
53 var optArgs = { 52 var optArgs = {
54 customCallback: this.customCallback, 53 customCallback: this.customCallback,
55 }; 54 };
56 sendRequest(this.name, args, this.definition.parameters, optArgs); 55 sendRequest(this.name, args, this.definition.parameters, optArgs);
57 return chromeHidden.contextMenus.getIdFromCreateProperties(args[0]); 56 return chromeHidden.contextMenus.getIdFromCreateProperties(args[0]);
58 }); 57 });
59 58
60 apiFunctions.setCustomCallback('create', function(name, request, response) { 59 apiFunctions.setCustomCallback('create', function(name, request, response) {
61 if (chrome.runtime.lastError) { 60 if (chrome.runtime.lastError) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 function(name, request, response) { 94 function(name, request, response) {
96 if (chrome.runtime.lastError) { 95 if (chrome.runtime.lastError) {
97 return; 96 return;
98 } 97 }
99 chromeHidden.contextMenus.generatedIdHandlers = {}; 98 chromeHidden.contextMenus.generatedIdHandlers = {};
100 chromeHidden.contextMenus.stringIdHandlers = {}; 99 chromeHidden.contextMenus.stringIdHandlers = {};
101 }); 100 });
102 }); 101 });
103 102
104 exports.binding = binding.generate(); 103 exports.binding = binding.generate();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698