| 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;
|
|
|