| OLD | NEW |
| 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 Loading... |
| 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(); |
| OLD | NEW |