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

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

Issue 293483002: Store the service worker script and its imports on first load... really (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nix compile Created 6 years, 7 months 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 | Annotate | Revision Log
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/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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 // Opening a new database does not write anything, so its schema version 111 // Opening a new database does not write anything, so its schema version
112 // should be 0. 112 // should be 0.
113 int64 db_version = -1; 113 int64 db_version = -1;
114 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 114 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
115 database->ReadDatabaseVersion(&db_version)); 115 database->ReadDatabaseVersion(&db_version));
116 EXPECT_EQ(0u, db_version); 116 EXPECT_EQ(0u, db_version);
117 117
118 // First writing triggers database initialization and bumps the schema 118 // First writing triggers database initialization and bumps the schema
119 // version. 119 // version.
120 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 120 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
121 std::vector<int64> newly_purgeable_resources;
121 ServiceWorkerDatabase::RegistrationData data; 122 ServiceWorkerDatabase::RegistrationData data;
122 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 123 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
123 database->WriteRegistration(data, resources)); 124 database->WriteRegistration(data, resources,
125 &newly_purgeable_resources));
124 126
125 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 127 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
126 database->ReadDatabaseVersion(&db_version)); 128 database->ReadDatabaseVersion(&db_version));
127 EXPECT_LT(0, db_version); 129 EXPECT_LT(0, db_version);
128 } 130 }
129 131
130 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { 132 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
131 base::ScopedTempDir database_dir; 133 base::ScopedTempDir database_dir;
132 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); 134 ASSERT_TRUE(database_dir.CreateUniqueTempDir());
133 scoped_ptr<ServiceWorkerDatabase> database( 135 scoped_ptr<ServiceWorkerDatabase> database(
(...skipping 12 matching lines...) Expand all
146 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); 148 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
147 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 149 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
148 &ids.reg_id, &ids.ver_id, &ids.res_id)); 150 &ids.reg_id, &ids.ver_id, &ids.res_id));
149 EXPECT_EQ(0, ids.reg_id); 151 EXPECT_EQ(0, ids.reg_id);
150 EXPECT_EQ(0, ids.ver_id); 152 EXPECT_EQ(0, ids.ver_id);
151 EXPECT_EQ(0, ids.res_id); 153 EXPECT_EQ(0, ids.res_id);
152 154
153 // Writing a registration bumps the next available ids. 155 // Writing a registration bumps the next available ids.
154 std::vector<Resource> resources; 156 std::vector<Resource> resources;
155 RegistrationData data1; 157 RegistrationData data1;
158 std::vector<int64> newly_purgeable_resources;
156 data1.registration_id = 100; 159 data1.registration_id = 100;
157 data1.scope = URL(origin, "/foo"); 160 data1.scope = URL(origin, "/foo");
158 data1.script = URL(origin, "/script1.js"); 161 data1.script = URL(origin, "/script1.js");
159 data1.version_id = 200; 162 data1.version_id = 200;
160 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 163 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
161 database->WriteRegistration(data1, resources)); 164 database->WriteRegistration(data1, resources,
165 &newly_purgeable_resources));
162 166
163 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 167 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
164 &ids.reg_id, &ids.ver_id, &ids.res_id)); 168 &ids.reg_id, &ids.ver_id, &ids.res_id));
165 EXPECT_EQ(101, ids.reg_id); 169 EXPECT_EQ(101, ids.reg_id);
166 EXPECT_EQ(201, ids.ver_id); 170 EXPECT_EQ(201, ids.ver_id);
167 EXPECT_EQ(0, ids.res_id); 171 EXPECT_EQ(0, ids.res_id);
168 172
169 // Writing a registration whose ids are lower than the stored ones should not 173 // Writing a registration whose ids are lower than the stored ones should not
170 // bump the next available ids. 174 // bump the next available ids.
171 RegistrationData data2; 175 RegistrationData data2;
172 data2.registration_id = 10; 176 data2.registration_id = 10;
173 data2.scope = URL(origin, "/bar"); 177 data2.scope = URL(origin, "/bar");
174 data2.script = URL(origin, "/script2.js"); 178 data2.script = URL(origin, "/script2.js");
175 data2.version_id = 20; 179 data2.version_id = 20;
176 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 180 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
177 database->WriteRegistration(data2, resources)); 181 database->WriteRegistration(data2, resources,
182 &newly_purgeable_resources));
178 183
179 // Close and reopen the database to verify the stored values. 184 // Close and reopen the database to verify the stored values.
180 database.reset(CreateDatabase(database_dir.path())); 185 database.reset(CreateDatabase(database_dir.path()));
181 186
182 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( 187 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
183 &ids.reg_id, &ids.ver_id, &ids.res_id)); 188 &ids.reg_id, &ids.ver_id, &ids.res_id));
184 EXPECT_EQ(101, ids.reg_id); 189 EXPECT_EQ(101, ids.reg_id);
185 EXPECT_EQ(201, ids.ver_id); 190 EXPECT_EQ(201, ids.ver_id);
186 EXPECT_EQ(0, ids.res_id); 191 EXPECT_EQ(0, ids.res_id);
187 } 192 }
188 193
189 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { 194 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
190 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 195 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
191 196
192 std::set<GURL> origins; 197 std::set<GURL> origins;
193 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 198 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
194 database->GetOriginsWithRegistrations(&origins)); 199 database->GetOriginsWithRegistrations(&origins));
195 EXPECT_TRUE(origins.empty()); 200 EXPECT_TRUE(origins.empty());
196 201
197 std::vector<Resource> resources; 202 std::vector<Resource> resources;
203 std::vector<int64> newly_purgeable_resources;
198 204
199 GURL origin1("http://example.com"); 205 GURL origin1("http://example.com");
200 RegistrationData data1; 206 RegistrationData data1;
201 data1.registration_id = 123; 207 data1.registration_id = 123;
202 data1.scope = URL(origin1, "/foo"); 208 data1.scope = URL(origin1, "/foo");
203 data1.script = URL(origin1, "/script1.js"); 209 data1.script = URL(origin1, "/script1.js");
204 data1.version_id = 456; 210 data1.version_id = 456;
205 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 211 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
206 database->WriteRegistration(data1, resources)); 212 database->WriteRegistration(data1, resources,
213 &newly_purgeable_resources));
207 214
208 GURL origin2("https://www.example.com"); 215 GURL origin2("https://www.example.com");
209 RegistrationData data2; 216 RegistrationData data2;
210 data2.registration_id = 234; 217 data2.registration_id = 234;
211 data2.scope = URL(origin2, "/bar"); 218 data2.scope = URL(origin2, "/bar");
212 data2.script = URL(origin2, "/script2.js"); 219 data2.script = URL(origin2, "/script2.js");
213 data2.version_id = 567; 220 data2.version_id = 567;
214 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 221 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
215 database->WriteRegistration(data2, resources)); 222 database->WriteRegistration(data2, resources,
223 &newly_purgeable_resources));
216 224
217 GURL origin3("https://example.org"); 225 GURL origin3("https://example.org");
218 RegistrationData data3; 226 RegistrationData data3;
219 data3.registration_id = 345; 227 data3.registration_id = 345;
220 data3.scope = URL(origin3, "/hoge"); 228 data3.scope = URL(origin3, "/hoge");
221 data3.script = URL(origin3, "/script3.js"); 229 data3.script = URL(origin3, "/script3.js");
222 data3.version_id = 678; 230 data3.version_id = 678;
223 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 231 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
224 database->WriteRegistration(data3, resources)); 232 database->WriteRegistration(data3, resources,
233 &newly_purgeable_resources));
225 234
226 // |origin3| has two registrations. 235 // |origin3| has two registrations.
227 RegistrationData data4; 236 RegistrationData data4;
228 data4.registration_id = 456; 237 data4.registration_id = 456;
229 data4.scope = URL(origin3, "/fuga"); 238 data4.scope = URL(origin3, "/fuga");
230 data4.script = URL(origin3, "/script4.js"); 239 data4.script = URL(origin3, "/script4.js");
231 data4.version_id = 789; 240 data4.version_id = 789;
232 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 241 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
233 database->WriteRegistration(data4, resources)); 242 database->WriteRegistration(data4, resources,
243 &newly_purgeable_resources));
234 244
235 origins.clear(); 245 origins.clear();
236 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 246 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
237 database->GetOriginsWithRegistrations(&origins)); 247 database->GetOriginsWithRegistrations(&origins));
238 EXPECT_EQ(3U, origins.size()); 248 EXPECT_EQ(3U, origins.size());
239 EXPECT_TRUE(ContainsKey(origins, origin1)); 249 EXPECT_TRUE(ContainsKey(origins, origin1));
240 EXPECT_TRUE(ContainsKey(origins, origin2)); 250 EXPECT_TRUE(ContainsKey(origins, origin2));
241 EXPECT_TRUE(ContainsKey(origins, origin3)); 251 EXPECT_TRUE(ContainsKey(origins, origin3));
242 252
243 // |origin3| has another registration, so should not remove it from the 253 // |origin3| has another registration, so should not remove it from the
244 // unique origin list. 254 // unique origin list.
245 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 255 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
246 database->DeleteRegistration(data4.registration_id, origin3)); 256 database->DeleteRegistration(data4.registration_id, origin3,
257 &newly_purgeable_resources));
247 258
248 origins.clear(); 259 origins.clear();
249 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 260 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
250 database->GetOriginsWithRegistrations(&origins)); 261 database->GetOriginsWithRegistrations(&origins));
251 EXPECT_EQ(3U, origins.size()); 262 EXPECT_EQ(3U, origins.size());
252 EXPECT_TRUE(ContainsKey(origins, origin1)); 263 EXPECT_TRUE(ContainsKey(origins, origin1));
253 EXPECT_TRUE(ContainsKey(origins, origin2)); 264 EXPECT_TRUE(ContainsKey(origins, origin2));
254 EXPECT_TRUE(ContainsKey(origins, origin3)); 265 EXPECT_TRUE(ContainsKey(origins, origin3));
255 266
256 // |origin3| should be removed from the unique origin list. 267 // |origin3| should be removed from the unique origin list.
257 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 268 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
258 database->DeleteRegistration(data3.registration_id, origin3)); 269 database->DeleteRegistration(data3.registration_id, origin3,
270 &newly_purgeable_resources));
259 271
260 origins.clear(); 272 origins.clear();
261 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 273 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
262 database->GetOriginsWithRegistrations(&origins)); 274 database->GetOriginsWithRegistrations(&origins));
263 EXPECT_EQ(2U, origins.size()); 275 EXPECT_EQ(2U, origins.size());
264 EXPECT_TRUE(ContainsKey(origins, origin1)); 276 EXPECT_TRUE(ContainsKey(origins, origin1));
265 EXPECT_TRUE(ContainsKey(origins, origin2)); 277 EXPECT_TRUE(ContainsKey(origins, origin2));
266 } 278 }
267 279
268 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { 280 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
269 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 281 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
270 282
271 GURL origin1("http://example.com"); 283 GURL origin1("http://example.com");
272 GURL origin2("https://www.example.com"); 284 GURL origin2("https://www.example.com");
273 GURL origin3("https://example.org"); 285 GURL origin3("https://example.org");
274 286
275 std::vector<RegistrationData> registrations; 287 std::vector<RegistrationData> registrations;
276 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 288 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
277 database->GetRegistrationsForOrigin(origin1, &registrations)); 289 database->GetRegistrationsForOrigin(origin1, &registrations));
278 EXPECT_TRUE(registrations.empty()); 290 EXPECT_TRUE(registrations.empty());
279 291
280 std::vector<Resource> resources; 292 std::vector<Resource> resources;
293 std::vector<int64> newly_purgeable_resources;
281 294
282 RegistrationData data1; 295 RegistrationData data1;
283 data1.registration_id = 100; 296 data1.registration_id = 100;
284 data1.scope = URL(origin1, "/foo"); 297 data1.scope = URL(origin1, "/foo");
285 data1.script = URL(origin1, "/script1.js"); 298 data1.script = URL(origin1, "/script1.js");
286 data1.version_id = 1000; 299 data1.version_id = 1000;
287 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 300 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
288 database->WriteRegistration(data1, resources)); 301 database->WriteRegistration(data1, resources,
302 &newly_purgeable_resources));
289 303
290 RegistrationData data2; 304 RegistrationData data2;
291 data2.registration_id = 200; 305 data2.registration_id = 200;
292 data2.scope = URL(origin2, "/bar"); 306 data2.scope = URL(origin2, "/bar");
293 data2.script = URL(origin2, "/script2.js"); 307 data2.script = URL(origin2, "/script2.js");
294 data2.version_id = 2000; 308 data2.version_id = 2000;
295 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 309 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
296 database->WriteRegistration(data2, resources)); 310 database->WriteRegistration(data2, resources,
311 &newly_purgeable_resources));
297 312
298 RegistrationData data3; 313 RegistrationData data3;
299 data3.registration_id = 300; 314 data3.registration_id = 300;
300 data3.scope = URL(origin3, "/hoge"); 315 data3.scope = URL(origin3, "/hoge");
301 data3.script = URL(origin3, "/script3.js"); 316 data3.script = URL(origin3, "/script3.js");
302 data3.version_id = 3000; 317 data3.version_id = 3000;
303 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 318 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
304 database->WriteRegistration(data3, resources)); 319 database->WriteRegistration(data3, resources,
320 &newly_purgeable_resources));
305 321
306 // |origin3| has two registrations. 322 // |origin3| has two registrations.
307 RegistrationData data4; 323 RegistrationData data4;
308 data4.registration_id = 400; 324 data4.registration_id = 400;
309 data4.scope = URL(origin3, "/fuga"); 325 data4.scope = URL(origin3, "/fuga");
310 data4.script = URL(origin3, "/script4.js"); 326 data4.script = URL(origin3, "/script4.js");
311 data4.version_id = 4000; 327 data4.version_id = 4000;
312 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 328 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
313 database->WriteRegistration(data4, resources)); 329 database->WriteRegistration(data4, resources,
330 &newly_purgeable_resources));
314 331
315 registrations.clear(); 332 registrations.clear();
316 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 333 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
317 database->GetRegistrationsForOrigin(origin3, &registrations)); 334 database->GetRegistrationsForOrigin(origin3, &registrations));
318 EXPECT_EQ(2U, registrations.size()); 335 EXPECT_EQ(2U, registrations.size());
319 VerifyRegistrationData(data3, registrations[0]); 336 VerifyRegistrationData(data3, registrations[0]);
320 VerifyRegistrationData(data4, registrations[1]); 337 VerifyRegistrationData(data4, registrations[1]);
321 } 338 }
322 339
323 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { 340 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
324 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 341 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
325 342
326 std::vector<RegistrationData> registrations; 343 std::vector<RegistrationData> registrations;
327 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 344 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
328 database->GetAllRegistrations(&registrations)); 345 database->GetAllRegistrations(&registrations));
329 EXPECT_TRUE(registrations.empty()); 346 EXPECT_TRUE(registrations.empty());
330 347
331 std::vector<Resource> resources; 348 std::vector<Resource> resources;
349 std::vector<int64> newly_purgeable_resources;
332 350
333 GURL origin1("http://www1.example.com"); 351 GURL origin1("http://www1.example.com");
334 RegistrationData data1; 352 RegistrationData data1;
335 data1.registration_id = 100; 353 data1.registration_id = 100;
336 data1.scope = URL(origin1, "/foo"); 354 data1.scope = URL(origin1, "/foo");
337 data1.script = URL(origin1, "/script1.js"); 355 data1.script = URL(origin1, "/script1.js");
338 data1.version_id = 1000; 356 data1.version_id = 1000;
339 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 357 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
340 database->WriteRegistration(data1, resources)); 358 database->WriteRegistration(data1, resources,
359 &newly_purgeable_resources));
341 360
342 GURL origin2("http://www2.example.com"); 361 GURL origin2("http://www2.example.com");
343 RegistrationData data2; 362 RegistrationData data2;
344 data2.registration_id = 200; 363 data2.registration_id = 200;
345 data2.scope = URL(origin2, "/bar"); 364 data2.scope = URL(origin2, "/bar");
346 data2.script = URL(origin2, "/script2.js"); 365 data2.script = URL(origin2, "/script2.js");
347 data2.version_id = 2000; 366 data2.version_id = 2000;
348 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 367 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
349 database->WriteRegistration(data2, resources)); 368 database->WriteRegistration(data2, resources,
369 &newly_purgeable_resources));
350 370
351 GURL origin3("http://www3.example.com"); 371 GURL origin3("http://www3.example.com");
352 RegistrationData data3; 372 RegistrationData data3;
353 data3.registration_id = 300; 373 data3.registration_id = 300;
354 data3.scope = URL(origin3, "/hoge"); 374 data3.scope = URL(origin3, "/hoge");
355 data3.script = URL(origin3, "/script3.js"); 375 data3.script = URL(origin3, "/script3.js");
356 data3.version_id = 3000; 376 data3.version_id = 3000;
357 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 377 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
358 database->WriteRegistration(data3, resources)); 378 database->WriteRegistration(data3, resources,
379 &newly_purgeable_resources));
359 380
360 // |origin3| has two registrations. 381 // |origin3| has two registrations.
361 RegistrationData data4; 382 RegistrationData data4;
362 data4.registration_id = 400; 383 data4.registration_id = 400;
363 data4.scope = URL(origin3, "/fuga"); 384 data4.scope = URL(origin3, "/fuga");
364 data4.script = URL(origin3, "/script4.js"); 385 data4.script = URL(origin3, "/script4.js");
365 data4.version_id = 4000; 386 data4.version_id = 4000;
366 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 387 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
367 database->WriteRegistration(data4, resources)); 388 database->WriteRegistration(data4, resources,
389 &newly_purgeable_resources));
368 390
369 registrations.clear(); 391 registrations.clear();
370 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 392 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
371 database->GetAllRegistrations(&registrations)); 393 database->GetAllRegistrations(&registrations));
372 EXPECT_EQ(4U, registrations.size()); 394 EXPECT_EQ(4U, registrations.size());
373 VerifyRegistrationData(data1, registrations[0]); 395 VerifyRegistrationData(data1, registrations[0]);
374 VerifyRegistrationData(data2, registrations[1]); 396 VerifyRegistrationData(data2, registrations[1]);
375 VerifyRegistrationData(data3, registrations[2]); 397 VerifyRegistrationData(data3, registrations[2]);
376 VerifyRegistrationData(data4, registrations[3]); 398 VerifyRegistrationData(data4, registrations[3]);
377 } 399 }
(...skipping 17 matching lines...) Expand all
395 // the uncommitted list. 417 // the uncommitted list.
396 std::set<int64> uncommitted_ids; 418 std::set<int64> uncommitted_ids;
397 uncommitted_ids.insert(resources[0].resource_id); 419 uncommitted_ids.insert(resources[0].resource_id);
398 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 420 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
399 database->WriteUncommittedResourceIds(uncommitted_ids)); 421 database->WriteUncommittedResourceIds(uncommitted_ids));
400 std::set<int64> uncommitted_ids_out; 422 std::set<int64> uncommitted_ids_out;
401 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 423 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
402 database->GetUncommittedResourceIds(&uncommitted_ids_out)); 424 database->GetUncommittedResourceIds(&uncommitted_ids_out));
403 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); 425 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out);
404 426
427 std::vector<int64> newly_purgeable_resources;
405 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 428 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
406 database->WriteRegistration(data, resources)); 429 database->WriteRegistration(data, resources,
430 &newly_purgeable_resources));
407 431
408 // Make sure that the registration and resource records are stored. 432 // Make sure that the registration and resource records are stored.
409 RegistrationData data_out; 433 RegistrationData data_out;
410 std::vector<Resource> resources_out; 434 std::vector<Resource> resources_out;
411 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 435 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
412 database->ReadRegistration( 436 database->ReadRegistration(
413 data.registration_id, origin, &data_out, &resources_out)); 437 data.registration_id, origin, &data_out, &resources_out));
414 VerifyRegistrationData(data, data_out); 438 VerifyRegistrationData(data, data_out);
415 VerifyResourceRecords(resources, resources_out); 439 VerifyResourceRecords(resources, resources_out);
416 440
417 // Make sure that the resource is removed from the uncommitted list. 441 // Make sure that the resource is removed from the uncommitted list.
418 uncommitted_ids_out.clear(); 442 uncommitted_ids_out.clear();
419 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 443 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
420 database->GetUncommittedResourceIds(&uncommitted_ids_out)); 444 database->GetUncommittedResourceIds(&uncommitted_ids_out));
421 EXPECT_TRUE(uncommitted_ids_out.empty()); 445 EXPECT_TRUE(uncommitted_ids_out.empty());
422 446
423 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 447 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
424 database->DeleteRegistration(data.registration_id, origin)); 448 database->DeleteRegistration(data.registration_id, origin,
449 &newly_purgeable_resources));
450 ASSERT_EQ(resources.size(), newly_purgeable_resources.size());
451 for (size_t i = 0; i < resources.size(); ++i)
452 EXPECT_EQ(newly_purgeable_resources[i], resources[i].resource_id);
425 453
426 // Make sure that the registration and resource records are gone. 454 // Make sure that the registration and resource records are gone.
427 resources_out.clear(); 455 resources_out.clear();
428 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 456 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
429 database->ReadRegistration( 457 database->ReadRegistration(
430 data.registration_id, origin, &data_out, &resources_out)); 458 data.registration_id, origin, &data_out, &resources_out));
431 EXPECT_TRUE(resources_out.empty()); 459 EXPECT_TRUE(resources_out.empty());
432 460
433 // Resources should be purgeable because these are no longer referred. 461 // Resources should be purgeable because these are no longer referred.
434 std::set<int64> purgeable_ids_out; 462 std::set<int64> purgeable_ids_out;
(...skipping 10 matching lines...) Expand all
445 GURL origin("http://example.com"); 473 GURL origin("http://example.com");
446 RegistrationData data; 474 RegistrationData data;
447 data.registration_id = 100; 475 data.registration_id = 100;
448 data.scope = URL(origin, "/foo"); 476 data.scope = URL(origin, "/foo");
449 data.script = URL(origin, "/script.js"); 477 data.script = URL(origin, "/script.js");
450 data.version_id = 200; 478 data.version_id = 200;
451 479
452 std::vector<Resource> resources1; 480 std::vector<Resource> resources1;
453 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); 481 resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
454 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); 482 resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
483 std::vector<int64> newly_purgeable_resources;
455 484
456 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 485 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
457 database->WriteRegistration(data, resources1)); 486 database->WriteRegistration(data, resources1,
487 &newly_purgeable_resources));
488 EXPECT_TRUE(newly_purgeable_resources.empty());
458 489
459 // Make sure that the registration and resource records are stored. 490 // Make sure that the registration and resource records are stored.
460 RegistrationData data_out; 491 RegistrationData data_out;
461 std::vector<Resource> resources_out; 492 std::vector<Resource> resources_out;
462 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 493 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
463 data.registration_id, origin, &data_out, &resources_out)); 494 data.registration_id, origin, &data_out, &resources_out));
464 VerifyRegistrationData(data, data_out); 495 VerifyRegistrationData(data, data_out);
465 VerifyResourceRecords(resources1, resources_out); 496 VerifyResourceRecords(resources1, resources_out);
466 497
467 // Update the registration. 498 // Update the registration.
468 RegistrationData updated_data = data; 499 RegistrationData updated_data = data;
469 updated_data.version_id = data.version_id + 1; 500 updated_data.version_id = data.version_id + 1;
470 std::vector<Resource> resources2; 501 std::vector<Resource> resources2;
471 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); 502 resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
472 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); 503 resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
473 504
474 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 505 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
475 database->WriteRegistration(updated_data, resources2)); 506 database->WriteRegistration(updated_data, resources2,
507 &newly_purgeable_resources));
508 ASSERT_EQ(resources1.size(), newly_purgeable_resources.size());
509 for(size_t i = 0; i < resources1.size(); ++i)
510 EXPECT_EQ(newly_purgeable_resources[i], resources1[i].resource_id);
476 511
477 // Make sure that |updated_data| is stored and resources referred from |data| 512 // Make sure that |updated_data| is stored and resources referred from |data|
478 // is moved to the purgeable list. 513 // is moved to the purgeable list.
479 resources_out.clear(); 514 resources_out.clear();
480 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 515 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
481 updated_data.registration_id, origin, &data_out, &resources_out)); 516 updated_data.registration_id, origin, &data_out, &resources_out));
482 VerifyRegistrationData(updated_data, data_out); 517 VerifyRegistrationData(updated_data, data_out);
483 VerifyResourceRecords(resources2, resources_out); 518 VerifyResourceRecords(resources2, resources_out);
484 519
485 std::set<int64> purgeable_ids_out; 520 std::set<int64> purgeable_ids_out;
486 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 521 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
487 database->GetPurgeableResourceIds(&purgeable_ids_out)); 522 database->GetPurgeableResourceIds(&purgeable_ids_out));
488 EXPECT_EQ(2u, purgeable_ids_out.size()); 523 EXPECT_EQ(2u, purgeable_ids_out.size());
489 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 524 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
490 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 525 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
491 } 526 }
492 527
493 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { 528 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
494 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 529 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
495 GURL origin("http://example.com"); 530 GURL origin("http://example.com");
496 531
532 std::vector<int64> newly_purgeable_resources;
533
497 // Add registration1. 534 // Add registration1.
498 RegistrationData data1; 535 RegistrationData data1;
499 data1.registration_id = 100; 536 data1.registration_id = 100;
500 data1.scope = URL(origin, "/foo"); 537 data1.scope = URL(origin, "/foo");
501 data1.script = URL(origin, "/script1.js"); 538 data1.script = URL(origin, "/script1.js");
502 data1.version_id = 200; 539 data1.version_id = 200;
503 540
504 std::vector<Resource> resources1; 541 std::vector<Resource> resources1;
505 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); 542 resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
506 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); 543 resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
507 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 544 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
508 database->WriteRegistration(data1, resources1)); 545 database->WriteRegistration(data1, resources1,
546 &newly_purgeable_resources));
509 547
510 // Add registration2. 548 // Add registration2.
511 RegistrationData data2; 549 RegistrationData data2;
512 data2.registration_id = 101; 550 data2.registration_id = 101;
513 data2.scope = URL(origin, "/bar"); 551 data2.scope = URL(origin, "/bar");
514 data2.script = URL(origin, "/script2.js"); 552 data2.script = URL(origin, "/script2.js");
515 data2.version_id = 201; 553 data2.version_id = 201;
516 554
517 std::vector<Resource> resources2; 555 std::vector<Resource> resources2;
518 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); 556 resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
519 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); 557 resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
520 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 558 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
521 database->WriteRegistration(data2, resources2)); 559 database->WriteRegistration(data2, resources2,
560 &newly_purgeable_resources));
522 561
523 // Make sure that registration1 is stored. 562 // Make sure that registration1 is stored.
524 RegistrationData data_out; 563 RegistrationData data_out;
525 std::vector<Resource> resources_out; 564 std::vector<Resource> resources_out;
526 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 565 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
527 data1.registration_id, origin, &data_out, &resources_out)); 566 data1.registration_id, origin, &data_out, &resources_out));
528 VerifyRegistrationData(data1, data_out); 567 VerifyRegistrationData(data1, data_out);
529 VerifyResourceRecords(resources1, resources_out); 568 VerifyResourceRecords(resources1, resources_out);
530 569
531 // Make sure that registration2 is also stored. 570 // Make sure that registration2 is also stored.
532 resources_out.clear(); 571 resources_out.clear();
533 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 572 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
534 data2.registration_id, origin, &data_out, &resources_out)); 573 data2.registration_id, origin, &data_out, &resources_out));
535 VerifyRegistrationData(data2, data_out); 574 VerifyRegistrationData(data2, data_out);
536 VerifyResourceRecords(resources2, resources_out); 575 VerifyResourceRecords(resources2, resources_out);
537 576
538 std::set<int64> purgeable_ids_out; 577 std::set<int64> purgeable_ids_out;
539 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 578 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
540 database->GetPurgeableResourceIds(&purgeable_ids_out)); 579 database->GetPurgeableResourceIds(&purgeable_ids_out));
541 EXPECT_TRUE(purgeable_ids_out.empty()); 580 EXPECT_TRUE(purgeable_ids_out.empty());
542 581
543 // Delete registration1. 582 // Delete registration1.
544 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 583 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
545 database->DeleteRegistration(data1.registration_id, origin)); 584 database->DeleteRegistration(data1.registration_id, origin,
585 &newly_purgeable_resources));
546 586
547 // Make sure that registration1 is gone. 587 // Make sure that registration1 is gone.
548 resources_out.clear(); 588 resources_out.clear();
549 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 589 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
550 database->ReadRegistration( 590 database->ReadRegistration(
551 data1.registration_id, origin, &data_out, &resources_out)); 591 data1.registration_id, origin, &data_out, &resources_out));
552 EXPECT_TRUE(resources_out.empty()); 592 EXPECT_TRUE(resources_out.empty());
553 593
554 purgeable_ids_out.clear(); 594 purgeable_ids_out.clear();
555 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 595 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
556 database->GetPurgeableResourceIds(&purgeable_ids_out)); 596 database->GetPurgeableResourceIds(&purgeable_ids_out));
557 EXPECT_EQ(2u, purgeable_ids_out.size()); 597 EXPECT_EQ(2u, purgeable_ids_out.size());
558 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 598 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
559 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 599 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
560 600
561 // Make sure that registration2 is still alive. 601 // Make sure that registration2 is still alive.
562 resources_out.clear(); 602 resources_out.clear();
563 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( 603 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
564 data2.registration_id, origin, &data_out, &resources_out)); 604 data2.registration_id, origin, &data_out, &resources_out));
565 VerifyRegistrationData(data2, data_out); 605 VerifyRegistrationData(data2, data_out);
566 VerifyResourceRecords(resources2, resources_out); 606 VerifyResourceRecords(resources2, resources_out);
567 } 607 }
568 608
569 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { 609 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
570 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 610 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
571 GURL origin("http://example.com"); 611 GURL origin("http://example.com");
572 612
613 std::vector<int64> newly_purgeable_resources;
614
573 // Should be false because a registration does not exist. 615 // Should be false because a registration does not exist.
574 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 616 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
575 database->UpdateVersionToActive(0, origin)); 617 database->UpdateVersionToActive(0, origin));
576 618
577 // Add a registration. 619 // Add a registration.
578 RegistrationData data; 620 RegistrationData data;
579 data.registration_id = 100; 621 data.registration_id = 100;
580 data.scope = URL(origin, "/foo"); 622 data.scope = URL(origin, "/foo");
581 data.script = URL(origin, "/script.js"); 623 data.script = URL(origin, "/script.js");
582 data.version_id = 200; 624 data.version_id = 200;
583 data.is_active = false; 625 data.is_active = false;
584 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 626 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
585 database->WriteRegistration(data, std::vector<Resource>())); 627 database->WriteRegistration(data, std::vector<Resource>(),
628 &newly_purgeable_resources));
586 629
587 // Make sure that the registration is stored. 630 // Make sure that the registration is stored.
588 RegistrationData data_out; 631 RegistrationData data_out;
589 std::vector<Resource> resources_out; 632 std::vector<Resource> resources_out;
590 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 633 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
591 database->ReadRegistration( 634 database->ReadRegistration(
592 data.registration_id, origin, &data_out, &resources_out)); 635 data.registration_id, origin, &data_out, &resources_out));
593 VerifyRegistrationData(data, data_out); 636 VerifyRegistrationData(data, data_out);
594 EXPECT_TRUE(resources_out.empty()); 637 EXPECT_TRUE(resources_out.empty());
595 638
596 // Activate the registration. 639 // Activate the registration.
597 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
598 database->UpdateVersionToActive(data.registration_id, origin)); 641 database->UpdateVersionToActive(data.registration_id, origin));
599 642
600 // Make sure that the registration is activated. 643 // Make sure that the registration is activated.
601 resources_out.clear(); 644 resources_out.clear();
602 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 645 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
603 database->ReadRegistration( 646 database->ReadRegistration(
604 data.registration_id, origin, &data_out, &resources_out)); 647 data.registration_id, origin, &data_out, &resources_out));
605 RegistrationData expected_data = data; 648 RegistrationData expected_data = data;
606 expected_data.is_active = true; 649 expected_data.is_active = true;
607 VerifyRegistrationData(expected_data, data_out); 650 VerifyRegistrationData(expected_data, data_out);
608 EXPECT_TRUE(resources_out.empty()); 651 EXPECT_TRUE(resources_out.empty());
609 652
610 // Delete the registration. 653 // Delete the registration.
611 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 654 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
612 database->DeleteRegistration(data.registration_id, origin)); 655 database->DeleteRegistration(data.registration_id, origin,
656 &newly_purgeable_resources));
613 657
614 // Should be false because the registration is gone. 658 // Should be false because the registration is gone.
615 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 659 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
616 database->UpdateVersionToActive(data.registration_id, origin)); 660 database->UpdateVersionToActive(data.registration_id, origin));
617 } 661 }
618 662
619 TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) { 663 TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
620 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 664 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
621 GURL origin("http://example.com"); 665 GURL origin("http://example.com");
666 std::vector<int64> newly_purgeable_resources;
622 667
623 // Should be false because a registration does not exist. 668 // Should be false because a registration does not exist.
624 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 669 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
625 database->UpdateLastCheckTime(0, origin, base::Time::Now())); 670 database->UpdateLastCheckTime(0, origin, base::Time::Now()));
626 671
627 // Add a registration. 672 // Add a registration.
628 RegistrationData data; 673 RegistrationData data;
629 data.registration_id = 100; 674 data.registration_id = 100;
630 data.scope = URL(origin, "/foo"); 675 data.scope = URL(origin, "/foo");
631 data.script = URL(origin, "/script.js"); 676 data.script = URL(origin, "/script.js");
632 data.version_id = 200; 677 data.version_id = 200;
633 data.last_update_check = base::Time::Now(); 678 data.last_update_check = base::Time::Now();
634 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 679 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
635 database->WriteRegistration(data, std::vector<Resource>())); 680 database->WriteRegistration(data, std::vector<Resource>(),
681 &newly_purgeable_resources));
636 682
637 // Make sure that the registration is stored. 683 // Make sure that the registration is stored.
638 RegistrationData data_out; 684 RegistrationData data_out;
639 std::vector<Resource> resources_out; 685 std::vector<Resource> resources_out;
640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 686 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
641 database->ReadRegistration( 687 database->ReadRegistration(
642 data.registration_id, origin, &data_out, &resources_out)); 688 data.registration_id, origin, &data_out, &resources_out));
643 VerifyRegistrationData(data, data_out); 689 VerifyRegistrationData(data, data_out);
644 EXPECT_TRUE(resources_out.empty()); 690 EXPECT_TRUE(resources_out.empty());
645 691
646 // Update the last check time. 692 // Update the last check time.
647 base::Time updated_time = base::Time::Now(); 693 base::Time updated_time = base::Time::Now();
648 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 694 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
649 database->UpdateLastCheckTime( 695 database->UpdateLastCheckTime(
650 data.registration_id, origin, updated_time)); 696 data.registration_id, origin, updated_time));
651 697
652 // Make sure that the registration is updated. 698 // Make sure that the registration is updated.
653 resources_out.clear(); 699 resources_out.clear();
654 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 700 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
655 database->ReadRegistration( 701 database->ReadRegistration(
656 data.registration_id, origin, &data_out, &resources_out)); 702 data.registration_id, origin, &data_out, &resources_out));
657 RegistrationData expected_data = data; 703 RegistrationData expected_data = data;
658 expected_data.last_update_check = updated_time; 704 expected_data.last_update_check = updated_time;
659 VerifyRegistrationData(expected_data, data_out); 705 VerifyRegistrationData(expected_data, data_out);
660 EXPECT_TRUE(resources_out.empty()); 706 EXPECT_TRUE(resources_out.empty());
661 707
662 // Delete the registration. 708 // Delete the registration.
663 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 709 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
664 database->DeleteRegistration(data.registration_id, origin)); 710 database->DeleteRegistration(data.registration_id, origin,
711 &newly_purgeable_resources));
665 712
666 // Should be false because the registration is gone. 713 // Should be false because the registration is gone.
667 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, 714 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
668 database->UpdateLastCheckTime( 715 database->UpdateLastCheckTime(
669 data.registration_id, origin, base::Time::Now())); 716 data.registration_id, origin, base::Time::Now()));
670 } 717 }
671 718
672 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { 719 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
673 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 720 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
674 721
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 797
751 ids_out.clear(); 798 ids_out.clear();
752 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 799 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
753 database->GetPurgeableResourceIds(&ids_out)); 800 database->GetPurgeableResourceIds(&ids_out));
754 expected = base::STLSetDifference<std::set<int64> >(expected, ids3); 801 expected = base::STLSetDifference<std::set<int64> >(expected, ids3);
755 EXPECT_EQ(expected, ids_out); 802 EXPECT_EQ(expected, ids_out);
756 } 803 }
757 804
758 TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) { 805 TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
759 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 806 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
807 std::vector<int64> newly_purgeable_resources;
760 808
761 // Data associated with |origin1| will be removed. 809 // Data associated with |origin1| will be removed.
762 GURL origin1("http://example.com"); 810 GURL origin1("http://example.com");
763 GURL origin2("http://example.org"); 811 GURL origin2("http://example.org");
764 812
765 // |origin1| has two registrations. 813 // |origin1| has two registrations.
766 RegistrationData data1; 814 RegistrationData data1;
767 data1.registration_id = 10; 815 data1.registration_id = 10;
768 data1.scope = URL(origin1, "/foo"); 816 data1.scope = URL(origin1, "/foo");
769 data1.script = URL(origin1, "/script1.js"); 817 data1.script = URL(origin1, "/script1.js");
770 data1.version_id = 100; 818 data1.version_id = 100;
771 819
772 std::vector<Resource> resources1; 820 std::vector<Resource> resources1;
773 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"))); 821 resources1.push_back(CreateResource(1, URL(origin1, "/resource1")));
774 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"))); 822 resources1.push_back(CreateResource(2, URL(origin1, "/resource2")));
775 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 823 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
776 database->WriteRegistration(data1, resources1)); 824 database->WriteRegistration(data1, resources1,
825 &newly_purgeable_resources));
777 826
778 RegistrationData data2; 827 RegistrationData data2;
779 data2.registration_id = 11; 828 data2.registration_id = 11;
780 data2.scope = URL(origin1, "/bar"); 829 data2.scope = URL(origin1, "/bar");
781 data2.script = URL(origin1, "/script2.js"); 830 data2.script = URL(origin1, "/script2.js");
782 data2.version_id = 101; 831 data2.version_id = 101;
783 832
784 std::vector<Resource> resources2; 833 std::vector<Resource> resources2;
785 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"))); 834 resources2.push_back(CreateResource(3, URL(origin1, "/resource3")));
786 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"))); 835 resources2.push_back(CreateResource(4, URL(origin1, "/resource4")));
787 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 836 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
788 database->WriteRegistration(data2, resources2)); 837 database->WriteRegistration(data2, resources2,
838 &newly_purgeable_resources));
789 839
790 // |origin2| has one registration. 840 // |origin2| has one registration.
791 RegistrationData data3; 841 RegistrationData data3;
792 data3.registration_id = 12; 842 data3.registration_id = 12;
793 data3.scope = URL(origin2, "/hoge"); 843 data3.scope = URL(origin2, "/hoge");
794 data3.script = URL(origin2, "/script3.js"); 844 data3.script = URL(origin2, "/script3.js");
795 data3.version_id = 102; 845 data3.version_id = 102;
796 846
797 std::vector<Resource> resources3; 847 std::vector<Resource> resources3;
798 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); 848 resources3.push_back(CreateResource(5, URL(origin2, "/resource5")));
799 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); 849 resources3.push_back(CreateResource(6, URL(origin2, "/resource6")));
800 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, 850 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
801 database->WriteRegistration(data3, resources3)); 851 database->WriteRegistration(data3, resources3,
852 &newly_purgeable_resources));
802 853
803 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 854 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
804 database->DeleteAllDataForOrigin(origin1)); 855 database->DeleteAllDataForOrigin(origin1,
856 &newly_purgeable_resources));
805 857
806 // |origin1| should be removed from the unique origin list. 858 // |origin1| should be removed from the unique origin list.
807 std::set<GURL> unique_origins; 859 std::set<GURL> unique_origins;
808 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 860 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
809 database->GetOriginsWithRegistrations(&unique_origins)); 861 database->GetOriginsWithRegistrations(&unique_origins));
810 EXPECT_EQ(1u, unique_origins.size()); 862 EXPECT_EQ(1u, unique_origins.size());
811 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); 863 EXPECT_TRUE(ContainsKey(unique_origins, origin2));
812 864
813 // The registrations for |origin1| should be removed. 865 // The registrations for |origin1| should be removed.
814 std::vector<RegistrationData> registrations; 866 std::vector<RegistrationData> registrations;
(...skipping 14 matching lines...) Expand all
829 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, 881 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
830 database->GetPurgeableResourceIds(&purgeable_ids_out)); 882 database->GetPurgeableResourceIds(&purgeable_ids_out));
831 EXPECT_EQ(4u, purgeable_ids_out.size()); 883 EXPECT_EQ(4u, purgeable_ids_out.size());
832 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); 884 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1));
833 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); 885 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2));
834 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); 886 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3));
835 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); 887 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4));
836 } 888 }
837 889
838 } // namespace content 890 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_database.cc ('k') | content/browser/service_worker/service_worker_disk_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698