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