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

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

Issue 16226004: Replace JSON (de)serialization of extension messages with direct Value pickling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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 // 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 var json = require('json');
12 var lastError = require('lastError'); 11 var lastError = require('lastError');
13 var miscNatives = requireNative('miscellaneous_bindings'); 12 var miscNatives = requireNative('miscellaneous_bindings');
14 var chrome = requireNative('chrome').GetChrome(); 13 var chrome = requireNative('chrome').GetChrome();
15 var CloseChannel = miscNatives.CloseChannel; 14 var CloseChannel = miscNatives.CloseChannel;
16 var PortAddRef = miscNatives.PortAddRef; 15 var PortAddRef = miscNatives.PortAddRef;
17 var PortRelease = miscNatives.PortRelease; 16 var PortRelease = miscNatives.PortRelease;
18 var PostMessage = miscNatives.PostMessage; 17 var PostMessage = miscNatives.PostMessage;
19 var BindToGC = miscNatives.BindToGC; 18 var BindToGC = miscNatives.BindToGC;
20 19
21 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); 20 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
(...skipping 26 matching lines...) Expand all
48 function PortImpl(portId, opt_name) { 47 function PortImpl(portId, opt_name) {
49 this.portId_ = portId; 48 this.portId_ = portId;
50 this.name = opt_name; 49 this.name = opt_name;
51 this.onDisconnect = new chrome.Event(); 50 this.onDisconnect = new chrome.Event();
52 this.onMessage = new chrome.Event(); 51 this.onMessage = new chrome.Event();
53 } 52 }
54 53
55 // Sends a message asynchronously to the context on the other end of this 54 // Sends a message asynchronously to the context on the other end of this
56 // port. 55 // port.
57 PortImpl.prototype.postMessage = function(msg) { 56 PortImpl.prototype.postMessage = function(msg) {
58 // json.stringify doesn't support a root object which is undefined. 57 PostMessage(this.portId_, msg);
59 if (msg === undefined)
60 msg = null;
61 PostMessage(this.portId_, json.stringify(msg));
62 }; 58 };
63 59
64 // Disconnects the port from the other end. 60 // Disconnects the port from the other end.
65 PortImpl.prototype.disconnect = function() { 61 PortImpl.prototype.disconnect = function() {
66 CloseChannel(this.portId_, true); 62 CloseChannel(this.portId_, true);
67 this.destroy_(); 63 this.destroy_();
68 }; 64 };
69 65
70 PortImpl.prototype.destroy_ = function() { 66 PortImpl.prototype.destroy_ = function() {
71 var portId = this.portId_; 67 var portId = this.portId_;
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 } finally { 255 } finally {
260 port.destroy_(); 256 port.destroy_();
261 lastError.clear(chrome); 257 lastError.clear(chrome);
262 } 258 }
263 } 259 }
264 }; 260 };
265 261
266 // Called by native code when a message has been sent to the given port. 262 // Called by native code when a message has been sent to the given port.
267 chromeHidden.Port.dispatchOnMessage = function(msg, portId) { 263 chromeHidden.Port.dispatchOnMessage = function(msg, portId) {
268 var port = ports[portId]; 264 var port = ports[portId];
269 if (port) { 265 if (port)
270 if (msg) {
271 msg = json.parse(msg);
272 }
273 port.onMessage.dispatch(msg, port); 266 port.onMessage.dispatch(msg, port);
274 }
275 }; 267 };
276 268
277 // Shared implementation used by tabs.sendMessage and runtime.sendMessage. 269 // Shared implementation used by tabs.sendMessage and runtime.sendMessage.
278 chromeHidden.Port.sendMessageImpl = function(port, request, 270 chromeHidden.Port.sendMessageImpl = function(port, request,
279 responseCallback) { 271 responseCallback) {
280 if (port.name != chromeHidden.kNativeMessageChannel) 272 if (port.name != chromeHidden.kNativeMessageChannel)
281 port.postMessage(request); 273 port.postMessage(request);
282 274
283 if (port.name == chromeHidden.kMessageChannel && !responseCallback) { 275 if (port.name == chromeHidden.kMessageChannel && !responseCallback) {
284 // TODO(mpcomplete): Do this for the old sendRequest API too, after 276 // TODO(mpcomplete): Do this for the old sendRequest API too, after
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 var targetId = null; 324 var targetId = null;
333 if (lastArg >= 0) 325 if (lastArg >= 0)
334 targetId = args[lastArg--]; 326 targetId = args[lastArg--];
335 327
336 if (lastArg != -1) 328 if (lastArg != -1)
337 throw new Error('Invalid arguments to ' + functionName + '.'); 329 throw new Error('Invalid arguments to ' + functionName + '.');
338 return [targetId, request, responseCallback]; 330 return [targetId, request, responseCallback];
339 } 331 }
340 332
341 exports.sendMessageUpdateArguments = sendMessageUpdateArguments; 333 exports.sendMessageUpdateArguments = sendMessageUpdateArguments;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698