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 |