Index: chrome/renderer/extensions/dispatcher.cc |
=================================================================== |
--- chrome/renderer/extensions/dispatcher.cc (revision 246091) |
+++ chrome/renderer/extensions/dispatcher.cc (working copy) |
@@ -587,6 +587,11 @@ |
const base::DictionaryValue& source_tab, |
const ExtensionMsg_ExternalConnectionInfo& info, |
const std::string& tls_channel_id) { |
+ DCHECK(!ContainsKey(port_to_tab_id_map_, target_port_id)); |
+ int sender_tab_id = -1; |
+ source_tab.GetInteger("id", &sender_tab_id); |
+ port_to_tab_id_map_[target_port_id] = sender_tab_id; |
+ |
MessagingBindings::DispatchOnConnect( |
v8_context_set_.GetAll(), |
target_port_id, channel_name, source_tab, |
@@ -597,6 +602,11 @@ |
void Dispatcher::OnDeliverMessage(int target_port_id, |
const Message& message) { |
+ std::map<int, int>::const_iterator it = |
+ port_to_tab_id_map_.find(target_port_id); |
+ DCHECK(it != port_to_tab_id_map_.end()); |
+ RequestSender::ScopedTabID scoped_tab_id(request_sender(), it->second); |
+ |
MessagingBindings::DeliverMessage( |
v8_context_set_.GetAll(), |
target_port_id, |
@@ -606,6 +616,9 @@ |
void Dispatcher::OnDispatchOnDisconnect(int port_id, |
const std::string& error_message) { |
+ int target_port = port_id ^ 1; |
+ port_to_tab_id_map_.erase(target_port); |
not at google - send to devlin
2014/01/28 18:45:45
maybe you could also DCHECK(port_to_tab_id_map_.fi
Lei Zhang
2014/01/28 22:52:27
Done... and the DCHECK fails. It turns out in this
|
+ |
MessagingBindings::DispatchOnDisconnect( |
v8_context_set_.GetAll(), |
port_id, error_message, |