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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources)); |
119 | 119 |
120 EXPECT_EQ(SERVICE_WORKER_OK, 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())); |
(...skipping 15 matching lines...) Expand all Loading... |
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_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources)); |
155 | 155 |
156 EXPECT_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, 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; |
196 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 196 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources)); |
197 | 197 |
198 GURL origin2("https://www.example.com"); | 198 GURL origin2("https://www.example.com"); |
199 RegistrationData data2; | 199 RegistrationData data2; |
200 data2.registration_id = 234; | 200 data2.registration_id = 234; |
201 data2.scope = URL(origin2, "/bar"); | 201 data2.scope = URL(origin2, "/bar"); |
202 data2.script = URL(origin2, "/script2.js"); | 202 data2.script = URL(origin2, "/script2.js"); |
203 data2.version_id = 567; | 203 data2.version_id = 567; |
204 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 204 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources)); |
205 | 205 |
206 GURL origin3("https://example.org"); | 206 GURL origin3("https://example.org"); |
207 RegistrationData data3; | 207 RegistrationData data3; |
208 data3.registration_id = 345; | 208 data3.registration_id = 345; |
209 data3.scope = URL(origin3, "/hoge"); | 209 data3.scope = URL(origin3, "/hoge"); |
210 data3.script = URL(origin3, "/script3.js"); | 210 data3.script = URL(origin3, "/script3.js"); |
211 data3.version_id = 678; | 211 data3.version_id = 678; |
212 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 212 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources)); |
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_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources)); |
221 | 221 |
222 origins.clear(); | 222 origins.clear(); |
223 EXPECT_EQ(SERVICE_WORKER_OK, 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_EQ(SERVICE_WORKER_OK, |
| 232 database->DeleteRegistration(data4.registration_id, origin3)); |
232 | 233 |
233 origins.clear(); | 234 origins.clear(); |
234 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); | 235 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
235 EXPECT_EQ(3U, origins.size()); | 236 EXPECT_EQ(3U, origins.size()); |
236 EXPECT_TRUE(ContainsKey(origins, origin1)); | 237 EXPECT_TRUE(ContainsKey(origins, origin1)); |
237 EXPECT_TRUE(ContainsKey(origins, origin2)); | 238 EXPECT_TRUE(ContainsKey(origins, origin2)); |
238 EXPECT_TRUE(ContainsKey(origins, origin3)); | 239 EXPECT_TRUE(ContainsKey(origins, origin3)); |
239 | 240 |
240 // |origin3| should be removed from the unique origin list. | 241 // |origin3| should be removed from the unique origin list. |
241 ASSERT_TRUE(database->DeleteRegistration(data3.registration_id, origin3)); | 242 ASSERT_EQ(SERVICE_WORKER_OK, |
| 243 database->DeleteRegistration(data3.registration_id, origin3)); |
242 | 244 |
243 origins.clear(); | 245 origins.clear(); |
244 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); | 246 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); |
245 EXPECT_EQ(2U, origins.size()); | 247 EXPECT_EQ(2U, origins.size()); |
246 EXPECT_TRUE(ContainsKey(origins, origin1)); | 248 EXPECT_TRUE(ContainsKey(origins, origin1)); |
247 EXPECT_TRUE(ContainsKey(origins, origin2)); | 249 EXPECT_TRUE(ContainsKey(origins, origin2)); |
248 } | 250 } |
249 | 251 |
250 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { | 252 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
251 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 253 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
252 | 254 |
253 GURL origin1("http://example.com"); | 255 GURL origin1("http://example.com"); |
254 GURL origin2("https://www.example.com"); | 256 GURL origin2("https://www.example.com"); |
255 GURL origin3("https://example.org"); | 257 GURL origin3("https://example.org"); |
256 | 258 |
257 std::vector<RegistrationData> registrations; | 259 std::vector<RegistrationData> registrations; |
258 EXPECT_EQ(SERVICE_WORKER_OK, | 260 EXPECT_EQ(SERVICE_WORKER_OK, |
259 database->GetRegistrationsForOrigin(origin1, ®istrations)); | 261 database->GetRegistrationsForOrigin(origin1, ®istrations)); |
260 EXPECT_TRUE(registrations.empty()); | 262 EXPECT_TRUE(registrations.empty()); |
261 | 263 |
262 std::vector<Resource> resources; | 264 std::vector<Resource> resources; |
263 | 265 |
264 RegistrationData data1; | 266 RegistrationData data1; |
265 data1.registration_id = 100; | 267 data1.registration_id = 100; |
266 data1.scope = URL(origin1, "/foo"); | 268 data1.scope = URL(origin1, "/foo"); |
267 data1.script = URL(origin1, "/script1.js"); | 269 data1.script = URL(origin1, "/script1.js"); |
268 data1.version_id = 1000; | 270 data1.version_id = 1000; |
269 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 271 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources)); |
270 | 272 |
271 RegistrationData data2; | 273 RegistrationData data2; |
272 data2.registration_id = 200; | 274 data2.registration_id = 200; |
273 data2.scope = URL(origin2, "/bar"); | 275 data2.scope = URL(origin2, "/bar"); |
274 data2.script = URL(origin2, "/script2.js"); | 276 data2.script = URL(origin2, "/script2.js"); |
275 data2.version_id = 2000; | 277 data2.version_id = 2000; |
276 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 278 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources)); |
277 | 279 |
278 RegistrationData data3; | 280 RegistrationData data3; |
279 data3.registration_id = 300; | 281 data3.registration_id = 300; |
280 data3.scope = URL(origin3, "/hoge"); | 282 data3.scope = URL(origin3, "/hoge"); |
281 data3.script = URL(origin3, "/script3.js"); | 283 data3.script = URL(origin3, "/script3.js"); |
282 data3.version_id = 3000; | 284 data3.version_id = 3000; |
283 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 285 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources)); |
284 | 286 |
285 // |origin3| has two registrations. | 287 // |origin3| has two registrations. |
286 RegistrationData data4; | 288 RegistrationData data4; |
287 data4.registration_id = 400; | 289 data4.registration_id = 400; |
288 data4.scope = URL(origin3, "/fuga"); | 290 data4.scope = URL(origin3, "/fuga"); |
289 data4.script = URL(origin3, "/script4.js"); | 291 data4.script = URL(origin3, "/script4.js"); |
290 data4.version_id = 4000; | 292 data4.version_id = 4000; |
291 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 293 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources)); |
292 | 294 |
293 registrations.clear(); | 295 registrations.clear(); |
294 EXPECT_EQ(SERVICE_WORKER_OK, | 296 EXPECT_EQ(SERVICE_WORKER_OK, |
295 database->GetRegistrationsForOrigin(origin3, ®istrations)); | 297 database->GetRegistrationsForOrigin(origin3, ®istrations)); |
296 EXPECT_EQ(2U, registrations.size()); | 298 EXPECT_EQ(2U, registrations.size()); |
297 VerifyRegistrationData(data3, registrations[0]); | 299 VerifyRegistrationData(data3, registrations[0]); |
298 VerifyRegistrationData(data4, registrations[1]); | 300 VerifyRegistrationData(data4, registrations[1]); |
299 } | 301 } |
300 | 302 |
301 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { | 303 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
302 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 304 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
303 | 305 |
304 std::vector<RegistrationData> registrations; | 306 std::vector<RegistrationData> registrations; |
305 EXPECT_EQ(SERVICE_WORKER_OK, | 307 EXPECT_EQ(SERVICE_WORKER_OK, |
306 database->GetAllRegistrations(®istrations)); | 308 database->GetAllRegistrations(®istrations)); |
307 EXPECT_TRUE(registrations.empty()); | 309 EXPECT_TRUE(registrations.empty()); |
308 | 310 |
309 std::vector<Resource> resources; | 311 std::vector<Resource> resources; |
310 | 312 |
311 GURL origin1("http://www1.example.com"); | 313 GURL origin1("http://www1.example.com"); |
312 RegistrationData data1; | 314 RegistrationData data1; |
313 data1.registration_id = 100; | 315 data1.registration_id = 100; |
314 data1.scope = URL(origin1, "/foo"); | 316 data1.scope = URL(origin1, "/foo"); |
315 data1.script = URL(origin1, "/script1.js"); | 317 data1.script = URL(origin1, "/script1.js"); |
316 data1.version_id = 1000; | 318 data1.version_id = 1000; |
317 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 319 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources)); |
318 | 320 |
319 GURL origin2("http://www2.example.com"); | 321 GURL origin2("http://www2.example.com"); |
320 RegistrationData data2; | 322 RegistrationData data2; |
321 data2.registration_id = 200; | 323 data2.registration_id = 200; |
322 data2.scope = URL(origin2, "/bar"); | 324 data2.scope = URL(origin2, "/bar"); |
323 data2.script = URL(origin2, "/script2.js"); | 325 data2.script = URL(origin2, "/script2.js"); |
324 data2.version_id = 2000; | 326 data2.version_id = 2000; |
325 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 327 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources)); |
326 | 328 |
327 GURL origin3("http://www3.example.com"); | 329 GURL origin3("http://www3.example.com"); |
328 RegistrationData data3; | 330 RegistrationData data3; |
329 data3.registration_id = 300; | 331 data3.registration_id = 300; |
330 data3.scope = URL(origin3, "/hoge"); | 332 data3.scope = URL(origin3, "/hoge"); |
331 data3.script = URL(origin3, "/script3.js"); | 333 data3.script = URL(origin3, "/script3.js"); |
332 data3.version_id = 3000; | 334 data3.version_id = 3000; |
333 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 335 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources)); |
334 | 336 |
335 // |origin3| has two registrations. | 337 // |origin3| has two registrations. |
336 RegistrationData data4; | 338 RegistrationData data4; |
337 data4.registration_id = 400; | 339 data4.registration_id = 400; |
338 data4.scope = URL(origin3, "/fuga"); | 340 data4.scope = URL(origin3, "/fuga"); |
339 data4.script = URL(origin3, "/script4.js"); | 341 data4.script = URL(origin3, "/script4.js"); |
340 data4.version_id = 4000; | 342 data4.version_id = 4000; |
341 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 343 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources)); |
342 | 344 |
343 registrations.clear(); | 345 registrations.clear(); |
344 EXPECT_EQ(SERVICE_WORKER_OK, | 346 EXPECT_EQ(SERVICE_WORKER_OK, |
345 database->GetAllRegistrations(®istrations)); | 347 database->GetAllRegistrations(®istrations)); |
346 EXPECT_EQ(4U, registrations.size()); | 348 EXPECT_EQ(4U, registrations.size()); |
347 VerifyRegistrationData(data1, registrations[0]); | 349 VerifyRegistrationData(data1, registrations[0]); |
348 VerifyRegistrationData(data2, registrations[1]); | 350 VerifyRegistrationData(data2, registrations[1]); |
349 VerifyRegistrationData(data3, registrations[2]); | 351 VerifyRegistrationData(data3, registrations[2]); |
350 VerifyRegistrationData(data4, registrations[3]); | 352 VerifyRegistrationData(data4, registrations[3]); |
351 } | 353 } |
(...skipping 15 matching lines...) Expand all Loading... |
367 // Write a resource to the uncommitted list to make sure that writing | 369 // Write a resource to the uncommitted list to make sure that writing |
368 // registration removes resource ids associated with the registration from | 370 // registration removes resource ids associated with the registration from |
369 // the uncommitted list. | 371 // the uncommitted list. |
370 std::set<int64> uncommitted_ids; | 372 std::set<int64> uncommitted_ids; |
371 uncommitted_ids.insert(resources[0].resource_id); | 373 uncommitted_ids.insert(resources[0].resource_id); |
372 EXPECT_TRUE(database->WriteUncommittedResourceIds(uncommitted_ids)); | 374 EXPECT_TRUE(database->WriteUncommittedResourceIds(uncommitted_ids)); |
373 std::set<int64> uncommitted_ids_out; | 375 std::set<int64> uncommitted_ids_out; |
374 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); | 376 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); |
375 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); | 377 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); |
376 | 378 |
377 EXPECT_TRUE(database->WriteRegistration(data, resources)); | 379 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources)); |
378 | 380 |
379 // Make sure that the registration and resource records are stored. | 381 // Make sure that the registration and resource records are stored. |
380 RegistrationData data_out; | 382 RegistrationData data_out; |
381 std::vector<Resource> resources_out; | 383 std::vector<Resource> resources_out; |
382 EXPECT_TRUE(database->ReadRegistration( | 384 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
383 data.registration_id, origin, &data_out, &resources_out)); | 385 data.registration_id, origin, &data_out, &resources_out)); |
384 VerifyRegistrationData(data, data_out); | 386 VerifyRegistrationData(data, data_out); |
385 VerifyResourceRecords(resources, resources_out); | 387 VerifyResourceRecords(resources, resources_out); |
386 | 388 |
387 // Make sure that the resource is removed from the uncommitted list. | 389 // Make sure that the resource is removed from the uncommitted list. |
388 uncommitted_ids_out.clear(); | 390 uncommitted_ids_out.clear(); |
389 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); | 391 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); |
390 EXPECT_TRUE(uncommitted_ids_out.empty()); | 392 EXPECT_TRUE(uncommitted_ids_out.empty()); |
391 | 393 |
392 EXPECT_TRUE(database->DeleteRegistration(data.registration_id, origin)); | 394 EXPECT_EQ(SERVICE_WORKER_OK, |
| 395 database->DeleteRegistration(data.registration_id, origin)); |
393 | 396 |
394 // Make sure that the registration and resource records are gone. | 397 // Make sure that the registration and resource records are gone. |
395 resources_out.clear(); | 398 resources_out.clear(); |
396 EXPECT_FALSE(database->ReadRegistration( | 399 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->ReadRegistration( |
397 data.registration_id, origin, &data_out, &resources_out)); | 400 data.registration_id, origin, &data_out, &resources_out)); |
398 EXPECT_TRUE(resources_out.empty()); | 401 EXPECT_TRUE(resources_out.empty()); |
399 | 402 |
400 // Resources should be purgeable because these are no longer referred. | 403 // Resources should be purgeable because these are no longer referred. |
401 std::set<int64> purgeable_ids_out; | 404 std::set<int64> purgeable_ids_out; |
402 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 405 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
403 EXPECT_EQ(2u, purgeable_ids_out.size()); | 406 EXPECT_EQ(2u, purgeable_ids_out.size()); |
404 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[0].resource_id)); | 407 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[0].resource_id)); |
405 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[1].resource_id)); | 408 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[1].resource_id)); |
406 } | 409 } |
407 | 410 |
408 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { | 411 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
409 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 412 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
410 | 413 |
411 GURL origin("http://example.com"); | 414 GURL origin("http://example.com"); |
412 RegistrationData data; | 415 RegistrationData data; |
413 data.registration_id = 100; | 416 data.registration_id = 100; |
414 data.scope = URL(origin, "/foo"); | 417 data.scope = URL(origin, "/foo"); |
415 data.script = URL(origin, "/script.js"); | 418 data.script = URL(origin, "/script.js"); |
416 data.version_id = 200; | 419 data.version_id = 200; |
417 | 420 |
418 std::vector<Resource> resources1; | 421 std::vector<Resource> resources1; |
419 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); | 422 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); |
420 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); | 423 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); |
421 | 424 |
422 EXPECT_TRUE(database->WriteRegistration(data, resources1)); | 425 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources1)); |
423 | 426 |
424 // Make sure that the registration and resource records are stored. | 427 // Make sure that the registration and resource records are stored. |
425 RegistrationData data_out; | 428 RegistrationData data_out; |
426 std::vector<Resource> resources_out; | 429 std::vector<Resource> resources_out; |
427 EXPECT_TRUE(database->ReadRegistration( | 430 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
428 data.registration_id, origin, &data_out, &resources_out)); | 431 data.registration_id, origin, &data_out, &resources_out)); |
429 VerifyRegistrationData(data, data_out); | 432 VerifyRegistrationData(data, data_out); |
430 VerifyResourceRecords(resources1, resources_out); | 433 VerifyResourceRecords(resources1, resources_out); |
431 | 434 |
432 // Update the registration. | 435 // Update the registration. |
433 RegistrationData updated_data = data; | 436 RegistrationData updated_data = data; |
434 updated_data.version_id = data.version_id + 1; | 437 updated_data.version_id = data.version_id + 1; |
435 std::vector<Resource> resources2; | 438 std::vector<Resource> resources2; |
436 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); | 439 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); |
437 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); | 440 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); |
438 | 441 |
439 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2)); | 442 EXPECT_EQ(SERVICE_WORKER_OK, |
| 443 database->WriteRegistration(updated_data, resources2)); |
440 | 444 |
441 // Make sure that |updated_data| is stored and resources referred from |data| | 445 // Make sure that |updated_data| is stored and resources referred from |data| |
442 // is moved to the purgeable list. | 446 // is moved to the purgeable list. |
443 resources_out.clear(); | 447 resources_out.clear(); |
444 EXPECT_TRUE(database->ReadRegistration( | 448 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
445 updated_data.registration_id, origin, &data_out, &resources_out)); | 449 updated_data.registration_id, origin, &data_out, &resources_out)); |
446 VerifyRegistrationData(updated_data, data_out); | 450 VerifyRegistrationData(updated_data, data_out); |
447 VerifyResourceRecords(resources2, resources_out); | 451 VerifyResourceRecords(resources2, resources_out); |
448 | 452 |
449 std::set<int64> purgeable_ids_out; | 453 std::set<int64> purgeable_ids_out; |
450 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 454 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
451 EXPECT_EQ(2u, purgeable_ids_out.size()); | 455 EXPECT_EQ(2u, purgeable_ids_out.size()); |
452 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); | 456 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); |
453 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); | 457 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); |
454 } | 458 } |
455 | 459 |
456 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { | 460 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
457 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 461 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
458 GURL origin("http://example.com"); | 462 GURL origin("http://example.com"); |
459 | 463 |
460 // Add registration1. | 464 // Add registration1. |
461 RegistrationData data1; | 465 RegistrationData data1; |
462 data1.registration_id = 100; | 466 data1.registration_id = 100; |
463 data1.scope = URL(origin, "/foo"); | 467 data1.scope = URL(origin, "/foo"); |
464 data1.script = URL(origin, "/script1.js"); | 468 data1.script = URL(origin, "/script1.js"); |
465 data1.version_id = 200; | 469 data1.version_id = 200; |
466 | 470 |
467 std::vector<Resource> resources1; | 471 std::vector<Resource> resources1; |
468 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); | 472 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); |
469 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); | 473 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); |
470 EXPECT_TRUE(database->WriteRegistration(data1, resources1)); | 474 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources1)); |
471 | 475 |
472 // Add registration2. | 476 // Add registration2. |
473 RegistrationData data2; | 477 RegistrationData data2; |
474 data2.registration_id = 101; | 478 data2.registration_id = 101; |
475 data2.scope = URL(origin, "/bar"); | 479 data2.scope = URL(origin, "/bar"); |
476 data2.script = URL(origin, "/script2.js"); | 480 data2.script = URL(origin, "/script2.js"); |
477 data2.version_id = 201; | 481 data2.version_id = 201; |
478 | 482 |
479 std::vector<Resource> resources2; | 483 std::vector<Resource> resources2; |
480 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); | 484 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); |
481 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); | 485 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); |
482 EXPECT_TRUE(database->WriteRegistration(data2, resources2)); | 486 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources2)); |
483 | 487 |
484 // Make sure that registration1 is stored. | 488 // Make sure that registration1 is stored. |
485 RegistrationData data_out; | 489 RegistrationData data_out; |
486 std::vector<Resource> resources_out; | 490 std::vector<Resource> resources_out; |
487 EXPECT_TRUE(database->ReadRegistration( | 491 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
488 data1.registration_id, origin, &data_out, &resources_out)); | 492 data1.registration_id, origin, &data_out, &resources_out)); |
489 VerifyRegistrationData(data1, data_out); | 493 VerifyRegistrationData(data1, data_out); |
490 VerifyResourceRecords(resources1, resources_out); | 494 VerifyResourceRecords(resources1, resources_out); |
491 | 495 |
492 // Make sure that registration2 is also stored. | 496 // Make sure that registration2 is also stored. |
493 resources_out.clear(); | 497 resources_out.clear(); |
494 EXPECT_TRUE(database->ReadRegistration( | 498 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
495 data2.registration_id, origin, &data_out, &resources_out)); | 499 data2.registration_id, origin, &data_out, &resources_out)); |
496 VerifyRegistrationData(data2, data_out); | 500 VerifyRegistrationData(data2, data_out); |
497 VerifyResourceRecords(resources2, resources_out); | 501 VerifyResourceRecords(resources2, resources_out); |
498 | 502 |
499 std::set<int64> purgeable_ids_out; | 503 std::set<int64> purgeable_ids_out; |
500 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 504 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
501 EXPECT_TRUE(purgeable_ids_out.empty()); | 505 EXPECT_TRUE(purgeable_ids_out.empty()); |
502 | 506 |
503 // Delete registration1. | 507 // Delete registration1. |
504 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin)); | 508 EXPECT_EQ(SERVICE_WORKER_OK, |
| 509 database->DeleteRegistration(data1.registration_id, origin)); |
505 | 510 |
506 // Make sure that registration1 is gone. | 511 // Make sure that registration1 is gone. |
507 resources_out.clear(); | 512 resources_out.clear(); |
508 EXPECT_FALSE(database->ReadRegistration( | 513 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->ReadRegistration( |
509 data1.registration_id, origin, &data_out, &resources_out)); | 514 data1.registration_id, origin, &data_out, &resources_out)); |
510 EXPECT_TRUE(resources_out.empty()); | 515 EXPECT_TRUE(resources_out.empty()); |
511 | 516 |
512 purgeable_ids_out.clear(); | 517 purgeable_ids_out.clear(); |
513 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 518 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
514 EXPECT_EQ(2u, purgeable_ids_out.size()); | 519 EXPECT_EQ(2u, purgeable_ids_out.size()); |
515 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); | 520 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); |
516 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); | 521 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); |
517 | 522 |
518 // Make sure that registration2 is still alive. | 523 // Make sure that registration2 is still alive. |
519 resources_out.clear(); | 524 resources_out.clear(); |
520 EXPECT_TRUE(database->ReadRegistration( | 525 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
521 data2.registration_id, origin, &data_out, &resources_out)); | 526 data2.registration_id, origin, &data_out, &resources_out)); |
522 VerifyRegistrationData(data2, data_out); | 527 VerifyRegistrationData(data2, data_out); |
523 VerifyResourceRecords(resources2, resources_out); | 528 VerifyResourceRecords(resources2, resources_out); |
524 } | 529 } |
525 | 530 |
526 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { | 531 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { |
527 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 532 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
528 | 533 |
529 // Write {1, 2, 3}. | 534 // Write {1, 2, 3}. |
530 std::set<int64> ids1; | 535 std::set<int64> ids1; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 // |origin1| has two registrations. | 612 // |origin1| has two registrations. |
608 RegistrationData data1; | 613 RegistrationData data1; |
609 data1.registration_id = 10; | 614 data1.registration_id = 10; |
610 data1.scope = URL(origin1, "/foo"); | 615 data1.scope = URL(origin1, "/foo"); |
611 data1.script = URL(origin1, "/script1.js"); | 616 data1.script = URL(origin1, "/script1.js"); |
612 data1.version_id = 100; | 617 data1.version_id = 100; |
613 | 618 |
614 std::vector<Resource> resources1; | 619 std::vector<Resource> resources1; |
615 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"))); | 620 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"))); |
616 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"))); | 621 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"))); |
617 ASSERT_TRUE(database->WriteRegistration(data1, resources1)); | 622 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources1)); |
618 | 623 |
619 RegistrationData data2; | 624 RegistrationData data2; |
620 data2.registration_id = 11; | 625 data2.registration_id = 11; |
621 data2.scope = URL(origin1, "/bar"); | 626 data2.scope = URL(origin1, "/bar"); |
622 data2.script = URL(origin1, "/script2.js"); | 627 data2.script = URL(origin1, "/script2.js"); |
623 data2.version_id = 101; | 628 data2.version_id = 101; |
624 | 629 |
625 std::vector<Resource> resources2; | 630 std::vector<Resource> resources2; |
626 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"))); | 631 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"))); |
627 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"))); | 632 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"))); |
628 ASSERT_TRUE(database->WriteRegistration(data2, resources2)); | 633 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources2)); |
629 | 634 |
630 // |origin2| has one registration. | 635 // |origin2| has one registration. |
631 RegistrationData data3; | 636 RegistrationData data3; |
632 data3.registration_id = 12; | 637 data3.registration_id = 12; |
633 data3.scope = URL(origin2, "/hoge"); | 638 data3.scope = URL(origin2, "/hoge"); |
634 data3.script = URL(origin2, "/script3.js"); | 639 data3.script = URL(origin2, "/script3.js"); |
635 data3.version_id = 102; | 640 data3.version_id = 102; |
636 | 641 |
637 std::vector<Resource> resources3; | 642 std::vector<Resource> resources3; |
638 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); | 643 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); |
639 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); | 644 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); |
640 ASSERT_TRUE(database->WriteRegistration(data3, resources3)); | 645 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources3)); |
641 | 646 |
642 EXPECT_TRUE(database->DeleteAllDataForOrigin(origin1)); | 647 EXPECT_EQ(SERVICE_WORKER_OK, database->DeleteAllDataForOrigin(origin1)); |
643 | 648 |
644 // |origin1| should be removed from the unique origin list. | 649 // |origin1| should be removed from the unique origin list. |
645 std::set<GURL> unique_origins; | 650 std::set<GURL> unique_origins; |
646 EXPECT_EQ(SERVICE_WORKER_OK, | 651 EXPECT_EQ(SERVICE_WORKER_OK, |
647 database->GetOriginsWithRegistrations(&unique_origins)); | 652 database->GetOriginsWithRegistrations(&unique_origins)); |
648 EXPECT_EQ(1u, unique_origins.size()); | 653 EXPECT_EQ(1u, unique_origins.size()); |
649 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); | 654 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); |
650 | 655 |
651 // The registrations for |origin1| should be removed. | 656 // The registrations for |origin1| should be removed. |
652 std::vector<RegistrationData> registrations; | 657 std::vector<RegistrationData> registrations; |
653 EXPECT_EQ(SERVICE_WORKER_OK, | 658 EXPECT_EQ(SERVICE_WORKER_OK, |
654 database->GetRegistrationsForOrigin(origin1, ®istrations)); | 659 database->GetRegistrationsForOrigin(origin1, ®istrations)); |
655 EXPECT_TRUE(registrations.empty()); | 660 EXPECT_TRUE(registrations.empty()); |
656 | 661 |
657 // The registration for |origin2| should not be removed. | 662 // The registration for |origin2| should not be removed. |
658 RegistrationData data_out; | 663 RegistrationData data_out; |
659 std::vector<Resource> resources_out; | 664 std::vector<Resource> resources_out; |
660 EXPECT_TRUE(database->ReadRegistration( | 665 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration( |
661 data3.registration_id, origin2, &data_out, &resources_out)); | 666 data3.registration_id, origin2, &data_out, &resources_out)); |
662 VerifyRegistrationData(data3, data_out); | 667 VerifyRegistrationData(data3, data_out); |
663 VerifyResourceRecords(resources3, resources_out); | 668 VerifyResourceRecords(resources3, resources_out); |
664 | 669 |
665 // The resources associated with |origin1| should be purgeable. | 670 // The resources associated with |origin1| should be purgeable. |
666 std::set<int64> purgeable_ids_out; | 671 std::set<int64> purgeable_ids_out; |
667 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 672 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
668 EXPECT_EQ(4u, purgeable_ids_out.size()); | 673 EXPECT_EQ(4u, purgeable_ids_out.size()); |
669 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); | 674 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); |
670 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); | 675 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); |
671 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); | 676 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); |
672 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); | 677 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); |
673 } | 678 } |
674 | 679 |
675 } // namespace content | 680 } // namespace content |
OLD | NEW |