diff options
author | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 18:13:58 +0000 |
---|---|---|
committer | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 18:13:58 +0000 |
commit | 85e55fa9e0f48705d5a5af283a59a46d02670d6f (patch) | |
tree | 717e66c971ff0a2ac785ed9e160397e61baa1e50 /chrome/browser/extensions/extension_message_service.cc | |
parent | 788259ac805787a104098d3483642271f06c8a0a (diff) | |
download | chromium_src-85e55fa9e0f48705d5a5af283a59a46d02670d6f.zip chromium_src-85e55fa9e0f48705d5a5af283a59a46d02670d6f.tar.gz chromium_src-85e55fa9e0f48705d5a5af283a59a46d02670d6f.tar.bz2 |
1. Fires port.onDisconnect if tabs.connect fails.
2. Throws an error in port.postMessage if the port has already been disconnected.
3. Sets lastError when tabs.sendRequest can't connect to the tab.
BUG=27565, 32899
TEST=ExtensionApiTest
Review URL: http://codereview.chromium.org/3676008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64277 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_message_service.cc')
-rw-r--r-- | chrome/browser/extensions/extension_message_service.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/chrome/browser/extensions/extension_message_service.cc b/chrome/browser/extensions/extension_message_service.cc index a3a13c1..01faa1d 100644 --- a/chrome/browser/extensions/extension_message_service.cc +++ b/chrome/browser/extensions/extension_message_service.cc @@ -74,9 +74,11 @@ static void DispatchOnConnect(const ExtensionMessageService::MessagePort& port, } static void DispatchOnDisconnect( - const ExtensionMessageService::MessagePort& port, int source_port_id) { + const ExtensionMessageService::MessagePort& port, int source_port_id, + bool connection_error) { ListValue args; args.Set(0, Value::CreateIntegerValue(source_port_id)); + args.Set(1, Value::CreateBooleanValue(connection_error)); port.sender->Send(new ViewMsg_ExtensionMessageInvoke(port.routing_id, "", ExtensionMessageService::kDispatchOnDisconnect, args, GURL())); } @@ -183,7 +185,7 @@ void ExtensionMessageService::OpenChannelToTab( // The tab isn't loaded yet. Don't attempt to connect. Treat this as a // disconnect. DispatchOnDisconnect(MessagePort(source, MSG_ROUTING_CONTROL), - GET_OPPOSITE_PORT_ID(receiver_port_id)); + GET_OPPOSITE_PORT_ID(receiver_port_id), true); return; } @@ -209,14 +211,13 @@ bool ExtensionMessageService::OpenChannelImpl( const std::string& source_extension_id, const std::string& target_extension_id, const std::string& channel_name) { - // TODO(mpcomplete): notify source if receiver doesn't exist if (!source) return false; // Closed while in flight. if (!receiver.sender) { // Treat it as a disconnect. DispatchOnDisconnect(MessagePort(source, MSG_ROUTING_CONTROL), - GET_OPPOSITE_PORT_ID(receiver_port_id)); + GET_OPPOSITE_PORT_ID(receiver_port_id), true); return false; } @@ -303,7 +304,7 @@ void ExtensionMessageService::CloseChannelImpl( channel_iter->second->receiver : channel_iter->second->opener; if (notify_other_port) - DispatchOnDisconnect(port, GET_OPPOSITE_PORT_ID(closing_port_id)); + DispatchOnDisconnect(port, GET_OPPOSITE_PORT_ID(closing_port_id), false); delete channel_iter->second; channels_.erase(channel_iter); } |