Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: chrome/browser/extensions/service_worker_apitest.cc

Issue 1440873004: Extension SW - add basic push messaging tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sync @ tott Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/test/data/extensions/api_test/service_worker/push_messaging/manifest.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/service_worker_apitest.cc
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 524da3b6def4cfd3b68e2b338dbd554b547e2d2f..9870d41262ed674c589626d7f9cc7801a4775f46 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -7,6 +7,12 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/notifications/desktop_notification_profile_util.h"
+#include "chrome/browser/push_messaging/push_messaging_app_identifier.h"
+#include "chrome/browser/push_messaging/push_messaging_service_factory.h"
+#include "chrome/browser/push_messaging/push_messaging_service_impl.h"
+#include "chrome/browser/services/gcm/fake_gcm_profile_service.h"
+#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/version_info/version_info.h"
@@ -138,6 +144,56 @@ class ServiceWorkerBackgroundSyncTest : public ServiceWorkerTest {
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerBackgroundSyncTest);
};
+class ServiceWorkerPushMessagingTest : public ServiceWorkerTest {
+ public:
+ ServiceWorkerPushMessagingTest()
+ : gcm_service_(nullptr), push_service_(nullptr) {}
+ ~ServiceWorkerPushMessagingTest() override {}
+
+ void GrantNotificationPermissionForTest(const GURL& url) {
+ GURL origin = url.GetOrigin();
+ DesktopNotificationProfileUtil::GrantPermission(profile(), origin);
+ ASSERT_EQ(
+ CONTENT_SETTING_ALLOW,
+ DesktopNotificationProfileUtil::GetContentSetting(profile(), origin));
+ }
+
+ PushMessagingAppIdentifier GetAppIdentifierForServiceWorkerRegistration(
+ int64 service_worker_registration_id,
+ const GURL& origin) {
+ PushMessagingAppIdentifier app_identifier =
+ PushMessagingAppIdentifier::FindByServiceWorker(
+ profile(), origin, service_worker_registration_id);
+
+ EXPECT_FALSE(app_identifier.is_null());
+ return app_identifier;
+ }
+
+ // ExtensionApiTest overrides.
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ command_line->AppendSwitch(switches::kEnablePushMessagePayload);
+ ServiceWorkerTest::SetUpCommandLine(command_line);
+ }
+ void SetUpOnMainThread() override {
+ gcm_service_ = static_cast<gcm::FakeGCMProfileService*>(
+ gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactoryAndUse(
+ profile(), &gcm::FakeGCMProfileService::Build));
+ gcm_service_->set_collect(true);
+ push_service_ = PushMessagingServiceFactory::GetForProfile(profile());
+
+ ServiceWorkerTest::SetUpOnMainThread();
+ }
+
+ gcm::FakeGCMProfileService* gcm_service() const { return gcm_service_; }
+ PushMessagingServiceImpl* push_service() const { return push_service_; }
+
+ private:
+ gcm::FakeGCMProfileService* gcm_service_;
+ PushMessagingServiceImpl* push_service_;
+
+ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerPushMessagingTest);
+};
+
IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, RegisterSucceedsOnTrunk) {
StartTestFromBackgroundPage("register.js", kExpectSuccess);
}
@@ -413,4 +469,41 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest,
<< message_;
}
+IN_PROC_BROWSER_TEST_F(ServiceWorkerPushMessagingTest, OnPush) {
+ const Extension* extension = LoadExtensionWithFlags(
+ test_data_dir_.AppendASCII("service_worker/push_messaging"), kFlagNone);
+ ASSERT_TRUE(extension);
+ GURL extension_url = extension->url();
+
+ ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest(extension_url));
+
+ GURL url = extension->GetResourceURL("page.html");
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ content::WebContents* web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+
+ // Start the ServiceWorker.
+ ExtensionTestMessageListener ready_listener("SERVICE_WORKER_READY", false);
+ ready_listener.set_failure_message("SERVICE_WORKER_FAILURE");
+ const char* kScript = "window.runServiceWorker()";
+ EXPECT_TRUE(content::ExecuteScript(web_contents->GetMainFrame(), kScript));
+ EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
+
+ PushMessagingAppIdentifier app_identifier =
+ GetAppIdentifierForServiceWorkerRegistration(0LL, extension_url);
+ ASSERT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id());
+ EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
+
+ // Send a push message via gcm and expect the ServiceWorker to receive it.
+ ExtensionTestMessageListener push_message_listener("OK", false);
+ push_message_listener.set_failure_message("FAIL");
+ gcm::IncomingMessage message;
+ message.sender_id = "1234567890";
+ message.raw_data = "testdata";
+ message.decrypted = true;
+ push_service()->OnMessage(app_identifier.app_id(), message);
+ EXPECT_TRUE(push_message_listener.WaitUntilSatisfied());
+}
+
} // namespace extensions
« no previous file with comments | « no previous file | chrome/test/data/extensions/api_test/service_worker/push_messaging/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698