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

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

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

Powered by Google App Engine
This is Rietveld 408576698