From dfcb62a173898e182e2f10ca635deb753977b9f8 Mon Sep 17 00:00:00 2001 From: "mpcomplete@google.com" Date: Wed, 17 Jun 2009 19:32:43 +0000 Subject: Add a port disconnect event for when one side of an extension message port goes away. Combine the various ExtensionMessageService IPC message into a single "Invoke" message. BUG=12686 TEST=no Review URL: http://codereview.chromium.org/126234 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18645 0039d316-1c4b-4281-b951-d872f2087c98 --- .../renderer/resources/renderer_extension_bindings.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'chrome/renderer/resources/renderer_extension_bindings.js') diff --git a/chrome/renderer/resources/renderer_extension_bindings.js b/chrome/renderer/resources/renderer_extension_bindings.js index cc232b4..31b97ed 100644 --- a/chrome/renderer/resources/renderer_extension_bindings.js +++ b/chrome/renderer/resources/renderer_extension_bindings.js @@ -1,5 +1,5 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // ----------------------------------------------------------------------------- @@ -19,11 +19,9 @@ var chrome = chrome || {}; throw new Error("Port '" + portId + "' already exists."); } this.portId_ = portId; // TODO(mpcomplete): readonly + this.onDisconnect = new chrome.Event(); this.onMessage = new chrome.Event(); chrome.Port.ports_[portId] = this; - // Note: this object will never get GCed. If we ever care, we could - // add an "ondetach" method to the onMessage Event that gets called - // when there are no more listeners. }; // Map of port IDs to port object. @@ -39,6 +37,15 @@ var chrome = chrome || {}; chrome.Event.dispatch_("channel-connect", [port]); }; + // Called by native code when a channel has been closed. + chrome.Port.dispatchOnDisconnect_ = function(portId) { + var port = chrome.Port.ports_[portId]; + if (port) { + port.onDisconnect.dispatch(port); + delete chrome.Port.ports_[portId]; + } + }; + // Called by native code when a message has been sent to the given port. chrome.Port.dispatchOnMessage_ = function(msg, portId) { var port = chrome.Port.ports_[portId]; -- cgit v1.1