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

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

Issue 377153003: Service Worker: set active worker to REDUNDANT when unregistered (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make setting redundant clearly the responsibility of SWStorage Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
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/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 &result)); 593 &result));
594 base::RunLoop().RunUntilIdle(); 594 base::RunLoop().RunUntilIdle();
595 ASSERT_TRUE(was_called); 595 ASSERT_TRUE(was_called);
596 EXPECT_EQ(SERVICE_WORKER_OK, result); 596 EXPECT_EQ(SERVICE_WORKER_OK, result);
597 EXPECT_EQ(2u, verify_ids.size()); 597 EXPECT_EQ(2u, verify_ids.size());
598 verify_ids.clear(); 598 verify_ids.clear();
599 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 599 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
600 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 600 storage()->database_->GetPurgeableResourceIds(&verify_ids));
601 EXPECT_TRUE(verify_ids.empty()); 601 EXPECT_TRUE(verify_ids.empty());
602 602
603 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT,
604 registration_->waiting_version()->status());
605
603 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 606 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
604 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 607 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
605 } 608 }
606 609
607 TEST_F(ServiceWorkerResourceStorageTest, DeleteRegistration_ActiveVersion) { 610 TEST_F(ServiceWorkerResourceStorageTest, DeleteRegistration_ActiveVersion) {
608 // Promote the worker to active and add a controllee. 611 // Promote the worker to active and add a controllee.
609 registration_->SetActiveVersion(registration_->waiting_version()); 612 ServiceWorkerVersion* version = registration_->waiting_version();
613 version->SetStatus(ServiceWorkerVersion::ACTIVATED);
614 registration_->SetActiveVersion(version);
610 storage()->UpdateToActiveState( 615 storage()->UpdateToActiveState(
611 registration_, base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 616 registration_, base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
612 scoped_ptr<ServiceWorkerProviderHost> host( 617 scoped_ptr<ServiceWorkerProviderHost> host(
613 new ServiceWorkerProviderHost(33 /* dummy render process id */, 618 new ServiceWorkerProviderHost(33 /* dummy render process id */,
614 1 /* dummy provider_id */, 619 1 /* dummy provider_id */,
615 context_->AsWeakPtr(), 620 context_->AsWeakPtr(),
616 NULL)); 621 NULL));
617 registration_->active_version()->AddControllee(host.get()); 622 version->AddControllee(host.get());
618 623
619 bool was_called = false; 624 bool was_called = false;
620 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; 625 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED;
621 std::set<int64> verify_ids; 626 std::set<int64> verify_ids;
622 627
623 // Deleting the registration should move the resources to the purgeable list 628 // Deleting the registration should move the resources to the purgeable list
624 // but keep them available. 629 // but keep them available.
625 storage()->DeleteRegistration( 630 storage()->DeleteRegistration(
626 registration_->id(), 631 registration_->id(),
627 scope_.GetOrigin(), 632 scope_.GetOrigin(),
628 base::Bind(&VerifyPurgeableListStatusCallback, 633 base::Bind(&VerifyPurgeableListStatusCallback,
629 base::Unretained(storage()->database_.get()), 634 base::Unretained(storage()->database_.get()),
630 &verify_ids, 635 &verify_ids,
631 &was_called, 636 &was_called,
632 &result)); 637 &result));
633 base::RunLoop().RunUntilIdle(); 638 base::RunLoop().RunUntilIdle();
634 ASSERT_TRUE(was_called); 639 ASSERT_TRUE(was_called);
635 EXPECT_EQ(SERVICE_WORKER_OK, result); 640 EXPECT_EQ(SERVICE_WORKER_OK, result);
636 EXPECT_EQ(2u, verify_ids.size()); 641 EXPECT_EQ(2u, verify_ids.size());
637 verify_ids.clear(); 642 verify_ids.clear();
638 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 643 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
639 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 644 storage()->database_->GetPurgeableResourceIds(&verify_ids));
640 EXPECT_EQ(2u, verify_ids.size()); 645 EXPECT_EQ(2u, verify_ids.size());
641 646
642 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); 647 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true));
643 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id2_, true)); 648 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id2_, true));
644 649
650 // The live version should still be activated.
651 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, version->status());
652
645 // Removing the controllee should cause the resources to be deleted. 653 // Removing the controllee should cause the resources to be deleted.
646 registration_->active_version()->RemoveControllee(host.get()); 654 version->RemoveControllee(host.get());
647 base::RunLoop().RunUntilIdle(); 655 base::RunLoop().RunUntilIdle();
648 verify_ids.clear(); 656 verify_ids.clear();
649 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 657 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
650 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 658 storage()->database_->GetPurgeableResourceIds(&verify_ids));
651 EXPECT_TRUE(verify_ids.empty()); 659 EXPECT_TRUE(verify_ids.empty());
652 660
653 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 661 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
654 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 662 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
663
664 // The live version should now be redundant.
665 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status());
655 } 666 }
656 667
657 // Android has flaky IO error: http://crbug.com/387045 668 // Android has flaky IO error: http://crbug.com/387045
658 #if defined(OS_ANDROID) 669 #if defined(OS_ANDROID)
659 #define MAYBE_CleanupOnRestart DISABLED_CleanupOnRestart 670 #define MAYBE_CleanupOnRestart DISABLED_CleanupOnRestart
660 #else 671 #else
661 #define MAYBE_CleanupOnRestart CleanupOnRestart 672 #define MAYBE_CleanupOnRestart CleanupOnRestart
662 #endif 673 #endif
663 TEST_F(ServiceWorkerResourceStorageDiskTest, MAYBE_CleanupOnRestart) { 674 TEST_F(ServiceWorkerResourceStorageDiskTest, MAYBE_CleanupOnRestart) {
664 // Promote the worker to active and add a controllee. 675 // Promote the worker to active and add a controllee.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 verify_ids.clear(); 727 verify_ids.clear();
717 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 728 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
718 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 729 storage()->database_->GetPurgeableResourceIds(&verify_ids));
719 EXPECT_TRUE(verify_ids.empty()); 730 EXPECT_TRUE(verify_ids.empty());
720 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 731 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
721 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 732 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
722 } 733 }
723 734
724 TEST_F(ServiceWorkerResourceStorageTest, UpdateRegistration) { 735 TEST_F(ServiceWorkerResourceStorageTest, UpdateRegistration) {
725 // Promote the worker to active worker and add a controllee. 736 // Promote the worker to active worker and add a controllee.
726 registration_->SetActiveVersion(registration_->waiting_version()); 737 ServiceWorkerVersion* version = registration_->waiting_version();
738 version->SetStatus(ServiceWorkerVersion::ACTIVATED);
739 registration_->SetActiveVersion(version);
727 storage()->UpdateToActiveState( 740 storage()->UpdateToActiveState(
728 registration_, base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 741 registration_, base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
729 scoped_ptr<ServiceWorkerProviderHost> host( 742 scoped_ptr<ServiceWorkerProviderHost> host(
730 new ServiceWorkerProviderHost(33 /* dummy render process id */, 743 new ServiceWorkerProviderHost(33 /* dummy render process id */,
731 1 /* dummy provider_id */, 744 1 /* dummy provider_id */,
732 context_->AsWeakPtr(), 745 context_->AsWeakPtr(),
733 NULL)); 746 NULL));
734 registration_->active_version()->AddControllee(host.get()); 747 version->AddControllee(host.get());
735 748
736 bool was_called = false; 749 bool was_called = false;
737 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; 750 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED;
738 std::set<int64> verify_ids; 751 std::set<int64> verify_ids;
739 752
740 // Make an updated registration. 753 // Make an updated registration.
741 scoped_refptr<ServiceWorkerVersion> live_version = new ServiceWorkerVersion( 754 scoped_refptr<ServiceWorkerVersion> new_version = new ServiceWorkerVersion(
742 registration_, storage()->NewVersionId(), context_ptr_); 755 registration_, storage()->NewVersionId(), context_ptr_);
743 live_version->SetStatus(ServiceWorkerVersion::NEW); 756 new_version->SetStatus(ServiceWorkerVersion::NEW);
744 registration_->SetWaitingVersion(live_version); 757 registration_->SetWaitingVersion(new_version);
745 758
746 // Writing the registration should move the old version's resources to the 759 // Writing the registration should move the old version's resources to the
747 // purgeable list but keep them available. 760 // purgeable list but keep them available.
748 storage()->StoreRegistration( 761 storage()->StoreRegistration(
749 registration_, 762 registration_,
750 registration_->waiting_version(), 763 registration_->waiting_version(),
751 base::Bind(&VerifyPurgeableListStatusCallback, 764 base::Bind(&VerifyPurgeableListStatusCallback,
752 base::Unretained(storage()->database_.get()), 765 base::Unretained(storage()->database_.get()),
753 &verify_ids, 766 &verify_ids,
754 &was_called, 767 &was_called,
755 &result)); 768 &result));
756 base::RunLoop().RunUntilIdle(); 769 base::RunLoop().RunUntilIdle();
757 ASSERT_TRUE(was_called); 770 ASSERT_TRUE(was_called);
758 EXPECT_EQ(SERVICE_WORKER_OK, result); 771 EXPECT_EQ(SERVICE_WORKER_OK, result);
759 EXPECT_EQ(2u, verify_ids.size()); 772 EXPECT_EQ(2u, verify_ids.size());
760 verify_ids.clear(); 773 verify_ids.clear();
761 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 774 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
762 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 775 storage()->database_->GetPurgeableResourceIds(&verify_ids));
763 EXPECT_EQ(2u, verify_ids.size()); 776 EXPECT_EQ(2u, verify_ids.size());
764 777
765 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, false)); 778 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, false));
766 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id2_, false)); 779 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id2_, false));
767 780
781 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, version->status());
782
768 // Removing the controllee should cause the old version's resources to be 783 // Removing the controllee should cause the old version's resources to be
769 // deleted. 784 // deleted.
770 registration_->active_version()->RemoveControllee(host.get()); 785 version->RemoveControllee(host.get());
771 base::RunLoop().RunUntilIdle(); 786 base::RunLoop().RunUntilIdle();
772 verify_ids.clear(); 787 verify_ids.clear();
773 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 788 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
774 storage()->database_->GetPurgeableResourceIds(&verify_ids)); 789 storage()->database_->GetPurgeableResourceIds(&verify_ids));
775 EXPECT_TRUE(verify_ids.empty()); 790 EXPECT_TRUE(verify_ids.empty());
776 791
777 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false)); 792 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id1_, false));
778 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false)); 793 EXPECT_FALSE(VerifyBasicResponse(storage(), resource_id2_, false));
794
795 EXPECT_EQ(ServiceWorkerVersion::REDUNDANT, version->status());
779 } 796 }
780 797
781 TEST_F(ServiceWorkerStorageTest, FindRegistration_LongestScopeMatch) { 798 TEST_F(ServiceWorkerStorageTest, FindRegistration_LongestScopeMatch) {
782 const GURL kDocumentUrl("http://www.example.com/scope/foo"); 799 const GURL kDocumentUrl("http://www.example.com/scope/foo");
783 scoped_refptr<ServiceWorkerRegistration> found_registration; 800 scoped_refptr<ServiceWorkerRegistration> found_registration;
784 801
785 // Registration for "/scope/*". 802 // Registration for "/scope/*".
786 const GURL kScope1("http://www.example.com/scope/*"); 803 const GURL kScope1("http://www.example.com/scope/*");
787 const GURL kScript1("http://www.example.com/script1.js"); 804 const GURL kScript1("http://www.example.com/script1.js");
788 const int64 kRegistrationId1 = 1; 805 const int64 kRegistrationId1 = 1;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 storage()->NotifyDoneInstallingRegistration( 868 storage()->NotifyDoneInstallingRegistration(
852 live_registration3, NULL, SERVICE_WORKER_OK); 869 live_registration3, NULL, SERVICE_WORKER_OK);
853 870
854 // Find a registration among installed ones. 871 // Find a registration among installed ones.
855 EXPECT_EQ(SERVICE_WORKER_OK, 872 EXPECT_EQ(SERVICE_WORKER_OK,
856 FindRegistrationForDocument(kDocumentUrl, &found_registration)); 873 FindRegistrationForDocument(kDocumentUrl, &found_registration));
857 EXPECT_EQ(live_registration2, found_registration); 874 EXPECT_EQ(live_registration2, found_registration);
858 } 875 }
859 876
860 } // namespace content 877 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698