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

Side by Side Diff: chrome/renderer/resources/renderer_extension_bindings.js

Issue 152003: Fix some issues with extension messaging: (Closed)
Patch Set: Created 11 years, 5 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
« no previous file with comments | « chrome/renderer/resources/extension_process_bindings.js ('k') | webkit/glue/webview_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 // ----------------------------------------------------------------------------- 5 // -----------------------------------------------------------------------------
6 // NOTE: If you change this file you need to touch renderer_resources.grd to 6 // NOTE: If you change this file you need to touch renderer_resources.grd to
7 // have your change take effect. 7 // have your change take effect.
8 // ----------------------------------------------------------------------------- 8 // -----------------------------------------------------------------------------
9 9
10 var chrome = chrome || {}; 10 var chrome = chrome || {};
(...skipping 11 matching lines...) Expand all
22 // Port object. Represents a connection to another script context through 22 // Port object. Represents a connection to another script context through
23 // which messages can be passed. 23 // which messages can be passed.
24 chrome.Port = function(portId) { 24 chrome.Port = function(portId) {
25 if (ports[portId]) { 25 if (ports[portId]) {
26 throw new Error("Port '" + portId + "' already exists."); 26 throw new Error("Port '" + portId + "' already exists.");
27 } 27 }
28 this.portId_ = portId; // TODO(mpcomplete): readonly 28 this.portId_ = portId; // TODO(mpcomplete): readonly
29 this.onDisconnect = new chrome.Event(); 29 this.onDisconnect = new chrome.Event();
30 this.onMessage = new chrome.Event(); 30 this.onMessage = new chrome.Event();
31 ports[portId] = this; 31 ports[portId] = this;
32 32
33 var port = this;
33 chromeHidden.onUnload.addListener(function() { 34 chromeHidden.onUnload.addListener(function() {
34 this.disconnect(); 35 port.disconnect();
35 }); 36 });
36 }; 37 };
37 38
38 chromeHidden.Port = {}; 39 chromeHidden.Port = {};
39 40
40 // Called by native code when a channel has been opened to this context. 41 // Called by native code when a channel has been opened to this context.
41 chromeHidden.Port.dispatchOnConnect = function(portId, tab) { 42 chromeHidden.Port.dispatchOnConnect = function(portId, tab, extensionId) {
42 var port = new chrome.Port(portId); 43 // Only create a new Port if someone is actually listening for a connection.
43 if (tab) { 44 // In addition to being an optimization, this also fixes a bug where if 2
44 tab = JSON.parse(tab); 45 // channels were opened to and from the same process, closing one would
46 // close both.
47 var connectEvent = "channel-connect:" + (extensionId || "");
48 if (chromeHidden.Event.hasListener(connectEvent)) {
49 var port = new chrome.Port(portId);
50 if (tab) {
51 tab = JSON.parse(tab);
52 }
53 port.tab = tab;
54 chromeHidden.Event.dispatch(connectEvent, [port]);
45 } 55 }
46 port.tab = tab;
47 chromeHidden.Event.dispatch("channel-connect", [port]);
48 }; 56 };
49 57
50 // Called by native code when a channel has been closed. 58 // Called by native code when a channel has been closed.
51 chromeHidden.Port.dispatchOnDisconnect = function(portId) { 59 chromeHidden.Port.dispatchOnDisconnect = function(portId) {
52 var port = ports[portId]; 60 var port = ports[portId];
53 if (port) { 61 if (port) {
54 port.onDisconnect.dispatch(port); 62 port.onDisconnect.dispatch(port);
55 delete ports[portId]; 63 delete ports[portId];
56 } 64 }
57 }; 65 };
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 throw new Error("No such extension: '" + this.id_ + "'"); 103 throw new Error("No such extension: '" + this.id_ + "'");
96 return new chrome.Port(portId); 104 return new chrome.Port(portId);
97 }; 105 };
98 106
99 // Returns a resource URL that can be used to fetch a resource from this 107 // Returns a resource URL that can be used to fetch a resource from this
100 // extension. 108 // extension.
101 chrome.Extension.prototype.getURL = function(path) { 109 chrome.Extension.prototype.getURL = function(path) {
102 return "chrome-extension://" + this.id_ + "/" + path; 110 return "chrome-extension://" + this.id_ + "/" + path;
103 }; 111 };
104 })(); 112 })();
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extension_process_bindings.js ('k') | webkit/glue/webview_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698