| Index: content/browser/service_worker/service_worker_database_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_database_unittest.cc b/content/browser/service_worker/service_worker_database_unittest.cc
|
| index b63b2ac7cf0611dee3275ccf2959a2cb315a28ca..7b1525d5e0889f6e539403a7db5338a137505478 100644
|
| --- a/content/browser/service_worker/service_worker_database_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_database_unittest.cc
|
| @@ -63,6 +63,7 @@ void VerifyRegistrationData(const RegistrationData& expected,
|
| EXPECT_EQ(expected.last_update_check, actual.last_update_check);
|
| EXPECT_EQ(expected.resources_total_size_bytes,
|
| actual.resources_total_size_bytes);
|
| + EXPECT_EQ(expected.foreign_fetch_scopes, actual.foreign_fetch_scopes);
|
| }
|
|
|
| void VerifyResourceRecords(const std::vector<Resource>& expected,
|
| @@ -659,6 +660,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
|
| data.script = URL(origin, "/script.js");
|
| data.version_id = 200;
|
| data.resources_total_size_bytes = 10939 + 200;
|
| + data.foreign_fetch_scopes.push_back(URL(origin, "/foo/bar"));
|
|
|
| std::vector<Resource> resources;
|
| resources.push_back(CreateResource(1, URL(origin, "/resource1"), 10939));
|
| @@ -795,6 +797,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
|
| data.script = URL(origin, "/script.js");
|
| data.version_id = 200;
|
| data.resources_total_size_bytes = 10 + 11;
|
| + data.foreign_fetch_scopes.push_back(URL(origin, "/foo"));
|
|
|
| std::vector<Resource> resources1;
|
| resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10));
|
| @@ -823,6 +826,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
|
| RegistrationData updated_data = data;
|
| updated_data.version_id = data.version_id + 1;
|
| updated_data.resources_total_size_bytes = 12 + 13;
|
| + updated_data.foreign_fetch_scopes.clear();
|
| std::vector<Resource> resources2;
|
| resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12));
|
| resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13));
|
| @@ -1465,6 +1469,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
|
| data1.script = URL(origin1, "/script1.js");
|
| data1.version_id = 100;
|
| data1.resources_total_size_bytes = 2013 + 512;
|
| + data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff"));
|
|
|
| std::vector<Resource> resources1;
|
| resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013));
|
| @@ -1512,6 +1517,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
|
| data3.script = URL(origin2, "/script3.js");
|
| data3.version_id = 102;
|
| data3.resources_total_size_bytes = 6 + 7;
|
| + data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff"));
|
|
|
| std::vector<Resource> resources3;
|
| resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6));
|
| @@ -1542,6 +1548,13 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
|
| EXPECT_EQ(1u, unique_origins.size());
|
| EXPECT_TRUE(ContainsKey(unique_origins, origin2));
|
|
|
| + // |origin1| should be removed from the foreign fetch origin list.
|
| + unique_origins.clear();
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&unique_origins));
|
| + EXPECT_EQ(1u, unique_origins.size());
|
| + EXPECT_TRUE(ContainsKey(unique_origins, origin2));
|
| +
|
| // The registrations for |origin1| should be removed.
|
| std::vector<RegistrationData> registrations;
|
| EXPECT_EQ(
|
| @@ -1614,4 +1627,140 @@ TEST(ServiceWorkerDatabaseTest, DestroyDatabase) {
|
| ASSERT_FALSE(base::DirectoryExists(database_dir.path()));
|
| }
|
|
|
| +TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + std::set<GURL> origins;
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&origins));
|
| + EXPECT_TRUE(origins.empty());
|
| +
|
| + ServiceWorkerDatabase::RegistrationData deleted_version;
|
| + std::vector<int64> newly_purgeable_resources;
|
| +
|
| + GURL origin1("http://example.com");
|
| + RegistrationData data1;
|
| + data1.registration_id = 123;
|
| + data1.scope = URL(origin1, "/foo");
|
| + data1.script = URL(origin1, "/script1.js");
|
| + data1.version_id = 456;
|
| + data1.resources_total_size_bytes = 100;
|
| + data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/bar"));
|
| + std::vector<Resource> resources1;
|
| + resources1.push_back(CreateResource(1, data1.script, 100));
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(data1, resources1, &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + GURL origin2("https://www.example.com");
|
| + RegistrationData data2;
|
| + data2.registration_id = 234;
|
| + data2.scope = URL(origin2, "/bar");
|
| + data2.script = URL(origin2, "/script2.js");
|
| + data2.version_id = 567;
|
| + data2.resources_total_size_bytes = 200;
|
| + std::vector<Resource> resources2;
|
| + resources2.push_back(CreateResource(2, data2.script, 200));
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(data2, resources2, &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + GURL origin3("https://example.org");
|
| + RegistrationData data3;
|
| + data3.registration_id = 345;
|
| + data3.scope = URL(origin3, "/hoge");
|
| + data3.script = URL(origin3, "/script3.js");
|
| + data3.version_id = 678;
|
| + data3.resources_total_size_bytes = 300;
|
| + data3.foreign_fetch_scopes.push_back(URL(origin3, "/hoge/foo"));
|
| + std::vector<Resource> resources3;
|
| + resources3.push_back(CreateResource(3, data3.script, 300));
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(data3, resources3, &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + // |origin3| has three registrations.
|
| + RegistrationData data4;
|
| + data4.registration_id = 456;
|
| + data4.scope = URL(origin3, "/fuga");
|
| + data4.script = URL(origin3, "/script4.js");
|
| + data4.version_id = 789;
|
| + data4.resources_total_size_bytes = 400;
|
| + data4.foreign_fetch_scopes.push_back(URL(origin3, "/fuga/bar"));
|
| + std::vector<Resource> resources4;
|
| + resources4.push_back(CreateResource(4, data4.script, 400));
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(data4, resources4, &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + RegistrationData data5;
|
| + data5.registration_id = 567;
|
| + data5.scope = URL(origin3, "/bla");
|
| + data5.script = URL(origin3, "/script5.js");
|
| + data5.version_id = 890;
|
| + data5.resources_total_size_bytes = 500;
|
| + std::vector<Resource> resources5;
|
| + resources5.push_back(CreateResource(5, data5.script, 500));
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(data5, resources5, &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + origins.clear();
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&origins));
|
| + EXPECT_EQ(2U, origins.size());
|
| + EXPECT_TRUE(ContainsKey(origins, origin1));
|
| + EXPECT_TRUE(ContainsKey(origins, origin3));
|
| +
|
| + // |origin3| has another registration, so should not remove it from the
|
| + // foreign fetch origin list.
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->DeleteRegistration(data4.registration_id, origin3,
|
| + &deleted_version,
|
| + &newly_purgeable_resources));
|
| + EXPECT_EQ(data4.registration_id, deleted_version.registration_id);
|
| +
|
| + origins.clear();
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&origins));
|
| + EXPECT_EQ(2U, origins.size());
|
| + EXPECT_TRUE(ContainsKey(origins, origin1));
|
| + EXPECT_TRUE(ContainsKey(origins, origin3));
|
| +
|
| + // |origin3| should be removed from the foreign fetch origin list, since its
|
| + // only remaining registration doesn't have foreign fetch scopes.
|
| + ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->DeleteRegistration(data3.registration_id, origin3,
|
| + &deleted_version,
|
| + &newly_purgeable_resources));
|
| + EXPECT_EQ(data3.registration_id, deleted_version.registration_id);
|
| +
|
| + origins.clear();
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&origins));
|
| + EXPECT_EQ(1U, origins.size());
|
| + EXPECT_TRUE(ContainsKey(origins, origin1));
|
| +
|
| + // |origin1| should be removed from the foreign fetch origin list, since we
|
| + // replace its registration with one without scopes.
|
| + RegistrationData updated_data1 = data1;
|
| + updated_data1.version_id++;
|
| + updated_data1.resources_total_size_bytes = 12 + 13;
|
| + updated_data1.foreign_fetch_scopes.clear();
|
| + std::vector<Resource> updated_resources1;
|
| + updated_resources1.push_back(
|
| + CreateResource(13, URL(origin1, "/resource3"), 12));
|
| + updated_resources1.push_back(
|
| + CreateResource(14, URL(origin1, "/resource4"), 13));
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->WriteRegistration(updated_data1, updated_resources1,
|
| + &deleted_version,
|
| + &newly_purgeable_resources));
|
| +
|
| + origins.clear();
|
| + EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
|
| + database->GetOriginsWithForeignFetchRegistrations(&origins));
|
| + EXPECT_EQ(0U, origins.size());
|
| +}
|
| +
|
| } // namespace content
|
|
|