| Index: chrome/browser/renderer_host/chrome_extension_message_filter.cc
 | 
| diff --git a/chrome/browser/renderer_host/chrome_extension_message_filter.cc b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
 | 
| index 921b22525dfa9d595292b4c7c39444a47ebd6562..59412fc07d01b69ee42b4b16c33112a7c57c3e7c 100644
 | 
| --- a/chrome/browser/renderer_host/chrome_extension_message_filter.cc
 | 
| +++ b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
 | 
| @@ -86,10 +86,11 @@ bool ChromeExtensionMessageFilter::OnMessageReceived(
 | 
|      IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab)
 | 
|      IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToNativeApp,
 | 
|                          OnOpenChannelToNativeApp)
 | 
| +    IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenMessagePort, OnOpenMessagePort)
 | 
| +    IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseMessagePort, OnCloseMessagePort)
 | 
|      IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage)
 | 
|      IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle,
 | 
|                                      OnGetExtMessageBundle)
 | 
| -    IPC_MESSAGE_HANDLER(ExtensionHostMsg_CloseChannel, OnExtensionCloseChannel)
 | 
|      IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddAPIActionToActivityLog,
 | 
|                          OnAddAPIActionToExtensionActivityLog);
 | 
|      IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddDOMActionToActivityLog,
 | 
| @@ -105,8 +106,9 @@ bool ChromeExtensionMessageFilter::OnMessageReceived(
 | 
|  void ChromeExtensionMessageFilter::OverrideThreadForMessage(
 | 
|      const IPC::Message& message, BrowserThread::ID* thread) {
 | 
|    switch (message.type()) {
 | 
| +    case ExtensionHostMsg_OpenMessagePort::ID:
 | 
| +    case ExtensionHostMsg_CloseMessagePort::ID:
 | 
|      case ExtensionHostMsg_PostMessage::ID:
 | 
| -    case ExtensionHostMsg_CloseChannel::ID:
 | 
|      case ExtensionHostMsg_AddAPIActionToActivityLog::ID:
 | 
|      case ExtensionHostMsg_AddDOMActionToActivityLog::ID:
 | 
|      case ExtensionHostMsg_AddEventToActivityLog::ID:
 | 
| @@ -194,6 +196,7 @@ void ChromeExtensionMessageFilter::OpenChannelToNativeAppOnUIThread(
 | 
|  }
 | 
|  
 | 
|  void ChromeExtensionMessageFilter::OnOpenChannelToTab(
 | 
| +    int routing_id,
 | 
|      const ExtensionMsg_TabTargetConnectionInfo& info,
 | 
|      const std::string& extension_id,
 | 
|      const std::string& channel_name,
 | 
| @@ -204,12 +207,13 @@ void ChromeExtensionMessageFilter::OnOpenChannelToTab(
 | 
|    BrowserThread::PostTask(
 | 
|        BrowserThread::UI, FROM_HERE,
 | 
|        base::Bind(&ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread,
 | 
| -                 this, render_process_id_, port2_id, info, extension_id,
 | 
| -                 channel_name));
 | 
| +                 this, render_process_id_, routing_id, port2_id, info,
 | 
| +                 extension_id, channel_name));
 | 
|  }
 | 
|  
 | 
|  void ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread(
 | 
|      int source_process_id,
 | 
| +    int source_routing_id,
 | 
|      int receiver_port_id,
 | 
|      const ExtensionMsg_TabTargetConnectionInfo& info,
 | 
|      const std::string& extension_id,
 | 
| @@ -218,6 +222,7 @@ void ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread(
 | 
|    if (profile_) {
 | 
|      extensions::MessageService::Get(profile_)
 | 
|          ->OpenChannelToTab(source_process_id,
 | 
| +                           source_routing_id,
 | 
|                             receiver_port_id,
 | 
|                             info.tab_id,
 | 
|                             info.frame_id,
 | 
| @@ -226,6 +231,25 @@ void ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread(
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +void ChromeExtensionMessageFilter::OnOpenMessagePort(int routing_id,
 | 
| +                                                     int port_id) {
 | 
| +  if (!profile_)
 | 
| +    return;
 | 
| +
 | 
| +  extensions::MessageService::Get(profile_)->OpenPort(
 | 
| +      port_id, render_process_id_, routing_id);
 | 
| +}
 | 
| +
 | 
| +void ChromeExtensionMessageFilter::OnCloseMessagePort(int routing_id,
 | 
| +                                                      int port_id,
 | 
| +                                                      bool force_close) {
 | 
| +  if (!profile_)
 | 
| +    return;
 | 
| +
 | 
| +  extensions::MessageService::Get(profile_)->ClosePort(
 | 
| +      port_id, render_process_id_, routing_id, force_close);
 | 
| +}
 | 
| +
 | 
|  void ChromeExtensionMessageFilter::OnPostMessage(
 | 
|      int port_id,
 | 
|      const extensions::Message& message) {
 | 
| @@ -261,21 +285,6 @@ void ChromeExtensionMessageFilter::OnGetExtMessageBundleOnBlockingPool(
 | 
|    Send(reply_msg);
 | 
|  }
 | 
|  
 | 
| -void ChromeExtensionMessageFilter::OnExtensionCloseChannel(
 | 
| -    int port_id,
 | 
| -    const std::string& error_message) {
 | 
| -  if (!profile_)
 | 
| -    return;
 | 
| -
 | 
| -  if (!content::RenderProcessHost::FromID(render_process_id_))
 | 
| -    return;  // To guard against crash in browser_tests shutdown.
 | 
| -
 | 
| -  extensions::MessageService* message_service =
 | 
| -      extensions::MessageService::Get(profile_);
 | 
| -  if (message_service)
 | 
| -    message_service->CloseChannel(port_id, error_message);
 | 
| -}
 | 
| -
 | 
|  void ChromeExtensionMessageFilter::OnAddAPIActionToExtensionActivityLog(
 | 
|      const std::string& extension_id,
 | 
|      const ExtensionHostMsg_APIActionOrEvent_Params& params) {
 | 
| 
 |