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 ebede138c41c6a6f9b256571c42a00dfa6f8278a..6806a8b4a1321c57586f98f8b599657ec7f59828 100644 |
--- a/content/browser/service_worker/service_worker_database_unittest.cc |
+++ b/content/browser/service_worker/service_worker_database_unittest.cc |
@@ -619,7 +619,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
RegistrationData data; |
data.registration_id = 100; |
data.scope = URL(origin, "/foo"); |
- data.script = URL(origin, "/script.js"); |
+ data.script = URL(origin, "/resource1"); |
data.version_id = 200; |
data.resources_total_size_bytes = 10939 + 200; |
data.foreign_fetch_scopes.push_back(URL(origin, "/foo/bar")); |
@@ -706,7 +706,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteNonExistentRegistration) { |
RegistrationData data; |
data.registration_id = 100; |
data.scope = URL(origin, "/foo"); |
- data.script = URL(origin, "/script.js"); |
+ data.script = URL(origin, "/resource1"); |
data.version_id = 200; |
data.resources_total_size_bytes = 19 + 29129; |
@@ -756,7 +756,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
RegistrationData data; |
data.registration_id = 100; |
data.scope = URL(origin, "/foo"); |
- data.script = URL(origin, "/script.js"); |
+ data.script = URL(origin, "/resource1"); |
data.version_id = 200; |
data.resources_total_size_bytes = 10 + 11; |
data.foreign_fetch_scopes.push_back(URL(origin, "/foo")); |
@@ -788,6 +788,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
// Update the registration. |
RegistrationData updated_data = data; |
+ updated_data.script = URL(origin, "/resource3"); |
updated_data.version_id = data.version_id + 1; |
updated_data.resources_total_size_bytes = 12 + 13; |
updated_data.foreign_fetch_scopes.clear(); |
@@ -834,7 +835,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
RegistrationData data1; |
data1.registration_id = 100; |
data1.scope = URL(origin, "/foo"); |
- data1.script = URL(origin, "/script1.js"); |
+ data1.script = URL(origin, "/resource1"); |
data1.version_id = 200; |
data1.resources_total_size_bytes = 1451 + 15234; |
@@ -850,7 +851,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
RegistrationData data2; |
data2.registration_id = 101; |
data2.scope = URL(origin, "/bar"); |
- data2.script = URL(origin, "/script2.js"); |
+ data2.script = URL(origin, "/resource3"); |
data2.version_id = 201; |
data2.resources_total_size_bytes = 5 + 6; |
@@ -1487,7 +1488,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
RegistrationData data1; |
data1.registration_id = 10; |
data1.scope = URL(origin1, "/foo"); |
- data1.script = URL(origin1, "/script1.js"); |
+ data1.script = URL(origin1, "/resource1"); |
data1.version_id = 100; |
data1.resources_total_size_bytes = 2013 + 512; |
data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff")); |
@@ -1509,7 +1510,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
RegistrationData data2; |
data2.registration_id = 11; |
data2.scope = URL(origin1, "/bar"); |
- data2.script = URL(origin1, "/script2.js"); |
+ data2.script = URL(origin1, "/resource3"); |
data2.version_id = 101; |
data2.resources_total_size_bytes = 4 + 5; |
@@ -1531,7 +1532,7 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
RegistrationData data3; |
data3.registration_id = 12; |
data3.scope = URL(origin2, "/hoge"); |
- data3.script = URL(origin2, "/script3.js"); |
+ data3.script = URL(origin2, "/resource5"); |
data3.version_id = 102; |
data3.resources_total_size_bytes = 6 + 7; |
data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff")); |
@@ -1780,4 +1781,36 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { |
EXPECT_EQ(0U, origins.size()); |
} |
+TEST(ServiceWorkerDatabaseTest, Corruption_NoMainResource) { |
+ std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
+ ServiceWorkerDatabase::RegistrationData deleted_version; |
+ std::vector<int64_t> newly_purgeable_resources; |
+ |
+ GURL origin("http://example.com"); |
+ |
+ RegistrationData data; |
+ data.registration_id = 10; |
+ data.scope = URL(origin, "/foo"); |
+ data.script = URL(origin, "/resource1"); |
+ data.version_id = 100; |
+ data.resources_total_size_bytes = 2016; |
+ |
+ // Simulate that "/resource1" wasn't correctly written in the database by not |
+ // adding it. |
+ std::vector<Resource> resources; |
+ resources.push_back(CreateResource(2, URL(origin, "/resource2"), 2016)); |
+ |
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
+ database->WriteRegistration(data, resources, &deleted_version, |
+ &newly_purgeable_resources)); |
+ |
+ // The database should detect lack of the main resource (i.e. "/resource1"). |
+ RegistrationData data_out; |
+ std::vector<Resource> resources_out; |
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, |
+ database->ReadRegistration(data.registration_id, origin, &data_out, |
+ &resources_out)); |
+ EXPECT_TRUE(resources_out.empty()); |
+} |
+ |
} // namespace content |