Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: content/browser/service_worker/service_worker_database_unittest.cc

Issue 672813002: [ServiceWorker] Added size deltas and total size computation for QuotaM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added tests Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 // Opening a new database does not write anything, so its schema version 113 // Opening a new database does not write anything, so its schema version
114 // should be 0. 114 // should be 0.
115 int64 db_version = -1; 115 int64 db_version = -1;
116 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 116 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
117 database->ReadDatabaseVersion(&db_version)); 117 database->ReadDatabaseVersion(&db_version));
118 EXPECT_EQ(0u, db_version); 118 EXPECT_EQ(0u, db_version);
119 119
120 // First writing triggers database initialization and bumps the schema 120 // First writing triggers database initialization and bumps the schema
121 // version. 121 // version.
122 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 122 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
123 int64 deleted_version_id; 123 ServiceWorkerDatabase::RegistrationData deleted_version;
124 std::vector<int64> newly_purgeable_resources; 124 std::vector<int64> newly_purgeable_resources;
125 ServiceWorkerDatabase::RegistrationData data; 125 ServiceWorkerDatabase::RegistrationData data;
126 ASSERT_EQ( 126 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
127 ServiceWorkerDatabase::STATUS_OK, 127 database->WriteRegistration(
128 database->WriteRegistration( 128 data, resources, &deleted_version, &newly_purgeable_resources));
129 data, resources, &deleted_version_id, &newly_purgeable_resources));
130 129
131 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 130 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
132 database->ReadDatabaseVersion(&db_version)); 131 database->ReadDatabaseVersion(&db_version));
133 EXPECT_LT(0, db_version); 132 EXPECT_LT(0, db_version);
134 } 133 }
135 134
136 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { 135 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
137 base::ScopedTempDir database_dir; 136 base::ScopedTempDir database_dir;
138 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); 137 ASSERT_TRUE(database_dir.CreateUniqueTempDir());
139 scoped_ptr<ServiceWorkerDatabase> database( 138 scoped_ptr<ServiceWorkerDatabase> database(
(...skipping 12 matching lines...) Expand all
152 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); 151 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
153 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 152 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
154 &ids.reg_id, &ids.ver_id, &ids.res_id)); 153 &ids.reg_id, &ids.ver_id, &ids.res_id));
155 EXPECT_EQ(0, ids.reg_id); 154 EXPECT_EQ(0, ids.reg_id);
156 EXPECT_EQ(0, ids.ver_id); 155 EXPECT_EQ(0, ids.ver_id);
157 EXPECT_EQ(0, ids.res_id); 156 EXPECT_EQ(0, ids.res_id);
158 157
159 // Writing a registration bumps the next available ids. 158 // Writing a registration bumps the next available ids.
160 std::vector<Resource> resources; 159 std::vector<Resource> resources;
161 RegistrationData data1; 160 RegistrationData data1;
162 int64 deleted_version_id; 161 ServiceWorkerDatabase::RegistrationData deleted_version;
163 std::vector<int64> newly_purgeable_resources; 162 std::vector<int64> newly_purgeable_resources;
164 data1.registration_id = 100; 163 data1.registration_id = 100;
165 data1.scope = URL(origin, "/foo"); 164 data1.scope = URL(origin, "/foo");
166 data1.script = URL(origin, "/script1.js"); 165 data1.script = URL(origin, "/script1.js");
167 data1.version_id = 200; 166 data1.version_id = 200;
168 ASSERT_EQ( 167 ASSERT_EQ(
169 ServiceWorkerDatabase::STATUS_OK, 168 ServiceWorkerDatabase::STATUS_OK,
170 database->WriteRegistration( 169 database->WriteRegistration(
171 data1, resources, &deleted_version_id, &newly_purgeable_resources)); 170 data1, resources, &deleted_version, &newly_purgeable_resources));
172 171
173 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 172 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
174 &ids.reg_id, &ids.ver_id, &ids.res_id)); 173 &ids.reg_id, &ids.ver_id, &ids.res_id));
175 EXPECT_EQ(101, ids.reg_id); 174 EXPECT_EQ(101, ids.reg_id);
176 EXPECT_EQ(201, ids.ver_id); 175 EXPECT_EQ(201, ids.ver_id);
177 EXPECT_EQ(0, ids.res_id); 176 EXPECT_EQ(0, ids.res_id);
178 177
179 // Writing uncommitted resources bumps the next available id. 178 // Writing uncommitted resources bumps the next available id.
180 const int64 kUncommittedIds[] = {0, 1, 3, 5, 6, 10}; 179 const int64 kUncommittedIds[] = {0, 1, 3, 5, 6, 10};
181 EXPECT_EQ( 180 EXPECT_EQ(
(...skipping 22 matching lines...) Expand all
204 // Writing a registration whose ids are lower than the stored ones should not 203 // Writing a registration whose ids are lower than the stored ones should not
205 // bump the next available ids. 204 // bump the next available ids.
206 RegistrationData data2; 205 RegistrationData data2;
207 data2.registration_id = 10; 206 data2.registration_id = 10;
208 data2.scope = URL(origin, "/bar"); 207 data2.scope = URL(origin, "/bar");
209 data2.script = URL(origin, "/script2.js"); 208 data2.script = URL(origin, "/script2.js");
210 data2.version_id = 20; 209 data2.version_id = 20;
211 ASSERT_EQ( 210 ASSERT_EQ(
212 ServiceWorkerDatabase::STATUS_OK, 211 ServiceWorkerDatabase::STATUS_OK,
213 database->WriteRegistration( 212 database->WriteRegistration(
214 data2, resources, &deleted_version_id, &newly_purgeable_resources)); 213 data2, resources, &deleted_version, &newly_purgeable_resources));
215 214
216 // Same with resources. 215 // Same with resources.
217 int64 kLowResourceId = 15; 216 int64 kLowResourceId = 15;
218 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 217 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
219 database->WriteUncommittedResourceIds( 218 database->WriteUncommittedResourceIds(
220 std::set<int64>(&kLowResourceId, &kLowResourceId + 1))); 219 std::set<int64>(&kLowResourceId, &kLowResourceId + 1)));
221 220
222 // Close and reopen the database to verify the stored values. 221 // Close and reopen the database to verify the stored values.
223 database.reset(CreateDatabase(database_dir.path())); 222 database.reset(CreateDatabase(database_dir.path()));
224 223
225 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 224 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
226 &ids.reg_id, &ids.ver_id, &ids.res_id)); 225 &ids.reg_id, &ids.ver_id, &ids.res_id));
227 EXPECT_EQ(101, ids.reg_id); 226 EXPECT_EQ(101, ids.reg_id);
228 EXPECT_EQ(201, ids.ver_id); 227 EXPECT_EQ(201, ids.ver_id);
229 EXPECT_EQ(21, ids.res_id); 228 EXPECT_EQ(21, ids.res_id);
230 } 229 }
231 230
232 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { 231 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
233 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 232 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
234 233
235 std::set<GURL> origins; 234 std::set<GURL> origins;
236 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 235 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
237 database->GetOriginsWithRegistrations(&origins)); 236 database->GetOriginsWithRegistrations(&origins));
238 EXPECT_TRUE(origins.empty()); 237 EXPECT_TRUE(origins.empty());
239 238
240 std::vector<Resource> resources; 239 std::vector<Resource> resources;
241 int64 deleted_version_id; 240 ServiceWorkerDatabase::RegistrationData deleted_version;
242 std::vector<int64> newly_purgeable_resources; 241 std::vector<int64> newly_purgeable_resources;
243 242
244 GURL origin1("http://example.com"); 243 GURL origin1("http://example.com");
245 RegistrationData data1; 244 RegistrationData data1;
246 data1.registration_id = 123; 245 data1.registration_id = 123;
247 data1.scope = URL(origin1, "/foo"); 246 data1.scope = URL(origin1, "/foo");
248 data1.script = URL(origin1, "/script1.js"); 247 data1.script = URL(origin1, "/script1.js");
249 data1.version_id = 456; 248 data1.version_id = 456;
250 ASSERT_EQ( 249 ASSERT_EQ(
251 ServiceWorkerDatabase::STATUS_OK, 250 ServiceWorkerDatabase::STATUS_OK,
252 database->WriteRegistration( 251 database->WriteRegistration(
253 data1, resources, &deleted_version_id, &newly_purgeable_resources)); 252 data1, resources, &deleted_version, &newly_purgeable_resources));
254 253
255 GURL origin2("https://www.example.com"); 254 GURL origin2("https://www.example.com");
256 RegistrationData data2; 255 RegistrationData data2;
257 data2.registration_id = 234; 256 data2.registration_id = 234;
258 data2.scope = URL(origin2, "/bar"); 257 data2.scope = URL(origin2, "/bar");
259 data2.script = URL(origin2, "/script2.js"); 258 data2.script = URL(origin2, "/script2.js");
260 data2.version_id = 567; 259 data2.version_id = 567;
261 ASSERT_EQ( 260 ASSERT_EQ(
262 ServiceWorkerDatabase::STATUS_OK, 261 ServiceWorkerDatabase::STATUS_OK,
263 database->WriteRegistration( 262 database->WriteRegistration(
264 data2, resources, &deleted_version_id, &newly_purgeable_resources)); 263 data2, resources, &deleted_version, &newly_purgeable_resources));
265 264
266 GURL origin3("https://example.org"); 265 GURL origin3("https://example.org");
267 RegistrationData data3; 266 RegistrationData data3;
268 data3.registration_id = 345; 267 data3.registration_id = 345;
269 data3.scope = URL(origin3, "/hoge"); 268 data3.scope = URL(origin3, "/hoge");
270 data3.script = URL(origin3, "/script3.js"); 269 data3.script = URL(origin3, "/script3.js");
271 data3.version_id = 678; 270 data3.version_id = 678;
272 ASSERT_EQ( 271 ASSERT_EQ(
273 ServiceWorkerDatabase::STATUS_OK, 272 ServiceWorkerDatabase::STATUS_OK,
274 database->WriteRegistration( 273 database->WriteRegistration(
275 data3, resources, &deleted_version_id, &newly_purgeable_resources)); 274 data3, resources, &deleted_version, &newly_purgeable_resources));
276 275
277 // |origin3| has two registrations. 276 // |origin3| has two registrations.
278 RegistrationData data4; 277 RegistrationData data4;
279 data4.registration_id = 456; 278 data4.registration_id = 456;
280 data4.scope = URL(origin3, "/fuga"); 279 data4.scope = URL(origin3, "/fuga");
281 data4.script = URL(origin3, "/script4.js"); 280 data4.script = URL(origin3, "/script4.js");
282 data4.version_id = 789; 281 data4.version_id = 789;
283 ASSERT_EQ( 282 ASSERT_EQ(
284 ServiceWorkerDatabase::STATUS_OK, 283 ServiceWorkerDatabase::STATUS_OK,
285 database->WriteRegistration( 284 database->WriteRegistration(
286 data4, resources, &deleted_version_id, &newly_purgeable_resources)); 285 data4, resources, &deleted_version, &newly_purgeable_resources));
287 286
288 origins.clear(); 287 origins.clear();
289 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 288 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
290 database->GetOriginsWithRegistrations(&origins)); 289 database->GetOriginsWithRegistrations(&origins));
291 EXPECT_EQ(3U, origins.size()); 290 EXPECT_EQ(3U, origins.size());
292 EXPECT_TRUE(ContainsKey(origins, origin1)); 291 EXPECT_TRUE(ContainsKey(origins, origin1));
293 EXPECT_TRUE(ContainsKey(origins, origin2)); 292 EXPECT_TRUE(ContainsKey(origins, origin2));
294 EXPECT_TRUE(ContainsKey(origins, origin3)); 293 EXPECT_TRUE(ContainsKey(origins, origin3));
295 294
296 // |origin3| has another registration, so should not remove it from the 295 // |origin3| has another registration, so should not remove it from the
297 // unique origin list. 296 // unique origin list.
298 int64 version_id;
299 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 297 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
300 database->DeleteRegistration(data4.registration_id, 298 database->DeleteRegistration(data4.registration_id,
301 origin3, 299 origin3,
302 &version_id, 300 &deleted_version,
303 &newly_purgeable_resources)); 301 &newly_purgeable_resources));
302 EXPECT_EQ(data4.registration_id, deleted_version.registration_id);
304 303
305 origins.clear(); 304 origins.clear();
306 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 305 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
307 database->GetOriginsWithRegistrations(&origins)); 306 database->GetOriginsWithRegistrations(&origins));
308 EXPECT_EQ(3U, origins.size()); 307 EXPECT_EQ(3U, origins.size());
309 EXPECT_TRUE(ContainsKey(origins, origin1)); 308 EXPECT_TRUE(ContainsKey(origins, origin1));
310 EXPECT_TRUE(ContainsKey(origins, origin2)); 309 EXPECT_TRUE(ContainsKey(origins, origin2));
311 EXPECT_TRUE(ContainsKey(origins, origin3)); 310 EXPECT_TRUE(ContainsKey(origins, origin3));
312 311
313 // |origin3| should be removed from the unique origin list. 312 // |origin3| should be removed from the unique origin list.
314 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 313 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
315 database->DeleteRegistration(data3.registration_id, 314 database->DeleteRegistration(data3.registration_id,
316 origin3, 315 origin3,
317 &version_id, 316 &deleted_version,
318 &newly_purgeable_resources)); 317 &newly_purgeable_resources));
318 EXPECT_EQ(data3.registration_id, deleted_version.registration_id);
319 319
320 origins.clear(); 320 origins.clear();
321 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 321 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
322 database->GetOriginsWithRegistrations(&origins)); 322 database->GetOriginsWithRegistrations(&origins));
323 EXPECT_EQ(2U, origins.size()); 323 EXPECT_EQ(2U, origins.size());
324 EXPECT_TRUE(ContainsKey(origins, origin1)); 324 EXPECT_TRUE(ContainsKey(origins, origin1));
325 EXPECT_TRUE(ContainsKey(origins, origin2)); 325 EXPECT_TRUE(ContainsKey(origins, origin2));
326 } 326 }
327 327
328 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { 328 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
329 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 329 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
330 330
331 GURL origin1("http://example.com"); 331 GURL origin1("http://example.com");
332 GURL origin2("https://www.example.com"); 332 GURL origin2("https://www.example.com");
333 GURL origin3("https://example.org"); 333 GURL origin3("https://example.org");
334 334
335 std::vector<RegistrationData> registrations; 335 std::vector<RegistrationData> registrations;
336 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 336 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
337 database->GetRegistrationsForOrigin(origin1, &registrations)); 337 database->GetRegistrationsForOrigin(origin1, &registrations));
338 EXPECT_TRUE(registrations.empty()); 338 EXPECT_TRUE(registrations.empty());
339 339
340 std::vector<Resource> resources; 340 std::vector<Resource> resources;
341 int64 deleted_version_id; 341 ServiceWorkerDatabase::RegistrationData deleted_version;
342 std::vector<int64> newly_purgeable_resources; 342 std::vector<int64> newly_purgeable_resources;
343 343
344 RegistrationData data1; 344 RegistrationData data1;
345 data1.registration_id = 100; 345 data1.registration_id = 100;
346 data1.scope = URL(origin1, "/foo"); 346 data1.scope = URL(origin1, "/foo");
347 data1.script = URL(origin1, "/script1.js"); 347 data1.script = URL(origin1, "/script1.js");
348 data1.version_id = 1000; 348 data1.version_id = 1000;
349 ASSERT_EQ( 349 ASSERT_EQ(
350 ServiceWorkerDatabase::STATUS_OK, 350 ServiceWorkerDatabase::STATUS_OK,
351 database->WriteRegistration( 351 database->WriteRegistration(
352 data1, resources, &deleted_version_id, &newly_purgeable_resources)); 352 data1, resources, &deleted_version, &newly_purgeable_resources));
353 353
354 RegistrationData data2; 354 RegistrationData data2;
355 data2.registration_id = 200; 355 data2.registration_id = 200;
356 data2.scope = URL(origin2, "/bar"); 356 data2.scope = URL(origin2, "/bar");
357 data2.script = URL(origin2, "/script2.js"); 357 data2.script = URL(origin2, "/script2.js");
358 data2.version_id = 2000; 358 data2.version_id = 2000;
359 ASSERT_EQ( 359 ASSERT_EQ(
360 ServiceWorkerDatabase::STATUS_OK, 360 ServiceWorkerDatabase::STATUS_OK,
361 database->WriteRegistration( 361 database->WriteRegistration(
362 data2, resources, &deleted_version_id, &newly_purgeable_resources)); 362 data2, resources, &deleted_version, &newly_purgeable_resources));
363 363
364 RegistrationData data3; 364 RegistrationData data3;
365 data3.registration_id = 300; 365 data3.registration_id = 300;
366 data3.scope = URL(origin3, "/hoge"); 366 data3.scope = URL(origin3, "/hoge");
367 data3.script = URL(origin3, "/script3.js"); 367 data3.script = URL(origin3, "/script3.js");
368 data3.version_id = 3000; 368 data3.version_id = 3000;
369 ASSERT_EQ( 369 ASSERT_EQ(
370 ServiceWorkerDatabase::STATUS_OK, 370 ServiceWorkerDatabase::STATUS_OK,
371 database->WriteRegistration( 371 database->WriteRegistration(
372 data3, resources, &deleted_version_id, &newly_purgeable_resources)); 372 data3, resources, &deleted_version, &newly_purgeable_resources));
373 373
374 // |origin3| has two registrations. 374 // |origin3| has two registrations.
375 RegistrationData data4; 375 RegistrationData data4;
376 data4.registration_id = 400; 376 data4.registration_id = 400;
377 data4.scope = URL(origin3, "/fuga"); 377 data4.scope = URL(origin3, "/fuga");
378 data4.script = URL(origin3, "/script4.js"); 378 data4.script = URL(origin3, "/script4.js");
379 data4.version_id = 4000; 379 data4.version_id = 4000;
380 ASSERT_EQ( 380 ASSERT_EQ(
381 ServiceWorkerDatabase::STATUS_OK, 381 ServiceWorkerDatabase::STATUS_OK,
382 database->WriteRegistration( 382 database->WriteRegistration(
383 data4, resources, &deleted_version_id, &newly_purgeable_resources)); 383 data4, resources, &deleted_version, &newly_purgeable_resources));
384 384
385 registrations.clear(); 385 registrations.clear();
386 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 386 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
387 database->GetRegistrationsForOrigin(origin3, &registrations)); 387 database->GetRegistrationsForOrigin(origin3, &registrations));
388 EXPECT_EQ(2U, registrations.size()); 388 EXPECT_EQ(2U, registrations.size());
389 VerifyRegistrationData(data3, registrations[0]); 389 VerifyRegistrationData(data3, registrations[0]);
390 VerifyRegistrationData(data4, registrations[1]); 390 VerifyRegistrationData(data4, registrations[1]);
391 } 391 }
392 392
393 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { 393 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
394 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 394 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
395 395
396 std::vector<RegistrationData> registrations; 396 std::vector<RegistrationData> registrations;
397 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 397 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
398 database->GetAllRegistrations(&registrations)); 398 database->GetAllRegistrations(&registrations));
399 EXPECT_TRUE(registrations.empty()); 399 EXPECT_TRUE(registrations.empty());
400 400
401 std::vector<Resource> resources; 401 std::vector<Resource> resources;
402 int64 deleted_version_id; 402 ServiceWorkerDatabase::RegistrationData deleted_version;
403 std::vector<int64> newly_purgeable_resources; 403 std::vector<int64> newly_purgeable_resources;
404 404
405 GURL origin1("http://www1.example.com"); 405 GURL origin1("http://www1.example.com");
406 RegistrationData data1; 406 RegistrationData data1;
407 data1.registration_id = 100; 407 data1.registration_id = 100;
408 data1.scope = URL(origin1, "/foo"); 408 data1.scope = URL(origin1, "/foo");
409 data1.script = URL(origin1, "/script1.js"); 409 data1.script = URL(origin1, "/script1.js");
410 data1.version_id = 1000; 410 data1.version_id = 1000;
411 ASSERT_EQ( 411 ASSERT_EQ(
412 ServiceWorkerDatabase::STATUS_OK, 412 ServiceWorkerDatabase::STATUS_OK,
413 database->WriteRegistration( 413 database->WriteRegistration(
414 data1, resources, &deleted_version_id, &newly_purgeable_resources)); 414 data1, resources, &deleted_version, &newly_purgeable_resources));
415 415
416 GURL origin2("http://www2.example.com"); 416 GURL origin2("http://www2.example.com");
417 RegistrationData data2; 417 RegistrationData data2;
418 data2.registration_id = 200; 418 data2.registration_id = 200;
419 data2.scope = URL(origin2, "/bar"); 419 data2.scope = URL(origin2, "/bar");
420 data2.script = URL(origin2, "/script2.js"); 420 data2.script = URL(origin2, "/script2.js");
421 data2.version_id = 2000; 421 data2.version_id = 2000;
422 ASSERT_EQ( 422 ASSERT_EQ(
423 ServiceWorkerDatabase::STATUS_OK, 423 ServiceWorkerDatabase::STATUS_OK,
424 database->WriteRegistration( 424 database->WriteRegistration(
425 data2, resources, &deleted_version_id, &newly_purgeable_resources)); 425 data2, resources, &deleted_version, &newly_purgeable_resources));
426 426
427 GURL origin3("http://www3.example.com"); 427 GURL origin3("http://www3.example.com");
428 RegistrationData data3; 428 RegistrationData data3;
429 data3.registration_id = 300; 429 data3.registration_id = 300;
430 data3.scope = URL(origin3, "/hoge"); 430 data3.scope = URL(origin3, "/hoge");
431 data3.script = URL(origin3, "/script3.js"); 431 data3.script = URL(origin3, "/script3.js");
432 data3.version_id = 3000; 432 data3.version_id = 3000;
433 ASSERT_EQ( 433 ASSERT_EQ(
434 ServiceWorkerDatabase::STATUS_OK, 434 ServiceWorkerDatabase::STATUS_OK,
435 database->WriteRegistration( 435 database->WriteRegistration(
436 data3, resources, &deleted_version_id, &newly_purgeable_resources)); 436 data3, resources, &deleted_version, &newly_purgeable_resources));
437 437
438 // |origin3| has two registrations. 438 // |origin3| has two registrations.
439 RegistrationData data4; 439 RegistrationData data4;
440 data4.registration_id = 400; 440 data4.registration_id = 400;
441 data4.scope = URL(origin3, "/fuga"); 441 data4.scope = URL(origin3, "/fuga");
442 data4.script = URL(origin3, "/script4.js"); 442 data4.script = URL(origin3, "/script4.js");
443 data4.version_id = 4000; 443 data4.version_id = 4000;
444 ASSERT_EQ( 444 ASSERT_EQ(
445 ServiceWorkerDatabase::STATUS_OK, 445 ServiceWorkerDatabase::STATUS_OK,
446 database->WriteRegistration( 446 database->WriteRegistration(
447 data4, resources, &deleted_version_id, &newly_purgeable_resources)); 447 data4, resources, &deleted_version, &newly_purgeable_resources));
448 448
449 registrations.clear(); 449 registrations.clear();
450 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 450 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
451 database->GetAllRegistrations(&registrations)); 451 database->GetAllRegistrations(&registrations));
452 EXPECT_EQ(4U, registrations.size()); 452 EXPECT_EQ(4U, registrations.size());
453 VerifyRegistrationData(data1, registrations[0]); 453 VerifyRegistrationData(data1, registrations[0]);
454 VerifyRegistrationData(data2, registrations[1]); 454 VerifyRegistrationData(data2, registrations[1]);
455 VerifyRegistrationData(data3, registrations[2]); 455 VerifyRegistrationData(data3, registrations[2]);
456 VerifyRegistrationData(data4, registrations[3]); 456 VerifyRegistrationData(data4, registrations[3]);
457 } 457 }
(...skipping 18 matching lines...) Expand all
476 // the uncommitted list. 476 // the uncommitted list.
477 std::set<int64> uncommitted_ids; 477 std::set<int64> uncommitted_ids;
478 uncommitted_ids.insert(resources[0].resource_id); 478 uncommitted_ids.insert(resources[0].resource_id);
479 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 479 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
480 database->WriteUncommittedResourceIds(uncommitted_ids)); 480 database->WriteUncommittedResourceIds(uncommitted_ids));
481 std::set<int64> uncommitted_ids_out; 481 std::set<int64> uncommitted_ids_out;
482 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 482 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
483 database->GetUncommittedResourceIds(&uncommitted_ids_out)); 483 database->GetUncommittedResourceIds(&uncommitted_ids_out));
484 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); 484 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out);
485 485
486 int64 deleted_version_id = 222; // Dummy initial value 486 ServiceWorkerDatabase::RegistrationData deleted_version;
487 deleted_version.version_id = 222; // Dummy initial value
487 std::vector<int64> newly_purgeable_resources; 488 std::vector<int64> newly_purgeable_resources;
488 489
489 EXPECT_EQ( 490 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
490 ServiceWorkerDatabase::STATUS_OK, 491 database->WriteRegistration(
491 database->WriteRegistration( 492 data, resources, &deleted_version, &newly_purgeable_resources));
492 data, resources, &deleted_version_id, &newly_purgeable_resources)); 493 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id);
493 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version_id);
494 EXPECT_TRUE(newly_purgeable_resources.empty()); 494 EXPECT_TRUE(newly_purgeable_resources.empty());
495 495
496 // Make sure that the registration and resource records are stored. 496 // Make sure that the registration and resource records are stored.
497 RegistrationData data_out; 497 RegistrationData data_out;
498 std::vector<Resource> resources_out; 498 std::vector<Resource> resources_out;
499 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 499 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
500 database->ReadRegistration( 500 database->ReadRegistration(
501 data.registration_id, origin, &data_out, &resources_out)); 501 data.registration_id, origin, &data_out, &resources_out));
502 VerifyRegistrationData(data, data_out); 502 VerifyRegistrationData(data, data_out);
503 VerifyResourceRecords(resources, resources_out); 503 VerifyResourceRecords(resources, resources_out);
504 504
505 // Make sure that the resource is removed from the uncommitted list. 505 // Make sure that the resource is removed from the uncommitted list.
506 uncommitted_ids_out.clear(); 506 uncommitted_ids_out.clear();
507 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 507 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
508 database->GetUncommittedResourceIds(&uncommitted_ids_out)); 508 database->GetUncommittedResourceIds(&uncommitted_ids_out));
509 EXPECT_TRUE(uncommitted_ids_out.empty()); 509 EXPECT_TRUE(uncommitted_ids_out.empty());
510 510
511 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 511 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
512 database->DeleteRegistration(data.registration_id, 512 database->DeleteRegistration(data.registration_id,
513 origin, 513 origin,
514 &deleted_version_id, 514 &deleted_version,
515 &newly_purgeable_resources)); 515 &newly_purgeable_resources));
516 EXPECT_EQ(data.version_id, deleted_version_id); 516 EXPECT_EQ(data.version_id, deleted_version.version_id);
517 ASSERT_EQ(resources.size(), newly_purgeable_resources.size()); 517 ASSERT_EQ(resources.size(), newly_purgeable_resources.size());
518 for (size_t i = 0; i < resources.size(); ++i) 518 for (size_t i = 0; i < resources.size(); ++i)
519 EXPECT_EQ(newly_purgeable_resources[i], resources[i].resource_id); 519 EXPECT_EQ(newly_purgeable_resources[i], resources[i].resource_id);
520 520
521 // Make sure that the registration and resource records are gone. 521 // Make sure that the registration and resource records are gone.
522 resources_out.clear(); 522 resources_out.clear();
523 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 523 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
524 database->ReadRegistration( 524 database->ReadRegistration(
525 data.registration_id, origin, &data_out, &resources_out)); 525 data.registration_id, origin, &data_out, &resources_out));
526 EXPECT_TRUE(resources_out.empty()); 526 EXPECT_TRUE(resources_out.empty());
(...skipping 18 matching lines...) Expand all
545 data.version_id = 200; 545 data.version_id = 200;
546 data.resources_total_size_bytes = 19 + 29129; 546 data.resources_total_size_bytes = 19 + 29129;
547 547
548 std::vector<Resource> resources; 548 std::vector<Resource> resources;
549 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 19)); 549 resources.push_back(CreateResource(1, URL(origin, "/resource1"), 19));
550 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 29129)); 550 resources.push_back(CreateResource(2, URL(origin, "/resource2"), 29129));
551 551
552 const int64 kNonExistentRegistrationId = 999; 552 const int64 kNonExistentRegistrationId = 999;
553 const int64 kArbitraryVersionId = 222; // Used as a dummy initial value 553 const int64 kArbitraryVersionId = 222; // Used as a dummy initial value
554 554
555 int64 deleted_version_id = kArbitraryVersionId; 555 ServiceWorkerDatabase::RegistrationData deleted_version;
556 deleted_version.version_id = kArbitraryVersionId;
556 std::vector<int64> newly_purgeable_resources; 557 std::vector<int64> newly_purgeable_resources;
557 EXPECT_EQ( 558 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
558 ServiceWorkerDatabase::STATUS_OK, 559 database->WriteRegistration(
559 database->WriteRegistration( 560 data, resources, &deleted_version, &newly_purgeable_resources));
560 data, resources, &deleted_version_id, &newly_purgeable_resources)); 561 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id);
561 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version_id);
562 EXPECT_TRUE(newly_purgeable_resources.empty()); 562 EXPECT_TRUE(newly_purgeable_resources.empty());
563 563
564 // Delete from an origin that has a registration. 564 // Delete from an origin that has a registration.
565 deleted_version_id = kArbitraryVersionId; 565 deleted_version.version_id = kArbitraryVersionId;
566 newly_purgeable_resources.clear(); 566 newly_purgeable_resources.clear();
567 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 567 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
568 database->DeleteRegistration(kNonExistentRegistrationId, 568 database->DeleteRegistration(kNonExistentRegistrationId,
569 origin, 569 origin,
570 &deleted_version_id, 570 &deleted_version,
571 &newly_purgeable_resources)); 571 &newly_purgeable_resources));
572 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version_id); 572 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id);
573 EXPECT_TRUE(newly_purgeable_resources.empty()); 573 EXPECT_TRUE(newly_purgeable_resources.empty());
574 574
575 // Delete from an origin that has no registration. 575 // Delete from an origin that has no registration.
576 deleted_version_id = kArbitraryVersionId; 576 deleted_version.version_id = kArbitraryVersionId;
577 newly_purgeable_resources.clear(); 577 newly_purgeable_resources.clear();
578 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 578 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
579 database->DeleteRegistration(kNonExistentRegistrationId, 579 database->DeleteRegistration(kNonExistentRegistrationId,
580 GURL("http://example.net"), 580 GURL("http://example.net"),
581 &deleted_version_id, 581 &deleted_version,
582 &newly_purgeable_resources)); 582 &newly_purgeable_resources));
583 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version_id); 583 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id);
584 EXPECT_TRUE(newly_purgeable_resources.empty()); 584 EXPECT_TRUE(newly_purgeable_resources.empty());
585 } 585 }
586 586
587 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { 587 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
588 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 588 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
589 589
590 GURL origin("http://example.com"); 590 GURL origin("http://example.com");
591 RegistrationData data; 591 RegistrationData data;
592 data.registration_id = 100; 592 data.registration_id = 100;
593 data.scope = URL(origin, "/foo"); 593 data.scope = URL(origin, "/foo");
594 data.script = URL(origin, "/script.js"); 594 data.script = URL(origin, "/script.js");
595 data.version_id = 200; 595 data.version_id = 200;
596 data.resources_total_size_bytes = 10 + 11; 596 data.resources_total_size_bytes = 10 + 11;
597 597
598 std::vector<Resource> resources1; 598 std::vector<Resource> resources1;
599 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10)); 599 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 10));
600 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11)); 600 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 11));
601 601
602 int64 deleted_version_id = 222; // Dummy inital value 602 ServiceWorkerDatabase::RegistrationData deleted_version;
603 deleted_version.version_id = 222; // Dummy inital value
603 std::vector<int64> newly_purgeable_resources; 604 std::vector<int64> newly_purgeable_resources;
604 605
605 EXPECT_EQ( 606 EXPECT_EQ(
606 ServiceWorkerDatabase::STATUS_OK, 607 ServiceWorkerDatabase::STATUS_OK,
607 database->WriteRegistration( 608 database->WriteRegistration(
608 data, resources1, &deleted_version_id, &newly_purgeable_resources)); 609 data, resources1, &deleted_version, &newly_purgeable_resources));
609 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version_id); 610 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id);
610 EXPECT_TRUE(newly_purgeable_resources.empty()); 611 EXPECT_TRUE(newly_purgeable_resources.empty());
611 612
612 // Make sure that the registration and resource records are stored. 613 // Make sure that the registration and resource records are stored.
613 RegistrationData data_out; 614 RegistrationData data_out;
614 std::vector<Resource> resources_out; 615 std::vector<Resource> resources_out;
615 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 616 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
616 data.registration_id, origin, &data_out, &resources_out)); 617 data.registration_id, origin, &data_out, &resources_out));
617 VerifyRegistrationData(data, data_out); 618 VerifyRegistrationData(data, data_out);
618 VerifyResourceRecords(resources1, resources_out); 619 VerifyResourceRecords(resources1, resources_out);
619 620
620 // Update the registration. 621 // Update the registration.
621 RegistrationData updated_data = data; 622 RegistrationData updated_data = data;
622 updated_data.version_id = data.version_id + 1; 623 updated_data.version_id = data.version_id + 1;
623 updated_data.resources_total_size_bytes = 12 + 13; 624 updated_data.resources_total_size_bytes = 12 + 13;
624 std::vector<Resource> resources2; 625 std::vector<Resource> resources2;
625 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12)); 626 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 12));
626 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13)); 627 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 13));
627 628
628 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 629 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
629 database->WriteRegistration(updated_data, 630 database->WriteRegistration(updated_data,
630 resources2, 631 resources2,
631 &deleted_version_id, 632 &deleted_version,
632 &newly_purgeable_resources)); 633 &newly_purgeable_resources));
633 EXPECT_EQ(data.version_id, deleted_version_id); 634 EXPECT_EQ(data.version_id, deleted_version.version_id);
634 ASSERT_EQ(resources1.size(), newly_purgeable_resources.size()); 635 ASSERT_EQ(resources1.size(), newly_purgeable_resources.size());
635 for (size_t i = 0; i < resources1.size(); ++i) 636 for (size_t i = 0; i < resources1.size(); ++i)
636 EXPECT_EQ(newly_purgeable_resources[i], resources1[i].resource_id); 637 EXPECT_EQ(newly_purgeable_resources[i], resources1[i].resource_id);
637 638
638 // Make sure that |updated_data| is stored and resources referred from |data| 639 // Make sure that |updated_data| is stored and resources referred from |data|
639 // is moved to the purgeable list. 640 // is moved to the purgeable list.
640 resources_out.clear(); 641 resources_out.clear();
641 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 642 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
642 updated_data.registration_id, origin, &data_out, &resources_out)); 643 updated_data.registration_id, origin, &data_out, &resources_out));
643 VerifyRegistrationData(updated_data, data_out); 644 VerifyRegistrationData(updated_data, data_out);
644 VerifyResourceRecords(resources2, resources_out); 645 VerifyResourceRecords(resources2, resources_out);
645 646
646 std::set<int64> purgeable_ids_out; 647 std::set<int64> purgeable_ids_out;
647 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 648 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
648 database->GetPurgeableResourceIds(&purgeable_ids_out)); 649 database->GetPurgeableResourceIds(&purgeable_ids_out));
649 EXPECT_EQ(2u, purgeable_ids_out.size()); 650 EXPECT_EQ(2u, purgeable_ids_out.size());
650 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 651 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
651 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 652 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
652 } 653 }
653 654
654 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { 655 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
655 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 656 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
656 GURL origin("http://example.com"); 657 GURL origin("http://example.com");
657 658
658 int64 deleted_version_id; 659 ServiceWorkerDatabase::RegistrationData deleted_version;
659 std::vector<int64> newly_purgeable_resources; 660 std::vector<int64> newly_purgeable_resources;
660 661
661 // Add registration1. 662 // Add registration1.
662 RegistrationData data1; 663 RegistrationData data1;
663 data1.registration_id = 100; 664 data1.registration_id = 100;
664 data1.scope = URL(origin, "/foo"); 665 data1.scope = URL(origin, "/foo");
665 data1.script = URL(origin, "/script1.js"); 666 data1.script = URL(origin, "/script1.js");
666 data1.version_id = 200; 667 data1.version_id = 200;
667 data1.resources_total_size_bytes = 1451 + 15234; 668 data1.resources_total_size_bytes = 1451 + 15234;
668 669
669 std::vector<Resource> resources1; 670 std::vector<Resource> resources1;
670 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 1451)); 671 resources1.push_back(CreateResource(1, URL(origin, "/resource1"), 1451));
671 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 15234)); 672 resources1.push_back(CreateResource(2, URL(origin, "/resource2"), 15234));
672 EXPECT_EQ( 673 EXPECT_EQ(
673 ServiceWorkerDatabase::STATUS_OK, 674 ServiceWorkerDatabase::STATUS_OK,
674 database->WriteRegistration( 675 database->WriteRegistration(
675 data1, resources1, &deleted_version_id, &newly_purgeable_resources)); 676 data1, resources1, &deleted_version, &newly_purgeable_resources));
676 677
677 // Add registration2. 678 // Add registration2.
678 RegistrationData data2; 679 RegistrationData data2;
679 data2.registration_id = 101; 680 data2.registration_id = 101;
680 data2.scope = URL(origin, "/bar"); 681 data2.scope = URL(origin, "/bar");
681 data2.script = URL(origin, "/script2.js"); 682 data2.script = URL(origin, "/script2.js");
682 data2.version_id = 201; 683 data2.version_id = 201;
683 data2.resources_total_size_bytes = 5 + 6; 684 data2.resources_total_size_bytes = 5 + 6;
684 685
685 std::vector<Resource> resources2; 686 std::vector<Resource> resources2;
686 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 5)); 687 resources2.push_back(CreateResource(3, URL(origin, "/resource3"), 5));
687 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 6)); 688 resources2.push_back(CreateResource(4, URL(origin, "/resource4"), 6));
688 EXPECT_EQ( 689 EXPECT_EQ(
689 ServiceWorkerDatabase::STATUS_OK, 690 ServiceWorkerDatabase::STATUS_OK,
690 database->WriteRegistration( 691 database->WriteRegistration(
691 data2, resources2, &deleted_version_id, &newly_purgeable_resources)); 692 data2, resources2, &deleted_version, &newly_purgeable_resources));
692 693
693 // Make sure that registration1 is stored. 694 // Make sure that registration1 is stored.
694 RegistrationData data_out; 695 RegistrationData data_out;
695 std::vector<Resource> resources_out; 696 std::vector<Resource> resources_out;
696 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 697 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
697 data1.registration_id, origin, &data_out, &resources_out)); 698 data1.registration_id, origin, &data_out, &resources_out));
698 VerifyRegistrationData(data1, data_out); 699 VerifyRegistrationData(data1, data_out);
699 VerifyResourceRecords(resources1, resources_out); 700 VerifyResourceRecords(resources1, resources_out);
700 701
701 // Make sure that registration2 is also stored. 702 // Make sure that registration2 is also stored.
702 resources_out.clear(); 703 resources_out.clear();
703 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 704 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
704 data2.registration_id, origin, &data_out, &resources_out)); 705 data2.registration_id, origin, &data_out, &resources_out));
705 VerifyRegistrationData(data2, data_out); 706 VerifyRegistrationData(data2, data_out);
706 VerifyResourceRecords(resources2, resources_out); 707 VerifyResourceRecords(resources2, resources_out);
707 708
708 std::set<int64> purgeable_ids_out; 709 std::set<int64> purgeable_ids_out;
709 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 710 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
710 database->GetPurgeableResourceIds(&purgeable_ids_out)); 711 database->GetPurgeableResourceIds(&purgeable_ids_out));
711 EXPECT_TRUE(purgeable_ids_out.empty()); 712 EXPECT_TRUE(purgeable_ids_out.empty());
712 713
713 // Delete registration1. 714 // Delete registration1.
714 int64 version_id;
715 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 715 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
716 database->DeleteRegistration(data1.registration_id, 716 database->DeleteRegistration(data1.registration_id,
717 origin, 717 origin,
718 &version_id, 718 &deleted_version,
719 &newly_purgeable_resources)); 719 &newly_purgeable_resources));
720 EXPECT_EQ(data1.registration_id, deleted_version.registration_id);
720 721
721 // Make sure that registration1 is gone. 722 // Make sure that registration1 is gone.
722 resources_out.clear(); 723 resources_out.clear();
723 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 724 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
724 database->ReadRegistration( 725 database->ReadRegistration(
725 data1.registration_id, origin, &data_out, &resources_out)); 726 data1.registration_id, origin, &data_out, &resources_out));
726 EXPECT_TRUE(resources_out.empty()); 727 EXPECT_TRUE(resources_out.empty());
727 728
728 purgeable_ids_out.clear(); 729 purgeable_ids_out.clear();
729 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 730 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
730 database->GetPurgeableResourceIds(&purgeable_ids_out)); 731 database->GetPurgeableResourceIds(&purgeable_ids_out));
731 EXPECT_EQ(2u, purgeable_ids_out.size()); 732 EXPECT_EQ(2u, purgeable_ids_out.size());
732 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 733 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
733 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 734 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
734 735
735 // Make sure that registration2 is still alive. 736 // Make sure that registration2 is still alive.
736 resources_out.clear(); 737 resources_out.clear();
737 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 738 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
738 data2.registration_id, origin, &data_out, &resources_out)); 739 data2.registration_id, origin, &data_out, &resources_out));
739 VerifyRegistrationData(data2, data_out); 740 VerifyRegistrationData(data2, data_out);
740 VerifyResourceRecords(resources2, resources_out); 741 VerifyResourceRecords(resources2, resources_out);
741 } 742 }
742 743
743 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { 744 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
744 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 745 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
745 GURL origin("http://example.com"); 746 GURL origin("http://example.com");
746 747
747 int64 deleted_version_id; 748 ServiceWorkerDatabase::RegistrationData deleted_version;
748 std::vector<int64> newly_purgeable_resources; 749 std::vector<int64> newly_purgeable_resources;
749 750
750 // Should be false because a registration does not exist. 751 // Should be false because a registration does not exist.
751 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 752 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
752 database->UpdateVersionToActive(0, origin)); 753 database->UpdateVersionToActive(0, origin));
753 754
754 // Add a registration. 755 // Add a registration.
755 RegistrationData data; 756 RegistrationData data;
756 data.registration_id = 100; 757 data.registration_id = 100;
757 data.scope = URL(origin, "/foo"); 758 data.scope = URL(origin, "/foo");
758 data.script = URL(origin, "/script.js"); 759 data.script = URL(origin, "/script.js");
759 data.version_id = 200; 760 data.version_id = 200;
760 data.is_active = false; 761 data.is_active = false;
761 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 762 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
762 database->WriteRegistration(data, 763 database->WriteRegistration(data,
763 std::vector<Resource>(), 764 std::vector<Resource>(),
764 &deleted_version_id, 765 &deleted_version,
765 &newly_purgeable_resources)); 766 &newly_purgeable_resources));
766 767
767 // Make sure that the registration is stored. 768 // Make sure that the registration is stored.
768 RegistrationData data_out; 769 RegistrationData data_out;
769 std::vector<Resource> resources_out; 770 std::vector<Resource> resources_out;
770 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 771 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
771 database->ReadRegistration( 772 database->ReadRegistration(
772 data.registration_id, origin, &data_out, &resources_out)); 773 data.registration_id, origin, &data_out, &resources_out));
773 VerifyRegistrationData(data, data_out); 774 VerifyRegistrationData(data, data_out);
774 EXPECT_TRUE(resources_out.empty()); 775 EXPECT_TRUE(resources_out.empty());
775 776
776 // Activate the registration. 777 // Activate the registration.
777 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
778 database->UpdateVersionToActive(data.registration_id, origin)); 779 database->UpdateVersionToActive(data.registration_id, origin));
779 780
780 // Make sure that the registration is activated. 781 // Make sure that the registration is activated.
781 resources_out.clear(); 782 resources_out.clear();
782 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 783 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
783 database->ReadRegistration( 784 database->ReadRegistration(
784 data.registration_id, origin, &data_out, &resources_out)); 785 data.registration_id, origin, &data_out, &resources_out));
785 RegistrationData expected_data = data; 786 RegistrationData expected_data = data;
786 expected_data.is_active = true; 787 expected_data.is_active = true;
787 VerifyRegistrationData(expected_data, data_out); 788 VerifyRegistrationData(expected_data, data_out);
788 EXPECT_TRUE(resources_out.empty()); 789 EXPECT_TRUE(resources_out.empty());
789 790
790 // Delete the registration. 791 // Delete the registration.
791 int64 version_id;
792 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 792 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
793 database->DeleteRegistration(data.registration_id, 793 database->DeleteRegistration(data.registration_id,
794 origin, 794 origin,
795 &version_id, 795 &deleted_version,
796 &newly_purgeable_resources)); 796 &newly_purgeable_resources));
797 EXPECT_EQ(data.registration_id, deleted_version.registration_id);
797 798
798 // Should be false because the registration is gone. 799 // Should be false because the registration is gone.
799 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 800 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
800 database->UpdateVersionToActive(data.registration_id, origin)); 801 database->UpdateVersionToActive(data.registration_id, origin));
801 } 802 }
802 803
803 TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) { 804 TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
804 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 805 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
805 GURL origin("http://example.com"); 806 GURL origin("http://example.com");
806 int64 deleted_version_id; 807 ServiceWorkerDatabase::RegistrationData deleted_version;
807 std::vector<int64> newly_purgeable_resources; 808 std::vector<int64> newly_purgeable_resources;
808 809
809 // Should be false because a registration does not exist. 810 // Should be false because a registration does not exist.
810 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 811 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
811 database->UpdateLastCheckTime(0, origin, base::Time::Now())); 812 database->UpdateLastCheckTime(0, origin, base::Time::Now()));
812 813
813 // Add a registration. 814 // Add a registration.
814 RegistrationData data; 815 RegistrationData data;
815 data.registration_id = 100; 816 data.registration_id = 100;
816 data.scope = URL(origin, "/foo"); 817 data.scope = URL(origin, "/foo");
817 data.script = URL(origin, "/script.js"); 818 data.script = URL(origin, "/script.js");
818 data.version_id = 200; 819 data.version_id = 200;
819 data.last_update_check = base::Time::Now(); 820 data.last_update_check = base::Time::Now();
820 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 821 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
821 database->WriteRegistration(data, 822 database->WriteRegistration(data,
822 std::vector<Resource>(), 823 std::vector<Resource>(),
823 &deleted_version_id, 824 &deleted_version,
824 &newly_purgeable_resources)); 825 &newly_purgeable_resources));
825 826
826 // Make sure that the registration is stored. 827 // Make sure that the registration is stored.
827 RegistrationData data_out; 828 RegistrationData data_out;
828 std::vector<Resource> resources_out; 829 std::vector<Resource> resources_out;
829 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 830 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
830 database->ReadRegistration( 831 database->ReadRegistration(
831 data.registration_id, origin, &data_out, &resources_out)); 832 data.registration_id, origin, &data_out, &resources_out));
832 VerifyRegistrationData(data, data_out); 833 VerifyRegistrationData(data, data_out);
833 EXPECT_TRUE(resources_out.empty()); 834 EXPECT_TRUE(resources_out.empty());
834 835
835 // Update the last check time. 836 // Update the last check time.
836 base::Time updated_time = base::Time::Now(); 837 base::Time updated_time = base::Time::Now();
837 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 838 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
838 database->UpdateLastCheckTime( 839 database->UpdateLastCheckTime(
839 data.registration_id, origin, updated_time)); 840 data.registration_id, origin, updated_time));
840 841
841 // Make sure that the registration is updated. 842 // Make sure that the registration is updated.
842 resources_out.clear(); 843 resources_out.clear();
843 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 844 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
844 database->ReadRegistration( 845 database->ReadRegistration(
845 data.registration_id, origin, &data_out, &resources_out)); 846 data.registration_id, origin, &data_out, &resources_out));
846 RegistrationData expected_data = data; 847 RegistrationData expected_data = data;
847 expected_data.last_update_check = updated_time; 848 expected_data.last_update_check = updated_time;
848 VerifyRegistrationData(expected_data, data_out); 849 VerifyRegistrationData(expected_data, data_out);
849 EXPECT_TRUE(resources_out.empty()); 850 EXPECT_TRUE(resources_out.empty());
850 851
851 // Delete the registration. 852 // Delete the registration.
852 int64 version_id;
853 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 853 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
854 database->DeleteRegistration(data.registration_id, 854 database->DeleteRegistration(data.registration_id,
855 origin, 855 origin,
856 &version_id, 856 &deleted_version,
857 &newly_purgeable_resources)); 857 &newly_purgeable_resources));
858 EXPECT_EQ(data.registration_id, deleted_version.registration_id);
858 859
859 // Should be false because the registration is gone. 860 // Should be false because the registration is gone.
860 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 861 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
861 database->UpdateLastCheckTime( 862 database->UpdateLastCheckTime(
862 data.registration_id, origin, base::Time::Now())); 863 data.registration_id, origin, base::Time::Now()));
863 } 864 }
864 865
865 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { 866 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
866 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 867 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
867 868
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 944
944 ids_out.clear(); 945 ids_out.clear();
945 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 946 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
946 database->GetPurgeableResourceIds(&ids_out)); 947 database->GetPurgeableResourceIds(&ids_out));
947 expected = base::STLSetDifference<std::set<int64> >(expected, ids3); 948 expected = base::STLSetDifference<std::set<int64> >(expected, ids3);
948 EXPECT_EQ(expected, ids_out); 949 EXPECT_EQ(expected, ids_out);
949 } 950 }
950 951
951 TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { 952 TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
952 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 953 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
953 int64 deleted_version_id; 954 ServiceWorkerDatabase::RegistrationData deleted_version;
954 std::vector<int64> newly_purgeable_resources; 955 std::vector<int64> newly_purgeable_resources;
955 956
956 // Data associated with |origin1| will be removed. 957 // Data associated with |origin1| will be removed.
957 GURL origin1("http://example.com"); 958 GURL origin1("http://example.com");
958 GURL origin2("http://example.org"); 959 GURL origin2("http://example.org");
959 960
960 // |origin1| has two registrations. 961 // |origin1| has two registrations.
961 RegistrationData data1; 962 RegistrationData data1;
962 data1.registration_id = 10; 963 data1.registration_id = 10;
963 data1.scope = URL(origin1, "/foo"); 964 data1.scope = URL(origin1, "/foo");
964 data1.script = URL(origin1, "/script1.js"); 965 data1.script = URL(origin1, "/script1.js");
965 data1.version_id = 100; 966 data1.version_id = 100;
966 data1.resources_total_size_bytes = 2013 + 512; 967 data1.resources_total_size_bytes = 2013 + 512;
967 968
968 std::vector<Resource> resources1; 969 std::vector<Resource> resources1;
969 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); 970 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013));
970 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); 971 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512));
971 ASSERT_EQ( 972 ASSERT_EQ(
972 ServiceWorkerDatabase::STATUS_OK, 973 ServiceWorkerDatabase::STATUS_OK,
973 database->WriteRegistration( 974 database->WriteRegistration(
974 data1, resources1, &deleted_version_id, &newly_purgeable_resources)); 975 data1, resources1, &deleted_version, &newly_purgeable_resources));
975 976
976 RegistrationData data2; 977 RegistrationData data2;
977 data2.registration_id = 11; 978 data2.registration_id = 11;
978 data2.scope = URL(origin1, "/bar"); 979 data2.scope = URL(origin1, "/bar");
979 data2.script = URL(origin1, "/script2.js"); 980 data2.script = URL(origin1, "/script2.js");
980 data2.version_id = 101; 981 data2.version_id = 101;
981 data2.resources_total_size_bytes = 4 + 5; 982 data2.resources_total_size_bytes = 4 + 5;
982 983
983 std::vector<Resource> resources2; 984 std::vector<Resource> resources2;
984 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4)); 985 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4));
985 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5)); 986 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5));
986 ASSERT_EQ( 987 ASSERT_EQ(
987 ServiceWorkerDatabase::STATUS_OK, 988 ServiceWorkerDatabase::STATUS_OK,
988 database->WriteRegistration( 989 database->WriteRegistration(
989 data2, resources2, &deleted_version_id, &newly_purgeable_resources)); 990 data2, resources2, &deleted_version, &newly_purgeable_resources));
990 991
991 // |origin2| has one registration. 992 // |origin2| has one registration.
992 RegistrationData data3; 993 RegistrationData data3;
993 data3.registration_id = 12; 994 data3.registration_id = 12;
994 data3.scope = URL(origin2, "/hoge"); 995 data3.scope = URL(origin2, "/hoge");
995 data3.script = URL(origin2, "/script3.js"); 996 data3.script = URL(origin2, "/script3.js");
996 data3.version_id = 102; 997 data3.version_id = 102;
997 data3.resources_total_size_bytes = 6 + 7; 998 data3.resources_total_size_bytes = 6 + 7;
998 999
999 std::vector<Resource> resources3; 1000 std::vector<Resource> resources3;
1000 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); 1001 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6));
1001 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); 1002 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7));
1002 ASSERT_EQ( 1003 ASSERT_EQ(
1003 ServiceWorkerDatabase::STATUS_OK, 1004 ServiceWorkerDatabase::STATUS_OK,
1004 database->WriteRegistration( 1005 database->WriteRegistration(
1005 data3, resources3, &deleted_version_id, &newly_purgeable_resources)); 1006 data3, resources3, &deleted_version, &newly_purgeable_resources));
1006 1007
1007 std::set<GURL> origins_to_delete; 1008 std::set<GURL> origins_to_delete;
1008 origins_to_delete.insert(origin1); 1009 origins_to_delete.insert(origin1);
1009 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 1010 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
1010 database->DeleteAllDataForOrigins(origins_to_delete, 1011 database->DeleteAllDataForOrigins(origins_to_delete,
1011 &newly_purgeable_resources)); 1012 &newly_purgeable_resources));
1012 1013
1013 // |origin1| should be removed from the unique origin list. 1014 // |origin1| should be removed from the unique origin list.
1014 std::set<GURL> unique_origins; 1015 std::set<GURL> unique_origins;
1015 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 1016 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 CreateDatabase(database_dir.path())); 1050 CreateDatabase(database_dir.path()));
1050 1051
1051 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); 1052 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
1052 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); 1053 ASSERT_TRUE(base::DirectoryExists(database_dir.path()));
1053 1054
1054 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); 1055 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase());
1055 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); 1056 ASSERT_FALSE(base::DirectoryExists(database_dir.path()));
1056 } 1057 }
1057 1058
1058 } // namespace content 1059 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_database.cc ('k') | content/browser/service_worker/service_worker_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698