| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { | 124 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
| 125 base::ScopedTempDir database_dir; | 125 base::ScopedTempDir database_dir; |
| 126 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 126 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 127 scoped_ptr<ServiceWorkerDatabase> database( | 127 scoped_ptr<ServiceWorkerDatabase> database( |
| 128 CreateDatabase(database_dir.path())); | 128 CreateDatabase(database_dir.path())); |
| 129 | 129 |
| 130 GURL origin("http://example.com"); | 130 GURL origin("http://example.com"); |
| 131 | 131 |
| 132 // The database has never been used, so returns initial values. | 132 // The database has never been used, so returns initial values. |
| 133 AvailableIds ids; | 133 AvailableIds ids; |
| 134 EXPECT_TRUE(database->GetNextAvailableIds( | 134 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( |
| 135 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 135 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 136 EXPECT_EQ(0, ids.reg_id); | 136 EXPECT_EQ(0, ids.reg_id); |
| 137 EXPECT_EQ(0, ids.ver_id); | 137 EXPECT_EQ(0, ids.ver_id); |
| 138 EXPECT_EQ(0, ids.res_id); | 138 EXPECT_EQ(0, ids.res_id); |
| 139 | 139 |
| 140 ASSERT_TRUE(database->LazyOpen(true)); | 140 ASSERT_TRUE(database->LazyOpen(true)); |
| 141 EXPECT_TRUE(database->GetNextAvailableIds( | 141 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( |
| 142 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 142 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 143 EXPECT_EQ(0, ids.reg_id); | 143 EXPECT_EQ(0, ids.reg_id); |
| 144 EXPECT_EQ(0, ids.ver_id); | 144 EXPECT_EQ(0, ids.ver_id); |
| 145 EXPECT_EQ(0, ids.res_id); | 145 EXPECT_EQ(0, ids.res_id); |
| 146 | 146 |
| 147 // Writing a registration bumps the next available ids. | 147 // Writing a registration bumps the next available ids. |
| 148 std::vector<Resource> resources; | 148 std::vector<Resource> resources; |
| 149 RegistrationData data1; | 149 RegistrationData data1; |
| 150 data1.registration_id = 100; | 150 data1.registration_id = 100; |
| 151 data1.scope = URL(origin, "/foo"); | 151 data1.scope = URL(origin, "/foo"); |
| 152 data1.script = URL(origin, "/script1.js"); | 152 data1.script = URL(origin, "/script1.js"); |
| 153 data1.version_id = 200; | 153 data1.version_id = 200; |
| 154 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 154 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 155 | 155 |
| 156 EXPECT_TRUE(database->GetNextAvailableIds( | 156 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( |
| 157 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 157 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 158 EXPECT_EQ(101, ids.reg_id); | 158 EXPECT_EQ(101, ids.reg_id); |
| 159 EXPECT_EQ(201, ids.ver_id); | 159 EXPECT_EQ(201, ids.ver_id); |
| 160 EXPECT_EQ(0, ids.res_id); | 160 EXPECT_EQ(0, ids.res_id); |
| 161 | 161 |
| 162 // Writing a registration whose ids are lower than the stored ones should not | 162 // Writing a registration whose ids are lower than the stored ones should not |
| 163 // bump the next available ids. | 163 // bump the next available ids. |
| 164 RegistrationData data2; | 164 RegistrationData data2; |
| 165 data2.registration_id = 10; | 165 data2.registration_id = 10; |
| 166 data2.scope = URL(origin, "/bar"); | 166 data2.scope = URL(origin, "/bar"); |
| 167 data2.script = URL(origin, "/script2.js"); | 167 data2.script = URL(origin, "/script2.js"); |
| 168 data2.version_id = 20; | 168 data2.version_id = 20; |
| 169 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 169 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 170 | 170 |
| 171 // Close and reopen the database to verify the stored values. | 171 // Close and reopen the database to verify the stored values. |
| 172 database.reset(CreateDatabase(database_dir.path())); | 172 database.reset(CreateDatabase(database_dir.path())); |
| 173 | 173 |
| 174 EXPECT_TRUE(database->GetNextAvailableIds( | 174 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( |
| 175 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 175 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 176 EXPECT_EQ(101, ids.reg_id); | 176 EXPECT_EQ(101, ids.reg_id); |
| 177 EXPECT_EQ(201, ids.ver_id); | 177 EXPECT_EQ(201, ids.ver_id); |
| 178 EXPECT_EQ(0, ids.res_id); | 178 EXPECT_EQ(0, ids.res_id); |
| 179 } | 179 } |
| 180 | 180 |
| 181 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { | 181 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
| 182 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 182 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 183 | 183 |
| 184 std::set<GURL> origins; | 184 std::set<GURL> origins; |
| 185 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 185 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
| 186 EXPECT_TRUE(origins.empty()); | 186 EXPECT_TRUE(origins.empty()); |
| 187 | 187 |
| 188 std::vector<Resource> resources; | 188 std::vector<Resource> resources; |
| 189 | 189 |
| 190 GURL origin1("http://example.com"); | 190 GURL origin1("http://example.com"); |
| 191 RegistrationData data1; | 191 RegistrationData data1; |
| 192 data1.registration_id = 123; | 192 data1.registration_id = 123; |
| 193 data1.scope = URL(origin1, "/foo"); | 193 data1.scope = URL(origin1, "/foo"); |
| 194 data1.script = URL(origin1, "/script1.js"); | 194 data1.script = URL(origin1, "/script1.js"); |
| 195 data1.version_id = 456; | 195 data1.version_id = 456; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 213 | 213 |
| 214 // |origin3| has two registrations. | 214 // |origin3| has two registrations. |
| 215 RegistrationData data4; | 215 RegistrationData data4; |
| 216 data4.registration_id = 456; | 216 data4.registration_id = 456; |
| 217 data4.scope = URL(origin3, "/fuga"); | 217 data4.scope = URL(origin3, "/fuga"); |
| 218 data4.script = URL(origin3, "/script4.js"); | 218 data4.script = URL(origin3, "/script4.js"); |
| 219 data4.version_id = 789; | 219 data4.version_id = 789; |
| 220 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 220 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 221 | 221 |
| 222 origins.clear(); | 222 origins.clear(); |
| 223 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 223 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
| 224 EXPECT_EQ(3U, origins.size()); | 224 EXPECT_EQ(3U, origins.size()); |
| 225 EXPECT_TRUE(ContainsKey(origins, origin1)); | 225 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 226 EXPECT_TRUE(ContainsKey(origins, origin2)); | 226 EXPECT_TRUE(ContainsKey(origins, origin2)); |
| 227 EXPECT_TRUE(ContainsKey(origins, origin3)); | 227 EXPECT_TRUE(ContainsKey(origins, origin3)); |
| 228 | 228 |
| 229 // |origin3| has another registration, so should not remove it from the | 229 // |origin3| has another registration, so should not remove it from the |
| 230 // unique origin list. | 230 // unique origin list. |
| 231 ASSERT_TRUE(database->DeleteRegistration(data4.registration_id, origin3)); | 231 ASSERT_TRUE(database->DeleteRegistration(data4.registration_id, origin3)); |
| 232 | 232 |
| 233 origins.clear(); | 233 origins.clear(); |
| 234 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 234 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
| 235 EXPECT_EQ(3U, origins.size()); | 235 EXPECT_EQ(3U, origins.size()); |
| 236 EXPECT_TRUE(ContainsKey(origins, origin1)); | 236 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 237 EXPECT_TRUE(ContainsKey(origins, origin2)); | 237 EXPECT_TRUE(ContainsKey(origins, origin2)); |
| 238 EXPECT_TRUE(ContainsKey(origins, origin3)); | 238 EXPECT_TRUE(ContainsKey(origins, origin3)); |
| 239 | 239 |
| 240 // |origin3| should be removed from the unique origin list. | 240 // |origin3| should be removed from the unique origin list. |
| 241 ASSERT_TRUE(database->DeleteRegistration(data3.registration_id, origin3)); | 241 ASSERT_TRUE(database->DeleteRegistration(data3.registration_id, origin3)); |
| 242 | 242 |
| 243 origins.clear(); | 243 origins.clear(); |
| 244 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 244 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
| 245 EXPECT_EQ(2U, origins.size()); | 245 EXPECT_EQ(2U, origins.size()); |
| 246 EXPECT_TRUE(ContainsKey(origins, origin1)); | 246 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 247 EXPECT_TRUE(ContainsKey(origins, origin2)); | 247 EXPECT_TRUE(ContainsKey(origins, origin2)); |
| 248 } | 248 } |
| 249 | 249 |
| 250 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { | 250 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
| 251 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 251 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 252 | 252 |
| 253 GURL origin1("http://example.com"); | 253 GURL origin1("http://example.com"); |
| 254 GURL origin2("https://www.example.com"); | 254 GURL origin2("https://www.example.com"); |
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 | 632 |
| 633 std::vector<Resource> resources3; | 633 std::vector<Resource> resources3; |
| 634 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); | 634 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); |
| 635 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); | 635 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); |
| 636 ASSERT_TRUE(database->WriteRegistration(data3, resources3)); | 636 ASSERT_TRUE(database->WriteRegistration(data3, resources3)); |
| 637 | 637 |
| 638 EXPECT_TRUE(database->DeleteAllDataForOrigin(origin1)); | 638 EXPECT_TRUE(database->DeleteAllDataForOrigin(origin1)); |
| 639 | 639 |
| 640 // |origin1| should be removed from the unique origin list. | 640 // |origin1| should be removed from the unique origin list. |
| 641 std::set<GURL> unique_origins; | 641 std::set<GURL> unique_origins; |
| 642 EXPECT_TRUE(database->GetOriginsWithRegistrations(&unique_origins)); | 642 EXPECT_EQ(SERVICE_WORKER_OK, |
| 643 database->GetOriginsWithRegistrations(&unique_origins)); |
| 643 EXPECT_EQ(1u, unique_origins.size()); | 644 EXPECT_EQ(1u, unique_origins.size()); |
| 644 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); | 645 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); |
| 645 | 646 |
| 646 // The registrations for |origin1| should be removed. | 647 // The registrations for |origin1| should be removed. |
| 647 std::vector<RegistrationData> registrations; | 648 std::vector<RegistrationData> registrations; |
| 648 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, ®istrations)); | 649 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, ®istrations)); |
| 649 EXPECT_TRUE(registrations.empty()); | 650 EXPECT_TRUE(registrations.empty()); |
| 650 | 651 |
| 651 // The registration for |origin2| should not be removed. | 652 // The registration for |origin2| should not be removed. |
| 652 RegistrationData data_out; | 653 RegistrationData data_out; |
| 653 std::vector<Resource> resources_out; | 654 std::vector<Resource> resources_out; |
| 654 EXPECT_TRUE(database->ReadRegistration( | 655 EXPECT_TRUE(database->ReadRegistration( |
| 655 data3.registration_id, origin2, &data_out, &resources_out)); | 656 data3.registration_id, origin2, &data_out, &resources_out)); |
| 656 VerifyRegistrationData(data3, data_out); | 657 VerifyRegistrationData(data3, data_out); |
| 657 VerifyResourceRecords(resources3, resources_out); | 658 VerifyResourceRecords(resources3, resources_out); |
| 658 | 659 |
| 659 // The resources associated with |origin1| should be purgeable. | 660 // The resources associated with |origin1| should be purgeable. |
| 660 std::set<int64> purgeable_ids_out; | 661 std::set<int64> purgeable_ids_out; |
| 661 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 662 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
| 662 EXPECT_EQ(4u, purgeable_ids_out.size()); | 663 EXPECT_EQ(4u, purgeable_ids_out.size()); |
| 663 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); | 664 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); |
| 664 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); | 665 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); |
| 665 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); | 666 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); |
| 666 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); | 667 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); |
| 667 } | 668 } |
| 668 | 669 |
| 669 } // namespace content | 670 } // namespace content |
| OLD | NEW |