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.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc
new file mode 100644
index 0000000..4370375
--- /dev/null
+++ b/chrome/browser/extensions/extension_messages_apitest.cc
@@ -0,0 +1,73 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// 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) {
+ ASSERT_TRUE(StartHTTPServer());
+ ASSERT_TRUE(RunExtensionTest("messaging/connect")) << message_;
+}
+
+// Tests that message passing from one extension to another works.
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MessagingExternal) {
+ ASSERT_TRUE(LoadExtension(
+ test_data_dir_.AppendASCII("..").AppendASCII("good")
+ .AppendASCII("Extensions")
+ .AppendASCII("bjafgdebaacbbbecmhlhpofkepfkgcpa")
+ .AppendASCII("1.0")));
+
+ 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_;
+}