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 // This contains unprivileged javascript APIs for extensions and apps. It | 5 // This contains unprivileged javascript APIs for extensions and apps. It |
6 // can be loaded by any extension-related context, such as content scripts or | 6 // can be loaded by any extension-related context, such as content scripts or |
7 // background pages. See user_script_slave.cc for script that is loaded by | 7 // background pages. See user_script_slave.cc for script that is loaded by |
8 // content scripts only. | 8 // content scripts only. |
9 | 9 |
10 require('json_schema'); | 10 require('json_schema'); |
11 require('event_bindings'); | |
12 var json = require('json'); | 11 var json = require('json'); |
13 var lastError = require('lastError'); | 12 var lastError = require('lastError'); |
14 var miscNatives = requireNative('miscellaneous_bindings'); | 13 var miscNatives = requireNative('miscellaneous_bindings'); |
| 14 var chrome = requireNative('chrome').GetChrome(); |
15 var CloseChannel = miscNatives.CloseChannel; | 15 var CloseChannel = miscNatives.CloseChannel; |
16 var PortAddRef = miscNatives.PortAddRef; | 16 var PortAddRef = miscNatives.PortAddRef; |
17 var PortRelease = miscNatives.PortRelease; | 17 var PortRelease = miscNatives.PortRelease; |
18 var PostMessage = miscNatives.PostMessage; | 18 var PostMessage = miscNatives.PostMessage; |
19 var BindToGC = miscNatives.BindToGC; | 19 var BindToGC = miscNatives.BindToGC; |
20 | 20 |
21 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); | 21 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); |
22 | 22 |
23 var processNatives = requireNative('process'); | 23 var processNatives = requireNative('process'); |
24 var manifestVersion = processNatives.GetManifestVersion(); | 24 var manifestVersion = processNatives.GetManifestVersion(); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 " send a response after the listener returns "; | 114 " send a response after the listener returns "; |
115 } else { | 115 } else { |
116 errorMsg = | 116 errorMsg = |
117 "Cannot send a response more than once per " + eventName + | 117 "Cannot send a response more than once per " + eventName + |
118 " listener per document"; | 118 " listener per document"; |
119 } | 119 } |
120 errorMsg += " (message was sent by extension " + sourceExtensionId; | 120 errorMsg += " (message was sent by extension " + sourceExtensionId; |
121 if (sourceExtensionId != targetExtensionId) | 121 if (sourceExtensionId != targetExtensionId) |
122 errorMsg += " for extension " + targetExtensionId; | 122 errorMsg += " for extension " + targetExtensionId; |
123 errorMsg += ")."; | 123 errorMsg += ")."; |
124 lastError.set(errorMsg); | 124 lastError.set(errorMsg, chrome); |
125 console.error("Could not send response: " + errorMsg); | 125 console.error("Could not send response: " + errorMsg); |
126 } | 126 } |
127 | 127 |
128 // Helper function for dispatchOnConnect | 128 // Helper function for dispatchOnConnect |
129 function dispatchOnRequest(portId, channelName, sender, | 129 function dispatchOnRequest(portId, channelName, sender, |
130 sourceExtensionId, targetExtensionId, | 130 sourceExtensionId, targetExtensionId, |
131 isExternal) { | 131 isExternal) { |
132 var isSendMessage = channelName == chromeHidden.kMessageChannel; | 132 var isSendMessage = channelName == chromeHidden.kMessageChannel; |
133 var requestEvent = (isSendMessage ? | 133 var requestEvent = (isSendMessage ? |
134 (isExternal ? | 134 (isExternal ? |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 }; | 224 }; |
225 | 225 |
226 // Called by native code when a channel has been closed. | 226 // Called by native code when a channel has been closed. |
227 chromeHidden.Port.dispatchOnDisconnect = function( | 227 chromeHidden.Port.dispatchOnDisconnect = function( |
228 portId, errorMessage) { | 228 portId, errorMessage) { |
229 var port = ports[portId]; | 229 var port = ports[portId]; |
230 if (port) { | 230 if (port) { |
231 // Update the renderer's port bookkeeping, without notifying the browser. | 231 // Update the renderer's port bookkeeping, without notifying the browser. |
232 CloseChannel(portId, false); | 232 CloseChannel(portId, false); |
233 if (errorMessage) { | 233 if (errorMessage) { |
234 lastError.set(errorMessage); | 234 lastError.set(errorMessage, chrome); |
235 console.error("Port error: " + errorMessage); | 235 console.error("Port error: " + errorMessage); |
236 } | 236 } |
237 try { | 237 try { |
238 port.onDisconnect.dispatch(port); | 238 port.onDisconnect.dispatch(port); |
239 } finally { | 239 } finally { |
240 port.destroy_(); | 240 port.destroy_(); |
241 lastError.clear(); | 241 lastError.clear(chrome); |
242 } | 242 } |
243 } | 243 } |
244 }; | 244 }; |
245 | 245 |
246 // Called by native code when a message has been sent to the given port. | 246 // Called by native code when a message has been sent to the given port. |
247 chromeHidden.Port.dispatchOnMessage = function(msg, portId) { | 247 chromeHidden.Port.dispatchOnMessage = function(msg, portId) { |
248 var port = ports[portId]; | 248 var port = ports[portId]; |
249 if (port) { | 249 if (port) { |
250 if (msg) { | 250 if (msg) { |
251 msg = json.parse(msg); | 251 msg = json.parse(msg); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 var targetId = null; | 312 var targetId = null; |
313 if (lastArg >= 0) | 313 if (lastArg >= 0) |
314 targetId = args[lastArg--]; | 314 targetId = args[lastArg--]; |
315 | 315 |
316 if (lastArg != -1) | 316 if (lastArg != -1) |
317 throw new Error('Invalid arguments to ' + functionName + '.'); | 317 throw new Error('Invalid arguments to ' + functionName + '.'); |
318 return [targetId, request, responseCallback]; | 318 return [targetId, request, responseCallback]; |
319 } | 319 } |
320 | 320 |
321 exports.sendMessageUpdateArguments = sendMessageUpdateArguments; | 321 exports.sendMessageUpdateArguments = sendMessageUpdateArguments; |
OLD | NEW |