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

Unified Diff: chrome/browser/push_messaging/push_messaging_browsertest.cc

Issue 2675293003: Push API: Don't wait for network when unsubscribing (Closed)
Patch Set: Address peter's review comments Created 3 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/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 5112e2012ad6a04aecd24dbaef8b086a5d391db4..024accdb7bb1a361dfd5708353fbac0ca04492bf 100644
--- a/chrome/browser/push_messaging/push_messaging_browsertest.cc
+++ b/chrome/browser/push_messaging/push_messaging_browsertest.cc
@@ -569,7 +569,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribeWorker) {
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
}
IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
@@ -615,7 +614,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
// After unsubscribing, subscribe again from the worker with no key.
// The sender id should again be read from the datastore, so the
@@ -628,7 +626,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
}
IN_PROC_BROWSER_TEST_F(
@@ -667,7 +664,6 @@ IN_PROC_BROWSER_TEST_F(
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
// After unsubscribing, try to resubscribe again without a key.
// This should again fail.
@@ -770,7 +766,6 @@ IN_PROC_BROWSER_TEST_F(
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
// After unsubscribing, subscribe again from the worker with no key.
// The sender id should again be read from the datastore, so the
@@ -783,7 +778,6 @@ IN_PROC_BROWSER_TEST_F(
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
}
IN_PROC_BROWSER_TEST_F(
@@ -829,7 +823,6 @@ IN_PROC_BROWSER_TEST_F(
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
// After unsubscribing, subscribe again from the worker with no key.
// The sender id should again be read from the datastore, so the
@@ -842,7 +835,6 @@ IN_PROC_BROWSER_TEST_F(
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
}
IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, ResubscribeWithMismatchedKey) {
@@ -885,7 +877,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, ResubscribeWithMismatchedKey) {
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
// Resubscribe with a different key after unsubscribing.
// Should succeed, and we should get a new subscription token.
@@ -898,7 +889,6 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, ResubscribeWithMismatchedKey) {
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
- EXPECT_NE(push_service(), GetAppHandler());
}
IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, SubscribePersisted) {
@@ -983,10 +973,17 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, AppHandlerOnlyIfSubscribed) {
ASSERT_NO_FATAL_FAILURE(RestartPushService());
EXPECT_EQ(push_service(), GetAppHandler());
- // Unsubscribe.
std::string script_result;
+
+ // Unsubscribe.
+ base::RunLoop run_loop;
+ push_service()->SetUnsubscribeCallbackForTesting(run_loop.QuitClosure());
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
+ // The app handler is only guaranteed to be unregistered once the unsubscribe
+ // callback for testing has been run (PushSubscription.unsubscribe() usually
+ // resolves before that, in order to avoid blocking on network retries etc).
+ run_loop.Run();
EXPECT_NE(push_service(), GetAppHandler());
ASSERT_NO_FATAL_FAILURE(RestartPushService());
@@ -1695,6 +1692,33 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, LegacyUnsubscribeSuccess) {
EXPECT_EQ("unsubscribe result: false", script_result);
}
+IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest, UnsubscribeOffline) {
+ std::string script_result;
+
+ EXPECT_NE(push_service(), GetAppHandler());
+
+ std::string token;
+ ASSERT_NO_FATAL_FAILURE(SubscribeSuccessfully(true /* use_key */, &token));
+
+ gcm_service_->set_offline(true);
+
+ // Should quickly resolve true after deleting local state (rather than waiting
+ // until unsubscribing over the network exceeds the maximum backoff duration).
+ ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
+ EXPECT_EQ("unsubscribe result: true", script_result);
+ histogram_tester_.ExpectUniqueSample(
+ "PushMessaging.UnregistrationReason",
+ content::PUSH_UNREGISTRATION_REASON_JAVASCRIPT_API, 1);
+
+ // Since the service is offline, the network request to GCM is still being
+ // retried, so the app handler shouldn't have been unregistered yet.
+ EXPECT_EQ(push_service(), GetAppHandler());
+ // But restarting the push service will unregister the app handler, since the
+ // subscription is no longer stored in the PushMessagingAppIdentifier map.
+ ASSERT_NO_FATAL_FAILURE(RestartPushService());
+ EXPECT_NE(push_service(), GetAppHandler());
+}
+
IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
UnregisteringServiceWorkerUnsubscribes) {
std::string script_result;
@@ -2130,8 +2154,14 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBrowserTest,
// After dropping the last subscription it is still inactive.
std::string script_result;
+ base::RunLoop run_loop;
+ push_service()->SetUnsubscribeCallbackForTesting(run_loop.QuitClosure());
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
+ // Background mode is only guaranteed to have updated once the unsubscribe
+ // callback for testing has been run (PushSubscription.unsubscribe() usually
+ // resolves before that, in order to avoid blocking on network retries etc).
+ run_loop.Run();
ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive());
}
@@ -2161,8 +2191,14 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBackgroundModeEnabledBrowserTest,
// Dropping the last subscription deactivates background mode.
std::string script_result;
+ base::RunLoop run_loop;
+ push_service()->SetUnsubscribeCallbackForTesting(run_loop.QuitClosure());
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
+ // Background mode is only guaranteed to have updated once the unsubscribe
+ // callback for testing has been run (PushSubscription.unsubscribe() usually
+ // resolves before that, in order to avoid blocking on network retries etc).
+ run_loop.Run();
ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive());
}
@@ -2192,8 +2228,14 @@ IN_PROC_BROWSER_TEST_F(PushMessagingBackgroundModeDisabledBrowserTest,
// After dropping the last subscription background mode is still inactive.
std::string script_result;
+ base::RunLoop run_loop;
+ push_service()->SetUnsubscribeCallbackForTesting(run_loop.QuitClosure());
ASSERT_TRUE(RunScript("unsubscribePush()", &script_result));
EXPECT_EQ("unsubscribe result: true", script_result);
+ // Background mode is only guaranteed to have updated once the unsubscribe
+ // callback for testing has been run (PushSubscription.unsubscribe() usually
+ // resolves before that, in order to avoid blocking on network retries etc).
+ run_loop.Run();
ASSERT_FALSE(background_mode_manager->IsBackgroundModeActive());
}
#endif // BUILDFLAG(ENABLE_BACKGROUND) && !defined(OS_CHROMEOS)
« no previous file with comments | « chrome/browser/gcm/fake_gcm_profile_service.cc ('k') | chrome/browser/push_messaging/push_messaging_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698