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

Unified Diff: chrome/browser/services/gcm/push_messaging_browsertest.cc

Issue 955673004: Move gcm-independent parts of push messaging out of gcm namespace and directory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove redundant cast Created 5 years, 10 months 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
Index: chrome/browser/services/gcm/push_messaging_browsertest.cc
diff --git a/chrome/browser/services/gcm/push_messaging_browsertest.cc b/chrome/browser/services/gcm/push_messaging_browsertest.cc
deleted file mode 100644
index 2baa4893d79d91f680f0e1ae37f06504c77f9740..0000000000000000000000000000000000000000
--- a/chrome/browser/services/gcm/push_messaging_browsertest.cc
+++ /dev/null
@@ -1,1013 +0,0 @@
-// Copyright 2014 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 <map>
-#include <string>
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar_service.h"
-#include "chrome/browser/notifications/notification_test_util.h"
-#include "chrome/browser/notifications/platform_notification_service_impl.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/services/gcm/fake_gcm_profile_service.h"
-#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
-#include "chrome/browser/services/gcm/push_messaging_application_id.h"
-#include "chrome/browser/services/gcm/push_messaging_constants.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/content_settings/core/common/content_settings.h"
-#include "components/content_settings/core/common/content_settings_types.h"
-#include "components/gcm_driver/gcm_client.h"
-#include "components/infobars/core/confirm_infobar_delegate.h"
-#include "components/infobars/core/infobar.h"
-#include "components/infobars/core/infobar_manager.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/test/browser_test_utils.h"
-#include "ui/base/window_open_disposition.h"
-
-#if defined(OS_ANDROID)
-#include "base/android/build_info.h"
-#endif
-
-namespace gcm {
-
-namespace {
-// Responds to a confirm infobar by accepting or cancelling it. Responds to at
-// most one infobar.
-class InfoBarResponder : public infobars::InfoBarManager::Observer {
- public:
- InfoBarResponder(Browser* browser, bool accept)
- : infobar_service_(InfoBarService::FromWebContents(
- browser->tab_strip_model()->GetActiveWebContents())),
- accept_(accept),
- has_observed_(false) {
- infobar_service_->AddObserver(this);
- }
-
- ~InfoBarResponder() override { infobar_service_->RemoveObserver(this); }
-
- // infobars::InfoBarManager::Observer
- void OnInfoBarAdded(infobars::InfoBar* infobar) override {
- if (has_observed_)
- return;
- has_observed_ = true;
- ConfirmInfoBarDelegate* delegate =
- infobar->delegate()->AsConfirmInfoBarDelegate();
- DCHECK(delegate);
-
- // Respond to the infobar asynchronously, like a person.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(
- &InfoBarResponder::Respond, base::Unretained(this), delegate));
- }
-
- private:
- void Respond(ConfirmInfoBarDelegate* delegate) {
- if (accept_) {
- delegate->Accept();
- } else {
- delegate->Cancel();
- }
- }
-
- InfoBarService* infobar_service_;
- bool accept_;
- bool has_observed_;
-};
-
-// Class to instantiate on the stack that is meant to be used with
-// FakeGCMProfileService. The ::Run() method follows the signature of
-// FakeGCMProfileService::UnregisterCallback.
-class UnregistrationCallback {
- public:
- UnregistrationCallback() : done_(false), waiting_(false) {}
-
- void Run(const std::string& app_id) {
- app_id_ = app_id;
- done_ = true;
- if (waiting_)
- base::MessageLoop::current()->Quit();
- }
-
- void WaitUntilSatisfied() {
- if (done_)
- return;
-
- waiting_ = true;
- while (!done_)
- content::RunMessageLoop();
- }
-
- const std::string& app_id() {
- return app_id_;
- }
-
- private:
- bool done_;
- bool waiting_;
- std::string app_id_;
-};
-
-// Class to instantiate on the stack that is meant to be used with
-// StubNotificationUIManager::SetNotificationAddedCallback. Mind that Run()
-// might be invoked prior to WaitUntilSatisfied() being called.
-class NotificationAddedCallback {
- public:
- NotificationAddedCallback() : done_(false), waiting_(false) {}
-
- void Run() {
- done_ = true;
- if (waiting_)
- base::MessageLoop::current()->Quit();
- }
-
- void WaitUntilSatisfied() {
- if (done_)
- return;
-
- waiting_ = true;
- while (!done_)
- content::RunMessageLoop();
- }
-
- private:
- bool done_;
- bool waiting_;
-};
-
-// The Push API depends on Web Notifications, which is only available on Android
-// Jelly Bean and later.
-bool IsPushSupported() {
-#if defined(OS_ANDROID)
- if (base::android::BuildInfo::GetInstance()->sdk_int() <
- base::android::SDK_VERSION_JELLY_BEAN) {
- DVLOG(0) << "The Push API is only supported in Android 4.1 and later.";
- return false;
- }
-#endif
- return true;
-}
-
-} // namespace
-
-class PushMessagingBrowserTest : public InProcessBrowserTest {
- public:
- PushMessagingBrowserTest() : gcm_service_(nullptr) {}
- ~PushMessagingBrowserTest() override {}
-
- // InProcessBrowserTest:
- void SetUpCommandLine(base::CommandLine* command_line) override {
- command_line->AppendSwitch(switches::kEnablePushMessagePayload);
- command_line->AppendSwitch(switches::kEnablePushMessagingHasPermission);
-
- InProcessBrowserTest::SetUpCommandLine(command_line);
- }
-
- // InProcessBrowserTest:
- void SetUp() override {
- https_server_.reset(new net::SpawnedTestServer(
- net::SpawnedTestServer::TYPE_HTTPS,
- net::BaseTestServer::SSLOptions(
- net::BaseTestServer::SSLOptions::CERT_OK),
- base::FilePath(FILE_PATH_LITERAL("chrome/test/data/"))));
- ASSERT_TRUE(https_server_->Start());
-
-#if defined(ENABLE_NOTIFICATIONS)
- notification_manager_.reset(new StubNotificationUIManager);
- notification_service()->SetNotificationUIManagerForTesting(
- notification_manager());
-#endif
-
- InProcessBrowserTest::SetUp();
- }
-
- // InProcessBrowserTest:
- void SetUpOnMainThread() override {
- gcm_service_ = static_cast<FakeGCMProfileService*>(
- GCMProfileServiceFactory::GetInstance()->SetTestingFactoryAndUse(
- browser()->profile(), &FakeGCMProfileService::Build));
- gcm_service_->set_collect(true);
-
- LoadTestPage();
-
- InProcessBrowserTest::SetUpOnMainThread();
- }
-
- // InProcessBrowserTest:
- void TearDown() override {
-#if defined(ENABLE_NOTIFICATIONS)
- notification_service()->SetNotificationUIManagerForTesting(nullptr);
-#endif
-
- InProcessBrowserTest::TearDown();
- }
-
- void LoadTestPage(const std::string& path) {
- ui_test_utils::NavigateToURL(browser(), https_server_->GetURL(path));
- }
-
- void LoadTestPage() {
- LoadTestPage(GetTestURL());
- }
-
- bool RunScript(const std::string& script, std::string* result) {
- return RunScript(script, result, nullptr);
- }
-
- bool RunScript(const std::string& script, std::string* result,
- content::WebContents* web_contents) {
- if (!web_contents)
- web_contents = browser()->tab_strip_model()->GetActiveWebContents();
- return content::ExecuteScriptAndExtractString(web_contents->GetMainFrame(),
- script,
- result);
- }
-
- void TryToRegisterSuccessfully(
- const std::string& expected_push_registration_id);
-
- PushMessagingApplicationId GetServiceWorkerAppId(
- int64 service_worker_registration_id);
-
- net::SpawnedTestServer* https_server() const { return https_server_.get(); }
-
- FakeGCMProfileService* gcm_service() const { return gcm_service_; }
-
-#if defined(ENABLE_NOTIFICATIONS)
- StubNotificationUIManager* notification_manager() const {
- return notification_manager_.get();
- }
-
- PlatformNotificationServiceImpl* notification_service() const {
- return PlatformNotificationServiceImpl::GetInstance();
- }
-#endif
-
- PushMessagingServiceImpl* push_service() {
- return static_cast<PushMessagingServiceImpl*>(
- gcm_service_->push_messaging_service());
- }
-
- protected:
- virtual std::string GetTestURL() {
- return "files/push_messaging/test.html";
- }
-
- private:
- scoped_ptr<net::SpawnedTestServer> https_server_;
- FakeGCMProfileService* gcm_service_;
- scoped_ptr<StubNotificationUIManager> notification_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(PushMessagingBrowserTest);
-};
-
-class PushMessagingBadManifestBrowserTest : public PushMessagingBrowserTest {
- std::string GetTestURL() override {
- return "files/push_messaging/test_bad_manifest.html";
- }
-};
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBadManifestBrowserTest,
- RegisterFailsNotVisibleMessages) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ("AbortError - Registration failed - permission denied",
- script_result);
-}
-
-void PushMessagingBrowserTest::TryToRegisterSuccessfully(
- const std::string& expected_push_registration_id) {
- std::string script_result;
-
- EXPECT_TRUE(RunScript("registerServiceWorker()", &script_result));
- EXPECT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder accepting_responder(browser(), true);
- EXPECT_TRUE(RunScript("requestNotificationPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- EXPECT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ(std::string(kPushMessagingEndpoint) + " - "
- + expected_push_registration_id, script_result);
-}
-
-PushMessagingApplicationId PushMessagingBrowserTest::GetServiceWorkerAppId(
- int64 service_worker_registration_id) {
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- PushMessagingApplicationId application_id = PushMessagingApplicationId::Get(
- browser()->profile(), origin, service_worker_registration_id);
- EXPECT_TRUE(application_id.IsValid());
- return application_id;
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- RegisterSuccessNotificationsGranted) {
- if (!IsPushSupported())
- return;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- RegisterSuccessNotificationsPrompt) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder accepting_responder(browser(), true);
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ(std::string(kPushMessagingEndpoint) + " - 1-0", script_result);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- RegisterFailureNotificationsBlocked) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder cancelling_responder(browser(), false);
- ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result));
- ASSERT_EQ("permission status - denied", script_result);
-
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ("AbortError - Registration failed - permission denied",
- script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, RegisterFailureNoManifest) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder accepting_responder(browser(), true);
- ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result));
- ASSERT_EQ("permission status - granted", script_result);
-
- ASSERT_TRUE(RunScript("removeManifest()", &script_result));
- ASSERT_EQ("manifest removed", script_result);
-
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ("AbortError - Registration failed - no sender id provided",
- script_result);
-}
-
-// TODO(johnme): Test registering from a worker - see https://crbug.com/437298.
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, RegisterPersisted) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- // First, test that Service Worker registration IDs are assigned in order of
- // registering the Service Workers, and the (fake) push registration ids are
- // assigned in order of push registration (even when these orders are
- // different).
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
- PushMessagingApplicationId app_id_sw0 = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id_sw0.app_id_guid(), gcm_service()->last_registered_app_id());
-
- LoadTestPage("files/push_messaging/subscope1/test.html");
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- LoadTestPage("files/push_messaging/subscope2/test.html");
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- // Note that we need to reload the page after registering, otherwise
- // navigator.serviceWorker.ready is going to be resolved with the parent
- // Service Worker which still controls the page.
- LoadTestPage("files/push_messaging/subscope2/test.html");
- TryToRegisterSuccessfully("1-1" /* expected_push_registration_id */);
- PushMessagingApplicationId app_id_sw2 = GetServiceWorkerAppId(2LL);
- EXPECT_EQ(app_id_sw2.app_id_guid(), gcm_service()->last_registered_app_id());
-
- LoadTestPage("files/push_messaging/subscope1/test.html");
- TryToRegisterSuccessfully("1-2" /* expected_push_registration_id */);
- PushMessagingApplicationId app_id_sw1 = GetServiceWorkerAppId(1LL);
- EXPECT_EQ(app_id_sw1.app_id_guid(), gcm_service()->last_registered_app_id());
-
- // Now test that the Service Worker registration IDs and push registration IDs
- // generated above were persisted to SW storage, by checking that they are
- // unchanged despite requesting them in a different order.
- // TODO(johnme): Ideally we would restart the browser at this point to check
- // they were persisted to disk, but that's not currently possible since the
- // test server uses random port numbers for each test (even PRE_Foo and Foo),
- // so we wouldn't be able to load the test pages with the same origin.
-
- LoadTestPage("files/push_messaging/subscope1/test.html");
- TryToRegisterSuccessfully("1-2" /* expected_push_registration_id */);
- EXPECT_EQ(app_id_sw1.app_id_guid(), gcm_service()->last_registered_app_id());
-
- LoadTestPage("files/push_messaging/subscope2/test.html");
- TryToRegisterSuccessfully("1-1" /* expected_push_registration_id */);
- EXPECT_EQ(app_id_sw1.app_id_guid(), gcm_service()->last_registered_app_id());
-
- LoadTestPage();
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
- EXPECT_EQ(app_id_sw1.app_id_guid(), gcm_service()->last_registered_app_id());
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventSuccess) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("false - is not controlled", script_result);
-
- LoadTestPage(); // Reload to become controlled.
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("true - is controlled", script_result);
-
- GCMClient::IncomingMessage message;
- message.sender_id = "1234567890";
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result));
- EXPECT_EQ("testdata", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoServiceWorker) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("false - is not controlled", script_result);
-
- LoadTestPage(); // Reload to become controlled.
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("true - is controlled", script_result);
-
- // Unregister service worker. Sending a message should now fail.
- ASSERT_TRUE(RunScript("unregisterServiceWorker()", &script_result));
- ASSERT_EQ("service worker unregistration status: true", script_result);
-
- // When the push service will receive it next message, given that there is no
- // SW available, it should unregister |app_id|.
- UnregistrationCallback callback;
- gcm_service()->SetUnregisterCallback(base::Bind(&UnregistrationCallback::Run,
- base::Unretained(&callback)));
-
- GCMClient::IncomingMessage message;
- message.sender_id = "1234567890";
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
-
- callback.WaitUntilSatisfied();
- EXPECT_EQ(app_id.app_id_guid(), callback.app_id());
-
- // No push data should have been received.
- ASSERT_TRUE(RunScript("resultQueue.popImmediately()", &script_result));
- EXPECT_EQ("null", script_result);
-}
-
-#if defined(ENABLE_NOTIFICATIONS)
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- PushEventEnforcesUserVisibleNotification) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("false - is not controlled", script_result);
-
- LoadTestPage(); // Reload to become controlled.
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("true - is controlled", script_result);
-
- notification_manager()->CancelAll();
- ASSERT_EQ(0u, notification_manager()->GetNotificationCount());
-
- // We'll need to specify the web_contents in which to eval script, since we're
- // going to run script in a background tab.
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
-
- // If the site is visible in an active tab, we should not force a notification
- // to be shown. Try it twice, since we allow one mistake per 10 push events.
- GCMClient::IncomingMessage message;
- message.sender_id = "1234567890";
- for (int n = 0; n < 2; n++) {
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result));
- EXPECT_EQ("testdata", script_result);
- EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
- }
-
- // Open a blank foreground tab so site is no longer visible.
- ui_test_utils::NavigateToURLWithDisposition(
- browser(), GURL("about:blank"), NEW_FOREGROUND_TAB,
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
-
- // If the Service Worker push event handler does not show a notification, we
- // should show a forced one, but only on the 2nd occurrence since we allow one
- // mistake per 10 push events.
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("testdata", script_result);
- EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("testdata", script_result);
- EXPECT_EQ(1u, notification_manager()->GetNotificationCount());
- EXPECT_EQ(base::ASCIIToUTF16(kPushMessagingForcedNotificationTag),
- notification_manager()->GetNotificationAt(0).replace_id());
-
- // Currently, this notification will stick around until the user or webapp
- // explicitly dismisses it (though we may change this later).
- message.data["data"] = "shownotification";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("shownotification", script_result);
- EXPECT_EQ(2u, notification_manager()->GetNotificationCount());
-
- notification_manager()->CancelAll();
- EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
-
- // However if the Service Worker push event handler shows a notification, we
- // should not show a forced one.
- message.data["data"] = "shownotification";
- for (int n = 0; n < 9; n++) {
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("shownotification", script_result);
- EXPECT_EQ(1u, notification_manager()->GetNotificationCount());
- EXPECT_EQ(base::ASCIIToUTF16("push_test_tag"),
- notification_manager()->GetNotificationAt(0).replace_id());
- notification_manager()->CancelAll();
- }
-
- // Now that 10 push messages in a row have shown notifications, we should
- // allow the next one to mistakenly not show a notification.
- message.data["data"] = "testdata";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("testdata", script_result);
- EXPECT_EQ(0u, notification_manager()->GetNotificationCount());
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- PushEventNotificationWithoutEventWaitUntil) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- PushMessagingApplicationId app_id = GetServiceWorkerAppId(0LL);
- EXPECT_EQ(app_id.app_id_guid(), gcm_service()->last_registered_app_id());
- EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]);
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("false - is not controlled", script_result);
-
- LoadTestPage(); // Reload to become controlled.
-
- ASSERT_TRUE(RunScript("isControlled()", &script_result));
- ASSERT_EQ("true - is controlled", script_result);
-
- NotificationAddedCallback callback;
- notification_manager()->SetNotificationAddedCallback(
- base::Bind(&NotificationAddedCallback::Run, base::Unretained(&callback)));
-
- GCMClient::IncomingMessage message;
- message.sender_id = "1234567890";
- message.data["data"] = "shownotification-without-waituntil";
- push_service()->OnMessage(app_id.app_id_guid(), message);
- ASSERT_TRUE(RunScript("resultQueue.pop()", &script_result, web_contents));
- EXPECT_EQ("immediate:shownotification-without-waituntil", script_result);
-
- callback.WaitUntilSatisfied();
-
- ASSERT_EQ(1u, notification_manager()->GetNotificationCount());
- EXPECT_EQ(base::ASCIIToUTF16("push_test_tag"),
- notification_manager()->GetNotificationAt(0).replace_id());
-
- // Verify that the renderer process hasn't crashed.
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-}
-#endif
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, HasPermissionSaysDefault) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- ASSERT_EQ("permission status - default", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, HasPermissionSaysGranted) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder accepting_responder(browser(), true);
- ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ(std::string(kPushMessagingEndpoint) + " - 1-0", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, HasPermissionSaysDenied) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result));
- ASSERT_EQ("ok - service worker registered", script_result);
-
- InfoBarResponder cancelling_responder(browser(), false);
- ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result));
- EXPECT_EQ("permission status - denied", script_result);
-
- ASSERT_TRUE(RunScript("registerPush()", &script_result));
- EXPECT_EQ("AbortError - Registration failed - permission denied",
- script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - denied", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnregisterSuccess) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- gcm_service()->AddExpectedUnregisterResponse(GCMClient::SUCCESS);
-
- ASSERT_TRUE(RunScript("unregister()", &script_result));
- EXPECT_EQ("unregister result: true", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnregisterNetworkError) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- gcm_service()->AddExpectedUnregisterResponse(GCMClient::NETWORK_ERROR);
-
- ASSERT_TRUE(RunScript("unregister()", &script_result));
- EXPECT_EQ("unregister error: NetworkError: "
- "Unregistration failed - could not connect to push server",
- script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnregisterAbortError) {
- if (!IsPushSupported())
- return;
-
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- gcm_service()->AddExpectedUnregisterResponse(GCMClient::UNKNOWN_ERROR);
-
- ASSERT_TRUE(RunScript("unregister()", &script_result));
- EXPECT_EQ("unregister error: "
- "AbortError: Unregistration failed - push service error",
- script_result);
-}
-
-#if defined(OS_ANDROID)
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushUnavailableOnAndroidICS) {
- // This test should only run on Android ICS to confirm that the Push API
- // is not available on that version of Android.
- if (IsPushSupported())
- return;
-
- std::string script_result;
- ASSERT_TRUE(RunScript("window.PushManager", &script_result));
- EXPECT_EQ("undefined", script_result);
-}
-#endif
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- GlobalResetPushPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- browser()->profile()->GetHostContentSettingsMap()->
- ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - default", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- LocalResetPushPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::FromURLNoWildcard(origin),
- CONTENT_SETTINGS_TYPE_PUSH_MESSAGING,
- std::string(),
- CONTENT_SETTING_DEFAULT);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - default", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- DenyPushPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::FromURLNoWildcard(origin),
- CONTENT_SETTINGS_TYPE_PUSH_MESSAGING,
- std::string(),
- CONTENT_SETTING_BLOCK);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - denied", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- GlobalResetNotificationsPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- browser()->profile()->GetHostContentSettingsMap()->
- ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - default", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- LocalResetNotificationsPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- std::string(),
- CONTENT_SETTING_DEFAULT);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - default", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- DenyNotificationsPermissionUnregisters) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- std::string(),
- CONTENT_SETTING_BLOCK);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - denied", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("false - not registered", script_result);
-}
-
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- GrantAlreadyGrantedPermissionDoesNotUnregister) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- std::string(),
- CONTENT_SETTING_ALLOW);
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::FromURLNoWildcard(origin),
- CONTENT_SETTINGS_TYPE_PUSH_MESSAGING,
- std::string(),
- CONTENT_SETTING_ALLOW);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-}
-
-// This test is testing some non-trivial content settings rules and make sure
-// that they are respected with regards to automatic unregistration. In other
-// words, it checks that the push service does not end up unregistering origins
-// that have push permission with some non-common rules.
-IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
- AutomaticUnregistrationFollowsContentSettingRules) {
- std::string script_result;
-
- TryToRegisterSuccessfully("1-0" /* expected_push_registration_id */);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- GURL origin = https_server()->GetURL(std::string()).GetOrigin();
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::Wildcard(),
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- std::string(),
- CONTENT_SETTING_ALLOW);
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromString("https://*"),
- ContentSettingsPattern::FromString("https://*"),
- CONTENT_SETTINGS_TYPE_PUSH_MESSAGING,
- std::string(),
- CONTENT_SETTING_ALLOW);
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- std::string(),
- CONTENT_SETTING_DEFAULT);
- browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
- ContentSettingsPattern::FromURLNoWildcard(origin),
- ContentSettingsPattern::FromURLNoWildcard(origin),
- CONTENT_SETTINGS_TYPE_PUSH_MESSAGING,
- std::string(),
- CONTENT_SETTING_DEFAULT);
-
- // The two first rules should give |origin| the permission to use Push even
- // if the rules it used to have have been reset.
- // The Push service should not unsubcribe |origin| because at no point it was
- // left without permission to use Push.
-
- ASSERT_TRUE(RunScript("hasPermission()", &script_result));
- EXPECT_EQ("permission status - granted", script_result);
-
- ASSERT_TRUE(RunScript("hasRegistration()", &script_result));
- EXPECT_EQ("true - registered", script_result);
-}
-
-} // namespace gcm

Powered by Google App Engine
This is Rietveld 408576698