| 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 | 73 |
| 74 } // namespace | 74 } // namespace |
| 75 | 75 |
| 76 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { | 76 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { |
| 77 base::ScopedTempDir database_dir; | 77 base::ScopedTempDir database_dir; |
| 78 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 78 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 79 scoped_ptr<ServiceWorkerDatabase> database( | 79 scoped_ptr<ServiceWorkerDatabase> database( |
| 80 CreateDatabase(database_dir.path())); | 80 CreateDatabase(database_dir.path())); |
| 81 | 81 |
| 82 // Should be false because the database does not exist at the path. | 82 // Should be false because the database does not exist at the path. |
| 83 EXPECT_FALSE(database->LazyOpen(false)); | 83 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->LazyOpen(false)); |
| 84 | 84 |
| 85 EXPECT_TRUE(database->LazyOpen(true)); | 85 EXPECT_EQ(SERVICE_WORKER_OK, database->LazyOpen(true)); |
| 86 | 86 |
| 87 database.reset(CreateDatabase(database_dir.path())); | 87 database.reset(CreateDatabase(database_dir.path())); |
| 88 EXPECT_TRUE(database->LazyOpen(false)); | 88 EXPECT_EQ(SERVICE_WORKER_OK, database->LazyOpen(false)); |
| 89 } | 89 } |
| 90 | 90 |
| 91 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { | 91 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { |
| 92 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 92 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 93 | 93 |
| 94 // Should be false because the database does not exist in memory. | 94 // Should be false because the database does not exist in memory. |
| 95 EXPECT_FALSE(database->LazyOpen(false)); | 95 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->LazyOpen(false)); |
| 96 | 96 |
| 97 EXPECT_TRUE(database->LazyOpen(true)); | 97 EXPECT_EQ(SERVICE_WORKER_OK, database->LazyOpen(true)); |
| 98 database.reset(CreateDatabaseInMemory()); | 98 database.reset(CreateDatabaseInMemory()); |
| 99 | 99 |
| 100 // Should be false because the database is not persistent. | 100 // Should be false because the database is not persistent. |
| 101 EXPECT_FALSE(database->LazyOpen(false)); | 101 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->LazyOpen(false)); |
| 102 } | 102 } |
| 103 | 103 |
| 104 TEST(ServiceWorkerDatabaseTest, DatabaseVersion) { | 104 TEST(ServiceWorkerDatabaseTest, DatabaseVersion) { |
| 105 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 105 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 106 EXPECT_TRUE(database->LazyOpen(true)); | 106 EXPECT_EQ(SERVICE_WORKER_OK, database->LazyOpen(true)); |
| 107 | 107 |
| 108 // Opening a new database does not write anything, so its schema version | 108 // Opening a new database does not write anything, so its schema version |
| 109 // should be 0. | 109 // should be 0. |
| 110 int64 db_version = -1; | 110 int64 db_version = -1; |
| 111 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version)); | 111 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version)); |
| 112 EXPECT_EQ(0u, db_version); | 112 EXPECT_EQ(0u, db_version); |
| 113 | 113 |
| 114 // First writing triggers database initialization and bumps the schema | 114 // First writing triggers database initialization and bumps the schema |
| 115 // version. | 115 // version. |
| 116 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 116 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
| 117 ServiceWorkerDatabase::RegistrationData data; | 117 ServiceWorkerDatabase::RegistrationData data; |
| 118 ASSERT_TRUE(database->WriteRegistration(data, resources)); | 118 ASSERT_TRUE(database->WriteRegistration(data, resources)); |
| 119 | 119 |
| 120 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version)); | 120 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version)); |
| 121 EXPECT_LT(0, db_version); | 121 EXPECT_LT(0, db_version); |
| 122 } | 122 } |
| 123 | 123 |
| 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_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, database->LazyOpen(true)); |
| 141 EXPECT_EQ(SERVICE_WORKER_OK, 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; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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"); |
| 255 GURL origin3("https://example.org"); | 255 GURL origin3("https://example.org"); |
| 256 | 256 |
| 257 std::vector<RegistrationData> registrations; | 257 std::vector<RegistrationData> registrations; |
| 258 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, ®istrations)); | 258 EXPECT_EQ(SERVICE_WORKER_OK, |
| 259 database->GetRegistrationsForOrigin(origin1, ®istrations)); |
| 259 EXPECT_TRUE(registrations.empty()); | 260 EXPECT_TRUE(registrations.empty()); |
| 260 | 261 |
| 261 std::vector<Resource> resources; | 262 std::vector<Resource> resources; |
| 262 | 263 |
| 263 RegistrationData data1; | 264 RegistrationData data1; |
| 264 data1.registration_id = 100; | 265 data1.registration_id = 100; |
| 265 data1.scope = URL(origin1, "/foo"); | 266 data1.scope = URL(origin1, "/foo"); |
| 266 data1.script = URL(origin1, "/script1.js"); | 267 data1.script = URL(origin1, "/script1.js"); |
| 267 data1.version_id = 1000; | 268 data1.version_id = 1000; |
| 268 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 269 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 283 | 284 |
| 284 // |origin3| has two registrations. | 285 // |origin3| has two registrations. |
| 285 RegistrationData data4; | 286 RegistrationData data4; |
| 286 data4.registration_id = 400; | 287 data4.registration_id = 400; |
| 287 data4.scope = URL(origin3, "/fuga"); | 288 data4.scope = URL(origin3, "/fuga"); |
| 288 data4.script = URL(origin3, "/script4.js"); | 289 data4.script = URL(origin3, "/script4.js"); |
| 289 data4.version_id = 4000; | 290 data4.version_id = 4000; |
| 290 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 291 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 291 | 292 |
| 292 registrations.clear(); | 293 registrations.clear(); |
| 293 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin3, ®istrations)); | 294 EXPECT_EQ(SERVICE_WORKER_OK, |
| 295 database->GetRegistrationsForOrigin(origin3, ®istrations)); |
| 294 EXPECT_EQ(2U, registrations.size()); | 296 EXPECT_EQ(2U, registrations.size()); |
| 295 VerifyRegistrationData(data3, registrations[0]); | 297 VerifyRegistrationData(data3, registrations[0]); |
| 296 VerifyRegistrationData(data4, registrations[1]); | 298 VerifyRegistrationData(data4, registrations[1]); |
| 297 } | 299 } |
| 298 | 300 |
| 299 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { | 301 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
| 300 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 302 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 301 | 303 |
| 302 std::vector<RegistrationData> registrations; | 304 std::vector<RegistrationData> registrations; |
| 303 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); | 305 EXPECT_EQ(SERVICE_WORKER_OK, |
| 306 database->GetAllRegistrations(®istrations)); |
| 304 EXPECT_TRUE(registrations.empty()); | 307 EXPECT_TRUE(registrations.empty()); |
| 305 | 308 |
| 306 std::vector<Resource> resources; | 309 std::vector<Resource> resources; |
| 307 | 310 |
| 308 GURL origin1("http://www1.example.com"); | 311 GURL origin1("http://www1.example.com"); |
| 309 RegistrationData data1; | 312 RegistrationData data1; |
| 310 data1.registration_id = 100; | 313 data1.registration_id = 100; |
| 311 data1.scope = URL(origin1, "/foo"); | 314 data1.scope = URL(origin1, "/foo"); |
| 312 data1.script = URL(origin1, "/script1.js"); | 315 data1.script = URL(origin1, "/script1.js"); |
| 313 data1.version_id = 1000; | 316 data1.version_id = 1000; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 331 | 334 |
| 332 // |origin3| has two registrations. | 335 // |origin3| has two registrations. |
| 333 RegistrationData data4; | 336 RegistrationData data4; |
| 334 data4.registration_id = 400; | 337 data4.registration_id = 400; |
| 335 data4.scope = URL(origin3, "/fuga"); | 338 data4.scope = URL(origin3, "/fuga"); |
| 336 data4.script = URL(origin3, "/script4.js"); | 339 data4.script = URL(origin3, "/script4.js"); |
| 337 data4.version_id = 4000; | 340 data4.version_id = 4000; |
| 338 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 341 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 339 | 342 |
| 340 registrations.clear(); | 343 registrations.clear(); |
| 341 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); | 344 EXPECT_EQ(SERVICE_WORKER_OK, |
| 345 database->GetAllRegistrations(®istrations)); |
| 342 EXPECT_EQ(4U, registrations.size()); | 346 EXPECT_EQ(4U, registrations.size()); |
| 343 VerifyRegistrationData(data1, registrations[0]); | 347 VerifyRegistrationData(data1, registrations[0]); |
| 344 VerifyRegistrationData(data2, registrations[1]); | 348 VerifyRegistrationData(data2, registrations[1]); |
| 345 VerifyRegistrationData(data3, registrations[2]); | 349 VerifyRegistrationData(data3, registrations[2]); |
| 346 VerifyRegistrationData(data4, registrations[3]); | 350 VerifyRegistrationData(data4, registrations[3]); |
| 347 } | 351 } |
| 348 | 352 |
| 349 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { | 353 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
| 350 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 354 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 351 | 355 |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 | 643 |
| 640 // |origin1| should be removed from the unique origin list. | 644 // |origin1| should be removed from the unique origin list. |
| 641 std::set<GURL> unique_origins; | 645 std::set<GURL> unique_origins; |
| 642 EXPECT_EQ(SERVICE_WORKER_OK, | 646 EXPECT_EQ(SERVICE_WORKER_OK, |
| 643 database->GetOriginsWithRegistrations(&unique_origins)); | 647 database->GetOriginsWithRegistrations(&unique_origins)); |
| 644 EXPECT_EQ(1u, unique_origins.size()); | 648 EXPECT_EQ(1u, unique_origins.size()); |
| 645 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); | 649 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); |
| 646 | 650 |
| 647 // The registrations for |origin1| should be removed. | 651 // The registrations for |origin1| should be removed. |
| 648 std::vector<RegistrationData> registrations; | 652 std::vector<RegistrationData> registrations; |
| 649 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, ®istrations)); | 653 EXPECT_EQ(SERVICE_WORKER_OK, |
| 654 database->GetRegistrationsForOrigin(origin1, ®istrations)); |
| 650 EXPECT_TRUE(registrations.empty()); | 655 EXPECT_TRUE(registrations.empty()); |
| 651 | 656 |
| 652 // The registration for |origin2| should not be removed. | 657 // The registration for |origin2| should not be removed. |
| 653 RegistrationData data_out; | 658 RegistrationData data_out; |
| 654 std::vector<Resource> resources_out; | 659 std::vector<Resource> resources_out; |
| 655 EXPECT_TRUE(database->ReadRegistration( | 660 EXPECT_TRUE(database->ReadRegistration( |
| 656 data3.registration_id, origin2, &data_out, &resources_out)); | 661 data3.registration_id, origin2, &data_out, &resources_out)); |
| 657 VerifyRegistrationData(data3, data_out); | 662 VerifyRegistrationData(data3, data_out); |
| 658 VerifyResourceRecords(resources3, resources_out); | 663 VerifyResourceRecords(resources3, resources_out); |
| 659 | 664 |
| 660 // The resources associated with |origin1| should be purgeable. | 665 // The resources associated with |origin1| should be purgeable. |
| 661 std::set<int64> purgeable_ids_out; | 666 std::set<int64> purgeable_ids_out; |
| 662 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 667 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
| 663 EXPECT_EQ(4u, purgeable_ids_out.size()); | 668 EXPECT_EQ(4u, purgeable_ids_out.size()); |
| 664 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); | 669 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); |
| 665 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); | 670 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); |
| 666 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); | 671 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); |
| 667 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); | 672 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); |
| 668 } | 673 } |
| 669 | 674 |
| 670 } // namespace content | 675 } // namespace content |
| OLD | NEW |