| 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'); |
| 11 var json = require('json'); | 12 var json = require('json'); |
| 12 var lastError = require('lastError'); | 13 var lastError = require('lastError'); |
| 13 var miscNatives = requireNative('miscellaneous_bindings'); | 14 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, chrome); | 124 lastError.set(errorMsg); |
| 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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, connectionInvalid) { | 228 portId, connectionInvalid) { |
| 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 (connectionInvalid) { | 233 if (connectionInvalid) { |
| 234 var errorMsg = | 234 var errorMsg = |
| 235 "Could not establish connection. Receiving end does not exist."; | 235 "Could not establish connection. Receiving end does not exist."; |
| 236 lastError.set(errorMsg, chrome); | 236 lastError.set(errorMsg); |
| 237 console.error("Port error: " + errorMsg); | 237 console.error("Port error: " + errorMsg); |
| 238 } | 238 } |
| 239 try { | 239 try { |
| 240 port.onDisconnect.dispatch(port); | 240 port.onDisconnect.dispatch(port); |
| 241 } finally { | 241 } finally { |
| 242 port.destroy_(); | 242 port.destroy_(); |
| 243 lastError.clear(chrome); | 243 lastError.clear(); |
| 244 } | 244 } |
| 245 } | 245 } |
| 246 }; | 246 }; |
| 247 | 247 |
| 248 // Called by native code when a message has been sent to the given port. | 248 // Called by native code when a message has been sent to the given port. |
| 249 chromeHidden.Port.dispatchOnMessage = function(msg, portId) { | 249 chromeHidden.Port.dispatchOnMessage = function(msg, portId) { |
| 250 var port = ports[portId]; | 250 var port = ports[portId]; |
| 251 if (port) { | 251 if (port) { |
| 252 if (msg) { | 252 if (msg) { |
| 253 msg = json.parse(msg); | 253 msg = json.parse(msg); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 var targetId = null; | 314 var targetId = null; |
| 315 if (lastArg >= 0) | 315 if (lastArg >= 0) |
| 316 targetId = args[lastArg--]; | 316 targetId = args[lastArg--]; |
| 317 | 317 |
| 318 if (lastArg != -1) | 318 if (lastArg != -1) |
| 319 throw new Error('Invalid arguments to ' + functionName + '.'); | 319 throw new Error('Invalid arguments to ' + functionName + '.'); |
| 320 return [targetId, request, responseCallback]; | 320 return [targetId, request, responseCallback]; |
| 321 } | 321 } |
| 322 | 322 |
| 323 exports.sendMessageUpdateArguments = sendMessageUpdateArguments; | 323 exports.sendMessageUpdateArguments = sendMessageUpdateArguments; |
| OLD | NEW |