Index: chrome/browser/extensions/extension_message_handler.cc |
diff --git a/chrome/browser/extensions/extension_message_handler.cc b/chrome/browser/extensions/extension_message_handler.cc |
index 88955308667a1748c7b1e44ea29d2c6f2261b062..1f9ed9214847337059f1196fa8c59bbb0b36a394 100644 |
--- a/chrome/browser/extensions/extension_message_handler.cc |
+++ b/chrome/browser/extensions/extension_message_handler.cc |
@@ -4,7 +4,9 @@ |
#include "chrome/browser/extensions/extension_message_handler.h" |
+#include "chrome/browser/extensions/app_notify_channel_setup.h" |
#include "chrome/browser/extensions/extension_message_service.h" |
+#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/extensions/extension_messages.h" |
#include "content/browser/child_process_security_policy.h" |
@@ -25,6 +27,8 @@ bool ExtensionMessageHandler::OnMessageReceived( |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(ExtensionMessageHandler, message) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage) |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_GetAppNotifyChannel, |
+ OnGetAppNotifyChannel) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -44,3 +48,37 @@ void ExtensionMessageHandler::OnPostMessage(int port_id, |
port_id, message); |
} |
} |
+ |
+void ExtensionMessageHandler::OnGetAppNotifyChannel( |
+ int request_id, |
+ const GURL& requestor_url, |
+ const std::string& client_id) { |
+ |
+ // Check for permission first. |
+ Profile* profile = Profile::FromBrowserContext( |
+ render_view_host()->process()->browser_context()); |
+ ExtensionService* extension_service = profile->GetExtensionService(); |
+ if (!extension_service || !extension_service->is_ready()) |
Aaron Boodman
2011/10/04 23:40:36
I don't think that it is possible for either of th
asargent_no_longer_on_chrome
2011/10/06 03:35:32
Ok, removed this.
|
+ return; |
+ const Extension* extension = |
+ extension_service->GetInstalledApp(requestor_url); |
Aaron Boodman
2011/10/04 23:40:36
Can you also check that the app is running in the
asargent_no_longer_on_chrome
2011/10/06 03:35:32
As discussed in IRC, I've added the process check
|
+ if (!extension || |
+ !extension->HasAPIPermission(ExtensionAPIPermission::kExperimental)) { |
+ AppNotifyChannelSetupComplete(request_id, "", "permission_error"); |
+ return; |
+ } |
+ |
+ scoped_refptr<AppNotifyChannelSetup> channel_setup( |
+ new AppNotifyChannelSetup(request_id, |
+ client_id, |
+ requestor_url, |
+ this->AsWeakPtr())); |
+ channel_setup->Start(); |
+ // We'll get called back in AppNotifyChannelSetupComplete. |
+} |
+ |
+void ExtensionMessageHandler::AppNotifyChannelSetupComplete( |
+ int request_id, const std::string& client_id, const std::string& error) { |
+ Send(new ExtensionMsg_GetAppNotifyChannelResponse( |
+ routing_id(), request_id, client_id, error)); |
+} |