summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_messages_apitest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_messages_apitest.cc')
-rw-r--r--chrome/browser/extensions/extension_messages_apitest.cc51
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_;
+}