OLD | NEW |
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" |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 std::vector<ServiceWorkerRemoteProviderEndpoint> remote_endpoints_; | 176 std::vector<ServiceWorkerRemoteProviderEndpoint> remote_endpoints_; |
177 }; | 177 }; |
178 | 178 |
179 scoped_refptr<ServiceWorkerRegistration> ServiceWorkerJobTest::RunRegisterJob( | 179 scoped_refptr<ServiceWorkerRegistration> ServiceWorkerJobTest::RunRegisterJob( |
180 const GURL& pattern, | 180 const GURL& pattern, |
181 const GURL& script_url, | 181 const GURL& script_url, |
182 ServiceWorkerStatusCode expected_status) { | 182 ServiceWorkerStatusCode expected_status) { |
183 scoped_refptr<ServiceWorkerRegistration> registration; | 183 scoped_refptr<ServiceWorkerRegistration> registration; |
184 bool called; | 184 bool called; |
185 job_coordinator()->Register( | 185 job_coordinator()->Register( |
186 pattern, script_url, NULL, | 186 script_url, ServiceWorkerRegistrationOptions(pattern), NULL, |
187 SaveRegistration(expected_status, &called, ®istration)); | 187 SaveRegistration(expected_status, &called, ®istration)); |
188 EXPECT_FALSE(called); | 188 EXPECT_FALSE(called); |
189 base::RunLoop().RunUntilIdle(); | 189 base::RunLoop().RunUntilIdle(); |
190 EXPECT_TRUE(called); | 190 EXPECT_TRUE(called); |
191 return registration; | 191 return registration; |
192 } | 192 } |
193 | 193 |
194 void ServiceWorkerJobTest::RunUnregisterJob( | 194 void ServiceWorkerJobTest::RunUnregisterJob( |
195 const GURL& pattern, | 195 const GURL& pattern, |
196 ServiceWorkerStatusCode expected_status) { | 196 ServiceWorkerStatusCode expected_status) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 base::RunLoop().RunUntilIdle(); | 270 base::RunLoop().RunUntilIdle(); |
271 EXPECT_TRUE(called); | 271 EXPECT_TRUE(called); |
272 ASSERT_EQ(registration1, original_registration); | 272 ASSERT_EQ(registration1, original_registration); |
273 ASSERT_EQ(registration1, registration2); | 273 ASSERT_EQ(registration1, registration2); |
274 } | 274 } |
275 | 275 |
276 TEST_F(ServiceWorkerJobTest, DifferentMatchDifferentRegistration) { | 276 TEST_F(ServiceWorkerJobTest, DifferentMatchDifferentRegistration) { |
277 bool called1; | 277 bool called1; |
278 scoped_refptr<ServiceWorkerRegistration> original_registration1; | 278 scoped_refptr<ServiceWorkerRegistration> original_registration1; |
279 job_coordinator()->Register( | 279 job_coordinator()->Register( |
280 GURL("http://www.example.com/one/"), | |
281 GURL("http://www.example.com/service_worker.js"), | 280 GURL("http://www.example.com/service_worker.js"), |
| 281 ServiceWorkerRegistrationOptions(GURL("http://www.example.com/one/")), |
282 NULL, | 282 NULL, |
283 SaveRegistration(SERVICE_WORKER_OK, &called1, &original_registration1)); | 283 SaveRegistration(SERVICE_WORKER_OK, &called1, &original_registration1)); |
284 | 284 |
285 bool called2; | 285 bool called2; |
286 scoped_refptr<ServiceWorkerRegistration> original_registration2; | 286 scoped_refptr<ServiceWorkerRegistration> original_registration2; |
287 job_coordinator()->Register( | 287 job_coordinator()->Register( |
288 GURL("http://www.example.com/two/"), | |
289 GURL("http://www.example.com/service_worker.js"), | 288 GURL("http://www.example.com/service_worker.js"), |
| 289 ServiceWorkerRegistrationOptions(GURL("http://www.example.com/two/")), |
290 NULL, | 290 NULL, |
291 SaveRegistration(SERVICE_WORKER_OK, &called2, &original_registration2)); | 291 SaveRegistration(SERVICE_WORKER_OK, &called2, &original_registration2)); |
292 | 292 |
293 EXPECT_FALSE(called1); | 293 EXPECT_FALSE(called1); |
294 EXPECT_FALSE(called2); | 294 EXPECT_FALSE(called2); |
295 base::RunLoop().RunUntilIdle(); | 295 base::RunLoop().RunUntilIdle(); |
296 EXPECT_TRUE(called2); | 296 EXPECT_TRUE(called2); |
297 EXPECT_TRUE(called1); | 297 EXPECT_TRUE(called1); |
298 | 298 |
299 scoped_refptr<ServiceWorkerRegistration> registration1; | 299 scoped_refptr<ServiceWorkerRegistration> registration1; |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 | 461 |
462 // Register and then unregister the pattern, in parallel. Job coordinator should | 462 // Register and then unregister the pattern, in parallel. Job coordinator should |
463 // process jobs until the last job. | 463 // process jobs until the last job. |
464 TEST_F(ServiceWorkerJobTest, ParallelRegUnreg) { | 464 TEST_F(ServiceWorkerJobTest, ParallelRegUnreg) { |
465 GURL pattern("http://www.example.com/"); | 465 GURL pattern("http://www.example.com/"); |
466 GURL script_url("http://www.example.com/service_worker.js"); | 466 GURL script_url("http://www.example.com/service_worker.js"); |
467 | 467 |
468 bool registration_called = false; | 468 bool registration_called = false; |
469 scoped_refptr<ServiceWorkerRegistration> registration; | 469 scoped_refptr<ServiceWorkerRegistration> registration; |
470 job_coordinator()->Register( | 470 job_coordinator()->Register( |
471 pattern, | 471 script_url, ServiceWorkerRegistrationOptions(pattern), NULL, |
472 script_url, | |
473 NULL, | |
474 SaveRegistration(SERVICE_WORKER_OK, ®istration_called, ®istration)); | 472 SaveRegistration(SERVICE_WORKER_OK, ®istration_called, ®istration)); |
475 | 473 |
476 bool unregistration_called = false; | 474 bool unregistration_called = false; |
477 job_coordinator()->Unregister( | 475 job_coordinator()->Unregister( |
478 pattern, | 476 pattern, |
479 SaveUnregistration(SERVICE_WORKER_OK, &unregistration_called)); | 477 SaveUnregistration(SERVICE_WORKER_OK, &unregistration_called)); |
480 | 478 |
481 ASSERT_FALSE(registration_called); | 479 ASSERT_FALSE(registration_called); |
482 ASSERT_FALSE(unregistration_called); | 480 ASSERT_FALSE(unregistration_called); |
483 base::RunLoop().RunUntilIdle(); | 481 base::RunLoop().RunUntilIdle(); |
484 ASSERT_TRUE(registration_called); | 482 ASSERT_TRUE(registration_called); |
485 ASSERT_TRUE(unregistration_called); | 483 ASSERT_TRUE(unregistration_called); |
486 | 484 |
487 registration = FindRegistrationForPattern(pattern, | 485 registration = FindRegistrationForPattern(pattern, |
488 SERVICE_WORKER_ERROR_NOT_FOUND); | 486 SERVICE_WORKER_ERROR_NOT_FOUND); |
489 | 487 |
490 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration); | 488 ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(), registration); |
491 } | 489 } |
492 | 490 |
493 // Register conflicting scripts for the same pattern. The most recent | 491 // Register conflicting scripts for the same pattern. The most recent |
494 // registration should win, and the old registration should have been | 492 // registration should win, and the old registration should have been |
495 // shutdown. | 493 // shutdown. |
496 TEST_F(ServiceWorkerJobTest, ParallelRegNewScript) { | 494 TEST_F(ServiceWorkerJobTest, ParallelRegNewScript) { |
497 GURL pattern("http://www.example.com/"); | 495 GURL pattern("http://www.example.com/"); |
498 | 496 |
499 GURL script_url1("http://www.example.com/service_worker1.js"); | 497 GURL script_url1("http://www.example.com/service_worker1.js"); |
500 bool registration1_called = false; | 498 bool registration1_called = false; |
501 scoped_refptr<ServiceWorkerRegistration> registration1; | 499 scoped_refptr<ServiceWorkerRegistration> registration1; |
502 job_coordinator()->Register( | 500 job_coordinator()->Register( |
503 pattern, | 501 script_url1, ServiceWorkerRegistrationOptions(pattern), NULL, |
504 script_url1, | 502 SaveRegistration(SERVICE_WORKER_OK, ®istration1_called, |
505 NULL, | 503 ®istration1)); |
506 SaveRegistration( | |
507 SERVICE_WORKER_OK, ®istration1_called, ®istration1)); | |
508 | 504 |
509 GURL script_url2("http://www.example.com/service_worker2.js"); | 505 GURL script_url2("http://www.example.com/service_worker2.js"); |
510 bool registration2_called = false; | 506 bool registration2_called = false; |
511 scoped_refptr<ServiceWorkerRegistration> registration2; | 507 scoped_refptr<ServiceWorkerRegistration> registration2; |
512 job_coordinator()->Register( | 508 job_coordinator()->Register( |
513 pattern, | 509 script_url2, ServiceWorkerRegistrationOptions(pattern), NULL, |
514 script_url2, | 510 SaveRegistration(SERVICE_WORKER_OK, ®istration2_called, |
515 NULL, | 511 ®istration2)); |
516 SaveRegistration( | |
517 SERVICE_WORKER_OK, ®istration2_called, ®istration2)); | |
518 | 512 |
519 ASSERT_FALSE(registration1_called); | 513 ASSERT_FALSE(registration1_called); |
520 ASSERT_FALSE(registration2_called); | 514 ASSERT_FALSE(registration2_called); |
521 base::RunLoop().RunUntilIdle(); | 515 base::RunLoop().RunUntilIdle(); |
522 ASSERT_TRUE(registration1_called); | 516 ASSERT_TRUE(registration1_called); |
523 ASSERT_TRUE(registration2_called); | 517 ASSERT_TRUE(registration2_called); |
524 | 518 |
525 scoped_refptr<ServiceWorkerRegistration> registration = | 519 scoped_refptr<ServiceWorkerRegistration> registration = |
526 FindRegistrationForPattern(pattern); | 520 FindRegistrationForPattern(pattern); |
527 | 521 |
528 ASSERT_EQ(registration2, registration); | 522 ASSERT_EQ(registration2, registration); |
529 } | 523 } |
530 | 524 |
531 // Register the exact same pattern + script. Requests should be | 525 // Register the exact same pattern + script. Requests should be |
532 // coalesced such that both callers get the exact same registration | 526 // coalesced such that both callers get the exact same registration |
533 // object. | 527 // object. |
534 TEST_F(ServiceWorkerJobTest, ParallelRegSameScript) { | 528 TEST_F(ServiceWorkerJobTest, ParallelRegSameScript) { |
535 GURL pattern("http://www.example.com/"); | 529 GURL pattern("http://www.example.com/"); |
536 | 530 |
537 GURL script_url("http://www.example.com/service_worker1.js"); | 531 GURL script_url("http://www.example.com/service_worker1.js"); |
538 bool registration1_called = false; | 532 bool registration1_called = false; |
539 scoped_refptr<ServiceWorkerRegistration> registration1; | 533 scoped_refptr<ServiceWorkerRegistration> registration1; |
540 job_coordinator()->Register( | 534 job_coordinator()->Register( |
541 pattern, | 535 script_url, ServiceWorkerRegistrationOptions(pattern), NULL, |
542 script_url, | 536 SaveRegistration(SERVICE_WORKER_OK, ®istration1_called, |
543 NULL, | 537 ®istration1)); |
544 SaveRegistration( | |
545 SERVICE_WORKER_OK, ®istration1_called, ®istration1)); | |
546 | 538 |
547 bool registration2_called = false; | 539 bool registration2_called = false; |
548 scoped_refptr<ServiceWorkerRegistration> registration2; | 540 scoped_refptr<ServiceWorkerRegistration> registration2; |
549 job_coordinator()->Register( | 541 job_coordinator()->Register( |
550 pattern, | 542 script_url, ServiceWorkerRegistrationOptions(pattern), NULL, |
551 script_url, | 543 SaveRegistration(SERVICE_WORKER_OK, ®istration2_called, |
552 NULL, | 544 ®istration2)); |
553 SaveRegistration( | |
554 SERVICE_WORKER_OK, ®istration2_called, ®istration2)); | |
555 | 545 |
556 ASSERT_FALSE(registration1_called); | 546 ASSERT_FALSE(registration1_called); |
557 ASSERT_FALSE(registration2_called); | 547 ASSERT_FALSE(registration2_called); |
558 base::RunLoop().RunUntilIdle(); | 548 base::RunLoop().RunUntilIdle(); |
559 ASSERT_TRUE(registration1_called); | 549 ASSERT_TRUE(registration1_called); |
560 ASSERT_TRUE(registration2_called); | 550 ASSERT_TRUE(registration2_called); |
561 | 551 |
562 ASSERT_EQ(registration1, registration2); | 552 ASSERT_EQ(registration1, registration2); |
563 | 553 |
564 scoped_refptr<ServiceWorkerRegistration> registration = | 554 scoped_refptr<ServiceWorkerRegistration> registration = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 | 591 |
602 TEST_F(ServiceWorkerJobTest, AbortAll_Register) { | 592 TEST_F(ServiceWorkerJobTest, AbortAll_Register) { |
603 GURL pattern1("http://www1.example.com/"); | 593 GURL pattern1("http://www1.example.com/"); |
604 GURL pattern2("http://www2.example.com/"); | 594 GURL pattern2("http://www2.example.com/"); |
605 GURL script_url1("http://www1.example.com/service_worker.js"); | 595 GURL script_url1("http://www1.example.com/service_worker.js"); |
606 GURL script_url2("http://www2.example.com/service_worker.js"); | 596 GURL script_url2("http://www2.example.com/service_worker.js"); |
607 | 597 |
608 bool registration_called1 = false; | 598 bool registration_called1 = false; |
609 scoped_refptr<ServiceWorkerRegistration> registration1; | 599 scoped_refptr<ServiceWorkerRegistration> registration1; |
610 job_coordinator()->Register( | 600 job_coordinator()->Register( |
611 pattern1, | 601 script_url1, ServiceWorkerRegistrationOptions(pattern1), NULL, |
612 script_url1, | 602 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, ®istration_called1, |
613 NULL, | 603 ®istration1)); |
614 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, | |
615 ®istration_called1, ®istration1)); | |
616 | 604 |
617 bool registration_called2 = false; | 605 bool registration_called2 = false; |
618 scoped_refptr<ServiceWorkerRegistration> registration2; | 606 scoped_refptr<ServiceWorkerRegistration> registration2; |
619 job_coordinator()->Register( | 607 job_coordinator()->Register( |
620 pattern2, | 608 script_url2, ServiceWorkerRegistrationOptions(pattern2), NULL, |
621 script_url2, | 609 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, ®istration_called2, |
622 NULL, | 610 ®istration2)); |
623 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, | |
624 ®istration_called2, ®istration2)); | |
625 | 611 |
626 ASSERT_FALSE(registration_called1); | 612 ASSERT_FALSE(registration_called1); |
627 ASSERT_FALSE(registration_called2); | 613 ASSERT_FALSE(registration_called2); |
628 job_coordinator()->AbortAll(); | 614 job_coordinator()->AbortAll(); |
629 | 615 |
630 base::RunLoop().RunUntilIdle(); | 616 base::RunLoop().RunUntilIdle(); |
631 ASSERT_TRUE(registration_called1); | 617 ASSERT_TRUE(registration_called1); |
632 ASSERT_TRUE(registration_called2); | 618 ASSERT_TRUE(registration_called2); |
633 | 619 |
634 bool find_called1 = false; | 620 bool find_called1 = false; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 ASSERT_TRUE(unregistration_called2); | 662 ASSERT_TRUE(unregistration_called2); |
677 } | 663 } |
678 | 664 |
679 TEST_F(ServiceWorkerJobTest, AbortAll_RegUnreg) { | 665 TEST_F(ServiceWorkerJobTest, AbortAll_RegUnreg) { |
680 GURL pattern("http://www.example.com/"); | 666 GURL pattern("http://www.example.com/"); |
681 GURL script_url("http://www.example.com/service_worker.js"); | 667 GURL script_url("http://www.example.com/service_worker.js"); |
682 | 668 |
683 bool registration_called = false; | 669 bool registration_called = false; |
684 scoped_refptr<ServiceWorkerRegistration> registration; | 670 scoped_refptr<ServiceWorkerRegistration> registration; |
685 job_coordinator()->Register( | 671 job_coordinator()->Register( |
686 pattern, | 672 script_url, ServiceWorkerRegistrationOptions(pattern), NULL, |
687 script_url, | 673 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, ®istration_called, |
688 NULL, | 674 ®istration)); |
689 SaveRegistration(SERVICE_WORKER_ERROR_ABORT, | |
690 ®istration_called, ®istration)); | |
691 | 675 |
692 bool unregistration_called = false; | 676 bool unregistration_called = false; |
693 job_coordinator()->Unregister( | 677 job_coordinator()->Unregister( |
694 pattern, | 678 pattern, |
695 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT, | 679 SaveUnregistration(SERVICE_WORKER_ERROR_ABORT, |
696 &unregistration_called)); | 680 &unregistration_called)); |
697 | 681 |
698 ASSERT_FALSE(registration_called); | 682 ASSERT_FALSE(registration_called); |
699 ASSERT_FALSE(unregistration_called); | 683 ASSERT_FALSE(unregistration_called); |
700 job_coordinator()->AbortAll(); | 684 job_coordinator()->AbortAll(); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 | 859 |
876 void set_force_start_worker_failure(bool force_start_worker_failure) { | 860 void set_force_start_worker_failure(bool force_start_worker_failure) { |
877 force_start_worker_failure_ = force_start_worker_failure; | 861 force_start_worker_failure_ = force_start_worker_failure; |
878 } | 862 } |
879 | 863 |
880 scoped_refptr<ServiceWorkerRegistration> SetupInitialRegistration( | 864 scoped_refptr<ServiceWorkerRegistration> SetupInitialRegistration( |
881 const GURL& test_origin) { | 865 const GURL& test_origin) { |
882 scoped_refptr<ServiceWorkerRegistration> registration; | 866 scoped_refptr<ServiceWorkerRegistration> registration; |
883 bool called = false; | 867 bool called = false; |
884 job_coordinator()->Register( | 868 job_coordinator()->Register( |
885 test_origin.Resolve(kScope), | |
886 test_origin.Resolve(kScript), | 869 test_origin.Resolve(kScript), |
887 NULL, | 870 ServiceWorkerRegistrationOptions(test_origin.Resolve(kScope)), NULL, |
888 SaveRegistration(SERVICE_WORKER_OK, &called, ®istration)); | 871 SaveRegistration(SERVICE_WORKER_OK, &called, ®istration)); |
889 base::RunLoop().RunUntilIdle(); | 872 base::RunLoop().RunUntilIdle(); |
890 EXPECT_TRUE(called); | 873 EXPECT_TRUE(called); |
891 EXPECT_TRUE(registration.get()); | 874 EXPECT_TRUE(registration.get()); |
892 EXPECT_TRUE(registration->active_version()); | 875 EXPECT_TRUE(registration->active_version()); |
893 EXPECT_FALSE(registration->installing_version()); | 876 EXPECT_FALSE(registration->installing_version()); |
894 EXPECT_FALSE(registration->waiting_version()); | 877 EXPECT_FALSE(registration->waiting_version()); |
895 registration_ = registration; | 878 registration_ = registration; |
896 return registration; | 879 return registration; |
897 } | 880 } |
(...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1803 // should not be promoted to ACTIVATED because failure occur | 1786 // should not be promoted to ACTIVATED because failure occur |
1804 // during shutdown. | 1787 // during shutdown. |
1805 runner->RunPendingTasks(); | 1788 runner->RunPendingTasks(); |
1806 base::RunLoop().RunUntilIdle(); | 1789 base::RunLoop().RunUntilIdle(); |
1807 EXPECT_EQ(new_version.get(), registration->active_version()); | 1790 EXPECT_EQ(new_version.get(), registration->active_version()); |
1808 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); | 1791 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); |
1809 registration->RemoveListener(update_helper); | 1792 registration->RemoveListener(update_helper); |
1810 } | 1793 } |
1811 | 1794 |
1812 } // namespace content | 1795 } // namespace content |
OLD | NEW |