Index: chrome/renderer/extensions/dispatcher.cc |
=================================================================== |
--- chrome/renderer/extensions/dispatcher.cc (revision 246091) |
+++ chrome/renderer/extensions/dispatcher.cc (working copy) |
@@ -587,6 +587,12 @@ |
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)); |
+ DCHECK_EQ(1, target_port_id % 2); |
not at google - send to devlin
2014/01/29 00:45:51
// target renderer ports are assigned odd IDs
Lei Zhang
2014/01/29 00:53:23
Done.
|
+ 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 +603,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, |
@@ -1672,4 +1683,11 @@ |
} |
} |
+void Dispatcher::ClearPortData(int port_id) { |
+ // Only the target port side has entries in |port_to_tab_id_map_|. If |
+ // |port_id| is a source port, std::map::erase() will just silently fail |
+ // here as a no-op. |
+ port_to_tab_id_map_.erase(port_id); |
+} |
+ |
} // namespace extensions |