OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/background_sync/background_sync_manager.h" | 5 #include "content/browser/background_sync/background_sync_manager.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
11 #include "content/browser/browser_thread_impl.h" | 11 #include "content/browser/browser_thread_impl.h" |
12 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 12 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
13 #include "content/browser/service_worker/service_worker_context_core.h" | 13 #include "content/browser/service_worker/service_worker_context_core.h" |
14 #include "content/browser/service_worker/service_worker_context_wrapper.h" | 14 #include "content/browser/service_worker/service_worker_context_wrapper.h" |
15 #include "content/browser/service_worker/service_worker_storage.h" | 15 #include "content/browser/service_worker/service_worker_storage.h" |
16 #include "content/public/test/test_browser_thread_bundle.h" | 16 #include "content/public/test/test_browser_thread_bundle.h" |
| 17 #include "net/base/network_change_notifier.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
18 | 19 |
19 namespace content { | 20 namespace content { |
20 | 21 |
21 namespace { | 22 namespace { |
22 | 23 |
23 const char kOrigin[] = "https://example.com"; | 24 const char kOrigin[] = "https://example.com"; |
24 const char kPattern1[] = "https://example.com/a"; | 25 const char kPattern1[] = "https://example.com/a"; |
25 const char kPattern2[] = "https://example.com/b"; | 26 const char kPattern2[] = "https://example.com/b"; |
26 const char kScript1[] = "https://example.com/a/script.js"; | 27 const char kScript1[] = "https://example.com/a/script.js"; |
27 const char kScript2[] = "https://example.com/b/script.js"; | 28 const char kScript2[] = "https://example.com/b/script.js"; |
28 const int kRenderProcessId = 99; | 29 const int kRenderProcessId = 99; |
29 | 30 |
30 void RegisterServiceWorkerCallback(bool* called, | 31 void RegisterServiceWorkerCallback(bool* called, |
31 int64* store_registration_id, | 32 int64* store_registration_id, |
32 ServiceWorkerStatusCode status, | 33 ServiceWorkerStatusCode status, |
33 const std::string& status_message, | 34 const std::string& status_message, |
34 int64 registration_id) { | 35 int64 registration_id) { |
35 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status); | 36 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status); |
36 *called = true; | 37 *called = true; |
37 *store_registration_id = registration_id; | 38 *store_registration_id = registration_id; |
38 } | 39 } |
39 | 40 |
40 void UnregisterServiceWorkerCallback(bool* called, | 41 void UnregisterServiceWorkerCallback(bool* called, |
41 ServiceWorkerStatusCode code) { | 42 ServiceWorkerStatusCode code) { |
42 EXPECT_EQ(SERVICE_WORKER_OK, code); | 43 EXPECT_EQ(SERVICE_WORKER_OK, code); |
43 *called = true; | 44 *called = true; |
44 } | 45 } |
45 | 46 |
| 47 void OneShotSuccessfulCallback( |
| 48 int* count, |
| 49 const scoped_refptr<ServiceWorkerVersion>& active_version, |
| 50 const ServiceWorkerVersion::StatusCallback& callback) { |
| 51 *count += 1; |
| 52 callback.Run(SERVICE_WORKER_OK); |
| 53 } |
| 54 |
| 55 void OneShotFailedCallback( |
| 56 int* count, |
| 57 const scoped_refptr<ServiceWorkerVersion>& active_version, |
| 58 const ServiceWorkerVersion::StatusCallback& callback) { |
| 59 *count += 1; |
| 60 callback.Run(SERVICE_WORKER_ERROR_FAILED); |
| 61 } |
| 62 |
| 63 void OneShotDelayedCallback( |
| 64 int* count, |
| 65 ServiceWorkerVersion::StatusCallback* out_callback, |
| 66 const scoped_refptr<ServiceWorkerVersion>& active_version, |
| 67 const ServiceWorkerVersion::StatusCallback& callback) { |
| 68 *count += 1; |
| 69 *out_callback = callback; |
| 70 } |
| 71 |
46 } // namespace | 72 } // namespace |
47 | 73 |
48 // A BackgroundSyncManager that can simulate delaying and corrupting the | 74 // A BackgroundSyncManager that can simulate delaying and corrupting the backend |
49 // backend. This class assumes (and verifies) that only one operation runs at a | 75 // storage and service worker onsync events. |
50 // time. | |
51 class TestBackgroundSyncManager : public BackgroundSyncManager { | 76 class TestBackgroundSyncManager : public BackgroundSyncManager { |
52 public: | 77 public: |
| 78 using OneShotCallback = |
| 79 base::Callback<void(const scoped_refptr<ServiceWorkerVersion>&, |
| 80 const ServiceWorkerVersion::StatusCallback&)>; |
| 81 |
53 explicit TestBackgroundSyncManager( | 82 explicit TestBackgroundSyncManager( |
54 const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context) | 83 const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context) |
55 : BackgroundSyncManager(service_worker_context) {} | 84 : BackgroundSyncManager(service_worker_context) {} |
56 | 85 |
57 void DoInit() { Init(); } | 86 void DoInit() { Init(); } |
58 | 87 |
59 void StoreDataInBackendContinue( | 88 void StoreDataInBackendContinue( |
60 int64 sw_registration_id, | 89 int64 sw_registration_id, |
61 const GURL& origin, | 90 const GURL& origin, |
62 const std::string& key, | 91 const std::string& key, |
(...skipping 12 matching lines...) Expand all Loading... |
75 | 104 |
76 void Continue() { | 105 void Continue() { |
77 continuation_.Run(); | 106 continuation_.Run(); |
78 continuation_.Reset(); | 107 continuation_.Reset(); |
79 } | 108 } |
80 | 109 |
81 void set_corrupt_backend(bool corrupt_backend) { | 110 void set_corrupt_backend(bool corrupt_backend) { |
82 corrupt_backend_ = corrupt_backend; | 111 corrupt_backend_ = corrupt_backend; |
83 } | 112 } |
84 void set_delay_backend(bool delay_backend) { delay_backend_ = delay_backend; } | 113 void set_delay_backend(bool delay_backend) { delay_backend_ = delay_backend; } |
| 114 void set_one_shot_callback(const OneShotCallback& callback) { |
| 115 one_shot_callback_ = callback; |
| 116 } |
85 | 117 |
86 protected: | 118 protected: |
87 void StoreDataInBackend( | 119 void StoreDataInBackend( |
88 int64 sw_registration_id, | 120 int64 sw_registration_id, |
89 const GURL& origin, | 121 const GURL& origin, |
90 const std::string& key, | 122 const std::string& key, |
91 const std::string& data, | 123 const std::string& data, |
92 const ServiceWorkerStorage::StatusCallback& callback) override { | 124 const ServiceWorkerStorage::StatusCallback& callback) override { |
93 EXPECT_TRUE(continuation_.is_null()); | 125 EXPECT_TRUE(continuation_.is_null()); |
94 if (corrupt_backend_) { | 126 if (corrupt_backend_) { |
(...skipping 25 matching lines...) Expand all Loading... |
120 } | 152 } |
121 continuation_ = | 153 continuation_ = |
122 base::Bind(&TestBackgroundSyncManager::GetDataFromBackendContinue, | 154 base::Bind(&TestBackgroundSyncManager::GetDataFromBackendContinue, |
123 base::Unretained(this), key, callback); | 155 base::Unretained(this), key, callback); |
124 if (delay_backend_) | 156 if (delay_backend_) |
125 return; | 157 return; |
126 | 158 |
127 Continue(); | 159 Continue(); |
128 } | 160 } |
129 | 161 |
| 162 void FireOneShotSync( |
| 163 const scoped_refptr<ServiceWorkerVersion>& active_version, |
| 164 const ServiceWorkerVersion::StatusCallback& callback) override { |
| 165 if (one_shot_callback_.is_null()) { |
| 166 BackgroundSyncManager::FireOneShotSync(active_version, callback); |
| 167 } else { |
| 168 one_shot_callback_.Run(active_version, callback); |
| 169 } |
| 170 } |
| 171 |
130 private: | 172 private: |
131 bool corrupt_backend_ = false; | 173 bool corrupt_backend_ = false; |
132 bool delay_backend_ = false; | 174 bool delay_backend_ = false; |
133 base::Closure continuation_; | 175 base::Closure continuation_; |
| 176 OneShotCallback one_shot_callback_; |
134 }; | 177 }; |
135 | 178 |
136 class BackgroundSyncManagerTest : public testing::Test { | 179 class BackgroundSyncManagerTest : public testing::Test { |
137 public: | 180 public: |
138 BackgroundSyncManagerTest() | 181 BackgroundSyncManagerTest() |
139 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), | 182 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), |
| 183 network_change_notifier_(net::NetworkChangeNotifier::CreateMock()), |
| 184 test_background_sync_manager_(nullptr), |
140 sync_reg_1_(BackgroundSyncManager::BackgroundSyncRegistration()), | 185 sync_reg_1_(BackgroundSyncManager::BackgroundSyncRegistration()), |
141 sync_reg_2_(BackgroundSyncManager::BackgroundSyncRegistration()), | 186 sync_reg_2_(BackgroundSyncManager::BackgroundSyncRegistration()), |
142 callback_error_(BackgroundSyncManager::ERROR_TYPE_OK), | 187 callback_error_(BackgroundSyncManager::ERROR_TYPE_OK), |
143 callback_sw_status_code_(SERVICE_WORKER_OK) { | 188 callback_sw_status_code_(SERVICE_WORKER_OK), |
| 189 sync_events_called_(0) { |
144 sync_reg_1_.tag = "foo"; | 190 sync_reg_1_.tag = "foo"; |
| 191 sync_reg_1_.periodicity = SYNC_ONE_SHOT; |
| 192 sync_reg_1_.network_state = NETWORK_STATE_ONLINE; |
| 193 sync_reg_1_.power_state = POWER_STATE_AUTO; |
| 194 |
145 sync_reg_2_.tag = "bar"; | 195 sync_reg_2_.tag = "bar"; |
| 196 sync_reg_2_.periodicity = SYNC_ONE_SHOT; |
| 197 sync_reg_2_.network_state = NETWORK_STATE_ONLINE; |
| 198 sync_reg_2_.power_state = POWER_STATE_AUTO; |
146 } | 199 } |
147 | 200 |
148 void SetUp() override { | 201 void SetUp() override { |
| 202 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 203 |
149 helper_.reset( | 204 helper_.reset( |
150 new EmbeddedWorkerTestHelper(base::FilePath(), kRenderProcessId)); | 205 new EmbeddedWorkerTestHelper(base::FilePath(), kRenderProcessId)); |
151 | 206 |
152 background_sync_manager_ = | 207 background_sync_manager_ = |
153 BackgroundSyncManager::Create(helper_->context_wrapper()); | 208 BackgroundSyncManager::Create(helper_->context_wrapper()); |
154 | 209 |
155 // Wait for storage to finish initializing before registering service | 210 // Wait for storage to finish initializing before registering service |
156 // workers. | 211 // workers. |
157 base::RunLoop().RunUntilIdle(); | 212 base::RunLoop().RunUntilIdle(); |
158 | 213 |
159 bool called_1 = false; | 214 bool called_1 = false; |
160 bool called_2 = false; | 215 bool called_2 = false; |
161 helper_->context()->RegisterServiceWorker( | 216 helper_->context()->RegisterServiceWorker( |
162 GURL(kPattern1), GURL(kScript1), NULL, | 217 GURL(kPattern1), GURL(kScript1), NULL, |
163 base::Bind(&RegisterServiceWorkerCallback, &called_1, | 218 base::Bind(&RegisterServiceWorkerCallback, &called_1, |
164 &sw_registration_id_1_)); | 219 &sw_registration_id_1_)); |
165 | 220 |
166 helper_->context()->RegisterServiceWorker( | 221 helper_->context()->RegisterServiceWorker( |
167 GURL(kPattern2), GURL(kScript2), NULL, | 222 GURL(kPattern2), GURL(kScript2), NULL, |
168 base::Bind(&RegisterServiceWorkerCallback, &called_2, | 223 base::Bind(&RegisterServiceWorkerCallback, &called_2, |
169 &sw_registration_id_2_)); | 224 &sw_registration_id_2_)); |
170 base::RunLoop().RunUntilIdle(); | 225 base::RunLoop().RunUntilIdle(); |
171 EXPECT_TRUE(called_1); | 226 EXPECT_TRUE(called_1); |
172 EXPECT_TRUE(called_2); | 227 EXPECT_TRUE(called_2); |
173 } | 228 } |
174 | 229 |
| 230 void SetNetwork(net::NetworkChangeNotifier::ConnectionType connection_type) { |
| 231 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( |
| 232 connection_type); |
| 233 base::RunLoop().RunUntilIdle(); |
| 234 } |
| 235 |
175 void StatusAndRegistrationCallback( | 236 void StatusAndRegistrationCallback( |
176 bool* was_called, | 237 bool* was_called, |
177 BackgroundSyncManager::ErrorType error, | 238 BackgroundSyncManager::ErrorType error, |
178 const BackgroundSyncManager::BackgroundSyncRegistration& registration) { | 239 const BackgroundSyncManager::BackgroundSyncRegistration& registration) { |
179 *was_called = true; | 240 *was_called = true; |
180 callback_error_ = error; | 241 callback_error_ = error; |
181 callback_registration_ = registration; | 242 callback_registration_ = registration; |
182 } | 243 } |
183 | 244 |
184 void StatusCallback(bool* was_called, | 245 void StatusCallback(bool* was_called, |
185 BackgroundSyncManager::ErrorType error) { | 246 BackgroundSyncManager::ErrorType error) { |
186 *was_called = true; | 247 *was_called = true; |
187 callback_error_ = error; | 248 callback_error_ = error; |
188 } | 249 } |
189 | 250 |
190 protected: | 251 protected: |
191 TestBackgroundSyncManager* UseTestBackgroundSyncManager() { | 252 void UseTestBackgroundSyncManager() { |
192 TestBackgroundSyncManager* manager = | 253 test_background_sync_manager_ = |
193 new TestBackgroundSyncManager(helper_->context_wrapper()); | 254 new TestBackgroundSyncManager(helper_->context_wrapper()); |
194 background_sync_manager_.reset(manager); | 255 test_background_sync_manager_->DoInit(); |
195 manager->DoInit(); | 256 background_sync_manager_.reset(test_background_sync_manager_); |
196 return manager; | |
197 } | 257 } |
198 | 258 |
199 bool Register(const BackgroundSyncManager::BackgroundSyncRegistration& | 259 bool Register(const BackgroundSyncManager::BackgroundSyncRegistration& |
200 sync_registration) { | 260 sync_registration) { |
201 return RegisterWithServiceWorkerId(sw_registration_id_1_, | 261 return RegisterWithServiceWorkerId(sw_registration_id_1_, |
202 sync_registration); | 262 sync_registration); |
203 } | 263 } |
204 | 264 |
205 bool RegisterWithServiceWorkerId( | 265 bool RegisterWithServiceWorkerId( |
206 int64 sw_registration_id, | 266 int64 sw_registration_id, |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 base::RunLoop().RunUntilIdle(); | 336 base::RunLoop().RunUntilIdle(); |
277 EXPECT_TRUE(called); | 337 EXPECT_TRUE(called); |
278 } | 338 } |
279 | 339 |
280 GURL PatternForSWId(int64 sw_id) { | 340 GURL PatternForSWId(int64 sw_id) { |
281 EXPECT_TRUE(sw_id == sw_registration_id_1_ || | 341 EXPECT_TRUE(sw_id == sw_registration_id_1_ || |
282 sw_id == sw_registration_id_2_); | 342 sw_id == sw_registration_id_2_); |
283 return sw_id == sw_registration_id_1_ ? GURL(kPattern1) : GURL(kPattern2); | 343 return sw_id == sw_registration_id_1_ ? GURL(kPattern1) : GURL(kPattern2); |
284 } | 344 } |
285 | 345 |
| 346 void InitSyncEventTest() { |
| 347 UseTestBackgroundSyncManager(); |
| 348 test_background_sync_manager_->set_one_shot_callback( |
| 349 base::Bind(OneShotSuccessfulCallback, &sync_events_called_)); |
| 350 base::RunLoop().RunUntilIdle(); |
| 351 } |
| 352 |
| 353 void InitFailedSyncEventTest() { |
| 354 UseTestBackgroundSyncManager(); |
| 355 test_background_sync_manager_->set_one_shot_callback( |
| 356 base::Bind(OneShotFailedCallback, &sync_events_called_)); |
| 357 base::RunLoop().RunUntilIdle(); |
| 358 } |
| 359 |
| 360 void InitDelayedSyncEventTest() { |
| 361 UseTestBackgroundSyncManager(); |
| 362 test_background_sync_manager_->set_one_shot_callback(base::Bind( |
| 363 OneShotDelayedCallback, &sync_events_called_, &sync_fired_callback_)); |
| 364 base::RunLoop().RunUntilIdle(); |
| 365 } |
| 366 |
| 367 void RegisterAndVerifySyncEventDelayed( |
| 368 const BackgroundSyncManager::BackgroundSyncRegistration& |
| 369 sync_registration) { |
| 370 int sync_events_called = sync_events_called_; |
| 371 EXPECT_TRUE(sync_fired_callback_.is_null()); |
| 372 |
| 373 EXPECT_TRUE(Register(sync_registration)); |
| 374 |
| 375 EXPECT_EQ(sync_events_called + 1, sync_events_called_); |
| 376 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 377 EXPECT_FALSE(sync_fired_callback_.is_null()); |
| 378 } |
| 379 |
286 TestBrowserThreadBundle browser_thread_bundle_; | 380 TestBrowserThreadBundle browser_thread_bundle_; |
| 381 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
287 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 382 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
288 scoped_ptr<BackgroundSyncManager> background_sync_manager_; | 383 scoped_ptr<BackgroundSyncManager> background_sync_manager_; |
| 384 TestBackgroundSyncManager* test_background_sync_manager_; |
289 | 385 |
290 int64 sw_registration_id_1_; | 386 int64 sw_registration_id_1_; |
291 int64 sw_registration_id_2_; | 387 int64 sw_registration_id_2_; |
292 | 388 |
293 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_1_; | 389 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_1_; |
294 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_2_; | 390 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_2_; |
295 | 391 |
296 // Callback values. | 392 // Callback values. |
297 BackgroundSyncManager::ErrorType callback_error_; | 393 BackgroundSyncManager::ErrorType callback_error_; |
298 BackgroundSyncManager::BackgroundSyncRegistration callback_registration_; | 394 BackgroundSyncManager::BackgroundSyncRegistration callback_registration_; |
299 ServiceWorkerStatusCode callback_sw_status_code_; | 395 ServiceWorkerStatusCode callback_sw_status_code_; |
| 396 int sync_events_called_; |
| 397 ServiceWorkerVersion::StatusCallback sync_fired_callback_; |
300 }; | 398 }; |
301 | 399 |
302 TEST_F(BackgroundSyncManagerTest, Register) { | 400 TEST_F(BackgroundSyncManagerTest, Register) { |
303 EXPECT_TRUE(Register(sync_reg_1_)); | 401 EXPECT_TRUE(Register(sync_reg_1_)); |
304 } | 402 } |
305 | 403 |
306 TEST_F(BackgroundSyncManagerTest, RegistractionIntact) { | 404 TEST_F(BackgroundSyncManagerTest, RegistractionIntact) { |
307 EXPECT_TRUE(Register(sync_reg_1_)); | 405 EXPECT_TRUE(Register(sync_reg_1_)); |
308 EXPECT_STREQ(sync_reg_1_.tag.c_str(), callback_registration_.tag.c_str()); | 406 EXPECT_STREQ(sync_reg_1_.tag.c_str(), callback_registration_.tag.c_str()); |
309 EXPECT_NE( | 407 EXPECT_NE( |
(...skipping 30 matching lines...) Expand all Loading... |
340 sync_reg_2_.periodicity = SYNC_ONE_SHOT; | 438 sync_reg_2_.periodicity = SYNC_ONE_SHOT; |
341 EXPECT_TRUE(Register(sync_reg_1_)); | 439 EXPECT_TRUE(Register(sync_reg_1_)); |
342 EXPECT_TRUE(Register(sync_reg_2_)); | 440 EXPECT_TRUE(Register(sync_reg_2_)); |
343 EXPECT_TRUE(GetRegistration(sync_reg_1_)); | 441 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
344 EXPECT_EQ(SYNC_PERIODIC, callback_registration_.periodicity); | 442 EXPECT_EQ(SYNC_PERIODIC, callback_registration_.periodicity); |
345 EXPECT_TRUE(GetRegistration(sync_reg_2_)); | 443 EXPECT_TRUE(GetRegistration(sync_reg_2_)); |
346 EXPECT_EQ(SYNC_ONE_SHOT, callback_registration_.periodicity); | 444 EXPECT_EQ(SYNC_ONE_SHOT, callback_registration_.periodicity); |
347 } | 445 } |
348 | 446 |
349 TEST_F(BackgroundSyncManagerTest, RegisterBadBackend) { | 447 TEST_F(BackgroundSyncManagerTest, RegisterBadBackend) { |
350 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); | 448 UseTestBackgroundSyncManager(); |
351 manager->set_corrupt_backend(true); | 449 test_background_sync_manager_->set_corrupt_backend(true); |
352 EXPECT_FALSE(Register(sync_reg_1_)); | 450 EXPECT_FALSE(Register(sync_reg_1_)); |
353 manager->set_corrupt_backend(false); | 451 test_background_sync_manager_->set_corrupt_backend(false); |
354 EXPECT_FALSE(Register(sync_reg_1_)); | 452 EXPECT_FALSE(Register(sync_reg_1_)); |
355 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 453 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
356 } | 454 } |
357 | 455 |
358 TEST_F(BackgroundSyncManagerTest, TwoRegistrations) { | 456 TEST_F(BackgroundSyncManagerTest, TwoRegistrations) { |
359 EXPECT_TRUE(Register(sync_reg_1_)); | 457 EXPECT_TRUE(Register(sync_reg_1_)); |
360 EXPECT_TRUE(Register(sync_reg_2_)); | 458 EXPECT_TRUE(Register(sync_reg_2_)); |
361 } | 459 } |
362 | 460 |
363 TEST_F(BackgroundSyncManagerTest, GetRegistrationNonExisting) { | 461 TEST_F(BackgroundSyncManagerTest, GetRegistrationNonExisting) { |
364 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 462 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
365 } | 463 } |
366 | 464 |
367 TEST_F(BackgroundSyncManagerTest, GetRegistrationExisting) { | 465 TEST_F(BackgroundSyncManagerTest, GetRegistrationExisting) { |
368 EXPECT_TRUE(Register(sync_reg_1_)); | 466 EXPECT_TRUE(Register(sync_reg_1_)); |
369 EXPECT_TRUE(GetRegistration(sync_reg_1_)); | 467 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
370 EXPECT_FALSE(GetRegistration(sync_reg_2_)); | 468 EXPECT_FALSE(GetRegistration(sync_reg_2_)); |
371 } | 469 } |
372 | 470 |
373 TEST_F(BackgroundSyncManagerTest, GetRegistrationBadBackend) { | 471 TEST_F(BackgroundSyncManagerTest, GetRegistrationBadBackend) { |
374 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); | 472 UseTestBackgroundSyncManager(); |
375 EXPECT_TRUE(Register(sync_reg_1_)); | 473 EXPECT_TRUE(Register(sync_reg_1_)); |
376 manager->set_corrupt_backend(true); | 474 test_background_sync_manager_->set_corrupt_backend(true); |
377 EXPECT_TRUE(GetRegistration(sync_reg_1_)); | 475 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
378 EXPECT_FALSE(Register(sync_reg_2_)); | 476 EXPECT_FALSE(Register(sync_reg_2_)); |
379 // Registration should have discovered the bad backend and disabled the | 477 // Registration should have discovered the bad backend and disabled the |
380 // BackgroundSyncManager. | 478 // BackgroundSyncManager. |
381 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 479 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
382 manager->set_corrupt_backend(false); | 480 test_background_sync_manager_->set_corrupt_backend(false); |
383 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 481 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
384 } | 482 } |
385 | 483 |
386 TEST_F(BackgroundSyncManagerTest, Unregister) { | 484 TEST_F(BackgroundSyncManagerTest, Unregister) { |
387 EXPECT_TRUE(Register(sync_reg_1_)); | 485 EXPECT_TRUE(Register(sync_reg_1_)); |
388 EXPECT_TRUE(Unregister(callback_registration_)); | 486 EXPECT_TRUE(Unregister(callback_registration_)); |
389 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 487 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
390 } | 488 } |
391 | 489 |
392 TEST_F(BackgroundSyncManagerTest, UnregisterWrongId) { | 490 TEST_F(BackgroundSyncManagerTest, UnregisterWrongId) { |
(...skipping 15 matching lines...) Expand all Loading... |
408 | 506 |
409 TEST_F(BackgroundSyncManagerTest, UnregisterSecond) { | 507 TEST_F(BackgroundSyncManagerTest, UnregisterSecond) { |
410 EXPECT_TRUE(Register(sync_reg_1_)); | 508 EXPECT_TRUE(Register(sync_reg_1_)); |
411 EXPECT_TRUE(Register(sync_reg_2_)); | 509 EXPECT_TRUE(Register(sync_reg_2_)); |
412 EXPECT_TRUE(Unregister(callback_registration_)); | 510 EXPECT_TRUE(Unregister(callback_registration_)); |
413 EXPECT_TRUE(GetRegistration(sync_reg_1_)); | 511 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
414 EXPECT_TRUE(Register(sync_reg_2_)); | 512 EXPECT_TRUE(Register(sync_reg_2_)); |
415 } | 513 } |
416 | 514 |
417 TEST_F(BackgroundSyncManagerTest, UnregisterBadBackend) { | 515 TEST_F(BackgroundSyncManagerTest, UnregisterBadBackend) { |
418 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); | 516 UseTestBackgroundSyncManager(); |
419 sync_reg_1_.min_period += 1; | 517 sync_reg_1_.min_period += 1; |
420 EXPECT_TRUE(Register(sync_reg_1_)); | 518 EXPECT_TRUE(Register(sync_reg_1_)); |
421 EXPECT_TRUE(Register(sync_reg_2_)); | 519 EXPECT_TRUE(Register(sync_reg_2_)); |
422 manager->set_corrupt_backend(true); | 520 test_background_sync_manager_->set_corrupt_backend(true); |
423 EXPECT_FALSE(Unregister(callback_registration_)); | 521 EXPECT_FALSE(Unregister(callback_registration_)); |
424 // Unregister should have discovered the bad backend and disabled the | 522 // Unregister should have discovered the bad backend and disabled the |
425 // BackgroundSyncManager. | 523 // BackgroundSyncManager. |
426 manager->set_corrupt_backend(false); | 524 test_background_sync_manager_->set_corrupt_backend(false); |
427 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 525 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
428 EXPECT_FALSE(GetRegistration(sync_reg_2_)); | 526 EXPECT_FALSE(GetRegistration(sync_reg_2_)); |
429 } | 527 } |
430 | 528 |
431 TEST_F(BackgroundSyncManagerTest, RegistrationIncreasesId) { | 529 TEST_F(BackgroundSyncManagerTest, RegistrationIncreasesId) { |
432 EXPECT_TRUE(Register(sync_reg_1_)); | 530 EXPECT_TRUE(Register(sync_reg_1_)); |
433 BackgroundSyncManager::BackgroundSyncRegistration registered_sync = | 531 BackgroundSyncManager::BackgroundSyncRegistration registered_sync = |
434 callback_registration_; | 532 callback_registration_; |
435 BackgroundSyncManager::BackgroundSyncRegistration::RegistrationId cur_id = | 533 BackgroundSyncManager::BackgroundSyncRegistration::RegistrationId cur_id = |
436 callback_registration_.id; | 534 callback_registration_.id; |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 EXPECT_TRUE(GetRegistration(sync_reg_1_)); | 844 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
747 EXPECT_TRUE(Unregister(callback_registration_)); | 845 EXPECT_TRUE(Unregister(callback_registration_)); |
748 EXPECT_FALSE(GetRegistration(sync_reg_1_)); | 846 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
749 EXPECT_TRUE(GetRegistration(sync_reg_2_)); | 847 EXPECT_TRUE(GetRegistration(sync_reg_2_)); |
750 EXPECT_EQ(SYNC_ONE_SHOT, callback_registration_.periodicity); | 848 EXPECT_EQ(SYNC_ONE_SHOT, callback_registration_.periodicity); |
751 | 849 |
752 EXPECT_TRUE(Unregister(callback_registration_)); | 850 EXPECT_TRUE(Unregister(callback_registration_)); |
753 EXPECT_FALSE(GetRegistration(sync_reg_2_)); | 851 EXPECT_FALSE(GetRegistration(sync_reg_2_)); |
754 } | 852 } |
755 | 853 |
| 854 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnRegistration) { |
| 855 InitSyncEventTest(); |
| 856 |
| 857 EXPECT_TRUE(Register(sync_reg_1_)); |
| 858 EXPECT_EQ(1, sync_events_called_); |
| 859 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 860 } |
| 861 |
| 862 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnNetworkChange) { |
| 863 InitSyncEventTest(); |
| 864 |
| 865 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 866 EXPECT_TRUE(Register(sync_reg_1_)); |
| 867 EXPECT_EQ(0, sync_events_called_); |
| 868 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 869 |
| 870 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 871 base::RunLoop().RunUntilIdle(); |
| 872 EXPECT_EQ(1, sync_events_called_); |
| 873 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 874 } |
| 875 |
| 876 TEST_F(BackgroundSyncManagerTest, MultipleOneShotsFireOnNetworkChange) { |
| 877 InitSyncEventTest(); |
| 878 |
| 879 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 880 EXPECT_TRUE(Register(sync_reg_1_)); |
| 881 EXPECT_TRUE(Register(sync_reg_2_)); |
| 882 EXPECT_EQ(0, sync_events_called_); |
| 883 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 884 EXPECT_TRUE(GetRegistration(sync_reg_2_)); |
| 885 |
| 886 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 887 base::RunLoop().RunUntilIdle(); |
| 888 EXPECT_EQ(2, sync_events_called_); |
| 889 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 890 EXPECT_FALSE(GetRegistration(sync_reg_2_)); |
| 891 } |
| 892 |
| 893 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnManagerRestart) { |
| 894 InitSyncEventTest(); |
| 895 |
| 896 // Initially the event won't run because there is no network. |
| 897 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 898 EXPECT_TRUE(Register(sync_reg_1_)); |
| 899 EXPECT_EQ(0, sync_events_called_); |
| 900 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 901 |
| 902 // Simulate closing the browser. |
| 903 background_sync_manager_.reset(); |
| 904 |
| 905 // The next time the manager is started, the network is good. |
| 906 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 907 InitSyncEventTest(); |
| 908 |
| 909 // The event should have fired. |
| 910 EXPECT_EQ(1, sync_events_called_); |
| 911 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 912 } |
| 913 |
| 914 TEST_F(BackgroundSyncManagerTest, FailedOneShotStillExists) { |
| 915 InitFailedSyncEventTest(); |
| 916 |
| 917 EXPECT_TRUE(Register(sync_reg_1_)); |
| 918 EXPECT_EQ(1, sync_events_called_); |
| 919 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 920 |
| 921 // The failed one-shot should stay registered but not fire until the |
| 922 // ServiceWorker is reloaded with an active client. Therefore, changing the |
| 923 // network should not cause the event to run again. |
| 924 SetNetwork(net::NetworkChangeNotifier::CONNECTION_2G); |
| 925 EXPECT_EQ(1, sync_events_called_); |
| 926 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 927 } |
| 928 |
| 929 TEST_F(BackgroundSyncManagerTest, DelayOneShotMidSync) { |
| 930 InitDelayedSyncEventTest(); |
| 931 |
| 932 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 933 |
| 934 // Finish firing the event and verify that the registration is removed. |
| 935 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 936 base::RunLoop().RunUntilIdle(); |
| 937 EXPECT_EQ(1, sync_events_called_); |
| 938 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 939 } |
| 940 |
| 941 TEST_F(BackgroundSyncManagerTest, OverwriteRegistrationMidSync) { |
| 942 InitDelayedSyncEventTest(); |
| 943 |
| 944 sync_reg_1_.network_state = NETWORK_STATE_ANY; |
| 945 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 946 |
| 947 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 948 |
| 949 // Don't delay the next sync. |
| 950 test_background_sync_manager_->set_one_shot_callback( |
| 951 base::Bind(OneShotSuccessfulCallback, &sync_events_called_)); |
| 952 |
| 953 // Register a different sync event with the same tag, overwriting the first. |
| 954 sync_reg_1_.network_state = NETWORK_STATE_ONLINE; |
| 955 EXPECT_TRUE(Register(sync_reg_1_)); |
| 956 |
| 957 // The new sync event won't run as the network requirements aren't met. |
| 958 EXPECT_EQ(1, sync_events_called_); |
| 959 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 960 |
| 961 // Finish the first event, note that the second is still registered. |
| 962 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 963 EXPECT_EQ(1, sync_events_called_); |
| 964 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 965 |
| 966 // Change the network and the second should run. |
| 967 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 968 base::RunLoop().RunUntilIdle(); |
| 969 EXPECT_EQ(2, sync_events_called_); |
| 970 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 971 } |
| 972 |
| 973 TEST_F(BackgroundSyncManagerTest, ReregisterOneShotMidSync) { |
| 974 InitDelayedSyncEventTest(); |
| 975 |
| 976 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 977 |
| 978 // Register the same sync, but don't delay it. It shouldn't run as it's |
| 979 // already firing. |
| 980 test_background_sync_manager_->set_one_shot_callback( |
| 981 base::Bind(OneShotSuccessfulCallback, &sync_events_called_)); |
| 982 EXPECT_TRUE(Register(sync_reg_1_)); |
| 983 EXPECT_EQ(1, sync_events_called_); |
| 984 EXPECT_TRUE(GetRegistration(sync_reg_1_)); |
| 985 |
| 986 // Finish the original event, note that the second never runs. |
| 987 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 988 base::RunLoop().RunUntilIdle(); |
| 989 EXPECT_EQ(1, sync_events_called_); |
| 990 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 991 } |
| 992 |
| 993 TEST_F(BackgroundSyncManagerTest, UnregisterOneShotMidSync) { |
| 994 InitDelayedSyncEventTest(); |
| 995 |
| 996 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 997 |
| 998 EXPECT_TRUE(Unregister(callback_registration_)); |
| 999 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 1000 |
| 1001 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 1002 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 1003 } |
| 1004 |
| 1005 TEST_F(BackgroundSyncManagerTest, BadBackendMidSync) { |
| 1006 InitDelayedSyncEventTest(); |
| 1007 |
| 1008 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 1009 |
| 1010 test_background_sync_manager_->set_corrupt_backend(true); |
| 1011 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 1012 base::RunLoop().RunUntilIdle(); |
| 1013 |
| 1014 // The backend should now be disabled because it couldn't unregister the |
| 1015 // one-shot. |
| 1016 EXPECT_FALSE(Register(sync_reg_2_)); |
| 1017 EXPECT_FALSE(RegisterWithServiceWorkerId(sw_registration_id_2_, sync_reg_2_)); |
| 1018 } |
| 1019 |
| 1020 TEST_F(BackgroundSyncManagerTest, UnregisterServiceWorkerMidSync) { |
| 1021 InitDelayedSyncEventTest(); |
| 1022 |
| 1023 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 1024 UnregisterServiceWorker(sw_registration_id_1_); |
| 1025 |
| 1026 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 1027 |
| 1028 // The backend isn't disabled, but the first service worker registration is |
| 1029 // gone. |
| 1030 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 1031 EXPECT_FALSE(Register(sync_reg_1_)); |
| 1032 EXPECT_TRUE(RegisterWithServiceWorkerId(sw_registration_id_2_, sync_reg_1_)); |
| 1033 } |
| 1034 |
| 1035 TEST_F(BackgroundSyncManagerTest, KillManagerMidSync) { |
| 1036 InitDelayedSyncEventTest(); |
| 1037 |
| 1038 RegisterAndVerifySyncEventDelayed(sync_reg_1_); |
| 1039 |
| 1040 // Create a new manager which should fire the sync again on init. |
| 1041 InitSyncEventTest(); |
| 1042 EXPECT_FALSE(GetRegistration(sync_reg_1_)); |
| 1043 EXPECT_EQ(2, sync_events_called_); |
| 1044 } |
| 1045 |
756 } // namespace content | 1046 } // namespace content |
OLD | NEW |