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" | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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), ®ister_called)); | 489 base::Unretained(this), ®ister_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 Loading... | |
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), ®ister_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 |
OLD | NEW |