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

Side by Side Diff: content/browser/service_worker/service_worker_job_unittest.cc

Issue 2429753003: Mojofy unittests: ServiceWorkerJobTest (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « content/browser/service_worker/embedded_worker_test_helper.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stdint.h> 5 #include <stdint.h>
6 #include <tuple> 6 #include <tuple>
7 7
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
horo 2016/10/18 11:03:53 #include "base/optional.h"
shimazu 2016/10/18 11:58:07 Done.
12 #include "base/test/test_simple_task_runner.h" 12 #include "base/test/test_simple_task_runner.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "content/browser/browser_thread_impl.h" 14 #include "content/browser/browser_thread_impl.h"
15 #include "content/browser/service_worker/embedded_worker_registry.h" 15 #include "content/browser/service_worker/embedded_worker_registry.h"
16 #include "content/browser/service_worker/embedded_worker_status.h" 16 #include "content/browser/service_worker/embedded_worker_status.h"
17 #include "content/browser/service_worker/embedded_worker_test_helper.h" 17 #include "content/browser/service_worker/embedded_worker_test_helper.h"
18 #include "content/browser/service_worker/service_worker_context_core.h" 18 #include "content/browser/service_worker/service_worker_context_core.h"
19 #include "content/browser/service_worker/service_worker_context_wrapper.h" 19 #include "content/browser/service_worker/service_worker_context_wrapper.h"
20 #include "content/browser/service_worker/service_worker_disk_cache.h" 20 #include "content/browser/service_worker/service_worker_disk_cache.h"
21 #include "content/browser/service_worker/service_worker_job_coordinator.h" 21 #include "content/browser/service_worker/service_worker_job_coordinator.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 ServiceWorkerStatusCode expected_status = SERVICE_WORKER_OK); 135 ServiceWorkerStatusCode expected_status = SERVICE_WORKER_OK);
136 scoped_refptr<ServiceWorkerRegistration> FindRegistrationForPattern( 136 scoped_refptr<ServiceWorkerRegistration> FindRegistrationForPattern(
137 const GURL& pattern, 137 const GURL& pattern,
138 ServiceWorkerStatusCode expected_status = SERVICE_WORKER_OK); 138 ServiceWorkerStatusCode expected_status = SERVICE_WORKER_OK);
139 std::unique_ptr<ServiceWorkerProviderHost> CreateControllee(); 139 std::unique_ptr<ServiceWorkerProviderHost> CreateControllee();
140 140
141 TestBrowserThreadBundle browser_thread_bundle_; 141 TestBrowserThreadBundle browser_thread_bundle_;
142 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; 142 std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
143 }; 143 };
144 144
145 class ServiceWorkerJobTestP
146 : public MojoServiceWorkerTestP<ServiceWorkerJobTest> {};
147
145 scoped_refptr<ServiceWorkerRegistration> ServiceWorkerJobTest::RunRegisterJob( 148 scoped_refptr<ServiceWorkerRegistration> ServiceWorkerJobTest::RunRegisterJob(
146 const GURL& pattern, 149 const GURL& pattern,
147 const GURL& script_url, 150 const GURL& script_url,
148 ServiceWorkerStatusCode expected_status) { 151 ServiceWorkerStatusCode expected_status) {
149 scoped_refptr<ServiceWorkerRegistration> registration; 152 scoped_refptr<ServiceWorkerRegistration> registration;
150 bool called; 153 bool called;
151 job_coordinator()->Register( 154 job_coordinator()->Register(
152 pattern, script_url, NULL, 155 pattern, script_url, NULL,
153 SaveRegistration(expected_status, &called, &registration)); 156 SaveRegistration(expected_status, &called, &registration));
154 EXPECT_FALSE(called); 157 EXPECT_FALSE(called);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 ServiceWorkerJobTest::CreateControllee() { 191 ServiceWorkerJobTest::CreateControllee() {
189 return std::unique_ptr<ServiceWorkerProviderHost>( 192 return std::unique_ptr<ServiceWorkerProviderHost>(
190 new ServiceWorkerProviderHost( 193 new ServiceWorkerProviderHost(
191 33 /* dummy render_process id */, 194 33 /* dummy render_process id */,
192 MSG_ROUTING_NONE /* render_frame_id */, 1 /* dummy provider_id */, 195 MSG_ROUTING_NONE /* render_frame_id */, 1 /* dummy provider_id */,
193 SERVICE_WORKER_PROVIDER_FOR_WINDOW, 196 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
194 ServiceWorkerProviderHost::FrameSecurityLevel::SECURE, 197 ServiceWorkerProviderHost::FrameSecurityLevel::SECURE,
195 helper_->context()->AsWeakPtr(), NULL)); 198 helper_->context()->AsWeakPtr(), NULL));
196 } 199 }
197 200
198 TEST_F(ServiceWorkerJobTest, SameDocumentSameRegistration) { 201 TEST_P(ServiceWorkerJobTestP, SameDocumentSameRegistration) {
199 scoped_refptr<ServiceWorkerRegistration> original_registration = 202 scoped_refptr<ServiceWorkerRegistration> original_registration =
200 RunRegisterJob(GURL("http://www.example.com/"), 203 RunRegisterJob(GURL("http://www.example.com/"),
201 GURL("http://www.example.com/service_worker.js")); 204 GURL("http://www.example.com/service_worker.js"));
202 bool called; 205 bool called;
203 scoped_refptr<ServiceWorkerRegistration> registration1; 206 scoped_refptr<ServiceWorkerRegistration> registration1;
204 storage()->FindRegistrationForDocument( 207 storage()->FindRegistrationForDocument(
205 GURL("http://www.example.com/"), 208 GURL("http://www.example.com/"),
206 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration1)); 209 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration1));
207 scoped_refptr<ServiceWorkerRegistration> registration2; 210 scoped_refptr<ServiceWorkerRegistration> registration2;
208 storage()->FindRegistrationForDocument( 211 storage()->FindRegistrationForDocument(
209 GURL("http://www.example.com/"), 212 GURL("http://www.example.com/"),
210 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2)); 213 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2));
211 base::RunLoop().RunUntilIdle(); 214 base::RunLoop().RunUntilIdle();
212 EXPECT_TRUE(called); 215 EXPECT_TRUE(called);
213 ASSERT_TRUE(registration1.get()); 216 ASSERT_TRUE(registration1.get());
214 ASSERT_EQ(registration1, original_registration); 217 ASSERT_EQ(registration1, original_registration);
215 ASSERT_EQ(registration1, registration2); 218 ASSERT_EQ(registration1, registration2);
216 } 219 }
217 220
218 TEST_F(ServiceWorkerJobTest, SameMatchSameRegistration) { 221 TEST_P(ServiceWorkerJobTestP, SameMatchSameRegistration) {
219 bool called; 222 bool called;
220 scoped_refptr<ServiceWorkerRegistration> original_registration = 223 scoped_refptr<ServiceWorkerRegistration> original_registration =
221 RunRegisterJob(GURL("http://www.example.com/"), 224 RunRegisterJob(GURL("http://www.example.com/"),
222 GURL("http://www.example.com/service_worker.js")); 225 GURL("http://www.example.com/service_worker.js"));
223 ASSERT_NE(static_cast<ServiceWorkerRegistration*>(NULL), 226 ASSERT_NE(static_cast<ServiceWorkerRegistration*>(NULL),
224 original_registration.get()); 227 original_registration.get());
225 228
226 scoped_refptr<ServiceWorkerRegistration> registration1; 229 scoped_refptr<ServiceWorkerRegistration> registration1;
227 storage()->FindRegistrationForDocument( 230 storage()->FindRegistrationForDocument(
228 GURL("http://www.example.com/one"), 231 GURL("http://www.example.com/one"),
229 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration1)); 232 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration1));
230 base::RunLoop().RunUntilIdle(); 233 base::RunLoop().RunUntilIdle();
231 EXPECT_TRUE(called); 234 EXPECT_TRUE(called);
232 235
233 scoped_refptr<ServiceWorkerRegistration> registration2; 236 scoped_refptr<ServiceWorkerRegistration> registration2;
234 storage()->FindRegistrationForDocument( 237 storage()->FindRegistrationForDocument(
235 GURL("http://www.example.com/two"), 238 GURL("http://www.example.com/two"),
236 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2)); 239 SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2));
237 base::RunLoop().RunUntilIdle(); 240 base::RunLoop().RunUntilIdle();
238 EXPECT_TRUE(called); 241 EXPECT_TRUE(called);
239 ASSERT_EQ(registration1, original_registration); 242 ASSERT_EQ(registration1, original_registration);
240 ASSERT_EQ(registration1, registration2); 243 ASSERT_EQ(registration1, registration2);
241 } 244 }
242 245
243 TEST_F(ServiceWorkerJobTest, DifferentMatchDifferentRegistration) { 246 TEST_P(ServiceWorkerJobTestP, DifferentMatchDifferentRegistration) {
244 bool called1; 247 bool called1;
245 scoped_refptr<ServiceWorkerRegistration> original_registration1; 248 scoped_refptr<ServiceWorkerRegistration> original_registration1;
246 job_coordinator()->Register( 249 job_coordinator()->Register(
247 GURL("http://www.example.com/one/"), 250 GURL("http://www.example.com/one/"),
248 GURL("http://www.example.com/service_worker.js"), 251 GURL("http://www.example.com/service_worker.js"),
249 NULL, 252 NULL,
250 SaveRegistration(SERVICE_WORKER_OK, &called1, &original_registration1)); 253 SaveRegistration(SERVICE_WORKER_OK, &called1, &original_registration1));
251 254
252 bool called2; 255 bool called2;
253 scoped_refptr<ServiceWorkerRegistration> original_registration2; 256 scoped_refptr<ServiceWorkerRegistration> original_registration2;
(...skipping 18 matching lines...) Expand all
272 GURL("http://www.example.com/two/"), 275 GURL("http://www.example.com/two/"),
273 SaveFoundRegistration(SERVICE_WORKER_OK, &called2, &registration2)); 276 SaveFoundRegistration(SERVICE_WORKER_OK, &called2, &registration2));
274 277
275 base::RunLoop().RunUntilIdle(); 278 base::RunLoop().RunUntilIdle();
276 EXPECT_TRUE(called2); 279 EXPECT_TRUE(called2);
277 EXPECT_TRUE(called1); 280 EXPECT_TRUE(called1);
278 ASSERT_NE(registration1, registration2); 281 ASSERT_NE(registration1, registration2);
279 } 282 }
280 283
281 // Make sure basic registration is working. 284 // Make sure basic registration is working.
282 TEST_F(ServiceWorkerJobTest, Register) { 285 TEST_P(ServiceWorkerJobTestP, Register) {
283 scoped_refptr<ServiceWorkerRegistration> registration = 286 scoped_refptr<ServiceWorkerRegistration> registration =
284 RunRegisterJob(GURL("http://www.example.com/"), 287 RunRegisterJob(GURL("http://www.example.com/"),
285 GURL("http://www.example.com/service_worker.js")); 288 GURL("http://www.example.com/service_worker.js"));
286 289
287 ASSERT_NE(scoped_refptr<ServiceWorkerRegistration>(NULL), registration); 290 ASSERT_NE(scoped_refptr<ServiceWorkerRegistration>(NULL), registration);
288 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching( 291 EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
289 ServiceWorkerMsg_InstallEvent::ID)); 292 ServiceWorkerMsg_InstallEvent::ID));
290 } 293 }
291 294
292 // Make sure registrations are cleaned up when they are unregistered. 295 // Make sure registrations are cleaned up when they are unregistered.
293 TEST_F(ServiceWorkerJobTest, Unregister) { 296 TEST_P(ServiceWorkerJobTestP, Unregister) {
294 GURL pattern("http://www.example.com/"); 297 GURL pattern("http://www.example.com/");
295 298
296 scoped_refptr<ServiceWorkerRegistration> registration = 299 scoped_refptr<ServiceWorkerRegistration> registration =
297 RunRegisterJob(pattern, GURL("http://www.example.com/service_worker.js")); 300 RunRegisterJob(pattern, GURL("http://www.example.com/service_worker.js"));
298 301
299 RunUnregisterJob(pattern); 302 RunUnregisterJob(pattern);
300 303
301 ASSERT_TRUE(registration->HasOneRef()); 304 ASSERT_TRUE(registration->HasOneRef());
302 305
303 registration = FindRegistrationForPattern(pattern, 306 registration = FindRegistrationForPattern(pattern,
304 SERVICE_WORKER_ERROR_NOT_FOUND); 307 SERVICE_WORKER_ERROR_NOT_FOUND);
305 308
306 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(NULL), registration); 309 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(NULL), registration);
307 } 310 }
308 311
309 TEST_F(ServiceWorkerJobTest, Unregister_NothingRegistered) { 312 TEST_P(ServiceWorkerJobTestP, Unregister_NothingRegistered) {
310 GURL pattern("http://www.example.com/"); 313 GURL pattern("http://www.example.com/");
311 314
312 RunUnregisterJob(pattern, SERVICE_WORKER_ERROR_NOT_FOUND); 315 RunUnregisterJob(pattern, SERVICE_WORKER_ERROR_NOT_FOUND);
313 } 316 }
314 317
315 // Make sure registering a new script creates a new version and shares an 318 // Make sure registering a new script creates a new version and shares an
316 // existing registration. 319 // existing registration.
317 TEST_F(ServiceWorkerJobTest, RegisterNewScript) { 320 TEST_P(ServiceWorkerJobTestP, RegisterNewScript) {
318 GURL pattern("http://www.example.com/"); 321 GURL pattern("http://www.example.com/");
319 322
320 scoped_refptr<ServiceWorkerRegistration> old_registration = 323 scoped_refptr<ServiceWorkerRegistration> old_registration =
321 RunRegisterJob(pattern, GURL("http://www.example.com/service_worker.js")); 324 RunRegisterJob(pattern, GURL("http://www.example.com/service_worker.js"));
322 325
323 scoped_refptr<ServiceWorkerRegistration> old_registration_by_pattern = 326 scoped_refptr<ServiceWorkerRegistration> old_registration_by_pattern =
324 FindRegistrationForPattern(pattern); 327 FindRegistrationForPattern(pattern);
325 328
326 ASSERT_EQ(old_registration, old_registration_by_pattern); 329 ASSERT_EQ(old_registration, old_registration_by_pattern);
327 old_registration_by_pattern = NULL; 330 old_registration_by_pattern = NULL;
328 331
329 scoped_refptr<ServiceWorkerRegistration> new_registration = 332 scoped_refptr<ServiceWorkerRegistration> new_registration =
330 RunRegisterJob(pattern, 333 RunRegisterJob(pattern,
331 GURL("http://www.example.com/service_worker_new.js")); 334 GURL("http://www.example.com/service_worker_new.js"));
332 335
333 ASSERT_EQ(old_registration, new_registration); 336 ASSERT_EQ(old_registration, new_registration);
334 337
335 scoped_refptr<ServiceWorkerRegistration> new_registration_by_pattern = 338 scoped_refptr<ServiceWorkerRegistration> new_registration_by_pattern =
336 FindRegistrationForPattern(pattern); 339 FindRegistrationForPattern(pattern);
337 340
338 ASSERT_EQ(new_registration, new_registration_by_pattern); 341 ASSERT_EQ(new_registration, new_registration_by_pattern);
339 } 342 }
340 343
341 // Make sure that when registering a duplicate pattern+script_url 344 // Make sure that when registering a duplicate pattern+script_url
342 // combination, that the same registration is used. 345 // combination, that the same registration is used.
343 TEST_F(ServiceWorkerJobTest, RegisterDuplicateScript) { 346 TEST_P(ServiceWorkerJobTestP, RegisterDuplicateScript) {
344 GURL pattern("http://www.example.com/"); 347 GURL pattern("http://www.example.com/");
345 GURL script_url("http://www.example.com/service_worker.js"); 348 GURL script_url("http://www.example.com/service_worker.js");
346 349
347 scoped_refptr<ServiceWorkerRegistration> old_registration = 350 scoped_refptr<ServiceWorkerRegistration> old_registration =
348 RunRegisterJob(pattern, script_url); 351 RunRegisterJob(pattern, script_url);
349 352
350 scoped_refptr<ServiceWorkerRegistration> old_registration_by_pattern = 353 scoped_refptr<ServiceWorkerRegistration> old_registration_by_pattern =
351 FindRegistrationForPattern(pattern); 354 FindRegistrationForPattern(pattern);
352 355
353 ASSERT_TRUE(old_registration_by_pattern.get()); 356 ASSERT_TRUE(old_registration_by_pattern.get());
(...skipping 18 matching lines...) Expand all
372 void OnStartWorker(int embedded_worker_id, 375 void OnStartWorker(int embedded_worker_id,
373 int64_t service_worker_version_id, 376 int64_t service_worker_version_id,
374 const GURL& scope, 377 const GURL& scope,
375 const GURL& script_url, 378 const GURL& script_url,
376 bool pause_after_download) override { 379 bool pause_after_download) override {
377 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 380 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
378 registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id); 381 registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
379 } 382 }
380 }; 383 };
381 384
382 TEST_F(ServiceWorkerJobTest, Register_FailToStartWorker) { 385 TEST_P(ServiceWorkerJobTestP, Register_FailToStartWorker) {
383 helper_.reset(new FailToStartWorkerTestHelper); 386 helper_.reset(new FailToStartWorkerTestHelper);
384 387
385 scoped_refptr<ServiceWorkerRegistration> registration = 388 scoped_refptr<ServiceWorkerRegistration> registration =
386 RunRegisterJob(GURL("http://www.example.com/"), 389 RunRegisterJob(GURL("http://www.example.com/"),
387 GURL("http://www.example.com/service_worker.js"), 390 GURL("http://www.example.com/service_worker.js"),
388 SERVICE_WORKER_ERROR_START_WORKER_FAILED); 391 SERVICE_WORKER_ERROR_START_WORKER_FAILED);
389 392
390 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(NULL), registration); 393 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(NULL), registration);
391 } 394 }
392 395
393 // Register and then unregister the pattern, in parallel. Job coordinator should 396 // Register and then unregister the pattern, in parallel. Job coordinator should
394 // process jobs until the last job. 397 // process jobs until the last job.
395 TEST_F(ServiceWorkerJobTest, ParallelRegUnreg) { 398 TEST_P(ServiceWorkerJobTestP, ParallelRegUnreg) {
396 GURL pattern("http://www.example.com/"); 399 GURL pattern("http://www.example.com/");
397 GURL script_url("http://www.example.com/service_worker.js"); 400 GURL script_url("http://www.example.com/service_worker.js");
398 401
399 bool registration_called = false; 402 bool registration_called = false;
400 scoped_refptr<ServiceWorkerRegistration> registration; 403 scoped_refptr<ServiceWorkerRegistration> registration;
401 job_coordinator()->Register( 404 job_coordinator()->Register(
402 pattern, 405 pattern,
403 script_url, 406 script_url,
404 NULL, 407 NULL,
405 SaveRegistration(SERVICE_WORKER_OK, &registration_called, &registration)); 408 SaveRegistration(SERVICE_WORKER_OK, &registration_called, &registration));
(...skipping 11 matching lines...) Expand all
417 420
418 registration = FindRegistrationForPattern(pattern, 421 registration = FindRegistrationForPattern(pattern,
419 SERVICE_WORKER_ERROR_NOT_FOUND); 422 SERVICE_WORKER_ERROR_NOT_FOUND);
420 423
421 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration); 424 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration);
422 } 425 }
423 426
424 // Register conflicting scripts for the same pattern. The most recent 427 // Register conflicting scripts for the same pattern. The most recent
425 // registration should win, and the old registration should have been 428 // registration should win, and the old registration should have been
426 // shutdown. 429 // shutdown.
427 TEST_F(ServiceWorkerJobTest, ParallelRegNewScript) { 430 TEST_P(ServiceWorkerJobTestP, ParallelRegNewScript) {
428 GURL pattern("http://www.example.com/"); 431 GURL pattern("http://www.example.com/");
429 432
430 GURL script_url1("http://www.example.com/service_worker1.js"); 433 GURL script_url1("http://www.example.com/service_worker1.js");
431 bool registration1_called = false; 434 bool registration1_called = false;
432 scoped_refptr<ServiceWorkerRegistration> registration1; 435 scoped_refptr<ServiceWorkerRegistration> registration1;
433 job_coordinator()->Register( 436 job_coordinator()->Register(
434 pattern, 437 pattern,
435 script_url1, 438 script_url1,
436 NULL, 439 NULL,
437 SaveRegistration( 440 SaveRegistration(
(...skipping 17 matching lines...) Expand all
455 458
456 scoped_refptr<ServiceWorkerRegistration> registration = 459 scoped_refptr<ServiceWorkerRegistration> registration =
457 FindRegistrationForPattern(pattern); 460 FindRegistrationForPattern(pattern);
458 461
459 ASSERT_EQ(registration2, registration); 462 ASSERT_EQ(registration2, registration);
460 } 463 }
461 464
462 // Register the exact same pattern + script. Requests should be 465 // Register the exact same pattern + script. Requests should be
463 // coalesced such that both callers get the exact same registration 466 // coalesced such that both callers get the exact same registration
464 // object. 467 // object.
465 TEST_F(ServiceWorkerJobTest, ParallelRegSameScript) { 468 TEST_P(ServiceWorkerJobTestP, ParallelRegSameScript) {
466 GURL pattern("http://www.example.com/"); 469 GURL pattern("http://www.example.com/");
467 470
468 GURL script_url("http://www.example.com/service_worker1.js"); 471 GURL script_url("http://www.example.com/service_worker1.js");
469 bool registration1_called = false; 472 bool registration1_called = false;
470 scoped_refptr<ServiceWorkerRegistration> registration1; 473 scoped_refptr<ServiceWorkerRegistration> registration1;
471 job_coordinator()->Register( 474 job_coordinator()->Register(
472 pattern, 475 pattern,
473 script_url, 476 script_url,
474 NULL, 477 NULL,
475 SaveRegistration( 478 SaveRegistration(
(...skipping 16 matching lines...) Expand all
492 495
493 ASSERT_EQ(registration1, registration2); 496 ASSERT_EQ(registration1, registration2);
494 497
495 scoped_refptr<ServiceWorkerRegistration> registration = 498 scoped_refptr<ServiceWorkerRegistration> registration =
496 FindRegistrationForPattern(pattern); 499 FindRegistrationForPattern(pattern);
497 500
498 ASSERT_EQ(registration, registration1); 501 ASSERT_EQ(registration, registration1);
499 } 502 }
500 503
501 // Call simulataneous unregister calls. 504 // Call simulataneous unregister calls.
502 TEST_F(ServiceWorkerJobTest, ParallelUnreg) { 505 TEST_P(ServiceWorkerJobTestP, ParallelUnreg) {
503 GURL pattern("http://www.example.com/"); 506 GURL pattern("http://www.example.com/");
504 507
505 GURL script_url("http://www.example.com/service_worker.js"); 508 GURL script_url("http://www.example.com/service_worker.js");
506 bool unregistration1_called = false; 509 bool unregistration1_called = false;
507 job_coordinator()->Unregister( 510 job_coordinator()->Unregister(
508 pattern, 511 pattern,
509 SaveUnregistration(SERVICE_WORKER_ERROR_NOT_FOUND, 512 SaveUnregistration(SERVICE_WORKER_ERROR_NOT_FOUND,
510 &unregistration1_called)); 513 &unregistration1_called));
511 514
512 bool unregistration2_called = false; 515 bool unregistration2_called = false;
(...skipping 10 matching lines...) Expand all
523 526
524 // There isn't really a way to test that they are being coalesced, 527 // There isn't really a way to test that they are being coalesced,
525 // but we can make sure they can exist simultaneously without 528 // but we can make sure they can exist simultaneously without
526 // crashing. 529 // crashing.
527 scoped_refptr<ServiceWorkerRegistration> registration = 530 scoped_refptr<ServiceWorkerRegistration> registration =
528 FindRegistrationForPattern(pattern, SERVICE_WORKER_ERROR_NOT_FOUND); 531 FindRegistrationForPattern(pattern, SERVICE_WORKER_ERROR_NOT_FOUND);
529 532
530 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration); 533 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration);
531 } 534 }
532 535
533 TEST_F(ServiceWorkerJobTest, AbortAll_Register) { 536 TEST_P(ServiceWorkerJobTestP, AbortAll_Register) {
534 GURL pattern1("http://www1.example.com/"); 537 GURL pattern1("http://www1.example.com/");
535 GURL pattern2("http://www2.example.com/"); 538 GURL pattern2("http://www2.example.com/");
536 GURL script_url1("http://www1.example.com/service_worker.js"); 539 GURL script_url1("http://www1.example.com/service_worker.js");
537 GURL script_url2("http://www2.example.com/service_worker.js"); 540 GURL script_url2("http://www2.example.com/service_worker.js");
538 541
539 bool registration_called1 = false; 542 bool registration_called1 = false;
540 scoped_refptr<ServiceWorkerRegistration> registration1; 543 scoped_refptr<ServiceWorkerRegistration> registration1;
541 job_coordinator()->Register( 544 job_coordinator()->Register(
542 pattern1, 545 pattern1,
543 script_url1, 546 script_url1,
(...skipping 30 matching lines...) Expand all
574 SaveFoundRegistration( 577 SaveFoundRegistration(
575 SERVICE_WORKER_ERROR_NOT_FOUND, &find_called2, &registration2)); 578 SERVICE_WORKER_ERROR_NOT_FOUND, &find_called2, &registration2));
576 579
577 base::RunLoop().RunUntilIdle(); 580 base::RunLoop().RunUntilIdle();
578 ASSERT_TRUE(find_called1); 581 ASSERT_TRUE(find_called1);
579 ASSERT_TRUE(find_called2); 582 ASSERT_TRUE(find_called2);
580 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration1); 583 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration1);
581 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration2); 584 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration2);
582 } 585 }
583 586
584 TEST_F(ServiceWorkerJobTest, AbortAll_Unregister) { 587 TEST_P(ServiceWorkerJobTestP, AbortAll_Unregister) {
585 GURL pattern1("http://www1.example.com/"); 588 GURL pattern1("http://www1.example.com/");
586 GURL pattern2("http://www2.example.com/"); 589 GURL pattern2("http://www2.example.com/");
587 590
588 bool unregistration_called1 = false; 591 bool unregistration_called1 = false;
589 scoped_refptr<ServiceWorkerRegistration> registration1; 592 scoped_refptr<ServiceWorkerRegistration> registration1;
590 job_coordinator()->Unregister( 593 job_coordinator()->Unregister(
591 pattern1, 594 pattern1,
592 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT, 595 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT,
593 &unregistration_called1)); 596 &unregistration_called1));
594 597
595 bool unregistration_called2 = false; 598 bool unregistration_called2 = false;
596 job_coordinator()->Unregister( 599 job_coordinator()->Unregister(
597 pattern2, 600 pattern2,
598 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT, 601 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT,
599 &unregistration_called2)); 602 &unregistration_called2));
600 603
601 ASSERT_FALSE(unregistration_called1); 604 ASSERT_FALSE(unregistration_called1);
602 ASSERT_FALSE(unregistration_called2); 605 ASSERT_FALSE(unregistration_called2);
603 job_coordinator()->AbortAll(); 606 job_coordinator()->AbortAll();
604 607
605 base::RunLoop().RunUntilIdle(); 608 base::RunLoop().RunUntilIdle();
606 ASSERT_TRUE(unregistration_called1); 609 ASSERT_TRUE(unregistration_called1);
607 ASSERT_TRUE(unregistration_called2); 610 ASSERT_TRUE(unregistration_called2);
608 } 611 }
609 612
610 TEST_F(ServiceWorkerJobTest, AbortAll_RegUnreg) { 613 TEST_P(ServiceWorkerJobTestP, AbortAll_RegUnreg) {
611 GURL pattern("http://www.example.com/"); 614 GURL pattern("http://www.example.com/");
612 GURL script_url("http://www.example.com/service_worker.js"); 615 GURL script_url("http://www.example.com/service_worker.js");
613 616
614 bool registration_called = false; 617 bool registration_called = false;
615 scoped_refptr<ServiceWorkerRegistration> registration; 618 scoped_refptr<ServiceWorkerRegistration> registration;
616 job_coordinator()->Register( 619 job_coordinator()->Register(
617 pattern, 620 pattern,
618 script_url, 621 script_url,
619 NULL, 622 NULL,
620 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, 623 SaveRegistration(SERVICE_WORKER_ERROR_ABORT,
(...skipping 14 matching lines...) Expand all
635 ASSERT_TRUE(unregistration_called); 638 ASSERT_TRUE(unregistration_called);
636 639
637 registration = FindRegistrationForPattern(pattern, 640 registration = FindRegistrationForPattern(pattern,
638 SERVICE_WORKER_ERROR_NOT_FOUND); 641 SERVICE_WORKER_ERROR_NOT_FOUND);
639 642
640 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration); 643 EXPECT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration);
641 } 644 }
642 645
643 // Tests that the waiting worker enters the 'redundant' state upon 646 // Tests that the waiting worker enters the 'redundant' state upon
644 // unregistration. 647 // unregistration.
645 TEST_F(ServiceWorkerJobTest, UnregisterWaitingSetsRedundant) { 648 TEST_P(ServiceWorkerJobTestP, UnregisterWaitingSetsRedundant) {
646 GURL script_url("http://www.example.com/service_worker.js"); 649 GURL script_url("http://www.example.com/service_worker.js");
647 scoped_refptr<ServiceWorkerRegistration> registration = 650 scoped_refptr<ServiceWorkerRegistration> registration =
648 RunRegisterJob(GURL("http://www.example.com/"), script_url); 651 RunRegisterJob(GURL("http://www.example.com/"), script_url);
649 ASSERT_TRUE(registration.get()); 652 ASSERT_TRUE(registration.get());
650 653
651 // Manually create the waiting worker since there is no way to become a 654 // Manually create the waiting worker since there is no way to become a
652 // waiting worker until Update is implemented. 655 // waiting worker until Update is implemented.
653 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( 656 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion(
654 registration.get(), script_url, 1L, helper_->context()->AsWeakPtr()); 657 registration.get(), script_url, 1L, helper_->context()->AsWeakPtr());
655 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 658 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
(...skipping 12 matching lines...) Expand all
668 RunUnregisterJob(GURL("http://www.example.com/")); 671 RunUnregisterJob(GURL("http://www.example.com/"));
669 672
670 // The version should be stopped since there is no controllee after 673 // The version should be stopped since there is no controllee after
671 // unregistration. 674 // unregistration.
672 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version->running_status()); 675 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version->running_status());
673 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status()); 676 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status());
674 } 677 }
675 678
676 // Tests that the active worker enters the 'redundant' state upon 679 // Tests that the active worker enters the 'redundant' state upon
677 // unregistration. 680 // unregistration.
678 TEST_F(ServiceWorkerJobTest, UnregisterActiveSetsRedundant) { 681 TEST_P(ServiceWorkerJobTestP, UnregisterActiveSetsRedundant) {
679 scoped_refptr<ServiceWorkerRegistration> registration = 682 scoped_refptr<ServiceWorkerRegistration> registration =
680 RunRegisterJob(GURL("http://www.example.com/"), 683 RunRegisterJob(GURL("http://www.example.com/"),
681 GURL("http://www.example.com/service_worker.js")); 684 GURL("http://www.example.com/service_worker.js"));
682 ASSERT_TRUE(registration.get()); 685 ASSERT_TRUE(registration.get());
683 686
684 scoped_refptr<ServiceWorkerVersion> version = registration->active_version(); 687 scoped_refptr<ServiceWorkerVersion> version = registration->active_version();
685 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version->running_status()); 688 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version->running_status());
686 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, version->status()); 689 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, version->status());
687 690
688 RunUnregisterJob(GURL("http://www.example.com/")); 691 RunUnregisterJob(GURL("http://www.example.com/"));
689 692
690 // The version should be stopped since there is no controllee after 693 // The version should be stopped since there is no controllee after
691 // unregistration. 694 // unregistration.
692 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version->running_status()); 695 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version->running_status());
693 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status()); 696 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status());
694 } 697 }
695 698
696 // Tests that the active worker enters the 'redundant' state upon 699 // Tests that the active worker enters the 'redundant' state upon
697 // unregistration. 700 // unregistration.
698 TEST_F(ServiceWorkerJobTest, 701 TEST_P(ServiceWorkerJobTestP,
699 UnregisterActiveSetsRedundant_WaitForNoControllee) { 702 UnregisterActiveSetsRedundant_WaitForNoControllee) {
700 scoped_refptr<ServiceWorkerRegistration> registration = 703 scoped_refptr<ServiceWorkerRegistration> registration =
701 RunRegisterJob(GURL("http://www.example.com/"), 704 RunRegisterJob(GURL("http://www.example.com/"),
702 GURL("http://www.example.com/service_worker.js")); 705 GURL("http://www.example.com/service_worker.js"));
703 ASSERT_TRUE(registration.get()); 706 ASSERT_TRUE(registration.get());
704 707
705 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee(); 708 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee();
706 registration->active_version()->AddControllee(host.get()); 709 registration->active_version()->AddControllee(host.get());
707 710
708 scoped_refptr<ServiceWorkerVersion> version = registration->active_version(); 711 scoped_refptr<ServiceWorkerVersion> version = registration->active_version();
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 957
955 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override { 958 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override {
956 registration_failed_ = true; 959 registration_failed_ = true;
957 } 960 }
958 961
959 bool registration_failed_ = false; 962 bool registration_failed_ = false;
960 }; 963 };
961 964
962 } // namespace 965 } // namespace
963 966
964 TEST_F(ServiceWorkerJobTest, Update_NoChange) { 967 TEST_P(ServiceWorkerJobTestP, Update_NoChange) {
965 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 968 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
966 helper_.reset(update_helper); 969 helper_.reset(update_helper);
967 scoped_refptr<ServiceWorkerRegistration> registration = 970 scoped_refptr<ServiceWorkerRegistration> registration =
968 update_helper->SetupInitialRegistration(kNoChangeOrigin); 971 update_helper->SetupInitialRegistration(kNoChangeOrigin);
969 ASSERT_TRUE(registration.get()); 972 ASSERT_TRUE(registration.get());
970 ASSERT_EQ(4u, update_helper->state_change_log_.size()); 973 ASSERT_EQ(4u, update_helper->state_change_log_.size());
971 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, 974 EXPECT_EQ(ServiceWorkerVersion::INSTALLING,
972 update_helper->state_change_log_[0].status); 975 update_helper->state_change_log_[0].status);
973 EXPECT_EQ(ServiceWorkerVersion::INSTALLED, 976 EXPECT_EQ(ServiceWorkerVersion::INSTALLED,
974 update_helper->state_change_log_[1].status); 977 update_helper->state_change_log_[1].status);
(...skipping 17 matching lines...) Expand all
992 EXPECT_FALSE(registration->waiting_version()); 995 EXPECT_FALSE(registration->waiting_version());
993 EXPECT_TRUE(update_helper->attribute_change_log_.empty()); 996 EXPECT_TRUE(update_helper->attribute_change_log_.empty());
994 ASSERT_EQ(1u, update_helper->state_change_log_.size()); 997 ASSERT_EQ(1u, update_helper->state_change_log_.size());
995 EXPECT_NE(registration->active_version()->version_id(), 998 EXPECT_NE(registration->active_version()->version_id(),
996 update_helper->state_change_log_[0].version_id); 999 update_helper->state_change_log_[0].version_id);
997 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, 1000 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT,
998 update_helper->state_change_log_[0].status); 1001 update_helper->state_change_log_[0].status);
999 EXPECT_FALSE(update_helper->update_found_); 1002 EXPECT_FALSE(update_helper->update_found_);
1000 } 1003 }
1001 1004
1002 TEST_F(ServiceWorkerJobTest, Update_BumpLastUpdateCheckTime) { 1005 TEST_P(ServiceWorkerJobTestP, Update_BumpLastUpdateCheckTime) {
1003 const base::Time kToday = base::Time::Now(); 1006 const base::Time kToday = base::Time::Now();
1004 const base::Time kYesterday = 1007 const base::Time kYesterday =
1005 kToday - base::TimeDelta::FromDays(1) - base::TimeDelta::FromHours(1); 1008 kToday - base::TimeDelta::FromDays(1) - base::TimeDelta::FromHours(1);
1006 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 1009 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
1007 helper_.reset(update_helper); 1010 helper_.reset(update_helper);
1008 scoped_refptr<ServiceWorkerRegistration> registration = 1011 scoped_refptr<ServiceWorkerRegistration> registration =
1009 update_helper->SetupInitialRegistration(kNoChangeOrigin); 1012 update_helper->SetupInitialRegistration(kNoChangeOrigin);
1010 ASSERT_TRUE(registration.get()); 1013 ASSERT_TRUE(registration.get());
1011 1014
1012 registration->AddListener(update_helper); 1015 registration->AddListener(update_helper);
(...skipping 28 matching lines...) Expand all
1041 1044
1042 // Run an update to a worker that loads successfully but fails to start up 1045 // Run an update to a worker that loads successfully but fails to start up
1043 // (script evaluation failure). The check time should be updated. 1046 // (script evaluation failure). The check time should be updated.
1044 update_helper->set_force_start_worker_failure(true); 1047 update_helper->set_force_start_worker_failure(true);
1045 registration->set_last_update_check(kYesterday); 1048 registration->set_last_update_check(kYesterday);
1046 registration->active_version()->StartUpdate(); 1049 registration->active_version()->StartUpdate();
1047 base::RunLoop().RunUntilIdle(); 1050 base::RunLoop().RunUntilIdle();
1048 EXPECT_LT(kYesterday, registration->last_update_check()); 1051 EXPECT_LT(kYesterday, registration->last_update_check());
1049 } 1052 }
1050 1053
1051 TEST_F(ServiceWorkerJobTest, Update_NewVersion) { 1054 TEST_P(ServiceWorkerJobTestP, Update_NewVersion) {
1052 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 1055 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
1053 helper_.reset(update_helper); 1056 helper_.reset(update_helper);
1054 scoped_refptr<ServiceWorkerRegistration> registration = 1057 scoped_refptr<ServiceWorkerRegistration> registration =
1055 update_helper->SetupInitialRegistration(kNewVersionOrigin); 1058 update_helper->SetupInitialRegistration(kNewVersionOrigin);
1056 ASSERT_TRUE(registration.get()); 1059 ASSERT_TRUE(registration.get());
1057 update_helper->state_change_log_.clear(); 1060 update_helper->state_change_log_.clear();
1058 1061
1059 // Run the update job. 1062 // Run the update job.
1060 registration->AddListener(update_helper); 1063 registration->AddListener(update_helper);
1061 scoped_refptr<ServiceWorkerVersion> first_version = 1064 scoped_refptr<ServiceWorkerVersion> first_version =
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 EXPECT_EQ(registration->active_version()->version_id(), 1136 EXPECT_EQ(registration->active_version()->version_id(),
1134 update_helper->state_change_log_[4].version_id); 1137 update_helper->state_change_log_[4].version_id);
1135 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, 1138 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED,
1136 update_helper->state_change_log_[4].status); 1139 update_helper->state_change_log_[4].status);
1137 1140
1138 EXPECT_TRUE(update_helper->update_found_); 1141 EXPECT_TRUE(update_helper->update_found_);
1139 } 1142 }
1140 1143
1141 // Test that the update job uses the script URL of the newest worker when the 1144 // Test that the update job uses the script URL of the newest worker when the
1142 // job starts, rather than when it is scheduled. 1145 // job starts, rather than when it is scheduled.
1143 TEST_F(ServiceWorkerJobTest, Update_ScriptUrlChanged) { 1146 TEST_P(ServiceWorkerJobTestP, Update_ScriptUrlChanged) {
1144 // Create a registration with an active version. 1147 // Create a registration with an active version.
1145 scoped_refptr<ServiceWorkerRegistration> registration = 1148 scoped_refptr<ServiceWorkerRegistration> registration =
1146 RunRegisterJob(GURL("http://www.example.com/one/"), 1149 RunRegisterJob(GURL("http://www.example.com/one/"),
1147 GURL("http://www.example.com/service_worker.js")); 1150 GURL("http://www.example.com/service_worker.js"));
1148 1151
1149 // Queue an Update. When this runs, it will use the waiting version's script. 1152 // Queue an Update. When this runs, it will use the waiting version's script.
1150 job_coordinator()->Update(registration.get(), false); 1153 job_coordinator()->Update(registration.get(), false);
1151 1154
1152 // Add a waiting version with a new script. 1155 // Add a waiting version with a new script.
1153 GURL new_script("http://www.example.com/new_worker.js"); 1156 GURL new_script("http://www.example.com/new_worker.js");
1154 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion( 1157 scoped_refptr<ServiceWorkerVersion> version = new ServiceWorkerVersion(
1155 registration.get(), new_script, 2L /* dummy version id */, 1158 registration.get(), new_script, 2L /* dummy version id */,
1156 helper_->context()->AsWeakPtr()); 1159 helper_->context()->AsWeakPtr());
1157 registration->SetWaitingVersion(version); 1160 registration->SetWaitingVersion(version);
1158 1161
1159 // Run the update job. 1162 // Run the update job.
1160 base::RunLoop().RunUntilIdle(); 1163 base::RunLoop().RunUntilIdle();
1161 1164
1162 // The update job should have created a new version with the new script, 1165 // The update job should have created a new version with the new script,
1163 // and promoted it to the active version. 1166 // and promoted it to the active version.
1164 EXPECT_EQ(new_script, registration->active_version()->script_url()); 1167 EXPECT_EQ(new_script, registration->active_version()->script_url());
1165 EXPECT_EQ(nullptr, registration->waiting_version()); 1168 EXPECT_EQ(nullptr, registration->waiting_version());
1166 EXPECT_EQ(nullptr, registration->installing_version()); 1169 EXPECT_EQ(nullptr, registration->installing_version());
1167 } 1170 }
1168 1171
1169 // Test that update succeeds if the incumbent worker was evicted 1172 // Test that update succeeds if the incumbent worker was evicted
1170 // during the update job (this can happen on disk cache failure). 1173 // during the update job (this can happen on disk cache failure).
1171 TEST_F(ServiceWorkerJobTest, Update_EvictedIncumbent) { 1174 TEST_P(ServiceWorkerJobTestP, Update_EvictedIncumbent) {
1172 EvictIncumbentVersionHelper* update_helper = new EvictIncumbentVersionHelper; 1175 EvictIncumbentVersionHelper* update_helper = new EvictIncumbentVersionHelper;
1173 helper_.reset(update_helper); 1176 helper_.reset(update_helper);
1174 scoped_refptr<ServiceWorkerRegistration> registration = 1177 scoped_refptr<ServiceWorkerRegistration> registration =
1175 update_helper->SetupInitialRegistration(kNewVersionOrigin); 1178 update_helper->SetupInitialRegistration(kNewVersionOrigin);
1176 ASSERT_TRUE(registration.get()); 1179 ASSERT_TRUE(registration.get());
1177 update_helper->state_change_log_.clear(); 1180 update_helper->state_change_log_.clear();
1178 1181
1179 // Run the update job. 1182 // Run the update job.
1180 registration->AddListener(update_helper); 1183 registration->AddListener(update_helper);
1181 scoped_refptr<ServiceWorkerVersion> first_version = 1184 scoped_refptr<ServiceWorkerVersion> first_version =
1182 registration->active_version(); 1185 registration->active_version();
1183 first_version->StartUpdate(); 1186 first_version->StartUpdate();
1184 base::RunLoop().RunUntilIdle(); 1187 base::RunLoop().RunUntilIdle();
1185 1188
1186 // Verify results. 1189 // Verify results.
1187 ASSERT_TRUE(registration->active_version()); 1190 ASSERT_TRUE(registration->active_version());
1188 EXPECT_NE(first_version.get(), registration->active_version()); 1191 EXPECT_NE(first_version.get(), registration->active_version());
1189 EXPECT_FALSE(registration->installing_version()); 1192 EXPECT_FALSE(registration->installing_version());
1190 EXPECT_FALSE(registration->waiting_version()); 1193 EXPECT_FALSE(registration->waiting_version());
1191 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, first_version->status()); 1194 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, first_version->status());
1192 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, 1195 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED,
1193 registration->active_version()->status()); 1196 registration->active_version()->status());
1194 ASSERT_EQ(4u, update_helper->attribute_change_log_.size()); 1197 ASSERT_EQ(4u, update_helper->attribute_change_log_.size());
1195 EXPECT_TRUE(update_helper->update_found_); 1198 EXPECT_TRUE(update_helper->update_found_);
1196 EXPECT_TRUE(update_helper->registration_failed_); 1199 EXPECT_TRUE(update_helper->registration_failed_);
1197 EXPECT_FALSE(registration->is_uninstalled()); 1200 EXPECT_FALSE(registration->is_uninstalled());
1198 } 1201 }
1199 1202
1200 TEST_F(ServiceWorkerJobTest, Update_UninstallingRegistration) { 1203 TEST_P(ServiceWorkerJobTestP, Update_UninstallingRegistration) {
1201 bool called; 1204 bool called;
1202 scoped_refptr<ServiceWorkerRegistration> registration = 1205 scoped_refptr<ServiceWorkerRegistration> registration =
1203 RunRegisterJob(GURL("http://www.example.com/one/"), 1206 RunRegisterJob(GURL("http://www.example.com/one/"),
1204 GURL("http://www.example.com/service_worker.js")); 1207 GURL("http://www.example.com/service_worker.js"));
1205 1208
1206 // Add a controllee and queue an unregister to force the uninstalling state. 1209 // Add a controllee and queue an unregister to force the uninstalling state.
1207 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee(); 1210 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee();
1208 ServiceWorkerVersion* active_version = registration->active_version(); 1211 ServiceWorkerVersion* active_version = registration->active_version();
1209 active_version->AddControllee(host.get()); 1212 active_version->AddControllee(host.get());
1210 job_coordinator()->Unregister(GURL("http://www.example.com/one/"), 1213 job_coordinator()->Unregister(GURL("http://www.example.com/one/"),
1211 SaveUnregistration(SERVICE_WORKER_OK, &called)); 1214 SaveUnregistration(SERVICE_WORKER_OK, &called));
1212 1215
1213 // Update should abort after it starts and sees uninstalling. 1216 // Update should abort after it starts and sees uninstalling.
1214 job_coordinator()->Update(registration.get(), false); 1217 job_coordinator()->Update(registration.get(), false);
1215 1218
1216 EXPECT_FALSE(called); 1219 EXPECT_FALSE(called);
1217 base::RunLoop().RunUntilIdle(); 1220 base::RunLoop().RunUntilIdle();
1218 EXPECT_TRUE(called); 1221 EXPECT_TRUE(called);
1219 1222
1220 // Verify the registration was not modified by the Update. 1223 // Verify the registration was not modified by the Update.
1221 EXPECT_TRUE(registration->is_uninstalling()); 1224 EXPECT_TRUE(registration->is_uninstalling());
1222 EXPECT_EQ(active_version, registration->active_version()); 1225 EXPECT_EQ(active_version, registration->active_version());
1223 EXPECT_EQ(NULL, registration->waiting_version()); 1226 EXPECT_EQ(NULL, registration->waiting_version());
1224 EXPECT_EQ(NULL, registration->installing_version()); 1227 EXPECT_EQ(NULL, registration->installing_version());
1225 } 1228 }
1226 1229
1227 TEST_F(ServiceWorkerJobTest, RegisterWhileUninstalling) { 1230 TEST_P(ServiceWorkerJobTestP, RegisterWhileUninstalling) {
1228 GURL pattern("http://www.example.com/one/"); 1231 GURL pattern("http://www.example.com/one/");
1229 GURL script1("http://www.example.com/service_worker.js"); 1232 GURL script1("http://www.example.com/service_worker.js");
1230 GURL script2("http://www.example.com/service_worker.js?new"); 1233 GURL script2("http://www.example.com/service_worker.js?new");
1231 1234
1232 scoped_refptr<ServiceWorkerRegistration> registration = 1235 scoped_refptr<ServiceWorkerRegistration> registration =
1233 RunRegisterJob(pattern, script1); 1236 RunRegisterJob(pattern, script1);
1234 scoped_refptr<base::TestSimpleTaskRunner> runner( 1237 scoped_refptr<base::TestSimpleTaskRunner> runner(
1235 new base::TestSimpleTaskRunner()); 1238 new base::TestSimpleTaskRunner());
1236 registration->SetTaskRunnerForTest(runner); 1239 registration->SetTaskRunnerForTest(runner);
1237 1240
(...skipping 30 matching lines...) Expand all
1268 EXPECT_EQ(NULL, registration->waiting_version()); 1271 EXPECT_EQ(NULL, registration->waiting_version());
1269 EXPECT_EQ(new_version, registration->active_version()); 1272 EXPECT_EQ(new_version, registration->active_version());
1270 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); 1273 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status());
1271 1274
1272 runner->RunUntilIdle(); 1275 runner->RunUntilIdle();
1273 base::RunLoop().RunUntilIdle(); 1276 base::RunLoop().RunUntilIdle();
1274 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status()); 1277 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status());
1275 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status()); 1278 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status());
1276 } 1279 }
1277 1280
1278 TEST_F(ServiceWorkerJobTest, RegisterAndUnregisterWhileUninstalling) { 1281 TEST_P(ServiceWorkerJobTestP, RegisterAndUnregisterWhileUninstalling) {
1279 GURL pattern("http://www.example.com/one/"); 1282 GURL pattern("http://www.example.com/one/");
1280 GURL script1("http://www.example.com/service_worker.js"); 1283 GURL script1("http://www.example.com/service_worker.js");
1281 GURL script2("http://www.example.com/service_worker.js?new"); 1284 GURL script2("http://www.example.com/service_worker.js?new");
1282 1285
1283 scoped_refptr<ServiceWorkerRegistration> registration = 1286 scoped_refptr<ServiceWorkerRegistration> registration =
1284 RunRegisterJob(pattern, script1); 1287 RunRegisterJob(pattern, script1);
1285 1288
1286 // Add a controllee and queue an unregister to force the uninstalling state. 1289 // Add a controllee and queue an unregister to force the uninstalling state.
1287 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee(); 1290 std::unique_ptr<ServiceWorkerProviderHost> host = CreateControllee();
1288 scoped_refptr<ServiceWorkerVersion> old_version = 1291 scoped_refptr<ServiceWorkerVersion> old_version =
(...skipping 27 matching lines...) Expand all
1316 1319
1317 EXPECT_FALSE(registration->is_uninstalling()); 1320 EXPECT_FALSE(registration->is_uninstalling());
1318 EXPECT_TRUE(registration->is_uninstalled()); 1321 EXPECT_TRUE(registration->is_uninstalled());
1319 1322
1320 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status()); 1323 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status());
1321 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status()); 1324 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status());
1322 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, new_version->running_status()); 1325 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, new_version->running_status());
1323 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, new_version->status()); 1326 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, new_version->status());
1324 } 1327 }
1325 1328
1326 TEST_F(ServiceWorkerJobTest, RegisterSameScriptMultipleTimesWhileUninstalling) { 1329 TEST_P(ServiceWorkerJobTestP,
1330 RegisterSameScriptMultipleTimesWhileUninstalling) {
1327 GURL pattern("http://www.example.com/one/"); 1331 GURL pattern("http://www.example.com/one/");
1328 GURL script1("http://www.example.com/service_worker.js"); 1332 GURL script1("http://www.example.com/service_worker.js");
1329 GURL script2("http://www.example.com/service_worker.js?new"); 1333 GURL script2("http://www.example.com/service_worker.js?new");
1330 1334
1331 scoped_refptr<ServiceWorkerRegistration> registration = 1335 scoped_refptr<ServiceWorkerRegistration> registration =
1332 RunRegisterJob(pattern, script1); 1336 RunRegisterJob(pattern, script1);
1333 scoped_refptr<base::TestSimpleTaskRunner> runner( 1337 scoped_refptr<base::TestSimpleTaskRunner> runner(
1334 new base::TestSimpleTaskRunner()); 1338 new base::TestSimpleTaskRunner());
1335 registration->SetTaskRunnerForTest(runner); 1339 registration->SetTaskRunnerForTest(runner);
1336 1340
(...skipping 30 matching lines...) Expand all
1367 EXPECT_EQ(NULL, registration->waiting_version()); 1371 EXPECT_EQ(NULL, registration->waiting_version());
1368 EXPECT_EQ(new_version, registration->active_version()); 1372 EXPECT_EQ(new_version, registration->active_version());
1369 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); 1373 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status());
1370 1374
1371 runner->RunUntilIdle(); 1375 runner->RunUntilIdle();
1372 base::RunLoop().RunUntilIdle(); 1376 base::RunLoop().RunUntilIdle();
1373 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status()); 1377 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status());
1374 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status()); 1378 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status());
1375 } 1379 }
1376 1380
1377 TEST_F(ServiceWorkerJobTest, RegisterMultipleTimesWhileUninstalling) { 1381 TEST_P(ServiceWorkerJobTestP, RegisterMultipleTimesWhileUninstalling) {
1378 GURL pattern("http://www.example.com/one/"); 1382 GURL pattern("http://www.example.com/one/");
1379 GURL script1("http://www.example.com/service_worker.js?first"); 1383 GURL script1("http://www.example.com/service_worker.js?first");
1380 GURL script2("http://www.example.com/service_worker.js?second"); 1384 GURL script2("http://www.example.com/service_worker.js?second");
1381 GURL script3("http://www.example.com/service_worker.js?third"); 1385 GURL script3("http://www.example.com/service_worker.js?third");
1382 1386
1383 scoped_refptr<ServiceWorkerRegistration> registration = 1387 scoped_refptr<ServiceWorkerRegistration> registration =
1384 RunRegisterJob(pattern, script1); 1388 RunRegisterJob(pattern, script1);
1385 scoped_refptr<base::TestSimpleTaskRunner> runner( 1389 scoped_refptr<base::TestSimpleTaskRunner> runner(
1386 new base::TestSimpleTaskRunner()); 1390 new base::TestSimpleTaskRunner());
1387 registration->SetTaskRunnerForTest(runner); 1391 registration->SetTaskRunnerForTest(runner);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 has_fetch_handler_ = has_fetch_handler; 1468 has_fetch_handler_ = has_fetch_handler;
1465 } 1469 }
1466 1470
1467 private: 1471 private:
1468 base::Closure install_callback_; 1472 base::Closure install_callback_;
1469 blink::WebServiceWorkerEventResult install_event_result_; 1473 blink::WebServiceWorkerEventResult install_event_result_;
1470 blink::WebServiceWorkerEventResult activate_event_result_; 1474 blink::WebServiceWorkerEventResult activate_event_result_;
1471 bool has_fetch_handler_ = true; 1475 bool has_fetch_handler_ = true;
1472 }; 1476 };
1473 1477
1474 TEST_F(ServiceWorkerJobTest, RemoveControlleeDuringInstall) { 1478 TEST_P(ServiceWorkerJobTestP, RemoveControlleeDuringInstall) {
1475 EventCallbackHelper* helper = new EventCallbackHelper; 1479 EventCallbackHelper* helper = new EventCallbackHelper;
1476 helper_.reset(helper); 1480 helper_.reset(helper);
1477 1481
1478 GURL pattern("http://www.example.com/one/"); 1482 GURL pattern("http://www.example.com/one/");
1479 GURL script1("http://www.example.com/service_worker.js"); 1483 GURL script1("http://www.example.com/service_worker.js");
1480 GURL script2("http://www.example.com/service_worker.js?new"); 1484 GURL script2("http://www.example.com/service_worker.js?new");
1481 1485
1482 scoped_refptr<ServiceWorkerRegistration> registration = 1486 scoped_refptr<ServiceWorkerRegistration> registration =
1483 RunRegisterJob(pattern, script1); 1487 RunRegisterJob(pattern, script1);
1484 1488
(...skipping 19 matching lines...) Expand all
1504 EXPECT_NE(old_version, new_version); 1508 EXPECT_NE(old_version, new_version);
1505 EXPECT_EQ(NULL, registration->installing_version()); 1509 EXPECT_EQ(NULL, registration->installing_version());
1506 EXPECT_EQ(NULL, registration->waiting_version()); 1510 EXPECT_EQ(NULL, registration->waiting_version());
1507 EXPECT_EQ(new_version, registration->active_version()); 1511 EXPECT_EQ(new_version, registration->active_version());
1508 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status()); 1512 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, new_version->running_status());
1509 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status()); 1513 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, new_version->status());
1510 1514
1511 EXPECT_EQ(registration, FindRegistrationForPattern(pattern)); 1515 EXPECT_EQ(registration, FindRegistrationForPattern(pattern));
1512 } 1516 }
1513 1517
1514 TEST_F(ServiceWorkerJobTest, RemoveControlleeDuringRejectedInstall) { 1518 TEST_P(ServiceWorkerJobTestP, RemoveControlleeDuringRejectedInstall) {
1515 EventCallbackHelper* helper = new EventCallbackHelper; 1519 EventCallbackHelper* helper = new EventCallbackHelper;
1516 helper_.reset(helper); 1520 helper_.reset(helper);
1517 1521
1518 GURL pattern("http://www.example.com/one/"); 1522 GURL pattern("http://www.example.com/one/");
1519 GURL script1("http://www.example.com/service_worker.js"); 1523 GURL script1("http://www.example.com/service_worker.js");
1520 GURL script2("http://www.example.com/service_worker.js?new"); 1524 GURL script2("http://www.example.com/service_worker.js?new");
1521 1525
1522 scoped_refptr<ServiceWorkerRegistration> registration = 1526 scoped_refptr<ServiceWorkerRegistration> registration =
1523 RunRegisterJob(pattern, script1); 1527 RunRegisterJob(pattern, script1);
1524 1528
(...skipping 15 matching lines...) Expand all
1540 // Verify the registration was uninstalled. 1544 // Verify the registration was uninstalled.
1541 EXPECT_FALSE(registration->is_uninstalling()); 1545 EXPECT_FALSE(registration->is_uninstalling());
1542 EXPECT_TRUE(registration->is_uninstalled()); 1546 EXPECT_TRUE(registration->is_uninstalled());
1543 1547
1544 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status()); 1548 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status());
1545 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status()); 1549 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status());
1546 1550
1547 FindRegistrationForPattern(pattern, SERVICE_WORKER_ERROR_NOT_FOUND); 1551 FindRegistrationForPattern(pattern, SERVICE_WORKER_ERROR_NOT_FOUND);
1548 } 1552 }
1549 1553
1550 TEST_F(ServiceWorkerJobTest, RemoveControlleeDuringInstall_RejectActivate) { 1554 TEST_P(ServiceWorkerJobTestP, RemoveControlleeDuringInstall_RejectActivate) {
1551 EventCallbackHelper* helper = new EventCallbackHelper; 1555 EventCallbackHelper* helper = new EventCallbackHelper;
1552 helper_.reset(helper); 1556 helper_.reset(helper);
1553 1557
1554 GURL pattern("http://www.example.com/one/"); 1558 GURL pattern("http://www.example.com/one/");
1555 GURL script1("http://www.example.com/service_worker.js"); 1559 GURL script1("http://www.example.com/service_worker.js");
1556 GURL script2("http://www.example.com/service_worker.js?new"); 1560 GURL script2("http://www.example.com/service_worker.js?new");
1557 1561
1558 scoped_refptr<ServiceWorkerRegistration> registration = 1562 scoped_refptr<ServiceWorkerRegistration> registration =
1559 RunRegisterJob(pattern, script1); 1563 RunRegisterJob(pattern, script1);
1560 1564
(...skipping 15 matching lines...) Expand all
1576 // Verify the registration remains. 1580 // Verify the registration remains.
1577 EXPECT_FALSE(registration->is_uninstalling()); 1581 EXPECT_FALSE(registration->is_uninstalling());
1578 EXPECT_FALSE(registration->is_uninstalled()); 1582 EXPECT_FALSE(registration->is_uninstalled());
1579 1583
1580 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status()); 1584 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, old_version->running_status());
1581 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status()); 1585 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, old_version->status());
1582 1586
1583 FindRegistrationForPattern(pattern, SERVICE_WORKER_OK); 1587 FindRegistrationForPattern(pattern, SERVICE_WORKER_OK);
1584 } 1588 }
1585 1589
1586 TEST_F(ServiceWorkerJobTest, HasFetchHandler) { 1590 TEST_P(ServiceWorkerJobTestP, HasFetchHandler) {
1587 EventCallbackHelper* helper = new EventCallbackHelper; 1591 EventCallbackHelper* helper = new EventCallbackHelper;
1588 helper_.reset(helper); 1592 helper_.reset(helper);
1589 1593
1590 GURL pattern("http://www.example.com/"); 1594 GURL pattern("http://www.example.com/");
1591 GURL script("http://www.example.com/service_worker.js"); 1595 GURL script("http://www.example.com/service_worker.js");
1592 scoped_refptr<ServiceWorkerRegistration> registration; 1596 scoped_refptr<ServiceWorkerRegistration> registration;
1593 1597
1594 helper->set_has_fetch_handler(true); 1598 helper->set_has_fetch_handler(true);
1595 RunRegisterJob(pattern, script); 1599 RunRegisterJob(pattern, script);
1596 registration = FindRegistrationForPattern(pattern); 1600 registration = FindRegistrationForPattern(pattern);
1597 EXPECT_EQ(ServiceWorkerVersion::FetchHandlerExistence::EXISTS, 1601 EXPECT_EQ(ServiceWorkerVersion::FetchHandlerExistence::EXISTS,
1598 registration->active_version()->fetch_handler_existence()); 1602 registration->active_version()->fetch_handler_existence());
1599 RunUnregisterJob(pattern); 1603 RunUnregisterJob(pattern);
1600 1604
1601 helper->set_has_fetch_handler(false); 1605 helper->set_has_fetch_handler(false);
1602 RunRegisterJob(pattern, script); 1606 RunRegisterJob(pattern, script);
1603 registration = FindRegistrationForPattern(pattern); 1607 registration = FindRegistrationForPattern(pattern);
1604 EXPECT_EQ(ServiceWorkerVersion::FetchHandlerExistence::DOES_NOT_EXIST, 1608 EXPECT_EQ(ServiceWorkerVersion::FetchHandlerExistence::DOES_NOT_EXIST,
1605 registration->active_version()->fetch_handler_existence()); 1609 registration->active_version()->fetch_handler_existence());
1606 RunUnregisterJob(pattern); 1610 RunUnregisterJob(pattern);
1607 } 1611 }
1608 1612
1609 TEST_F(ServiceWorkerJobTest, Update_PauseAfterDownload) { 1613 class CheckPauseAfterDownloadEmbeddedWorkerInstanceClient
1614 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient {
1615 public:
1616 explicit CheckPauseAfterDownloadEmbeddedWorkerInstanceClient(
1617 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
1618 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {}
1619 int num_of_startworker() { return num_of_startworker_; }
horo 2016/10/18 11:03:53 nit: const
shimazu 2016/10/18 11:58:07 Done.
1620 void set_next_pause_after_download(bool expectation) {
1621 next_pause_after_download_ = expectation;
1622 }
1623
1624 protected:
1625 void StartWorker(const EmbeddedWorkerStartParams& params) override {
1626 ASSERT_TRUE(next_pause_after_download_.has_value());
1627 EXPECT_EQ(next_pause_after_download_.value(), params.pause_after_download);
1628 num_of_startworker_++;
1629 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
1630 params);
1631 }
1632
1633 private:
1634 base::Optional<bool> next_pause_after_download_;
1635 int num_of_startworker_ = 0;
1636 };
horo 2016/10/18 11:03:53 nit: DISALLOW_COPY_AND_ASSIGN(CheckPauseAfterDownl
shimazu 2016/10/18 11:58:07 Done.
1637
1638 TEST_P(ServiceWorkerJobTestP, Update_PauseAfterDownload) {
1610 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 1639 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
1611 helper_.reset(update_helper); 1640 helper_.reset(update_helper);
1612 IPC::TestSink* sink = update_helper->ipc_sink(); 1641 IPC::TestSink* sink = update_helper->ipc_sink();
1642 std::vector<CheckPauseAfterDownloadEmbeddedWorkerInstanceClient*> clients = {
1643 helper_->CreateAndRegisterMockInstanceClient<
1644 CheckPauseAfterDownloadEmbeddedWorkerInstanceClient>(
1645 helper_->AsWeakPtr()),
1646 helper_->CreateAndRegisterMockInstanceClient<
1647 CheckPauseAfterDownloadEmbeddedWorkerInstanceClient>(
1648 helper_->AsWeakPtr())};
1613 1649
1614 // The initial version should not pause after download. 1650 // The initial version should not pause after download.
1651 clients[0]->set_next_pause_after_download(false);
1615 scoped_refptr<ServiceWorkerRegistration> registration = 1652 scoped_refptr<ServiceWorkerRegistration> registration =
1616 update_helper->SetupInitialRegistration(kNewVersionOrigin); 1653 update_helper->SetupInitialRegistration(kNewVersionOrigin);
1617 { 1654 if (is_mojo_enabled()) {
1655 ASSERT_EQ(1, clients[0]->num_of_startworker());
1656 } else {
1618 const IPC::Message* start_msg = 1657 const IPC::Message* start_msg =
1619 sink->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID); 1658 sink->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID);
1620 ASSERT_TRUE(start_msg); 1659 ASSERT_TRUE(start_msg);
1621 EmbeddedWorkerMsg_StartWorker::Param param; 1660 EmbeddedWorkerMsg_StartWorker::Param param;
1622 EmbeddedWorkerMsg_StartWorker::Read(start_msg, &param); 1661 EmbeddedWorkerMsg_StartWorker::Read(start_msg, &param);
1623 const EmbeddedWorkerStartParams& start_params = std::get<0>(param); 1662 const EmbeddedWorkerStartParams& start_params = std::get<0>(param);
1624 EXPECT_FALSE(start_params.pause_after_download); 1663 EXPECT_FALSE(start_params.pause_after_download);
1625 sink->ClearMessages(); 1664 sink->ClearMessages();
1626 } 1665 }
1627 1666
1628 // The updated version should pause after download. 1667 // The updated version should pause after download.
1668 clients[1]->set_next_pause_after_download(true);
1629 registration->AddListener(update_helper); 1669 registration->AddListener(update_helper);
1630 registration->active_version()->StartUpdate(); 1670 registration->active_version()->StartUpdate();
1631 base::RunLoop().RunUntilIdle(); 1671 base::RunLoop().RunUntilIdle();
1632 { 1672 if (is_mojo_enabled()) {
1673 ASSERT_EQ(1, clients[1]->num_of_startworker());
1674 } else {
1633 const IPC::Message* start_msg = 1675 const IPC::Message* start_msg =
1634 sink->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID); 1676 sink->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID);
1635 ASSERT_TRUE(start_msg); 1677 ASSERT_TRUE(start_msg);
1636 EmbeddedWorkerMsg_StartWorker::Param param; 1678 EmbeddedWorkerMsg_StartWorker::Param param;
1637 EmbeddedWorkerMsg_StartWorker::Read(start_msg, &param); 1679 EmbeddedWorkerMsg_StartWorker::Read(start_msg, &param);
1638 const EmbeddedWorkerStartParams& start_params = std::get<0>(param); 1680 const EmbeddedWorkerStartParams& start_params = std::get<0>(param);
1639 EXPECT_TRUE(start_params.pause_after_download); 1681 EXPECT_TRUE(start_params.pause_after_download);
1640 sink->ClearMessages(); 1682 sink->ClearMessages();
1641 } 1683 }
1642 } 1684 }
1643 1685
1644 // Test that activation doesn't complete if it's triggered by removing a 1686 // Test that activation doesn't complete if it's triggered by removing a
1645 // controllee and starting the worker failed due to shutdown. 1687 // controllee and starting the worker failed due to shutdown.
1646 TEST_F(ServiceWorkerJobTest, ActivateCancelsOnShutdown) { 1688 TEST_P(ServiceWorkerJobTestP, ActivateCancelsOnShutdown) {
1647 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 1689 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
1648 helper_.reset(update_helper); 1690 helper_.reset(update_helper);
1649 GURL pattern("http://www.example.com/"); 1691 GURL pattern("http://www.example.com/");
1650 GURL script("http://www.example.com/service_worker.js"); 1692 GURL script("http://www.example.com/service_worker.js");
1651 1693
1652 scoped_refptr<ServiceWorkerRegistration> registration = 1694 scoped_refptr<ServiceWorkerRegistration> registration =
1653 RunRegisterJob(pattern, script); 1695 RunRegisterJob(pattern, script);
1654 scoped_refptr<base::TestSimpleTaskRunner> runner( 1696 scoped_refptr<base::TestSimpleTaskRunner> runner(
1655 new base::TestSimpleTaskRunner()); 1697 new base::TestSimpleTaskRunner());
1656 registration->SetTaskRunnerForTest(runner); 1698 registration->SetTaskRunnerForTest(runner);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1691 // Allow the activation to continue. It will fail, and the worker 1733 // Allow the activation to continue. It will fail, and the worker
1692 // should not be promoted to ACTIVATED because failure occur 1734 // should not be promoted to ACTIVATED because failure occur
1693 // during shutdown. 1735 // during shutdown.
1694 runner->RunUntilIdle(); 1736 runner->RunUntilIdle();
1695 base::RunLoop().RunUntilIdle(); 1737 base::RunLoop().RunUntilIdle();
1696 EXPECT_EQ(new_version.get(), registration->active_version()); 1738 EXPECT_EQ(new_version.get(), registration->active_version());
1697 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); 1739 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status());
1698 registration->RemoveListener(update_helper); 1740 registration->RemoveListener(update_helper);
1699 } 1741 }
1700 1742
1743 INSTANTIATE_TEST_CASE_P(ServiceWorkerJobTest,
1744 ServiceWorkerJobTestP,
1745 ::testing::Values(false, true));
1746
1701 } // namespace content 1747 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/embedded_worker_test_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698