Index: chrome/browser/extensions/extension_message_service.cc |
diff --git a/chrome/browser/extensions/extension_message_service.cc b/chrome/browser/extensions/extension_message_service.cc |
index 0ee45798f5cc339a8ad16a0b7386b59a882f3875..4929eea3d4933cf53c9c1014ea17f0785a343562 100644 |
--- a/chrome/browser/extensions/extension_message_service.cc |
+++ b/chrome/browser/extensions/extension_message_service.cc |
@@ -43,10 +43,12 @@ struct SingletonData { |
}; |
static void DispatchOnConnect(IPC::Message::Sender* channel, int source_port_id, |
- const std::string& tab_json) { |
+ const std::string& tab_json, |
+ const std::string& extension_id) { |
ListValue args; |
args.Set(0, Value::CreateIntegerValue(source_port_id)); |
args.Set(1, Value::CreateStringValue(tab_json)); |
+ args.Set(2, Value::CreateStringValue(extension_id)); |
channel->Send(new ViewMsg_ExtensionMessageInvoke( |
ExtensionMessageService::kDispatchOnConnect, args)); |
} |
@@ -221,23 +223,25 @@ int ExtensionMessageService::OpenChannelToExtension( |
ui_loop_->PostTask(FROM_HERE, |
NewRunnableMethod(this, &ExtensionMessageService::OpenChannelOnUIThread, |
- routing_id, port1_id, source->GetProcessId(), port2_id, process_id)); |
+ routing_id, port1_id, source->GetProcessId(), port2_id, process_id, |
+ extension_id)); |
return port2_id; |
} |
void ExtensionMessageService::OpenChannelOnUIThread( |
int source_routing_id, int source_port_id, int source_process_id, |
- int dest_port_id, int dest_process_id) { |
+ int dest_port_id, int dest_process_id, const std::string& extension_id) { |
RenderProcessHost* source = RenderProcessHost::FromID(source_process_id); |
OpenChannelOnUIThreadImpl(source_routing_id, source_port_id, |
- source, dest_port_id, dest_process_id, |
- source_process_id); |
+ source_process_id, source, dest_port_id, |
+ dest_process_id, extension_id); |
} |
void ExtensionMessageService::OpenChannelOnUIThreadImpl( |
- int source_routing_id, int source_port_id, IPC::Message::Sender* source, |
- int dest_port_id, int dest_process_id, int source_process_id) { |
+ int source_routing_id, int source_port_id, int source_process_id, |
+ IPC::Message::Sender* source, int dest_port_id, int dest_process_id, |
+ const std::string& extension_id) { |
DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI); |
MessageChannel channel; |
@@ -259,7 +263,7 @@ void ExtensionMessageService::OpenChannelOnUIThreadImpl( |
} |
// Send the process the id for the opposite port. |
- DispatchOnConnect(channel.port2, source_port_id, tab_json); |
+ DispatchOnConnect(channel.port2, source_port_id, tab_json, extension_id); |
} |
int ExtensionMessageService::OpenAutomationChannelToExtension( |
@@ -284,8 +288,8 @@ int ExtensionMessageService::OpenAutomationChannelToExtension( |
// This isn't really appropriate here, the originating tab |
// information should be supplied by the caller for |
// automation-initiated ports. |
- OpenChannelOnUIThreadImpl(routing_id, port1_id, source, port2_id, |
- process_id, source_process_id); |
+ OpenChannelOnUIThreadImpl(routing_id, port1_id, source_process_id, |
+ source, port2_id, process_id, extension_id); |
return port2_id; |
} |
@@ -305,10 +309,12 @@ void ExtensionMessageService::CloseChannelImpl( |
// Notify the other side. |
if (port_id == GET_CHANNEL_PORT1(channel_iter->first)) { |
- DispatchOnDisconnect(channel_iter->second.port2, port_id); |
+ DispatchOnDisconnect(channel_iter->second.port2, |
+ GET_OPPOSITE_PORT_ID(port_id)); |
} else { |
DCHECK_EQ(port_id, GET_CHANNEL_PORT2(channel_iter->first)); |
- DispatchOnDisconnect(channel_iter->second.port1, port_id); |
+ DispatchOnDisconnect(channel_iter->second.port1, |
+ GET_OPPOSITE_PORT_ID(port_id)); |
} |
channels_.erase(channel_iter); |