OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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, ®istrations)); | 289 database->GetRegistrationsForOrigin(origin1, ®istrations)); |
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, ®istrations)); | 334 database->GetRegistrationsForOrigin(origin3, ®istrations)); |
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(®istrations)); | 345 database->GetAllRegistrations(®istrations)); |
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(®istrations)); | 393 database->GetAllRegistrations(®istrations)); |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |