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 |