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

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

Issue 2394443002: ServiceWorker: Ensure that a resource list contains the main script (Closed)
Patch Set: fix 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/service_worker_database.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 "content/browser/service_worker/service_worker_database.h" 5 #include "content/browser/service_worker/service_worker_database.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <string> 10 #include <string>
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 VerifyRegistrationData(data4, registrations[3]); 612 VerifyRegistrationData(data4, registrations[3]);
613 } 613 }
614 614
615 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { 615 TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
616 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 616 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
617 617
618 GURL origin("http://example.com"); 618 GURL origin("http://example.com");
619 RegistrationData data; 619 RegistrationData data;
620 data.registration_id = 100; 620 data.registration_id = 100;
621 data.scope = URL(origin, "/foo"); 621 data.scope = URL(origin, "/foo");
622 data.script = URL(origin, "/script.js"); 622 data.script = URL(origin, "/resource1");
623 data.version_id = 200; 623 data.version_id = 200;
624 data.resources_total_size_bytes = 10939 + 200; 624 data.resources_total_size_bytes = 10939 + 200;
625 data.foreign_fetch_scopes.push_back(URL(origin, "/foo/bar")); 625 data.foreign_fetch_scopes.push_back(URL(origin, "/foo/bar"));
626 626
627 std::vector<Resource> resources; 627 std::vector<Resource> resources;
628 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 10939)); 628 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 10939));
629 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 200)); 629 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 200));
630 630
631 // Write a resource to the uncommitted list to make sure that writing 631 // Write a resource to the uncommitted list to make sure that writing
632 // registration removes resource ids associated with the registration from 632 // registration removes resource ids associated with the registration from
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 EXPECT_TRUE(base::ContainsKey(purgeable_ids_out, resources[1].resource_id)); 699 EXPECT_TRUE(base::ContainsKey(purgeable_ids_out, resources[1].resource_id));
700 } 700 }
701 701
702 TEST(ServiceWorkerDatabaseTest, DeleteNonExistentRegistration) { 702 TEST(ServiceWorkerDatabaseTest, DeleteNonExistentRegistration) {
703 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 703 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
704 704
705 GURL origin("http://example.com"); 705 GURL origin("http://example.com");
706 RegistrationData data; 706 RegistrationData data;
707 data.registration_id = 100; 707 data.registration_id = 100;
708 data.scope = URL(origin, "/foo"); 708 data.scope = URL(origin, "/foo");
709 data.script = URL(origin, "/script.js"); 709 data.script = URL(origin, "/resource1");
710 data.version_id = 200; 710 data.version_id = 200;
711 data.resources_total_size_bytes = 19 + 29129; 711 data.resources_total_size_bytes = 19 + 29129;
712 712
713 std::vector<Resource> resources; 713 std::vector<Resource> resources;
714 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 19)); 714 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 19));
715 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 29129)); 715 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 29129));
716 716
717 const int64_t kNonExistentRegistrationId = 999; 717 const int64_t kNonExistentRegistrationId = 999;
718 const int64_t kArbitraryVersionId = 222; // Used as a dummy initial value 718 const int64_t kArbitraryVersionId = 222; // Used as a dummy initial value
719 719
(...skipping 29 matching lines...) Expand all
749 EXPECT_TRUE(newly_purgeable_resources.empty()); 749 EXPECT_TRUE(newly_purgeable_resources.empty());
750 } 750 }
751 751
752 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { 752 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
753 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 753 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
754 754
755 GURL origin("http://example.com"); 755 GURL origin("http://example.com");
756 RegistrationData data; 756 RegistrationData data;
757 data.registration_id = 100; 757 data.registration_id = 100;
758 data.scope = URL(origin, "/foo"); 758 data.scope = URL(origin, "/foo");
759 data.script = URL(origin, "/script.js"); 759 data.script = URL(origin, "/resource1");
760 data.version_id = 200; 760 data.version_id = 200;
761 data.resources_total_size_bytes = 10 + 11; 761 data.resources_total_size_bytes = 10 + 11;
762 data.foreign_fetch_scopes.push_back(URL(origin, "/foo")); 762 data.foreign_fetch_scopes.push_back(URL(origin, "/foo"));
763 data.foreign_fetch_origins.push_back( 763 data.foreign_fetch_origins.push_back(
764 url::Origin(GURL("https://chromium.org"))); 764 url::Origin(GURL("https://chromium.org")));
765 765
766 std::vector<Resource> resources1; 766 std::vector<Resource> resources1;
767 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10)); 767 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10));
768 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11)); 768 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11));
769 769
(...skipping 11 matching lines...) Expand all
781 // Make sure that the registration and resource records are stored. 781 // Make sure that the registration and resource records are stored.
782 RegistrationData data_out; 782 RegistrationData data_out;
783 std::vector<Resource> resources_out; 783 std::vector<Resource> resources_out;
784 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 784 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
785 data.registration_id, origin, &data_out, &resources_out)); 785 data.registration_id, origin, &data_out, &resources_out));
786 VerifyRegistrationData(data, data_out); 786 VerifyRegistrationData(data, data_out);
787 VerifyResourceRecords(resources1, resources_out); 787 VerifyResourceRecords(resources1, resources_out);
788 788
789 // Update the registration. 789 // Update the registration.
790 RegistrationData updated_data = data; 790 RegistrationData updated_data = data;
791 updated_data.script = URL(origin, "/resource3");
791 updated_data.version_id = data.version_id + 1; 792 updated_data.version_id = data.version_id + 1;
792 updated_data.resources_total_size_bytes = 12 + 13; 793 updated_data.resources_total_size_bytes = 12 + 13;
793 updated_data.foreign_fetch_scopes.clear(); 794 updated_data.foreign_fetch_scopes.clear();
794 updated_data.foreign_fetch_origins.push_back( 795 updated_data.foreign_fetch_origins.push_back(
795 url::Origin(GURL("https://example.com"))); 796 url::Origin(GURL("https://example.com")));
796 std::vector<Resource> resources2; 797 std::vector<Resource> resources2;
797 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12)); 798 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12));
798 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13)); 799 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13));
799 800
800 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 801 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
(...skipping 26 matching lines...) Expand all
827 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 828 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
828 GURL origin("http://example.com"); 829 GURL origin("http://example.com");
829 830
830 ServiceWorkerDatabase::RegistrationData deleted_version; 831 ServiceWorkerDatabase::RegistrationData deleted_version;
831 std::vector<int64_t> newly_purgeable_resources; 832 std::vector<int64_t> newly_purgeable_resources;
832 833
833 // Add registration1. 834 // Add registration1.
834 RegistrationData data1; 835 RegistrationData data1;
835 data1.registration_id = 100; 836 data1.registration_id = 100;
836 data1.scope = URL(origin, "/foo"); 837 data1.scope = URL(origin, "/foo");
837 data1.script = URL(origin, "/script1.js"); 838 data1.script = URL(origin, "/resource1");
838 data1.version_id = 200; 839 data1.version_id = 200;
839 data1.resources_total_size_bytes = 1451 + 15234; 840 data1.resources_total_size_bytes = 1451 + 15234;
840 841
841 std::vector<Resource> resources1; 842 std::vector<Resource> resources1;
842 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 1451)); 843 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 1451));
843 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 15234)); 844 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 15234));
844 EXPECT_EQ( 845 EXPECT_EQ(
845 ServiceWorkerDatabase::STATUS_OK, 846 ServiceWorkerDatabase::STATUS_OK,
846 database->WriteRegistration( 847 database->WriteRegistration(
847 data1, resources1, &deleted_version, &newly_purgeable_resources)); 848 data1, resources1, &deleted_version, &newly_purgeable_resources));
848 849
849 // Add registration2. 850 // Add registration2.
850 RegistrationData data2; 851 RegistrationData data2;
851 data2.registration_id = 101; 852 data2.registration_id = 101;
852 data2.scope = URL(origin, "/bar"); 853 data2.scope = URL(origin, "/bar");
853 data2.script = URL(origin, "/script2.js"); 854 data2.script = URL(origin, "/resource3");
854 data2.version_id = 201; 855 data2.version_id = 201;
855 data2.resources_total_size_bytes = 5 + 6; 856 data2.resources_total_size_bytes = 5 + 6;
856 857
857 std::vector<Resource> resources2; 858 std::vector<Resource> resources2;
858 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 5)); 859 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 5));
859 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 6)); 860 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 6));
860 EXPECT_EQ( 861 EXPECT_EQ(
861 ServiceWorkerDatabase::STATUS_OK, 862 ServiceWorkerDatabase::STATUS_OK,
862 database->WriteRegistration( 863 database->WriteRegistration(
863 data2, resources2, &deleted_version, &newly_purgeable_resources)); 864 data2, resources2, &deleted_version, &newly_purgeable_resources));
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 std::vector<int64_t> newly_purgeable_resources; 1481 std::vector<int64_t> newly_purgeable_resources;
1481 1482
1482 // Data associated with |origin1| will be removed. 1483 // Data associated with |origin1| will be removed.
1483 GURL origin1("http://example.com"); 1484 GURL origin1("http://example.com");
1484 GURL origin2("http://example.org"); 1485 GURL origin2("http://example.org");
1485 1486
1486 // |origin1| has two registrations (registration1 and registration2). 1487 // |origin1| has two registrations (registration1 and registration2).
1487 RegistrationData data1; 1488 RegistrationData data1;
1488 data1.registration_id = 10; 1489 data1.registration_id = 10;
1489 data1.scope = URL(origin1, "/foo"); 1490 data1.scope = URL(origin1, "/foo");
1490 data1.script = URL(origin1, "/script1.js"); 1491 data1.script = URL(origin1, "/resource1");
1491 data1.version_id = 100; 1492 data1.version_id = 100;
1492 data1.resources_total_size_bytes = 2013 + 512; 1493 data1.resources_total_size_bytes = 2013 + 512;
1493 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff")); 1494 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff"));
1494 1495
1495 std::vector<Resource> resources1; 1496 std::vector<Resource> resources1;
1496 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); 1497 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013));
1497 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); 1498 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512));
1498 ASSERT_EQ( 1499 ASSERT_EQ(
1499 ServiceWorkerDatabase::STATUS_OK, 1500 ServiceWorkerDatabase::STATUS_OK,
1500 database->WriteRegistration( 1501 database->WriteRegistration(
1501 data1, resources1, &deleted_version, &newly_purgeable_resources)); 1502 data1, resources1, &deleted_version, &newly_purgeable_resources));
1502 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 1503 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
1503 database->WriteUserData(data1.registration_id, origin1, 1504 database->WriteUserData(data1.registration_id, origin1,
1504 {{"key1", "data1"}})); 1505 {{"key1", "data1"}}));
1505 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 1506 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
1506 database->WriteUserData(data1.registration_id, origin1, 1507 database->WriteUserData(data1.registration_id, origin1,
1507 {{"key2", "data2"}})); 1508 {{"key2", "data2"}}));
1508 1509
1509 RegistrationData data2; 1510 RegistrationData data2;
1510 data2.registration_id = 11; 1511 data2.registration_id = 11;
1511 data2.scope = URL(origin1, "/bar"); 1512 data2.scope = URL(origin1, "/bar");
1512 data2.script = URL(origin1, "/script2.js"); 1513 data2.script = URL(origin1, "/resource3");
1513 data2.version_id = 101; 1514 data2.version_id = 101;
1514 data2.resources_total_size_bytes = 4 + 5; 1515 data2.resources_total_size_bytes = 4 + 5;
1515 1516
1516 std::vector<Resource> resources2; 1517 std::vector<Resource> resources2;
1517 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4)); 1518 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4));
1518 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5)); 1519 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5));
1519 ASSERT_EQ( 1520 ASSERT_EQ(
1520 ServiceWorkerDatabase::STATUS_OK, 1521 ServiceWorkerDatabase::STATUS_OK,
1521 database->WriteRegistration( 1522 database->WriteRegistration(
1522 data2, resources2, &deleted_version, &newly_purgeable_resources)); 1523 data2, resources2, &deleted_version, &newly_purgeable_resources));
1523 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 1524 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
1524 database->WriteUserData(data2.registration_id, origin1, 1525 database->WriteUserData(data2.registration_id, origin1,
1525 {{"key3", "data3"}})); 1526 {{"key3", "data3"}}));
1526 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 1527 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
1527 database->WriteUserData(data2.registration_id, origin1, 1528 database->WriteUserData(data2.registration_id, origin1,
1528 {{"key4", "data4"}})); 1529 {{"key4", "data4"}}));
1529 1530
1530 // |origin2| has one registration (registration3). 1531 // |origin2| has one registration (registration3).
1531 RegistrationData data3; 1532 RegistrationData data3;
1532 data3.registration_id = 12; 1533 data3.registration_id = 12;
1533 data3.scope = URL(origin2, "/hoge"); 1534 data3.scope = URL(origin2, "/hoge");
1534 data3.script = URL(origin2, "/script3.js"); 1535 data3.script = URL(origin2, "/resource5");
1535 data3.version_id = 102; 1536 data3.version_id = 102;
1536 data3.resources_total_size_bytes = 6 + 7; 1537 data3.resources_total_size_bytes = 6 + 7;
1537 data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff")); 1538 data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff"));
1538 1539
1539 std::vector<Resource> resources3; 1540 std::vector<Resource> resources3;
1540 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); 1541 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6));
1541 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); 1542 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7));
1542 ASSERT_EQ( 1543 ASSERT_EQ(
1543 ServiceWorkerDatabase::STATUS_OK, 1544 ServiceWorkerDatabase::STATUS_OK,
1544 database->WriteRegistration( 1545 database->WriteRegistration(
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
1773 database->WriteRegistration(updated_data1, updated_resources1, 1774 database->WriteRegistration(updated_data1, updated_resources1,
1774 &deleted_version, 1775 &deleted_version,
1775 &newly_purgeable_resources)); 1776 &newly_purgeable_resources));
1776 1777
1777 origins.clear(); 1778 origins.clear();
1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 1779 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); 1780 database->GetOriginsWithForeignFetchRegistrations(&origins));
1780 EXPECT_EQ(0U, origins.size()); 1781 EXPECT_EQ(0U, origins.size());
1781 } 1782 }
1782 1783
1784 TEST(ServiceWorkerDatabaseTest, Corruption_NoMainResource) {
1785 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
1786 ServiceWorkerDatabase::RegistrationData deleted_version;
1787 std::vector<int64_t> newly_purgeable_resources;
1788
1789 GURL origin("http://example.com");
1790
1791 RegistrationData data;
1792 data.registration_id = 10;
1793 data.scope = URL(origin, "/foo");
1794 data.script = URL(origin, "/resource1");
1795 data.version_id = 100;
1796 data.resources_total_size_bytes = 2016;
1797
1798 // Simulate that "/resource1" wasn't correctly written in the database.
1799 std::vector<Resource> resources;
1800 resources.push_back(CreateResource(2, URL(origin, "/resource1"), 2016));
falken 2016/10/05 01:35:59 How does this simulate failure? Should it be "/res
nhiroki 2016/10/05 02:11:48 Oops! This is wrong and must be "resource2". Fixed
1801
1802 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
1803 database->WriteRegistration(data, resources, &deleted_version,
1804 &newly_purgeable_resources));
1805
1806 // The database should detect lack of the main resource (i.e. "/resource1").
1807 RegistrationData data_out;
1808 std::vector<Resource> resources_out;
1809 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED,
1810 database->ReadRegistration(data.registration_id, origin, &data_out,
1811 &resources_out));
1812 EXPECT_TRUE(resources_out.empty());
1813 }
1814
1783 } // namespace content 1815 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_database.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698