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

Side by Side Diff: content/browser/background_sync/background_sync_manager_unittest.cc

Issue 1106523002: [BackgroundSync] Fire one-shot sync events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@store_origin
Patch Set: Rebase Created 5 years, 8 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698