Chromium Code Reviews| 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..0d5c3f04c41e14e1ca25366083e43aa2b1f87a10 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,35 @@ 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. |
| + std::vector<Resource> resources; |
| + 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
|
| + |
| + 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 |