Index: chrome/browser/renderer_host/chrome_render_message_filter.cc |
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
index 4ccbc02953d3427a9b901b3ba06b3e68ab9e40dd..b2f392cd4b51e3d3269496c9cd12cef546f95360 100644 |
--- a/chrome/browser/renderer_host/chrome_render_message_filter.cc |
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc |
@@ -89,6 +89,8 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message, |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToExtension, |
OnOpenChannelToExtension) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab) |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToNativeApp, |
+ OnOpenChannelToNativeApp) |
IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle, |
OnGetExtensionMessageBundle) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener, OnExtensionAddListener) |
@@ -297,6 +299,40 @@ void ChromeRenderMessageFilter::OpenChannelToExtensionOnUIThread( |
source_extension_id, target_extension_id, channel_name); |
} |
+void ChromeRenderMessageFilter::OnOpenChannelToNativeApp( |
+ int routing_id, const std::string& source_extension_id, |
+ const std::string& native_app_name, |
+ const std::string& channel_name, |
+ const std::string& connect_message, int* port_id) { |
+ int port2_id; |
+ extensions::MessageService::AllocatePortIdPair(port_id, &port2_id); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread, |
+ this, |
+ routing_id, |
+ port2_id, |
+ source_extension_id, |
+ native_app_name, |
+ channel_name, |
+ connect_message)); |
+} |
+ |
+void ChromeRenderMessageFilter::OpenChannelToNativeAppOnUIThread( |
+ int source_routing_id, |
+ int receiver_port_id, |
+ const std::string& source_extension_id, |
+ const std::string& native_app_name, |
+ const std::string& channel_name, |
+ const std::string& connect_message) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ extensions::ExtensionSystem::Get(profile_)->message_service()-> |
+ OpenChannelToNativeApp( |
+ render_process_id_, source_routing_id, receiver_port_id, |
+ source_extension_id, native_app_name, channel_name, connect_message); |
+} |
+ |
void ChromeRenderMessageFilter::OnOpenChannelToTab( |
int routing_id, int tab_id, const std::string& extension_id, |
const std::string& channel_name, int* port_id) { |