diff options
Diffstat (limited to 'chrome/browser/extensions/extension_messages_apitest.cc')
-rw-r--r-- | chrome/browser/extensions/extension_messages_apitest.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc index e2e969f..cc412d9 100644 --- a/chrome/browser/extensions/extension_messages_apitest.cc +++ b/chrome/browser/extensions/extension_messages_apitest.cc @@ -3,6 +3,50 @@ // found in the LICENSE file. #include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/extensions/extension_message_service.h" +#include "chrome/browser/profile.h" +#include "chrome/common/notification_registrar.h" + +namespace { + +class MessageSender : public NotificationObserver { + public: + MessageSender() { + registrar_.Add(this, NotificationType::EXTENSION_HOST_DID_STOP_LOADING, + NotificationService::AllSources()); + } + + private: + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + ExtensionMessageService* message_service = + Source<Profile>(source).ptr()->GetExtensionMessageService(); + + // Sends four messages to the extension. All but the third message sent + // from the origin http://b.com/ are supposed to arrive. + message_service->DispatchEventToRenderers("test.onMessage", + "[{\"lastMessage\":false,\"data\":\"no restriction\"}]", + Source<Profile>(source).ptr()->IsOffTheRecord(), + GURL()); + message_service->DispatchEventToRenderers("test.onMessage", + "[{\"lastMessage\":false,\"data\":\"http://a.com/\"}]", + Source<Profile>(source).ptr()->IsOffTheRecord(), + GURL("http://a.com/")); + message_service->DispatchEventToRenderers("test.onMessage", + "[{\"lastMessage\":false,\"data\":\"http://b.com/\"}]", + Source<Profile>(source).ptr()->IsOffTheRecord(), + GURL("http://b.com/")); + message_service->DispatchEventToRenderers("test.onMessage", + "[{\"lastMessage\":true,\"data\":\"last message\"}]", + Source<Profile>(source).ptr()->IsOffTheRecord(), + GURL()); + } + + NotificationRegistrar registrar_; +}; + +} // namespace // Tests that message passing between extensions and content scripts works. IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Messaging) { @@ -20,3 +64,10 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MessagingExternal) { ASSERT_TRUE(RunExtensionTest("messaging/connect_external")) << message_; } + +// Tests that messages with event_urls are only passed to extensions with +// appropriate permissions. +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MessagingEventURL) { + MessageSender sender; + ASSERT_TRUE(RunExtensionTest("messaging/event_url")) << message_; +} |