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 aa2cea29383f3824a113ab8f46f380c35c7945f8..0fe8c4b4afc7f2b352c68b2f1b7ed70d04afd649 100644 |
--- a/content/browser/service_worker/service_worker_database_unittest.cc |
+++ b/content/browser/service_worker/service_worker_database_unittest.cc |
@@ -118,9 +118,11 @@ TEST(ServiceWorkerDatabaseTest, DatabaseVersion) { |
// First writing triggers database initialization and bumps the schema |
// version. |
std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
+ std::vector<int64> newly_purgeable_resources; |
ServiceWorkerDatabase::RegistrationData data; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data, resources)); |
+ database->WriteRegistration(data, resources, |
+ &newly_purgeable_resources)); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
database->ReadDatabaseVersion(&db_version)); |
@@ -153,12 +155,14 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
// Writing a registration bumps the next available ids. |
std::vector<Resource> resources; |
RegistrationData data1; |
+ std::vector<int64> newly_purgeable_resources; |
data1.registration_id = 100; |
data1.scope = URL(origin, "/foo"); |
data1.script = URL(origin, "/script1.js"); |
data1.version_id = 200; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources)); |
+ database->WriteRegistration(data1, resources, |
+ &newly_purgeable_resources)); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( |
&ids.reg_id, &ids.ver_id, &ids.res_id)); |
@@ -174,7 +178,8 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
data2.script = URL(origin, "/script2.js"); |
data2.version_id = 20; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources)); |
+ database->WriteRegistration(data2, resources, |
+ &newly_purgeable_resources)); |
// Close and reopen the database to verify the stored values. |
database.reset(CreateDatabase(database_dir.path())); |
@@ -195,6 +200,7 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
EXPECT_TRUE(origins.empty()); |
std::vector<Resource> resources; |
+ std::vector<int64> newly_purgeable_resources; |
GURL origin1("http://example.com"); |
RegistrationData data1; |
@@ -203,7 +209,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
data1.script = URL(origin1, "/script1.js"); |
data1.version_id = 456; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources)); |
+ database->WriteRegistration(data1, resources, |
+ &newly_purgeable_resources)); |
GURL origin2("https://www.example.com"); |
RegistrationData data2; |
@@ -212,7 +219,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
data2.script = URL(origin2, "/script2.js"); |
data2.version_id = 567; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources)); |
+ database->WriteRegistration(data2, resources, |
+ &newly_purgeable_resources)); |
GURL origin3("https://example.org"); |
RegistrationData data3; |
@@ -221,7 +229,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
data3.script = URL(origin3, "/script3.js"); |
data3.version_id = 678; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data3, resources)); |
+ database->WriteRegistration(data3, resources, |
+ &newly_purgeable_resources)); |
// |origin3| has two registrations. |
RegistrationData data4; |
@@ -230,7 +239,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
data4.script = URL(origin3, "/script4.js"); |
data4.version_id = 789; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data4, resources)); |
+ database->WriteRegistration(data4, resources, |
+ &newly_purgeable_resources)); |
origins.clear(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
@@ -243,7 +253,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
// |origin3| has another registration, so should not remove it from the |
// unique origin list. |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data4.registration_id, origin3)); |
+ database->DeleteRegistration(data4.registration_id, origin3, |
+ &newly_purgeable_resources)); |
origins.clear(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
@@ -255,7 +266,8 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
// |origin3| should be removed from the unique origin list. |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data3.registration_id, origin3)); |
+ database->DeleteRegistration(data3.registration_id, origin3, |
+ &newly_purgeable_resources)); |
origins.clear(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
@@ -278,6 +290,7 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
EXPECT_TRUE(registrations.empty()); |
std::vector<Resource> resources; |
+ std::vector<int64> newly_purgeable_resources; |
RegistrationData data1; |
data1.registration_id = 100; |
@@ -285,7 +298,8 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
data1.script = URL(origin1, "/script1.js"); |
data1.version_id = 1000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources)); |
+ database->WriteRegistration(data1, resources, |
+ &newly_purgeable_resources)); |
RegistrationData data2; |
data2.registration_id = 200; |
@@ -293,7 +307,8 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
data2.script = URL(origin2, "/script2.js"); |
data2.version_id = 2000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources)); |
+ database->WriteRegistration(data2, resources, |
+ &newly_purgeable_resources)); |
RegistrationData data3; |
data3.registration_id = 300; |
@@ -301,7 +316,8 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
data3.script = URL(origin3, "/script3.js"); |
data3.version_id = 3000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data3, resources)); |
+ database->WriteRegistration(data3, resources, |
+ &newly_purgeable_resources)); |
// |origin3| has two registrations. |
RegistrationData data4; |
@@ -310,7 +326,8 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
data4.script = URL(origin3, "/script4.js"); |
data4.version_id = 4000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data4, resources)); |
+ database->WriteRegistration(data4, resources, |
+ &newly_purgeable_resources)); |
registrations.clear(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
@@ -329,6 +346,7 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
EXPECT_TRUE(registrations.empty()); |
std::vector<Resource> resources; |
+ std::vector<int64> newly_purgeable_resources; |
GURL origin1("http://www1.example.com"); |
RegistrationData data1; |
@@ -337,7 +355,8 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
data1.script = URL(origin1, "/script1.js"); |
data1.version_id = 1000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources)); |
+ database->WriteRegistration(data1, resources, |
+ &newly_purgeable_resources)); |
GURL origin2("http://www2.example.com"); |
RegistrationData data2; |
@@ -346,7 +365,8 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
data2.script = URL(origin2, "/script2.js"); |
data2.version_id = 2000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources)); |
+ database->WriteRegistration(data2, resources, |
+ &newly_purgeable_resources)); |
GURL origin3("http://www3.example.com"); |
RegistrationData data3; |
@@ -355,7 +375,8 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
data3.script = URL(origin3, "/script3.js"); |
data3.version_id = 3000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data3, resources)); |
+ database->WriteRegistration(data3, resources, |
+ &newly_purgeable_resources)); |
// |origin3| has two registrations. |
RegistrationData data4; |
@@ -364,7 +385,8 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
data4.script = URL(origin3, "/script4.js"); |
data4.version_id = 4000; |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data4, resources)); |
+ database->WriteRegistration(data4, resources, |
+ &newly_purgeable_resources)); |
registrations.clear(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
@@ -402,8 +424,10 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
database->GetUncommittedResourceIds(&uncommitted_ids_out)); |
EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); |
+ std::vector<int64> newly_purgeable_resources; |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data, resources)); |
+ database->WriteRegistration(data, resources, |
+ &newly_purgeable_resources)); |
// Make sure that the registration and resource records are stored. |
RegistrationData data_out; |
@@ -421,7 +445,11 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
EXPECT_TRUE(uncommitted_ids_out.empty()); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data.registration_id, origin)); |
+ database->DeleteRegistration(data.registration_id, origin, |
+ &newly_purgeable_resources)); |
+ ASSERT_EQ(resources.size(), newly_purgeable_resources.size()); |
+ for (size_t i = 0; i < resources.size(); ++i) |
+ EXPECT_EQ(newly_purgeable_resources[i], resources[i].resource_id); |
// Make sure that the registration and resource records are gone. |
resources_out.clear(); |
@@ -452,9 +480,12 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
std::vector<Resource> resources1; |
resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); |
resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); |
+ std::vector<int64> newly_purgeable_resources; |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data, resources1)); |
+ database->WriteRegistration(data, resources1, |
+ &newly_purgeable_resources)); |
+ EXPECT_TRUE(newly_purgeable_resources.empty()); |
// Make sure that the registration and resource records are stored. |
RegistrationData data_out; |
@@ -472,7 +503,11 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(updated_data, resources2)); |
+ database->WriteRegistration(updated_data, resources2, |
+ &newly_purgeable_resources)); |
+ ASSERT_EQ(resources1.size(), newly_purgeable_resources.size()); |
+ for(size_t i = 0; i < resources1.size(); ++i) |
+ EXPECT_EQ(newly_purgeable_resources[i], resources1[i].resource_id); |
// Make sure that |updated_data| is stored and resources referred from |data| |
// is moved to the purgeable list. |
@@ -494,6 +529,8 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
GURL origin("http://example.com"); |
+ std::vector<int64> newly_purgeable_resources; |
+ |
// Add registration1. |
RegistrationData data1; |
data1.registration_id = 100; |
@@ -505,7 +542,8 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); |
resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources1)); |
+ database->WriteRegistration(data1, resources1, |
+ &newly_purgeable_resources)); |
// Add registration2. |
RegistrationData data2; |
@@ -518,7 +556,8 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); |
resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources2)); |
+ database->WriteRegistration(data2, resources2, |
+ &newly_purgeable_resources)); |
// Make sure that registration1 is stored. |
RegistrationData data_out; |
@@ -542,7 +581,8 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
// Delete registration1. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data1.registration_id, origin)); |
+ database->DeleteRegistration(data1.registration_id, origin, |
+ &newly_purgeable_resources)); |
// Make sure that registration1 is gone. |
resources_out.clear(); |
@@ -570,6 +610,8 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
GURL origin("http://example.com"); |
+ std::vector<int64> newly_purgeable_resources; |
+ |
// Should be false because a registration does not exist. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
database->UpdateVersionToActive(0, origin)); |
@@ -582,7 +624,8 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
data.version_id = 200; |
data.is_active = false; |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data, std::vector<Resource>())); |
+ database->WriteRegistration(data, std::vector<Resource>(), |
+ &newly_purgeable_resources)); |
// Make sure that the registration is stored. |
RegistrationData data_out; |
@@ -609,7 +652,8 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
// Delete the registration. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data.registration_id, origin)); |
+ database->DeleteRegistration(data.registration_id, origin, |
+ &newly_purgeable_resources)); |
// Should be false because the registration is gone. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
@@ -619,6 +663,7 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) { |
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
GURL origin("http://example.com"); |
+ std::vector<int64> newly_purgeable_resources; |
// Should be false because a registration does not exist. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
@@ -632,7 +677,8 @@ TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) { |
data.version_id = 200; |
data.last_update_check = base::Time::Now(); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data, std::vector<Resource>())); |
+ database->WriteRegistration(data, std::vector<Resource>(), |
+ &newly_purgeable_resources)); |
// Make sure that the registration is stored. |
RegistrationData data_out; |
@@ -661,7 +707,8 @@ TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) { |
// Delete the registration. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteRegistration(data.registration_id, origin)); |
+ database->DeleteRegistration(data.registration_id, origin, |
+ &newly_purgeable_resources)); |
// Should be false because the registration is gone. |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
@@ -757,6 +804,7 @@ TEST(ServiceWorkerDatabaseTest, PurgeableResourceIds) { |
TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
+ std::vector<int64> newly_purgeable_resources; |
// Data associated with |origin1| will be removed. |
GURL origin1("http://example.com"); |
@@ -773,7 +821,8 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
resources1.push_back(CreateResource(1, URL(origin1, "/resource1"))); |
resources1.push_back(CreateResource(2, URL(origin1, "/resource2"))); |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data1, resources1)); |
+ database->WriteRegistration(data1, resources1, |
+ &newly_purgeable_resources)); |
RegistrationData data2; |
data2.registration_id = 11; |
@@ -785,7 +834,8 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
resources2.push_back(CreateResource(3, URL(origin1, "/resource3"))); |
resources2.push_back(CreateResource(4, URL(origin1, "/resource4"))); |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data2, resources2)); |
+ database->WriteRegistration(data2, resources2, |
+ &newly_purgeable_resources)); |
// |origin2| has one registration. |
RegistrationData data3; |
@@ -798,10 +848,12 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { |
resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); |
resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); |
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->WriteRegistration(data3, resources3)); |
+ database->WriteRegistration(data3, resources3, |
+ &newly_purgeable_resources)); |
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
- database->DeleteAllDataForOrigin(origin1)); |
+ database->DeleteAllDataForOrigin(origin1, |
+ &newly_purgeable_resources)); |
// |origin1| should be removed from the unique origin list. |
std::set<GURL> unique_origins; |