Chromium Code Reviews| 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 |