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

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

Issue 1048053002: [BackgroundSync] Handle storage failure (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@background_sync
Patch Set: Address comments from PS4 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"
13 #include "content/browser/service_worker/service_worker_context_core.h"
12 #include "content/browser/service_worker/service_worker_context_wrapper.h" 14 #include "content/browser/service_worker/service_worker_context_wrapper.h"
13 #include "content/browser/service_worker/service_worker_storage.h" 15 #include "content/browser/service_worker/service_worker_storage.h"
14 #include "content/public/test/test_browser_thread_bundle.h" 16 #include "content/public/test/test_browser_thread_bundle.h"
15 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
16 18
19 namespace content {
20
17 namespace { 21 namespace {
18 const char kOriginUrl[] = "https://example.com"; 22
19 const int64 kServiceWorkerVersionId = 0; 23 const char kOrigin[] = "https://example.com";
20 const int64 kServiceWorkerId1 = 1; 24 const char kPattern1[] = "https://example.com/a";
21 const int64 kServiceWorkerId2 = 2; 25 const char kPattern2[] = "https://example.com/b";
26 const char kScript1[] = "https://example.com/a/script.js";
27 const char kScript2[] = "https://example.com/b/script.js";
28 const int kRenderProcessId = 99;
29
30 void RegisterServiceWorkerCallback(bool* called,
31 int64* store_registration_id,
32 ServiceWorkerStatusCode status,
33 const std::string& status_message,
34 int64 registration_id) {
35 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status);
36 *called = true;
37 *store_registration_id = registration_id;
22 } 38 }
23 39
24 namespace content { 40 void UnregisterServiceWorkerCallback(bool* called,
41 ServiceWorkerStatusCode code) {
42 EXPECT_EQ(SERVICE_WORKER_OK, code);
43 *called = true;
44 }
45
46 } // namespace
25 47
26 // A BackgroundSyncManager that can simulate delaying and corrupting the 48 // A BackgroundSyncManager that can simulate delaying and corrupting the
27 // backend. This class assumes (and verifies) that only one operation runs at a 49 // backend. This class assumes (and verifies) that only one operation runs at a
28 // time. 50 // time.
29 class TestBackgroundSyncManager : public BackgroundSyncManager { 51 class TestBackgroundSyncManager : public BackgroundSyncManager {
30 public: 52 public:
31 explicit TestBackgroundSyncManager( 53 explicit TestBackgroundSyncManager(
32 const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context) 54 const scoped_refptr<ServiceWorkerContextWrapper>& service_worker_context)
33 : BackgroundSyncManager(service_worker_context) {} 55 : BackgroundSyncManager(service_worker_context) {}
34 56
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 private: 130 private:
109 bool corrupt_backend_ = false; 131 bool corrupt_backend_ = false;
110 bool delay_backend_ = false; 132 bool delay_backend_ = false;
111 base::Closure continuation_; 133 base::Closure continuation_;
112 }; 134 };
113 135
114 class BackgroundSyncManagerTest : public testing::Test { 136 class BackgroundSyncManagerTest : public testing::Test {
115 public: 137 public:
116 BackgroundSyncManagerTest() 138 BackgroundSyncManagerTest()
117 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), 139 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
118 service_worker_context_(new ServiceWorkerContextWrapper(NULL)),
119 origin_(kOriginUrl),
120 sync_reg_1_(BackgroundSyncManager::BackgroundSyncRegistration("foo")), 140 sync_reg_1_(BackgroundSyncManager::BackgroundSyncRegistration("foo")),
121 sync_reg_2_(BackgroundSyncManager::BackgroundSyncRegistration("bar")), 141 sync_reg_2_(BackgroundSyncManager::BackgroundSyncRegistration("bar")),
122 callback_error_(BackgroundSyncManager::ERROR_TYPE_OK), 142 callback_error_(BackgroundSyncManager::ERROR_TYPE_OK),
123 callback_sw_status_code_(SERVICE_WORKER_OK) {} 143 callback_sw_status_code_(SERVICE_WORKER_OK) {}
124 144
125 void SetUp() override { 145 void SetUp() override {
126 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager( 146 helper_.reset(
127 new MockServiceWorkerDatabaseTaskManager( 147 new EmbeddedWorkerTestHelper(base::FilePath(), kRenderProcessId));
128 base::ThreadTaskRunnerHandle::Get()));
129
130 service_worker_context_->InitInternal(
131 base::FilePath(), database_task_manager.Pass(),
132 base::ThreadTaskRunnerHandle::Get(), NULL, NULL);
133 context_ptr_ = service_worker_context_->context()->AsWeakPtr();
134 148
135 background_sync_manager_ = 149 background_sync_manager_ =
136 BackgroundSyncManager::Create(service_worker_context_); 150 BackgroundSyncManager::Create(helper_->context_wrapper());
137 151
138 // Wait for storage to finish initializing before registering service 152 // Wait for storage to finish initializing before registering service
139 // workers. 153 // workers.
140 base::RunLoop().RunUntilIdle(); 154 base::RunLoop().RunUntilIdle();
141 155
142 RegisterServiceWorker(kServiceWorkerId1); 156 bool called_1 = false;
143 RegisterServiceWorker(kServiceWorkerId2); 157 bool called_2 = false;
158 helper_->context()->RegisterServiceWorker(
159 GURL(kPattern1), GURL(kScript1), NULL,
160 base::Bind(&RegisterServiceWorkerCallback, &called_1,
161 &sw_registration_id_1_));
162
163 helper_->context()->RegisterServiceWorker(
164 GURL(kPattern2), GURL(kScript2), NULL,
165 base::Bind(&RegisterServiceWorkerCallback, &called_2,
166 &sw_registration_id_2_));
167 base::RunLoop().RunUntilIdle();
168 EXPECT_TRUE(called_1);
169 EXPECT_TRUE(called_2);
144 } 170 }
145 171
146 void StatusAndRegistrationCallback( 172 void StatusAndRegistrationCallback(
147 bool* was_called, 173 bool* was_called,
148 BackgroundSyncManager::ErrorType error, 174 BackgroundSyncManager::ErrorType error,
149 const BackgroundSyncManager::BackgroundSyncRegistration& registration) { 175 const BackgroundSyncManager::BackgroundSyncRegistration& registration) {
150 *was_called = true; 176 *was_called = true;
151 callback_error_ = error; 177 callback_error_ = error;
152 callback_registration_ = registration; 178 callback_registration_ = registration;
153 } 179 }
154 180
155 void StatusCallback(bool* was_called, 181 void StatusCallback(bool* was_called,
156 BackgroundSyncManager::ErrorType error) { 182 BackgroundSyncManager::ErrorType error) {
157 *was_called = true; 183 *was_called = true;
158 callback_error_ = error; 184 callback_error_ = error;
159 } 185 }
160 186
161 protected: 187 protected:
162 TestBackgroundSyncManager* UseTestBackgroundSyncManager() { 188 TestBackgroundSyncManager* UseTestBackgroundSyncManager() {
163 TestBackgroundSyncManager* manager = 189 TestBackgroundSyncManager* manager =
164 new TestBackgroundSyncManager(service_worker_context_); 190 new TestBackgroundSyncManager(helper_->context_wrapper());
165 background_sync_manager_.reset(manager); 191 background_sync_manager_.reset(manager);
166 manager->DoInit(); 192 manager->DoInit();
167 return manager; 193 return manager;
168 } 194 }
169 195
170 bool Register(const BackgroundSyncManager::BackgroundSyncRegistration& 196 bool Register(const BackgroundSyncManager::BackgroundSyncRegistration&
171 sync_registration) { 197 sync_registration) {
172 return RegisterWithServiceWorkerId(kServiceWorkerId1, sync_registration); 198 return RegisterWithServiceWorkerId(sw_registration_id_1_,
199 sync_registration);
173 } 200 }
174 201
175 bool RegisterWithServiceWorkerId( 202 bool RegisterWithServiceWorkerId(
176 int64 sw_registration_id, 203 int64 sw_registration_id,
177 const BackgroundSyncManager::BackgroundSyncRegistration& 204 const BackgroundSyncManager::BackgroundSyncRegistration&
178 sync_registration) { 205 sync_registration) {
179 bool was_called = false; 206 bool was_called = false;
180 background_sync_manager_->Register( 207 background_sync_manager_->Register(
181 origin_, sw_registration_id, sync_registration, 208 GURL(kOrigin), sw_registration_id, sync_registration,
182 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, 209 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
183 base::Unretained(this), &was_called)); 210 base::Unretained(this), &was_called));
184 base::RunLoop().RunUntilIdle(); 211 base::RunLoop().RunUntilIdle();
185 EXPECT_TRUE(was_called); 212 EXPECT_TRUE(was_called);
186 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK; 213 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK;
187 } 214 }
188 215
189 bool Unregister(const BackgroundSyncManager::BackgroundSyncRegistration& 216 bool Unregister(const BackgroundSyncManager::BackgroundSyncRegistration&
190 sync_registration) { 217 sync_registration) {
191 return UnregisterWithServiceWorkerId(kServiceWorkerId1, sync_registration); 218 return UnregisterWithServiceWorkerId(sw_registration_id_1_,
219 sync_registration);
192 } 220 }
193 221
194 bool UnregisterWithServiceWorkerId( 222 bool UnregisterWithServiceWorkerId(
195 int64 sw_registration_id, 223 int64 sw_registration_id,
196 const BackgroundSyncManager::BackgroundSyncRegistration& 224 const BackgroundSyncManager::BackgroundSyncRegistration&
197 sync_registration) { 225 sync_registration) {
198 bool was_called = false; 226 bool was_called = false;
199 background_sync_manager_->Unregister( 227 background_sync_manager_->Unregister(
200 origin_, sw_registration_id, sync_registration.name, 228 GURL(kOrigin), sw_registration_id, sync_registration.name,
201 sync_registration.id, 229 sync_registration.id,
202 base::Bind(&BackgroundSyncManagerTest::StatusCallback, 230 base::Bind(&BackgroundSyncManagerTest::StatusCallback,
203 base::Unretained(this), &was_called)); 231 base::Unretained(this), &was_called));
204 base::RunLoop().RunUntilIdle(); 232 base::RunLoop().RunUntilIdle();
205 EXPECT_TRUE(was_called); 233 EXPECT_TRUE(was_called);
206 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK; 234 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK;
207 } 235 }
208 236
209 bool GetRegistration(const std::string& sync_registration_name) { 237 bool GetRegistration(const std::string& sync_registration_name) {
210 return GetRegistrationWithServiceWorkerId(kServiceWorkerId1, 238 return GetRegistrationWithServiceWorkerId(sw_registration_id_1_,
211 sync_registration_name); 239 sync_registration_name);
212 } 240 }
213 241
214 bool GetRegistrationWithServiceWorkerId( 242 bool GetRegistrationWithServiceWorkerId(
215 int64 sw_registration_id, 243 int64 sw_registration_id,
216 const std::string& sync_registration_name) { 244 const std::string& sync_registration_name) {
217 bool was_called = false; 245 bool was_called = false;
218 background_sync_manager_->GetRegistration( 246 background_sync_manager_->GetRegistration(
219 origin_, sw_registration_id, sync_registration_name, 247 GURL(kOrigin), sw_registration_id, sync_registration_name,
220 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, 248 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
221 base::Unretained(this), &was_called)); 249 base::Unretained(this), &was_called));
222 base::RunLoop().RunUntilIdle(); 250 base::RunLoop().RunUntilIdle();
223 EXPECT_TRUE(was_called); 251 EXPECT_TRUE(was_called);
224 252
225 if (callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK) 253 if (callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK)
226 EXPECT_TRUE(sync_registration_name == callback_registration_.name); 254 EXPECT_TRUE(sync_registration_name == callback_registration_.name);
227 255
228 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK; 256 return callback_error_ == BackgroundSyncManager::ERROR_TYPE_OK;
229 } 257 }
230 258
231 void StorageRegistrationCallback(ServiceWorkerStatusCode result) { 259 void StorageRegistrationCallback(ServiceWorkerStatusCode result) {
232 callback_sw_status_code_ = result; 260 callback_sw_status_code_ = result;
233 } 261 }
234 262
235 void RegisterServiceWorker(uint64 sw_registration_id) { 263 void UnregisterServiceWorker(uint64 sw_registration_id) {
236 scoped_refptr<ServiceWorkerRegistration> live_registration = 264 bool called = false;
237 new ServiceWorkerRegistration(origin_, sw_registration_id, 265 helper_->context()->UnregisterServiceWorker(
238 context_ptr_); 266 PatternForSWId(sw_registration_id),
267 base::Bind(&UnregisterServiceWorkerCallback, &called));
268 base::RunLoop().RunUntilIdle();
269 EXPECT_TRUE(called);
270 }
239 271
240 scoped_refptr<ServiceWorkerVersion> live_version = new ServiceWorkerVersion( 272 GURL PatternForSWId(int64 sw_id) {
241 live_registration.get(), GURL(std::string(kOriginUrl) + "/script.js"), 273 EXPECT_TRUE(sw_id == sw_registration_id_1_ ||
242 kServiceWorkerVersionId, context_ptr_); 274 sw_id == sw_registration_id_2_);
243 live_version->SetStatus(ServiceWorkerVersion::INSTALLED); 275 return sw_id == sw_registration_id_1_ ? GURL(kPattern1) : GURL(kPattern2);
244 live_registration->SetWaitingVersion(live_version.get());
245
246 service_worker_context_->context()->storage()->StoreRegistration(
247 live_registration.get(), live_version.get(),
248 base::Bind(&BackgroundSyncManagerTest::StorageRegistrationCallback,
249 base::Unretained(this)));
250
251 base::RunLoop().RunUntilIdle();
252 EXPECT_EQ(SERVICE_WORKER_OK, callback_sw_status_code_);
253 } 276 }
254 277
255 TestBrowserThreadBundle browser_thread_bundle_; 278 TestBrowserThreadBundle browser_thread_bundle_;
256 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; 279 scoped_ptr<EmbeddedWorkerTestHelper> helper_;
257 scoped_ptr<BackgroundSyncManager> background_sync_manager_; 280 scoped_ptr<BackgroundSyncManager> background_sync_manager_;
258 base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
259 281
260 const GURL origin_; 282 int64 sw_registration_id_1_;
283 int64 sw_registration_id_2_;
284
261 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_1_; 285 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_1_;
262 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_2_; 286 BackgroundSyncManager::BackgroundSyncRegistration sync_reg_2_;
263 287
264 // Callback values. 288 // Callback values.
265 BackgroundSyncManager::ErrorType callback_error_; 289 BackgroundSyncManager::ErrorType callback_error_;
266 BackgroundSyncManager::BackgroundSyncRegistration callback_registration_; 290 BackgroundSyncManager::BackgroundSyncRegistration callback_registration_;
267 ServiceWorkerStatusCode callback_sw_status_code_; 291 ServiceWorkerStatusCode callback_sw_status_code_;
268 }; 292 };
269 293
270 TEST_F(BackgroundSyncManagerTest, Register) { 294 TEST_F(BackgroundSyncManagerTest, Register) {
(...skipping 26 matching lines...) Expand all
297 EXPECT_TRUE(Register(sync_reg_1_)); 321 EXPECT_TRUE(Register(sync_reg_1_));
298 EXPECT_LT(first_registration.id, callback_registration_.id); 322 EXPECT_LT(first_registration.id, callback_registration_.id);
299 EXPECT_FALSE(callback_registration_.Equals(first_registration)); 323 EXPECT_FALSE(callback_registration_.Equals(first_registration));
300 } 324 }
301 325
302 TEST_F(BackgroundSyncManagerTest, RegisterBadBackend) { 326 TEST_F(BackgroundSyncManagerTest, RegisterBadBackend) {
303 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); 327 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager();
304 manager->set_corrupt_backend(true); 328 manager->set_corrupt_backend(true);
305 EXPECT_FALSE(Register(sync_reg_1_)); 329 EXPECT_FALSE(Register(sync_reg_1_));
306 manager->set_corrupt_backend(false); 330 manager->set_corrupt_backend(false);
331 EXPECT_FALSE(Register(sync_reg_1_));
307 EXPECT_FALSE(GetRegistration(sync_reg_1_.name)); 332 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
308 } 333 }
309 334
310 TEST_F(BackgroundSyncManagerTest, RegisterOverwriteBadBackend) {
311 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager();
312 EXPECT_TRUE(Register(sync_reg_1_));
313 BackgroundSyncManager::BackgroundSyncRegistration first_registration =
314 callback_registration_;
315
316 sync_reg_1_.min_period = 100;
317
318 manager->set_corrupt_backend(true);
319 EXPECT_FALSE(Register(sync_reg_1_));
320 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
321 EXPECT_EQ(callback_registration_.id, first_registration.id);
322 EXPECT_TRUE(callback_registration_.Equals(first_registration));
323 }
324
325 TEST_F(BackgroundSyncManagerTest, TwoRegistrations) { 335 TEST_F(BackgroundSyncManagerTest, TwoRegistrations) {
326 EXPECT_TRUE(Register(sync_reg_1_)); 336 EXPECT_TRUE(Register(sync_reg_1_));
327 EXPECT_TRUE(Register(sync_reg_2_)); 337 EXPECT_TRUE(Register(sync_reg_2_));
328 } 338 }
329 339
330 TEST_F(BackgroundSyncManagerTest, GetRegistrationNonExisting) { 340 TEST_F(BackgroundSyncManagerTest, GetRegistrationNonExisting) {
331 EXPECT_FALSE(GetRegistration(sync_reg_1_.name)); 341 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
332 } 342 }
333 343
334 TEST_F(BackgroundSyncManagerTest, GetRegistrationExisting) { 344 TEST_F(BackgroundSyncManagerTest, GetRegistrationExisting) {
335 EXPECT_TRUE(Register(sync_reg_1_)); 345 EXPECT_TRUE(Register(sync_reg_1_));
336 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 346 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
337 EXPECT_FALSE(GetRegistration(sync_reg_2_.name)); 347 EXPECT_FALSE(GetRegistration(sync_reg_2_.name));
338 } 348 }
339 349
340 TEST_F(BackgroundSyncManagerTest, GetRegistrationBadBackend) { 350 TEST_F(BackgroundSyncManagerTest, GetRegistrationBadBackend) {
341 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); 351 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager();
342 EXPECT_TRUE(Register(sync_reg_1_)); 352 EXPECT_TRUE(Register(sync_reg_1_));
343 manager->set_corrupt_backend(true); 353 manager->set_corrupt_backend(true);
344 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 354 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
345 EXPECT_FALSE(GetRegistration(sync_reg_2_.name)); 355 EXPECT_FALSE(Register(sync_reg_2_));
356 // Registration should have discovered the bad backend and disabled the
357 // BackgroundSyncManager.
358 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
346 manager->set_corrupt_backend(false); 359 manager->set_corrupt_backend(false);
347 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 360 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
348 EXPECT_FALSE(GetRegistration(sync_reg_2_.name));
349 } 361 }
350 362
351 TEST_F(BackgroundSyncManagerTest, Unregister) { 363 TEST_F(BackgroundSyncManagerTest, Unregister) {
352 EXPECT_TRUE(Register(sync_reg_1_)); 364 EXPECT_TRUE(Register(sync_reg_1_));
353 EXPECT_TRUE(Unregister(callback_registration_)); 365 EXPECT_TRUE(Unregister(callback_registration_));
354 EXPECT_FALSE(GetRegistration(sync_reg_1_.name)); 366 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
355 } 367 }
356 368
357 TEST_F(BackgroundSyncManagerTest, UnregisterWrongId) { 369 TEST_F(BackgroundSyncManagerTest, UnregisterWrongId) {
358 EXPECT_TRUE(Register(sync_reg_1_)); 370 EXPECT_TRUE(Register(sync_reg_1_));
(...skipping 17 matching lines...) Expand all
376 EXPECT_TRUE(Register(sync_reg_2_)); 388 EXPECT_TRUE(Register(sync_reg_2_));
377 EXPECT_TRUE(Unregister(callback_registration_)); 389 EXPECT_TRUE(Unregister(callback_registration_));
378 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 390 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
379 EXPECT_TRUE(Register(sync_reg_2_)); 391 EXPECT_TRUE(Register(sync_reg_2_));
380 } 392 }
381 393
382 TEST_F(BackgroundSyncManagerTest, UnregisterBadBackend) { 394 TEST_F(BackgroundSyncManagerTest, UnregisterBadBackend) {
383 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager(); 395 TestBackgroundSyncManager* manager = UseTestBackgroundSyncManager();
384 sync_reg_1_.min_period += 1; 396 sync_reg_1_.min_period += 1;
385 EXPECT_TRUE(Register(sync_reg_1_)); 397 EXPECT_TRUE(Register(sync_reg_1_));
398 EXPECT_TRUE(Register(sync_reg_2_));
386 manager->set_corrupt_backend(true); 399 manager->set_corrupt_backend(true);
387 EXPECT_FALSE(Unregister(callback_registration_)); 400 EXPECT_FALSE(Unregister(callback_registration_));
401 // Unregister should have discovered the bad backend and disabled the
402 // BackgroundSyncManager.
388 manager->set_corrupt_backend(false); 403 manager->set_corrupt_backend(false);
389 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 404 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
390 EXPECT_TRUE(callback_registration_.Equals(sync_reg_1_)); 405 EXPECT_FALSE(GetRegistration(sync_reg_2_.name));
391 } 406 }
392 407
393 TEST_F(BackgroundSyncManagerTest, RegistrationIncreasesId) { 408 TEST_F(BackgroundSyncManagerTest, RegistrationIncreasesId) {
394 EXPECT_TRUE(Register(sync_reg_1_)); 409 EXPECT_TRUE(Register(sync_reg_1_));
395 BackgroundSyncManager::BackgroundSyncRegistration registered_sync = 410 BackgroundSyncManager::BackgroundSyncRegistration registered_sync =
396 callback_registration_; 411 callback_registration_;
397 BackgroundSyncManager::BackgroundSyncRegistration::RegistrationId cur_id = 412 BackgroundSyncManager::BackgroundSyncRegistration::RegistrationId cur_id =
398 callback_registration_.id; 413 callback_registration_.id;
399 414
400 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 415 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
401 EXPECT_TRUE(Register(sync_reg_2_)); 416 EXPECT_TRUE(Register(sync_reg_2_));
402 EXPECT_LT(cur_id, callback_registration_.id); 417 EXPECT_LT(cur_id, callback_registration_.id);
403 cur_id = callback_registration_.id; 418 cur_id = callback_registration_.id;
404 419
405 EXPECT_TRUE(Unregister(registered_sync)); 420 EXPECT_TRUE(Unregister(registered_sync));
406 EXPECT_TRUE(Register(sync_reg_1_)); 421 EXPECT_TRUE(Register(sync_reg_1_));
407 EXPECT_LT(cur_id, callback_registration_.id); 422 EXPECT_LT(cur_id, callback_registration_.id);
408 } 423 }
409 424
410 TEST_F(BackgroundSyncManagerTest, RebootRecovery) { 425 TEST_F(BackgroundSyncManagerTest, RebootRecovery) {
411 EXPECT_TRUE(Register(sync_reg_1_)); 426 EXPECT_TRUE(Register(sync_reg_1_));
412 427
413 background_sync_manager_ = 428 background_sync_manager_ =
414 BackgroundSyncManager::Create(service_worker_context_); 429 BackgroundSyncManager::Create(helper_->context_wrapper());
415 430
416 EXPECT_TRUE(GetRegistration(sync_reg_1_.name)); 431 EXPECT_TRUE(GetRegistration(sync_reg_1_.name));
417 EXPECT_FALSE(GetRegistration(sync_reg_2_.name)); 432 EXPECT_FALSE(GetRegistration(sync_reg_2_.name));
418 } 433 }
419 434
420 TEST_F(BackgroundSyncManagerTest, RebootRecoveryTwoServiceWorkers) { 435 TEST_F(BackgroundSyncManagerTest, RebootRecoveryTwoServiceWorkers) {
421 EXPECT_TRUE(RegisterWithServiceWorkerId(kServiceWorkerId1, sync_reg_1_)); 436 EXPECT_TRUE(RegisterWithServiceWorkerId(sw_registration_id_1_, sync_reg_1_));
422 EXPECT_TRUE(RegisterWithServiceWorkerId(kServiceWorkerId2, sync_reg_2_)); 437 EXPECT_TRUE(RegisterWithServiceWorkerId(sw_registration_id_2_, sync_reg_2_));
423 438
424 background_sync_manager_ = 439 background_sync_manager_ =
425 BackgroundSyncManager::Create(service_worker_context_); 440 BackgroundSyncManager::Create(helper_->context_wrapper());
426 441
427 EXPECT_TRUE( 442 EXPECT_TRUE(GetRegistrationWithServiceWorkerId(sw_registration_id_1_,
428 GetRegistrationWithServiceWorkerId(kServiceWorkerId1, sync_reg_1_.name)); 443 sync_reg_1_.name));
429 EXPECT_FALSE( 444 EXPECT_FALSE(GetRegistrationWithServiceWorkerId(sw_registration_id_1_,
430 GetRegistrationWithServiceWorkerId(kServiceWorkerId1, sync_reg_2_.name)); 445 sync_reg_2_.name));
431 EXPECT_FALSE( 446 EXPECT_FALSE(GetRegistrationWithServiceWorkerId(sw_registration_id_2_,
432 GetRegistrationWithServiceWorkerId(kServiceWorkerId2, sync_reg_1_.name)); 447 sync_reg_1_.name));
433 EXPECT_TRUE( 448 EXPECT_TRUE(GetRegistrationWithServiceWorkerId(sw_registration_id_2_,
434 GetRegistrationWithServiceWorkerId(kServiceWorkerId2, sync_reg_2_.name)); 449 sync_reg_2_.name));
435 450
436 EXPECT_TRUE( 451 EXPECT_TRUE(GetRegistrationWithServiceWorkerId(sw_registration_id_1_,
437 GetRegistrationWithServiceWorkerId(kServiceWorkerId1, sync_reg_1_.name)); 452 sync_reg_1_.name));
438 EXPECT_TRUE( 453 EXPECT_TRUE(GetRegistrationWithServiceWorkerId(sw_registration_id_2_,
439 GetRegistrationWithServiceWorkerId(kServiceWorkerId2, sync_reg_2_.name)); 454 sync_reg_2_.name));
440 455
441 EXPECT_TRUE(RegisterWithServiceWorkerId(kServiceWorkerId1, sync_reg_2_)); 456 EXPECT_TRUE(RegisterWithServiceWorkerId(sw_registration_id_1_, sync_reg_2_));
442 EXPECT_TRUE(RegisterWithServiceWorkerId(kServiceWorkerId2, sync_reg_1_)); 457 EXPECT_TRUE(RegisterWithServiceWorkerId(sw_registration_id_2_, sync_reg_1_));
443 } 458 }
444 459
445 TEST_F(BackgroundSyncManagerTest, InitWithCorruptBackend) { 460 TEST_F(BackgroundSyncManagerTest, InitWithBadBackend) {
446 TestBackgroundSyncManager* manager = 461 TestBackgroundSyncManager* manager =
447 new TestBackgroundSyncManager(service_worker_context_); 462 new TestBackgroundSyncManager(helper_->context_wrapper());
448 background_sync_manager_.reset(manager); 463 background_sync_manager_.reset(manager);
449 manager->set_corrupt_backend(true); 464 manager->set_corrupt_backend(true);
450 manager->DoInit(); 465 manager->DoInit();
451 466
452 EXPECT_FALSE(Register(sync_reg_1_)); 467 EXPECT_FALSE(Register(sync_reg_1_));
453 EXPECT_FALSE(GetRegistration(sync_reg_1_.name)); 468 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
454 } 469 }
455 470
456 TEST_F(BackgroundSyncManagerTest, SequentialOperations) { 471 TEST_F(BackgroundSyncManagerTest, SequentialOperations) {
457 // Schedule Init and all of the operations on a delayed backend. Verify that 472 // Schedule Init and all of the operations on a delayed backend. Verify that
458 // the operations complete sequentially. 473 // the operations complete sequentially.
459 TestBackgroundSyncManager* manager = 474 TestBackgroundSyncManager* manager =
460 new TestBackgroundSyncManager(service_worker_context_); 475 new TestBackgroundSyncManager(helper_->context_wrapper());
461 background_sync_manager_.reset(manager); 476 background_sync_manager_.reset(manager);
462 manager->set_delay_backend(true); 477 manager->set_delay_backend(true);
463 manager->DoInit(); 478 manager->DoInit();
464 479
465 const int64 kExpectedInitialId = 480 const int64 kExpectedInitialId =
466 BackgroundSyncManager::BackgroundSyncRegistrations::kInitialId; 481 BackgroundSyncManager::BackgroundSyncRegistrations::kInitialId;
467 482
468 bool register_called = false; 483 bool register_called = false;
469 bool unregister_called = false; 484 bool unregister_called = false;
470 bool get_registration_called = false; 485 bool get_registration_called = false;
471 manager->Register( 486 manager->Register(
472 origin_, kServiceWorkerId1, sync_reg_1_, 487 GURL(kOrigin), sw_registration_id_1_, sync_reg_1_,
473 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, 488 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
474 base::Unretained(this), &register_called)); 489 base::Unretained(this), &register_called));
475 manager->Unregister(origin_, kServiceWorkerId1, sync_reg_1_.name, 490 manager->Unregister(GURL(kOrigin), sw_registration_id_1_, sync_reg_1_.name,
476 kExpectedInitialId, 491 kExpectedInitialId,
477 base::Bind(&BackgroundSyncManagerTest::StatusCallback, 492 base::Bind(&BackgroundSyncManagerTest::StatusCallback,
478 base::Unretained(this), &unregister_called)); 493 base::Unretained(this), &unregister_called));
479 manager->GetRegistration( 494 manager->GetRegistration(
480 origin_, kServiceWorkerId1, sync_reg_1_.name, 495 GURL(kOrigin), sw_registration_id_1_, sync_reg_1_.name,
481 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, 496 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
482 base::Unretained(this), &get_registration_called)); 497 base::Unretained(this), &get_registration_called));
483 498
484 base::RunLoop().RunUntilIdle(); 499 base::RunLoop().RunUntilIdle();
485 // Init should be blocked while loading from the backend. 500 // Init should be blocked while loading from the backend.
486 EXPECT_FALSE(register_called); 501 EXPECT_FALSE(register_called);
487 EXPECT_FALSE(unregister_called); 502 EXPECT_FALSE(unregister_called);
488 EXPECT_FALSE(get_registration_called); 503 EXPECT_FALSE(get_registration_called);
489 504
490 manager->Continue(); 505 manager->Continue();
(...skipping 14 matching lines...) Expand all
505 520
506 manager->Continue(); 521 manager->Continue();
507 base::RunLoop().RunUntilIdle(); 522 base::RunLoop().RunUntilIdle();
508 // Unregister should be done and since GetRegistration doesn't require the 523 // Unregister should be done and since GetRegistration doesn't require the
509 // backend it should be done too. 524 // backend it should be done too.
510 EXPECT_EQ(BackgroundSyncManager::ERROR_TYPE_NOT_FOUND, callback_error_); 525 EXPECT_EQ(BackgroundSyncManager::ERROR_TYPE_NOT_FOUND, callback_error_);
511 EXPECT_TRUE(unregister_called); 526 EXPECT_TRUE(unregister_called);
512 EXPECT_TRUE(get_registration_called); 527 EXPECT_TRUE(get_registration_called);
513 } 528 }
514 529
530 TEST_F(BackgroundSyncManagerTest, UnregisterServiceWorker) {
531 EXPECT_TRUE(Register(sync_reg_1_));
532 UnregisterServiceWorker(sw_registration_id_1_);
533 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
534 }
535
536 TEST_F(BackgroundSyncManagerTest,
537 UnregisterServiceWorkerDuringSyncRegistration) {
538 TestBackgroundSyncManager* manager =
539 new TestBackgroundSyncManager(helper_->context_wrapper());
540 background_sync_manager_.reset(manager);
541 manager->DoInit();
542
543 EXPECT_TRUE(Register(sync_reg_1_));
544
545 manager->set_delay_backend(true);
546 bool register_called = false;
michaeln 2015/04/02 23:06:20 nit: maybe callback_called to match callback_error
jkarlin 2015/04/03 15:15:04 Done.
547 manager->Register(
548 GURL(kOrigin), sw_registration_id_1_, sync_reg_2_,
549 base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback,
550 base::Unretained(this), &register_called));
551
552 base::RunLoop().RunUntilIdle();
553 EXPECT_FALSE(register_called);
554 UnregisterServiceWorker(sw_registration_id_1_);
555
556 manager->Continue();
557 base::RunLoop().RunUntilIdle();
558 EXPECT_TRUE(register_called);
559 EXPECT_EQ(BackgroundSyncManager::ERROR_TYPE_STORAGE, callback_error_);
560
561 manager->set_delay_backend(false);
562 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
563 }
564
565 TEST_F(BackgroundSyncManagerTest, DeleteAndStartOverServiceWorkerContext) {
566 EXPECT_TRUE(Register(sync_reg_1_));
567 helper_->context()->ScheduleDeleteAndStartOver();
568 base::RunLoop().RunUntilIdle();
569 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
570 }
571
572 TEST_F(BackgroundSyncManagerTest, DisabledManagerWorksAfterBrowserRestart) {
573 TestBackgroundSyncManager* manager =
574 new TestBackgroundSyncManager(helper_->context_wrapper());
575 background_sync_manager_.reset(manager);
576 manager->DoInit();
577 EXPECT_TRUE(Register(sync_reg_1_));
578 manager->set_corrupt_backend(true);
579 EXPECT_FALSE(Register(sync_reg_2_));
580
581 // The manager is now disabled and not accepting new requests until browser
582 // restart or notification that the storage has been wiped.
583 manager->set_corrupt_backend(false);
584 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
585 EXPECT_FALSE(Register(sync_reg_2_));
586
587 background_sync_manager_.reset(
588 new TestBackgroundSyncManager(helper_->context_wrapper()));
michaeln 2015/04/02 23:06:20 A comment about this emulating the restart case wo
jkarlin 2015/04/03 15:15:04 Sorry about that. Done.
589 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
590 EXPECT_TRUE(Register(sync_reg_1_));
591 }
592
593 TEST_F(BackgroundSyncManagerTest, DisabledManagerWorksAfterDeleteAndStartOver) {
594 TestBackgroundSyncManager* manager =
595 new TestBackgroundSyncManager(helper_->context_wrapper());
596 background_sync_manager_.reset(manager);
597 manager->DoInit();
598 EXPECT_TRUE(Register(sync_reg_1_));
599 manager->set_corrupt_backend(true);
600 EXPECT_FALSE(Register(sync_reg_2_));
601
602 // The manager is now disabled and not accepting new requests until browser
603 // restart or notification that the storage has been wiped.
604 manager->set_corrupt_backend(false);
605 helper_->context()->ScheduleDeleteAndStartOver();
606 base::RunLoop().RunUntilIdle();
607
608 bool called = false;
609 helper_->context()->RegisterServiceWorker(
610 GURL(kPattern1), GURL(kScript1), NULL,
611 base::Bind(&RegisterServiceWorkerCallback, &called,
612 &sw_registration_id_1_));
613 base::RunLoop().RunUntilIdle();
614 EXPECT_TRUE(called);
615
616 EXPECT_TRUE(Register(sync_reg_2_));
617 EXPECT_FALSE(GetRegistration(sync_reg_1_.name));
618 EXPECT_TRUE(GetRegistration(sync_reg_2_.name));
619 }
620
515 } // namespace content 621 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698