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

Unified Diff: content/browser/service_worker/service_worker_database_unittest.cc

Issue 1411953002: Store foreign fetch scopes in database with other SW information. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@foreign-fetch-interface
Patch Set: address nhiroki's comments Created 5 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 side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « content/browser/service_worker/service_worker_database.proto ('k') | content/browser/service_worker/service_worker_storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698