Chromium Code Reviews| Index: content/browser/background_sync/background_sync_browsertest.cc |
| diff --git a/content/browser/background_sync/background_sync_browsertest.cc b/content/browser/background_sync/background_sync_browsertest.cc |
| index 8fc9da1e59a36c11538a76e63aea629784921f84..1af62efe68ada2c66df8566b6100f008e30d8f4c 100644 |
| --- a/content/browser/background_sync/background_sync_browsertest.cc |
| +++ b/content/browser/background_sync/background_sync_browsertest.cc |
| @@ -109,10 +109,13 @@ class BackgroundSyncBrowserTest : public ContentBrowserTest { |
| shell_ = incognito ? CreateOffTheRecordBrowser() : shell(); |
| } |
| - BackgroundSyncContext* GetSyncContextFromShell(Shell* shell) { |
| - StoragePartition* storage = BrowserContext::GetDefaultStoragePartition( |
| + StoragePartition* GetStorage() { |
| + return BrowserContext::GetDefaultStoragePartition( |
|
jkarlin
2015/10/30 13:41:13
GetDefaultStoragePartition is deprecated, while yo
chasej
2015/10/30 15:59:23
Done. I changed to pass the actual site instance f
|
| shell_->web_contents()->GetBrowserContext()); |
| - return storage->GetBackgroundSyncContext(); |
| + } |
| + |
| + BackgroundSyncContext* GetSyncContext() { |
| + return GetStorage()->GetBackgroundSyncContext(); |
| } |
| void SetUpCommandLine(base::CommandLine* command_line) override { |
| @@ -162,6 +165,8 @@ class BackgroundSyncBrowserTest : public ContentBrowserTest { |
| // (assertion failure) if the tag isn't registered. |
| bool OneShotPending(const std::string& tag); |
| + void ClearStoragePartitionData(); |
| + |
| std::string PopConsoleString(); |
| bool PopConsole(const std::string& expected_msg); |
| bool RegisterServiceWorker(); |
| @@ -194,8 +199,8 @@ void BackgroundSyncBrowserTest::SetOnline(bool online) { |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| base::Bind(&BackgroundSyncBrowserTest::SetOnlineOnIOThread, |
| - base::Unretained(this), |
| - base::Unretained(GetSyncContextFromShell(shell_)), online)); |
| + base::Unretained(this), base::Unretained(GetSyncContext()), |
| + online)); |
| base::RunLoop().RunUntilIdle(); |
| } |
| @@ -206,10 +211,10 @@ void BackgroundSyncBrowserTest::SetOnlineOnIOThread( |
| BackgroundSyncNetworkObserver* network_observer = |
| sync_manager->GetNetworkObserverForTesting(); |
| if (online) { |
| - network_observer->NotifyManagerIfNetworkChanged( |
| + network_observer->NotifyManagerIfNetworkChangedForTesting( |
| NetworkChangeNotifier::CONNECTION_WIFI); |
| } else { |
| - network_observer->NotifyManagerIfNetworkChanged( |
| + network_observer->NotifyManagerIfNetworkChangedForTesting( |
| NetworkChangeNotifier::CONNECTION_NONE); |
| } |
| } |
| @@ -218,8 +223,7 @@ bool BackgroundSyncBrowserTest::OneShotPending(const std::string& tag) { |
| bool is_pending; |
| base::RunLoop run_loop; |
| - StoragePartition* storage = BrowserContext::GetDefaultStoragePartition( |
| - shell_->web_contents()->GetBrowserContext()); |
| + StoragePartition* storage = GetStorage(); |
| BackgroundSyncContext* sync_context = storage->GetBackgroundSyncContext(); |
| ServiceWorkerContextWrapper* service_worker_context = |
| static_cast<ServiceWorkerContextWrapper*>( |
| @@ -240,6 +244,27 @@ bool BackgroundSyncBrowserTest::OneShotPending(const std::string& tag) { |
| return is_pending; |
| } |
| +void BackgroundSyncBrowserTest::ClearStoragePartitionData() { |
| + // Clear data from the storage partition. Parameters are set to clear data |
| + // for service workers, for all origins, for an unbounded time range. |
| + StoragePartition* storage = GetStorage(); |
| + |
| + uint32 storage_partition_mask = |
| + StoragePartition::REMOVE_DATA_MASK_SERVICE_WORKERS; |
| + uint32 quota_storage_mask = StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL; |
| + const GURL& delete_origin = GURL(); |
| + const base::Time delete_begin = base::Time(); |
| + base::Time delete_end = base::Time::Max(); |
| + |
| + base::RunLoop run_loop; |
| + |
| + storage->ClearData(storage_partition_mask, quota_storage_mask, delete_origin, |
| + StoragePartition::OriginMatcherFunction(), delete_begin, |
| + delete_end, run_loop.QuitClosure()); |
| + |
| + run_loop.Run(); |
| +} |
| + |
| std::string BackgroundSyncBrowserTest::PopConsoleString() { |
| std::string script_result; |
| EXPECT_TRUE(RunScript("resultQueue.pop()", &script_result)); |
| @@ -638,4 +663,77 @@ IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, CallFinishedAfterSyncFails) { |
| EXPECT_TRUE(NotifyWhenFinishedImmediateOneShot("ok - delay result: false")); |
| } |
| +// Verify that a background sync registration is deleted when site data is |
| +// cleared. |
| +IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| + SyncRegistrationDeletedWhenClearingSiteData) { |
| + EXPECT_TRUE(RegisterServiceWorker()); |
| + EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| + |
| + // Prevent firing by going offline. |
| + SetOnline(false); |
| + EXPECT_TRUE(RegisterOneShot("foo")); |
| + EXPECT_TRUE(GetRegistrationOneShot("foo")); |
| + EXPECT_TRUE(OneShotPending("foo")); |
| + |
| + // Simulate a user clearing site data (including Service Workers, crucially), |
| + // by clearing data from the storage partition. |
| + ClearStoragePartitionData(); |
| + |
| + EXPECT_FALSE(GetRegistrationOneShot("foo")); |
| +} |
| + |
| +// Verify that a background sync registration, from a service worker, is deleted |
| +// when site data is cleared. |
| +IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| + SyncRegistrationFromSWDeletedWhenClearingSiteData) { |
| + EXPECT_TRUE(RegisterServiceWorker()); |
| + EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| + |
| + std::vector<std::string> registered_tags; |
| + EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| + |
| + SetOnline(false); |
| + |
| + EXPECT_TRUE(RegisterOneShotFromServiceWorker("foo_sw")); |
| + EXPECT_TRUE(PopConsole("ok - foo_sw registered in SW")); |
| + EXPECT_TRUE(GetRegistrationOneShotFromServiceWorker("foo_sw")); |
| + |
| + // Simulate a user clearing site data (including Service Workers, crucially), |
| + // by clearing data from the storage partition. |
| + ClearStoragePartitionData(); |
| + |
| + EXPECT_FALSE(GetRegistrationOneShotFromServiceWorker("foo")); |
| +} |
| + |
| +// Verify that multiple background sync registrations are deleted when site |
| +// data is cleared. |
| +IN_PROC_BROWSER_TEST_F(BackgroundSyncBrowserTest, |
| + SyncRegistrationsDeletedWhenClearingSiteData) { |
| + EXPECT_TRUE(RegisterServiceWorker()); |
| + EXPECT_TRUE(LoadTestPage(kDefaultTestURL)); // Control the page. |
| + |
| + std::vector<std::string> registered_tags; |
| + EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| + |
| + SetOnline(false); |
| + registered_tags.push_back("foo"); |
| + registered_tags.push_back("bar"); |
| + |
| + for (const std::string& tag : registered_tags) |
| + EXPECT_TRUE(RegisterOneShot(tag)); |
| + |
| + EXPECT_TRUE(GetRegistrationsOneShot(registered_tags)); |
| + |
| + for (const std::string& tag : registered_tags) |
| + EXPECT_TRUE(OneShotPending(tag)); |
| + |
| + // Simulate a user clearing site data (including Service Workers, crucially), |
| + // by clearing data from the storage partition. |
| + ClearStoragePartitionData(); |
| + |
| + for (const std::string& tag : registered_tags) |
| + EXPECT_FALSE(GetRegistrationOneShot(tag)); |
| +} |
|
jkarlin
2015/10/30 13:41:13
Can you also test what happens if a sync is in the
chasej
2015/10/30 15:59:23
Done.
|
| + |
| } // namespace content |