Chromium Code Reviews| Index: chrome/browser/push_messaging/push_messaging_browsertest.cc |
| diff --git a/chrome/browser/push_messaging/push_messaging_browsertest.cc b/chrome/browser/push_messaging/push_messaging_browsertest.cc |
| index ba9a28ec93e6ed861b2229fbb466117cf2de64e2..897c796b1a0a81915827240c49dfab146bd384d1 100644 |
| --- a/chrome/browser/push_messaging/push_messaging_browsertest.cc |
| +++ b/chrome/browser/push_messaging/push_messaging_browsertest.cc |
| @@ -43,11 +43,13 @@ |
| #include "components/content_settings/core/common/content_settings_types.h" |
| #include "components/gcm_driver/common/gcm_messages.h" |
| #include "components/gcm_driver/gcm_client.h" |
| +#include "components/gcm_driver/instance_id/fake_gcm_driver_for_instance_id.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/test/browser_test_utils.h" |
| #include "content/public/test/test_utils.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| #include "ui/base/window_open_disposition.h" |
| #if BUILDFLAG(ENABLE_BACKGROUND) |
| @@ -76,33 +78,13 @@ std::string GetTestApplicationServerKey() { |
| kApplicationServerKey + arraysize(kApplicationServerKey)); |
| } |
| -// 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() |
| - : message_loop_runner_(new content::MessageLoopRunner) {} |
| - |
| - void Run(const std::string& app_id) { |
| - app_id_ = app_id; |
| - message_loop_runner_->Quit(); |
| - } |
| - |
| - void WaitUntilSatisfied() { message_loop_runner_->Run(); } |
| - |
| - const std::string& app_id() { return app_id_; } |
| - |
| - private: |
| - scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
| - std::string app_id_; |
| -}; |
| +const char kManifestSenderId[] = "1234567890"; |
|
Peter Beverloo
2016/04/21 13:26:18
micro nit: Please group the constants together (i.
johnme
2016/05/25 14:11:50
Done (moved to line 61)
|
| } // namespace |
| class PushMessagingBrowserTest : public InProcessBrowserTest { |
| public: |
| - PushMessagingBrowserTest() : gcm_service_(nullptr) {} |
| + PushMessagingBrowserTest() : gcm_driver_(nullptr) {} |
| ~PushMessagingBrowserTest() override {} |
| // InProcessBrowserTest: |
| @@ -130,10 +112,12 @@ class PushMessagingBrowserTest : public InProcessBrowserTest { |
| // InProcessBrowserTest: |
| void SetUpOnMainThread() override { |
| - gcm_service_ = static_cast<gcm::FakeGCMProfileService*>( |
| + gcm::GCMProfileService* gcm_service = static_cast<gcm::GCMProfileService*>( |
| gcm::GCMProfileServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| GetBrowser()->profile(), &gcm::FakeGCMProfileService::Build)); |
| - gcm_service_->set_collect(true); |
| + gcm_driver_ = static_cast<instance_id::FakeGCMDriverForInstanceID*>( |
| + gcm_service->driver()); |
| + |
| push_service_ = |
| PushMessagingServiceFactory::GetForProfile(GetBrowser()->profile()); |
| @@ -180,8 +164,7 @@ class PushMessagingBrowserTest : public InProcessBrowserTest { |
| } |
| gcm::GCMAppHandler* GetAppHandler() { |
| - return gcm_service()->driver()->GetAppHandler( |
| - kPushMessagingAppIdentifierPrefix); |
| + return gcm_driver_->GetAppHandler(kPushMessagingAppIdentifierPrefix); |
| } |
| PermissionBubbleManager* GetPermissionBubbleManager() { |
| @@ -192,13 +175,13 @@ class PushMessagingBrowserTest : public InProcessBrowserTest { |
| void RequestAndAcceptPermission(); |
| void RequestAndDenyPermission(); |
| - void TryToSubscribeSuccessfully( |
| - const std::string& expected_push_subscription_info, |
| - bool use_key = true); |
| + // Sets out_token to the subscription token (not including server URL). |
|
Peter Beverloo
2016/04/21 13:26:18
// Calls should be wrapped in the ASSERT_NO_FATAL_
johnme
2016/05/25 14:11:50
Done.
|
| + void SubscribeSuccessfully(bool use_key = true, |
| + std::string* out_token = nullptr); |
| - std::string GetEndpointForSubscriptionId(const std::string& subscription_id) { |
| - return std::string(kPushMessagingEndpoint) + "/" + subscription_id; |
| - } |
| + // Strips server URL from a registration endpoint to get subscription token. |
| + void EndpointToToken(const std::string& endpoint, |
| + std::string* out_token = nullptr); |
| PushMessagingAppIdentifier GetAppIdentifierForServiceWorkerRegistration( |
| int64_t service_worker_registration_id); |
| @@ -209,8 +192,6 @@ class PushMessagingBrowserTest : public InProcessBrowserTest { |
| net::EmbeddedTestServer* https_server() const { return https_server_.get(); } |
| - gcm::FakeGCMProfileService* gcm_service() const { return gcm_service_; } |
| - |
| #if defined(ENABLE_NOTIFICATIONS) |
| // To be called when delivery of a push message has finished. The |run_loop| |
| // will be told to quit after |messages_required| messages were received. |
| @@ -240,9 +221,9 @@ class PushMessagingBrowserTest : public InProcessBrowserTest { |
| virtual Browser* GetBrowser() const { return browser(); } |
| - private: |
| + protected: |
| scoped_ptr<net::EmbeddedTestServer> https_server_; |
| - gcm::FakeGCMProfileService* gcm_service_; |
| + instance_id::FakeGCMDriverForInstanceID* gcm_driver_; |
| PushMessagingServiceImpl* push_service_; |
| #if defined(ENABLE_NOTIFICATIONS) |
| @@ -263,40 +244,54 @@ void PushMessagingBrowserTest::RequestAndAcceptPermission() { |
| std::string script_result; |
| GetPermissionBubbleManager()->set_auto_response_for_test( |
| PermissionBubbleManager::ACCEPT_ALL); |
| - EXPECT_TRUE(RunScript("requestNotificationPermission();", &script_result)); |
| - EXPECT_EQ("permission status - granted", script_result); |
| + ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result)); |
| + ASSERT_EQ("permission status - granted", script_result); |
| } |
| void PushMessagingBrowserTest::RequestAndDenyPermission() { |
| std::string script_result; |
| GetPermissionBubbleManager()->set_auto_response_for_test( |
| PermissionBubbleManager::DENY_ALL); |
| - EXPECT_TRUE(RunScript("requestNotificationPermission();", &script_result)); |
| - EXPECT_EQ("permission status - denied", script_result); |
| + ASSERT_TRUE(RunScript("requestNotificationPermission();", &script_result)); |
| + ASSERT_EQ("permission status - denied", script_result); |
| } |
| -void PushMessagingBrowserTest::TryToSubscribeSuccessfully( |
| - const std::string& expected_push_subscription_info, |
| - bool use_key) { |
| +void PushMessagingBrowserTest::SubscribeSuccessfully(bool use_key, |
| + std::string* out_token) { |
| std::string script_result; |
| - EXPECT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| - EXPECT_EQ("ok - service worker registered", script_result); |
| + ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| + ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| if (use_key) { |
| ASSERT_TRUE(RunScript("removeManifest()", &script_result)); |
| ASSERT_EQ("manifest removed", script_result); |
| - EXPECT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| + ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| } else { |
| // Test backwards compatibility with old ID based subscriptions. |
| - EXPECT_TRUE(RunScript("documentSubscribePushWithoutKey()", &script_result)); |
| + ASSERT_TRUE(RunScript("documentSubscribePushWithoutKey()", &script_result)); |
| } |
| - EXPECT_EQ(GetEndpointForSubscriptionId(expected_push_subscription_info), |
| - script_result); |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result, out_token)); |
| +} |
| + |
| +void PushMessagingBrowserTest::EndpointToToken(const std::string& endpoint, |
| + std::string* out_token) { |
| + std::string https_scheme = "https://"; |
| + EXPECT_THAT(endpoint, ::testing::StartsWith(https_scheme)); |
| + |
| + size_t last_slash = endpoint.rfind('/'); |
| + // Generous sanity checks. |
| + size_t min_host_length = 3; |
| + size_t min_token_length = 5; |
| + EXPECT_LT(https_scheme.length() - 1 + min_host_length, last_slash); |
| + EXPECT_LT(last_slash, endpoint.length() - min_token_length); |
| + |
| + if (out_token) |
| + *out_token = endpoint.substr(last_slash); |
| } |
| PushMessagingAppIdentifier |
| @@ -321,23 +316,20 @@ void PushMessagingBrowserTest::SendMessageAndWaitUntilHandled( |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| SubscribeWithoutKeySuccessNotificationsGranted) { |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */, false); |
| - |
| - PushMessagingAppIdentifier app_identifier = |
| - GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ("1234567890", gcm_service()->last_registered_sender_ids()[0]); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */)); |
| + EXPECT_EQ(kManifestSenderId, |
| + gcm_driver_->last_registered_authorized_entity()); |
| + EXPECT_EQ(GetAppIdentifierForServiceWorkerRegistration(0LL).app_id(), |
| + gcm_driver_->last_registered_app_id()); |
| } |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| SubscribeSuccessNotificationsGranted) { |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| - PushMessagingAppIdentifier app_identifier = |
| - GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| + gcm_driver_->last_registered_authorized_entity()); |
| + EXPECT_EQ(GetAppIdentifierForServiceWorkerRegistration(0LL).app_id(), |
| + gcm_driver_->last_registered_app_id()); |
| } |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| @@ -350,13 +342,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| GetPermissionBubbleManager()->set_auto_response_for_test( |
| PermissionBubbleManager::ACCEPT_ALL); |
| ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-0"), script_result); |
| - |
| - PushMessagingAppIdentifier app_identifier = |
| - GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| + // Both of these methods EXPECT that they succeed. |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result)); |
| + GetAppIdentifierForServiceWorkerRegistration(0LL); |
| } |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeFailureBadKey) { |
| @@ -365,7 +353,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeFailureBadKey) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| ASSERT_TRUE(RunScript("documentSubscribePushBadKey()", &script_result)); |
| EXPECT_EQ( |
| @@ -381,7 +369,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndDenyPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndDenyPermission()); |
| ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| EXPECT_EQ("PermissionDeniedError - Registration failed - permission denied", |
| @@ -394,7 +382,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeFailureNoManifest) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| ASSERT_TRUE(RunScript("removeManifest()", &script_result)); |
| ASSERT_EQ("manifest removed", script_result); |
| @@ -410,7 +398,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeFailureNoSenderId) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| ASSERT_TRUE(RunScript("swapManifestNoSenderId()", &script_result)); |
| ASSERT_EQ("sender id removed from manifest", script_result); |
| @@ -428,7 +416,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTestEmptySubscriptionOptions, |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| EXPECT_EQ("PermissionDeniedError - Registration failed - permission denied", |
| @@ -441,7 +429,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorker) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| LoadTestPage(); // Reload to become controlled. |
| @@ -456,7 +444,8 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorker) { |
| // Now run the subscribe from the service worker with a key. This |
| // should succeed, and write the key to the datastore. |
| ASSERT_TRUE(RunScript("workerSubscribePush()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-0"), script_result); |
| + std::string token1; |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result, &token1)); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -465,7 +454,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorker) { |
| // Now run the subscribe from the service worker without a key. |
| // In this case, the key will be read from the datastore. |
| ASSERT_TRUE(RunScript("workerSubscribePushNoKey()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-1"), script_result); |
| + std::string token2; |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result, &token2)); |
| + EXPECT_NE(token1, token2); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -478,7 +469,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorkerUsingManifest) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| LoadTestPage(); // Reload to become controlled. |
| @@ -496,7 +487,8 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorkerUsingManifest) { |
| // the code to read sender id from the manifest and will write it to the |
| // datastore. |
| ASSERT_TRUE(RunScript("documentSubscribePushWithoutKey()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-0"), script_result); |
| + std::string token1; |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result, &token1)); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -505,7 +497,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorkerUsingManifest) { |
| // Now run the subscribe from the service worker without a key. |
| // In this case, the sender id will be read from the datastore. |
| ASSERT_TRUE(RunScript("workerSubscribePushNoKey()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-1"), script_result); |
| + std::string token2; |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result, &token2)); |
| + EXPECT_NE(token1, token2); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -526,10 +520,11 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, MAYBE_SubscribePersisted) { |
| // assigned in order of push subscription (even when these orders are |
| // different). |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + std::string token1; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token1)); |
| PushMessagingAppIdentifier sw0_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(sw0_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + EXPECT_EQ(sw0_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| LoadTestPage("/push_messaging/subscope1/test.html"); |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| @@ -543,16 +538,21 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, MAYBE_SubscribePersisted) { |
| // navigator.serviceWorker.ready is going to be resolved with the parent |
| // Service Worker which still controls the page. |
| LoadTestPage("/push_messaging/subscope2/test.html"); |
| - TryToSubscribeSuccessfully("1-1" /* expected_push_subscription_id */); |
| + std::string token2; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token2)); |
| + EXPECT_NE(token1, token2); |
| PushMessagingAppIdentifier sw2_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(2LL); |
| - EXPECT_EQ(sw2_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + EXPECT_EQ(sw2_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| LoadTestPage("/push_messaging/subscope1/test.html"); |
| - TryToSubscribeSuccessfully("1-2" /* expected_push_subscription_id */); |
| + std::string token3; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token3)); |
| + EXPECT_NE(token1, token3); |
| + EXPECT_NE(token2, token3); |
| PushMessagingAppIdentifier sw1_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(1LL); |
| - EXPECT_EQ(sw1_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + EXPECT_EQ(sw1_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| // Now test that the Service Worker registration IDs and push subscription IDs |
| // generated above were persisted to SW storage, by checking that they are |
| @@ -563,16 +563,22 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, MAYBE_SubscribePersisted) { |
| // so we wouldn't be able to load the test pages with the same origin. |
| LoadTestPage("/push_messaging/subscope1/test.html"); |
| - TryToSubscribeSuccessfully("1-2" /* expected_push_subscription_id */); |
| - EXPECT_EQ(sw1_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + std::string token4; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token4)); |
| + EXPECT_EQ(token3, token4); |
| + EXPECT_EQ(sw1_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| LoadTestPage("/push_messaging/subscope2/test.html"); |
| - TryToSubscribeSuccessfully("1-1" /* expected_push_subscription_id */); |
| - EXPECT_EQ(sw1_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + std::string token5; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token5)); |
| + EXPECT_EQ(token2, token5); |
| + EXPECT_EQ(sw1_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| LoadTestPage(); |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - EXPECT_EQ(sw1_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| + std::string token6; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token6)); |
| + EXPECT_EQ(token1, token6); |
| + EXPECT_EQ(sw1_identifier.app_id(), gcm_driver_->last_registered_app_id()); |
| } |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, AppHandlerOnlyIfSubscribed) { |
| @@ -582,7 +588,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, AppHandlerOnlyIfSubscribed) { |
| ASSERT_NO_FATAL_FAILURE(RestartPushService()); |
| EXPECT_NE(push_service(), GetAppHandler()); |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| EXPECT_EQ(push_service(), GetAppHandler()); |
| ASSERT_NO_FATAL_FAILURE(RestartPushService()); |
| @@ -590,7 +596,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, AppHandlerOnlyIfSubscribed) { |
| // Unsubscribe. |
| std::string script_result; |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -602,13 +607,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, AppHandlerOnlyIfSubscribed) { |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventSuccess) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -630,13 +631,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventSuccess) { |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventWithoutPayload) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -658,13 +655,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventWithoutPayload) { |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoServiceWorker) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -678,20 +671,29 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PushEventNoServiceWorker) { |
| 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_identifier.app_id()|. |
| - UnregistrationCallback callback; |
| - gcm_service()->SetUnregisterCallback( |
| - base::Bind(&UnregistrationCallback::Run, base::Unretained(&callback))); |
| + // Unregistering the service worker doesn't yet unsubscribe from push (though |
| + // it should), and FindByServiceWorker doesn't require a live SW. |
| + GURL origin = https_server()->GetURL("/").GetOrigin(); |
| + PushMessagingAppIdentifier app_identifier2 = |
| + PushMessagingAppIdentifier::FindByServiceWorker( |
| + GetBrowser()->profile(), origin, |
| + 0LL /* service_worker_registration_id */); |
| + EXPECT_FALSE(app_identifier2.is_null()); |
| + EXPECT_EQ(app_identifier.app_id(), app_identifier2.app_id()); |
| gcm::IncomingMessage message; |
| message.sender_id = GetTestApplicationServerKey(); |
| message.raw_data = "testdata"; |
| message.decrypted = true; |
| - push_service()->OnMessage(app_identifier.app_id(), message); |
| + SendMessageAndWaitUntilHandled(app_identifier, message); |
| - callback.WaitUntilSatisfied(); |
| - EXPECT_EQ(app_identifier.app_id(), callback.app_id()); |
| + // Now the push service has received a message and failed to find its service |
| + // worker, it should have automatically unsubscribed app_identifier.app_id(). |
| + PushMessagingAppIdentifier app_identifier3 = |
| + PushMessagingAppIdentifier::FindByServiceWorker( |
| + GetBrowser()->profile(), origin, |
| + 0LL /* service_worker_registration_id */); |
| + EXPECT_TRUE(app_identifier3.is_null()); |
| // No push data should have been received. |
| ASSERT_TRUE(RunScript("resultQueue.popImmediately()", &script_result)); |
| @@ -703,13 +705,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| PushEventEnforcesUserVisibleNotification) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -811,13 +809,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| PushEventEnforcesUserVisibleNotificationAfterQueue) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -865,13 +859,9 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| content::WebContents* web_contents = |
| GetBrowser()->tab_strip_model()->GetActiveWebContents(); |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| - |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| - EXPECT_EQ(kEncodedApplicationServerKey, |
| - gcm_service()->last_registered_sender_ids()[0]); |
| ASSERT_TRUE(RunScript("isControlled()", &script_result)); |
| ASSERT_EQ("false - is not controlled", script_result); |
| @@ -922,10 +912,10 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PermissionStateSaysGranted) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndAcceptPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndAcceptPermission()); |
| ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| - EXPECT_EQ(GetEndpointForSubscriptionId("1-0"), script_result); |
| + ASSERT_NO_FATAL_FAILURE(EndpointToToken(script_result)); |
| ASSERT_TRUE(RunScript("permissionState()", &script_result)); |
| EXPECT_EQ("permission status - granted", script_result); |
| @@ -937,7 +927,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, PermissionStateSaysDenied) { |
| ASSERT_TRUE(RunScript("registerServiceWorker()", &script_result)); |
| ASSERT_EQ("ok - service worker registered", script_result); |
| - RequestAndDenyPermission(); |
| + ASSERT_NO_FATAL_FAILURE(RequestAndDenyPermission()); |
| ASSERT_TRUE(RunScript("documentSubscribePush()", &script_result)); |
| EXPECT_EQ("PermissionDeniedError - Registration failed - permission denied", |
| @@ -954,8 +944,8 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnsubscribeSuccess) { |
| EXPECT_EQ("ok - service worker registered", script_result); |
| // Resolves true if there was a subscription. |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */, false); |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| + std::string token1; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */, &token1)); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| @@ -965,8 +955,10 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnsubscribeSuccess) { |
| // Doesn't reject if there was a network error (deactivates subscription |
| // locally anyway). |
| - TryToSubscribeSuccessfully("1-1" /* expected_push_subscription_id */, false); |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::NETWORK_ERROR); |
| + std::string token2; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */, &token2)); |
| + EXPECT_NE(token1, token2); |
| + // TODO(johnme): AddExpectedUnregisterResponse(gcm::GCMClient::NETWORK_ERROR); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| @@ -974,15 +966,22 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnsubscribeSuccess) { |
| // Doesn't reject if there were other push service errors (deactivates |
| // subscription locally anyway). |
| - TryToSubscribeSuccessfully("1-2" /* expected_push_subscription_id */, false); |
| - gcm_service()->AddExpectedUnregisterResponse( |
| - gcm::GCMClient::INVALID_PARAMETER); |
| + std::string token3; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */, &token3)); |
| + EXPECT_NE(token1, token3); |
| + EXPECT_NE(token2, token3); |
| + // TODO(johnme): AddExpectedUnregisterResponse( |
| + // gcm::GCMClient::INVALID_PARAMETER); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| // Unsubscribing (with an existing reference to a PushSubscription), after |
| // unregistering the Service Worker, just means push subscription isn't found. |
| - TryToSubscribeSuccessfully("1-3" /* expected_push_subscription_id */, false); |
| + std::string token4; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */, &token4)); |
| + EXPECT_NE(token1, token4); |
| + EXPECT_NE(token2, token4); |
| + EXPECT_NE(token3, token4); |
| ASSERT_TRUE(RunScript("unregisterServiceWorker()", &script_result)); |
| ASSERT_EQ("service worker unregistration status: true", script_result); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| @@ -993,7 +992,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| GlobalResetPushPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1025,7 +1024,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| LocalResetPushPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1061,7 +1060,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| DenyPushPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1093,7 +1092,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| GlobalResetNotificationsPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1122,7 +1121,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| LocalResetNotificationsPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1154,7 +1153,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| DenyNotificationsPermissionUnsubscribes) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1186,7 +1185,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| GrantAlreadyGrantedPermissionDoesNotUnsubscribe) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1226,7 +1225,7 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| AutomaticUnsubscriptionFollowsContentSettingRules) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(RunScript("hasSubscription()", &script_result)); |
| EXPECT_EQ("true - subscribed", script_result); |
| @@ -1272,17 +1271,16 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| EXPECT_EQ("true - subscribed", script_result); |
| } |
| -// Checks that automatically unsubscribing due to a revoked permission is |
| -// handled well if the sender ID needed to unsubscribe was already deleted. |
| +// Checks automatically unsubscribing due to a revoked permission after |
| +// previously clearing site data. |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| ResetPushPermissionAfterClearingSiteData) { |
| std::string script_result; |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| PushMessagingAppIdentifier app_identifier = |
| GetAppIdentifierForServiceWorkerRegistration(0LL); |
| - EXPECT_EQ(app_identifier.app_id(), gcm_service()->last_registered_app_id()); |
| PushMessagingAppIdentifier stored_app_identifier = |
| PushMessagingAppIdentifier::FindByAppId(GetBrowser()->profile(), |
| app_identifier.app_id()); |
| @@ -1319,18 +1317,20 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| } |
| IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, EncryptionKeyUniqueness) { |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */, false); |
| + std::string token1; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(false /* use_key */, &token1)); |
| std::string first_public_key; |
| ASSERT_TRUE(RunScript("GetP256dh()", &first_public_key)); |
| EXPECT_GE(first_public_key.size(), 32u); |
| std::string script_result; |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| - TryToSubscribeSuccessfully("1-1" /* expected_push_subscription_id */); |
| + std::string token2; |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token2)); |
| + EXPECT_NE(token1, token2); |
| std::string second_public_key; |
| ASSERT_TRUE(RunScript("GetP256dh()", &second_public_key)); |
| @@ -1382,12 +1382,11 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| // Once there is a push subscription background mode is still inactive. |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| // After dropping the last subscription it is still inactive. |
| std::string script_result; |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| @@ -1414,12 +1413,11 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBackgroundModeEnabledBrowserTest, |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| // Once there is a push subscription background mode is active. |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_TRUE(background_mode_manager->IsBackgroundModeActive()); |
| // Dropping the last subscription deactivates background mode. |
| std::string script_result; |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| @@ -1446,12 +1444,11 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBackgroundModeDisabledBrowserTest, |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| // Once there is a push subscription background mode is still inactive. |
| - TryToSubscribeSuccessfully("1-0" /* expected_push_subscription_id */); |
| + ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully()); |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |
| // After dropping the last subscription background mode is still inactive. |
| std::string script_result; |
| - gcm_service()->AddExpectedUnregisterResponse(gcm::GCMClient::SUCCESS); |
| ASSERT_TRUE(RunScript("unsubscribePush()", &script_result)); |
| EXPECT_EQ("unsubscribe result: true", script_result); |
| ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive()); |