summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_message_service.cc
diff options
context:
space:
mode:
authorjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-28 18:13:58 +0000
committerjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-28 18:13:58 +0000
commit85e55fa9e0f48705d5a5af283a59a46d02670d6f (patch)
tree717e66c971ff0a2ac785ed9e160397e61baa1e50 /chrome/browser/extensions/extension_message_service.cc
parent788259ac805787a104098d3483642271f06c8a0a (diff)
downloadchromium_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.cc11
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);
}