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

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

Issue 355163003: Don't prematurely delete script resources when registration is deleted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: really fix win build Created 6 years, 6 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 baa2542cbc1b2d5ae272842f7e72352b86e12138..0d506b4920b6da8948ec2352e276ccaefb179d60 100644
--- a/content/browser/service_worker/service_worker_database_unittest.cc
+++ b/content/browser/service_worker/service_worker_database_unittest.cc
@@ -119,11 +119,13 @@ TEST(ServiceWorkerDatabaseTest, DatabaseVersion) {
// First writing triggers database initialization and bumps the schema
// version.
std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
ServiceWorkerDatabase::RegistrationData data;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data, resources, &deleted_version_id, &newly_purgeable_resources));
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
database->ReadDatabaseVersion(&db_version));
@@ -156,14 +158,16 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
// Writing a registration bumps the next available ids.
std::vector<Resource> resources;
RegistrationData data1;
+ int64 deleted_version_id;
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,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources, &deleted_version_id, &newly_purgeable_resources));
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
&ids.reg_id, &ids.ver_id, &ids.res_id));
@@ -178,9 +182,10 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
data2.scope = URL(origin, "/bar");
data2.script = URL(origin, "/script2.js");
data2.version_id = 20;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data2, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources, &deleted_version_id, &newly_purgeable_resources));
// Close and reopen the database to verify the stored values.
database.reset(CreateDatabase(database_dir.path()));
@@ -201,6 +206,7 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
EXPECT_TRUE(origins.empty());
std::vector<Resource> resources;
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
GURL origin1("http://example.com");
@@ -209,9 +215,10 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
data1.scope = URL(origin1, "/foo");
data1.script = URL(origin1, "/script1.js");
data1.version_id = 456;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data1, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources, &deleted_version_id, &newly_purgeable_resources));
GURL origin2("https://www.example.com");
RegistrationData data2;
@@ -219,9 +226,10 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
data2.scope = URL(origin2, "/bar");
data2.script = URL(origin2, "/script2.js");
data2.version_id = 567;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data2, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources, &deleted_version_id, &newly_purgeable_resources));
GURL origin3("https://example.org");
RegistrationData data3;
@@ -229,9 +237,10 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
data3.scope = URL(origin3, "/hoge");
data3.script = URL(origin3, "/script3.js");
data3.version_id = 678;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data3, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data3, resources, &deleted_version_id, &newly_purgeable_resources));
// |origin3| has two registrations.
RegistrationData data4;
@@ -239,9 +248,10 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
data4.scope = URL(origin3, "/fuga");
data4.script = URL(origin3, "/script4.js");
data4.version_id = 789;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data4, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data4, resources, &deleted_version_id, &newly_purgeable_resources));
origins.clear();
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
@@ -253,8 +263,11 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
// |origin3| has another registration, so should not remove it from the
// unique origin list.
+ int64 version_id;
ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->DeleteRegistration(data4.registration_id, origin3,
+ database->DeleteRegistration(data4.registration_id,
+ origin3,
+ &version_id,
&newly_purgeable_resources));
origins.clear();
@@ -267,7 +280,9 @@ 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,
+ &version_id,
&newly_purgeable_resources));
origins.clear();
@@ -291,6 +306,7 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
EXPECT_TRUE(registrations.empty());
std::vector<Resource> resources;
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
RegistrationData data1;
@@ -298,27 +314,30 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
data1.scope = URL(origin1, "/foo");
data1.script = URL(origin1, "/script1.js");
data1.version_id = 1000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data1, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources, &deleted_version_id, &newly_purgeable_resources));
RegistrationData data2;
data2.registration_id = 200;
data2.scope = URL(origin2, "/bar");
data2.script = URL(origin2, "/script2.js");
data2.version_id = 2000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data2, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources, &deleted_version_id, &newly_purgeable_resources));
RegistrationData data3;
data3.registration_id = 300;
data3.scope = URL(origin3, "/hoge");
data3.script = URL(origin3, "/script3.js");
data3.version_id = 3000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data3, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data3, resources, &deleted_version_id, &newly_purgeable_resources));
// |origin3| has two registrations.
RegistrationData data4;
@@ -326,9 +345,10 @@ TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
data4.scope = URL(origin3, "/fuga");
data4.script = URL(origin3, "/script4.js");
data4.version_id = 4000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data4, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data4, resources, &deleted_version_id, &newly_purgeable_resources));
registrations.clear();
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
@@ -347,6 +367,7 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
EXPECT_TRUE(registrations.empty());
std::vector<Resource> resources;
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
GURL origin1("http://www1.example.com");
@@ -355,9 +376,10 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
data1.scope = URL(origin1, "/foo");
data1.script = URL(origin1, "/script1.js");
data1.version_id = 1000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data1, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources, &deleted_version_id, &newly_purgeable_resources));
GURL origin2("http://www2.example.com");
RegistrationData data2;
@@ -365,9 +387,10 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
data2.scope = URL(origin2, "/bar");
data2.script = URL(origin2, "/script2.js");
data2.version_id = 2000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data2, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources, &deleted_version_id, &newly_purgeable_resources));
GURL origin3("http://www3.example.com");
RegistrationData data3;
@@ -375,9 +398,10 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
data3.scope = URL(origin3, "/hoge");
data3.script = URL(origin3, "/script3.js");
data3.version_id = 3000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data3, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data3, resources, &deleted_version_id, &newly_purgeable_resources));
// |origin3| has two registrations.
RegistrationData data4;
@@ -385,9 +409,10 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
data4.scope = URL(origin3, "/fuga");
data4.script = URL(origin3, "/script4.js");
data4.version_id = 4000;
- ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data4, resources,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data4, resources, &deleted_version_id, &newly_purgeable_resources));
registrations.clear();
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
@@ -425,10 +450,12 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
database->GetUncommittedResourceIds(&uncommitted_ids_out));
EXPECT_EQ(uncommitted_ids, uncommitted_ids_out);
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
- EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data, resources,
- &newly_purgeable_resources));
+ EXPECT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data, resources, &deleted_version_id, &newly_purgeable_resources));
// Make sure that the registration and resource records are stored.
RegistrationData data_out;
@@ -445,8 +472,11 @@ TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
database->GetUncommittedResourceIds(&uncommitted_ids_out));
EXPECT_TRUE(uncommitted_ids_out.empty());
+ int64 version_id;
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->DeleteRegistration(data.registration_id, origin,
+ database->DeleteRegistration(data.registration_id,
+ origin,
+ &version_id,
&newly_purgeable_resources));
michaeln 2014/07/01 20:54:06 add an expectation for version_id here also i don
falken 2014/07/02 04:04:24 Done: - Modified WriteRegistration and DeleteRegis
ASSERT_EQ(resources.size(), newly_purgeable_resources.size());
for (size_t i = 0; i < resources.size(); ++i)
@@ -481,11 +511,13 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
std::vector<Resource> resources1;
resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
- EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->WriteRegistration(data, resources1,
- &newly_purgeable_resources));
+ EXPECT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data, resources1, &deleted_version_id, &newly_purgeable_resources));
michaeln 2014/07/01 20:54:06 add expectation for deleted_version_id here
falken 2014/07/02 04:04:24 Done.
EXPECT_TRUE(newly_purgeable_resources.empty());
// Make sure that the registration and resource records are stored.
@@ -504,7 +536,9 @@ 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,
+ &deleted_version_id,
&newly_purgeable_resources));
michaeln 2014/07/01 20:54:06 and here too
falken 2014/07/02 04:04:24 Done.
ASSERT_EQ(resources1.size(), newly_purgeable_resources.size());
for(size_t i = 0; i < resources1.size(); ++i)
@@ -530,6 +564,7 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
GURL origin("http://example.com");
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
// Add registration1.
@@ -542,9 +577,10 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
std::vector<Resource> resources1;
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,
- &newly_purgeable_resources));
+ EXPECT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources1, &deleted_version_id, &newly_purgeable_resources));
// Add registration2.
RegistrationData data2;
@@ -556,9 +592,10 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
std::vector<Resource> resources2;
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,
- &newly_purgeable_resources));
+ EXPECT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources2, &deleted_version_id, &newly_purgeable_resources));
// Make sure that registration1 is stored.
RegistrationData data_out;
@@ -581,8 +618,11 @@ TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
EXPECT_TRUE(purgeable_ids_out.empty());
// Delete registration1.
+ int64 version_id;
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->DeleteRegistration(data1.registration_id, origin,
+ database->DeleteRegistration(data1.registration_id,
+ origin,
+ &version_id,
&newly_purgeable_resources));
// Make sure that registration1 is gone.
@@ -611,6 +651,7 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
GURL origin("http://example.com");
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
// Should be false because a registration does not exist.
@@ -625,7 +666,9 @@ 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>(),
+ &deleted_version_id,
&newly_purgeable_resources));
// Make sure that the registration is stored.
@@ -652,8 +695,11 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
EXPECT_TRUE(resources_out.empty());
// Delete the registration.
+ int64 version_id;
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->DeleteRegistration(data.registration_id, origin,
+ database->DeleteRegistration(data.registration_id,
+ origin,
+ &version_id,
&newly_purgeable_resources));
// Should be false because the registration is gone.
@@ -664,6 +710,7 @@ TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
GURL origin("http://example.com");
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
// Should be false because a registration does not exist.
@@ -678,7 +725,9 @@ 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>(),
+ &deleted_version_id,
&newly_purgeable_resources));
// Make sure that the registration is stored.
@@ -707,8 +756,11 @@ TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
EXPECT_TRUE(resources_out.empty());
// Delete the registration.
+ int64 version_id;
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
- database->DeleteRegistration(data.registration_id, origin,
+ database->DeleteRegistration(data.registration_id,
+ origin,
+ &version_id,
&newly_purgeable_resources));
// Should be false because the registration is gone.
@@ -805,6 +857,7 @@ TEST(ServiceWorkerDatabaseTest, PurgeableResourceIds) {
TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ int64 deleted_version_id;
std::vector<int64> newly_purgeable_resources;
// Data associated with |origin1| will be removed.
@@ -821,9 +874,10 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources1;
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,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data1, resources1, &deleted_version_id, &newly_purgeable_resources));
RegistrationData data2;
data2.registration_id = 11;
@@ -834,9 +888,10 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources2;
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,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data2, resources2, &deleted_version_id, &newly_purgeable_resources));
// |origin2| has one registration.
RegistrationData data3;
@@ -848,9 +903,10 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources3;
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,
- &newly_purgeable_resources));
+ ASSERT_EQ(
+ ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(
+ data3, resources3, &deleted_version_id, &newly_purgeable_resources));
EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
database->DeleteAllDataForOrigin(origin1,

Powered by Google App Engine
This is Rietveld 408576698