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

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

Issue 284123003: ServiceWorker: DB functions should return status code instead of boolean (3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_database.h" 5 #include "content/browser/service_worker/service_worker_database.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 // Opening a new database does not write anything, so its schema version 108 // Opening a new database does not write anything, so its schema version
109 // should be 0. 109 // should be 0.
110 int64 db_version = -1; 110 int64 db_version = -1;
111 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version)); 111 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version));
112 EXPECT_EQ(0u, db_version); 112 EXPECT_EQ(0u, db_version);
113 113
114 // First writing triggers database initialization and bumps the schema 114 // First writing triggers database initialization and bumps the schema
115 // version. 115 // version.
116 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 116 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
117 ServiceWorkerDatabase::RegistrationData data; 117 ServiceWorkerDatabase::RegistrationData data;
118 ASSERT_TRUE(database->WriteRegistration(data, resources)); 118 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources));
119 119
120 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version)); 120 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadDatabaseVersion(&db_version));
121 EXPECT_LT(0, db_version); 121 EXPECT_LT(0, db_version);
122 } 122 }
123 123
124 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { 124 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
125 base::ScopedTempDir database_dir; 125 base::ScopedTempDir database_dir;
126 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); 126 ASSERT_TRUE(database_dir.CreateUniqueTempDir());
127 scoped_ptr<ServiceWorkerDatabase> database( 127 scoped_ptr<ServiceWorkerDatabase> database(
128 CreateDatabase(database_dir.path())); 128 CreateDatabase(database_dir.path()));
(...skipping 15 matching lines...) Expand all
144 EXPECT_EQ(0, ids.ver_id); 144 EXPECT_EQ(0, ids.ver_id);
145 EXPECT_EQ(0, ids.res_id); 145 EXPECT_EQ(0, ids.res_id);
146 146
147 // Writing a registration bumps the next available ids. 147 // Writing a registration bumps the next available ids.
148 std::vector<Resource> resources; 148 std::vector<Resource> resources;
149 RegistrationData data1; 149 RegistrationData data1;
150 data1.registration_id = 100; 150 data1.registration_id = 100;
151 data1.scope = URL(origin, "/foo"); 151 data1.scope = URL(origin, "/foo");
152 data1.script = URL(origin, "/script1.js"); 152 data1.script = URL(origin, "/script1.js");
153 data1.version_id = 200; 153 data1.version_id = 200;
154 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 154 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources));
155 155
156 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( 156 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds(
157 &ids.reg_id, &ids.ver_id, &ids.res_id)); 157 &ids.reg_id, &ids.ver_id, &ids.res_id));
158 EXPECT_EQ(101, ids.reg_id); 158 EXPECT_EQ(101, ids.reg_id);
159 EXPECT_EQ(201, ids.ver_id); 159 EXPECT_EQ(201, ids.ver_id);
160 EXPECT_EQ(0, ids.res_id); 160 EXPECT_EQ(0, ids.res_id);
161 161
162 // Writing a registration whose ids are lower than the stored ones should not 162 // Writing a registration whose ids are lower than the stored ones should not
163 // bump the next available ids. 163 // bump the next available ids.
164 RegistrationData data2; 164 RegistrationData data2;
165 data2.registration_id = 10; 165 data2.registration_id = 10;
166 data2.scope = URL(origin, "/bar"); 166 data2.scope = URL(origin, "/bar");
167 data2.script = URL(origin, "/script2.js"); 167 data2.script = URL(origin, "/script2.js");
168 data2.version_id = 20; 168 data2.version_id = 20;
169 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 169 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources));
170 170
171 // Close and reopen the database to verify the stored values. 171 // Close and reopen the database to verify the stored values.
172 database.reset(CreateDatabase(database_dir.path())); 172 database.reset(CreateDatabase(database_dir.path()));
173 173
174 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds( 174 EXPECT_EQ(SERVICE_WORKER_OK, database->GetNextAvailableIds(
175 &ids.reg_id, &ids.ver_id, &ids.res_id)); 175 &ids.reg_id, &ids.ver_id, &ids.res_id));
176 EXPECT_EQ(101, ids.reg_id); 176 EXPECT_EQ(101, ids.reg_id);
177 EXPECT_EQ(201, ids.ver_id); 177 EXPECT_EQ(201, ids.ver_id);
178 EXPECT_EQ(0, ids.res_id); 178 EXPECT_EQ(0, ids.res_id);
179 } 179 }
180 180
181 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { 181 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
182 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 182 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
183 183
184 std::set<GURL> origins; 184 std::set<GURL> origins;
185 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); 185 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins));
186 EXPECT_TRUE(origins.empty()); 186 EXPECT_TRUE(origins.empty());
187 187
188 std::vector<Resource> resources; 188 std::vector<Resource> resources;
189 189
190 GURL origin1("http://example.com"); 190 GURL origin1("http://example.com");
191 RegistrationData data1; 191 RegistrationData data1;
192 data1.registration_id = 123; 192 data1.registration_id = 123;
193 data1.scope = URL(origin1, "/foo"); 193 data1.scope = URL(origin1, "/foo");
194 data1.script = URL(origin1, "/script1.js"); 194 data1.script = URL(origin1, "/script1.js");
195 data1.version_id = 456; 195 data1.version_id = 456;
196 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 196 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources));
197 197
198 GURL origin2("https://www.example.com"); 198 GURL origin2("https://www.example.com");
199 RegistrationData data2; 199 RegistrationData data2;
200 data2.registration_id = 234; 200 data2.registration_id = 234;
201 data2.scope = URL(origin2, "/bar"); 201 data2.scope = URL(origin2, "/bar");
202 data2.script = URL(origin2, "/script2.js"); 202 data2.script = URL(origin2, "/script2.js");
203 data2.version_id = 567; 203 data2.version_id = 567;
204 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 204 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources));
205 205
206 GURL origin3("https://example.org"); 206 GURL origin3("https://example.org");
207 RegistrationData data3; 207 RegistrationData data3;
208 data3.registration_id = 345; 208 data3.registration_id = 345;
209 data3.scope = URL(origin3, "/hoge"); 209 data3.scope = URL(origin3, "/hoge");
210 data3.script = URL(origin3, "/script3.js"); 210 data3.script = URL(origin3, "/script3.js");
211 data3.version_id = 678; 211 data3.version_id = 678;
212 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 212 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources));
213 213
214 // |origin3| has two registrations. 214 // |origin3| has two registrations.
215 RegistrationData data4; 215 RegistrationData data4;
216 data4.registration_id = 456; 216 data4.registration_id = 456;
217 data4.scope = URL(origin3, "/fuga"); 217 data4.scope = URL(origin3, "/fuga");
218 data4.script = URL(origin3, "/script4.js"); 218 data4.script = URL(origin3, "/script4.js");
219 data4.version_id = 789; 219 data4.version_id = 789;
220 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 220 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources));
221 221
222 origins.clear(); 222 origins.clear();
223 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); 223 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins));
224 EXPECT_EQ(3U, origins.size()); 224 EXPECT_EQ(3U, origins.size());
225 EXPECT_TRUE(ContainsKey(origins, origin1)); 225 EXPECT_TRUE(ContainsKey(origins, origin1));
226 EXPECT_TRUE(ContainsKey(origins, origin2)); 226 EXPECT_TRUE(ContainsKey(origins, origin2));
227 EXPECT_TRUE(ContainsKey(origins, origin3)); 227 EXPECT_TRUE(ContainsKey(origins, origin3));
228 228
229 // |origin3| has another registration, so should not remove it from the 229 // |origin3| has another registration, so should not remove it from the
230 // unique origin list. 230 // unique origin list.
231 ASSERT_TRUE(database->DeleteRegistration(data4.registration_id, origin3)); 231 ASSERT_EQ(SERVICE_WORKER_OK,
232 database->DeleteRegistration(data4.registration_id, origin3));
232 233
233 origins.clear(); 234 origins.clear();
234 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); 235 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins));
235 EXPECT_EQ(3U, origins.size()); 236 EXPECT_EQ(3U, origins.size());
236 EXPECT_TRUE(ContainsKey(origins, origin1)); 237 EXPECT_TRUE(ContainsKey(origins, origin1));
237 EXPECT_TRUE(ContainsKey(origins, origin2)); 238 EXPECT_TRUE(ContainsKey(origins, origin2));
238 EXPECT_TRUE(ContainsKey(origins, origin3)); 239 EXPECT_TRUE(ContainsKey(origins, origin3));
239 240
240 // |origin3| should be removed from the unique origin list. 241 // |origin3| should be removed from the unique origin list.
241 ASSERT_TRUE(database->DeleteRegistration(data3.registration_id, origin3)); 242 ASSERT_EQ(SERVICE_WORKER_OK,
243 database->DeleteRegistration(data3.registration_id, origin3));
242 244
243 origins.clear(); 245 origins.clear();
244 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins)); 246 EXPECT_EQ(SERVICE_WORKER_OK, database->GetOriginsWithRegistrations(&origins));
245 EXPECT_EQ(2U, origins.size()); 247 EXPECT_EQ(2U, origins.size());
246 EXPECT_TRUE(ContainsKey(origins, origin1)); 248 EXPECT_TRUE(ContainsKey(origins, origin1));
247 EXPECT_TRUE(ContainsKey(origins, origin2)); 249 EXPECT_TRUE(ContainsKey(origins, origin2));
248 } 250 }
249 251
250 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { 252 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
251 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 253 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
252 254
253 GURL origin1("http://example.com"); 255 GURL origin1("http://example.com");
254 GURL origin2("https://www.example.com"); 256 GURL origin2("https://www.example.com");
255 GURL origin3("https://example.org"); 257 GURL origin3("https://example.org");
256 258
257 std::vector<RegistrationData> registrations; 259 std::vector<RegistrationData> registrations;
258 EXPECT_EQ(SERVICE_WORKER_OK, 260 EXPECT_EQ(SERVICE_WORKER_OK,
259 database->GetRegistrationsForOrigin(origin1, &registrations)); 261 database->GetRegistrationsForOrigin(origin1, &registrations));
260 EXPECT_TRUE(registrations.empty()); 262 EXPECT_TRUE(registrations.empty());
261 263
262 std::vector<Resource> resources; 264 std::vector<Resource> resources;
263 265
264 RegistrationData data1; 266 RegistrationData data1;
265 data1.registration_id = 100; 267 data1.registration_id = 100;
266 data1.scope = URL(origin1, "/foo"); 268 data1.scope = URL(origin1, "/foo");
267 data1.script = URL(origin1, "/script1.js"); 269 data1.script = URL(origin1, "/script1.js");
268 data1.version_id = 1000; 270 data1.version_id = 1000;
269 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 271 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources));
270 272
271 RegistrationData data2; 273 RegistrationData data2;
272 data2.registration_id = 200; 274 data2.registration_id = 200;
273 data2.scope = URL(origin2, "/bar"); 275 data2.scope = URL(origin2, "/bar");
274 data2.script = URL(origin2, "/script2.js"); 276 data2.script = URL(origin2, "/script2.js");
275 data2.version_id = 2000; 277 data2.version_id = 2000;
276 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 278 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources));
277 279
278 RegistrationData data3; 280 RegistrationData data3;
279 data3.registration_id = 300; 281 data3.registration_id = 300;
280 data3.scope = URL(origin3, "/hoge"); 282 data3.scope = URL(origin3, "/hoge");
281 data3.script = URL(origin3, "/script3.js"); 283 data3.script = URL(origin3, "/script3.js");
282 data3.version_id = 3000; 284 data3.version_id = 3000;
283 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 285 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources));
284 286
285 // |origin3| has two registrations. 287 // |origin3| has two registrations.
286 RegistrationData data4; 288 RegistrationData data4;
287 data4.registration_id = 400; 289 data4.registration_id = 400;
288 data4.scope = URL(origin3, "/fuga"); 290 data4.scope = URL(origin3, "/fuga");
289 data4.script = URL(origin3, "/script4.js"); 291 data4.script = URL(origin3, "/script4.js");
290 data4.version_id = 4000; 292 data4.version_id = 4000;
291 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 293 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources));
292 294
293 registrations.clear(); 295 registrations.clear();
294 EXPECT_EQ(SERVICE_WORKER_OK, 296 EXPECT_EQ(SERVICE_WORKER_OK,
295 database->GetRegistrationsForOrigin(origin3, &registrations)); 297 database->GetRegistrationsForOrigin(origin3, &registrations));
296 EXPECT_EQ(2U, registrations.size()); 298 EXPECT_EQ(2U, registrations.size());
297 VerifyRegistrationData(data3, registrations[0]); 299 VerifyRegistrationData(data3, registrations[0]);
298 VerifyRegistrationData(data4, registrations[1]); 300 VerifyRegistrationData(data4, registrations[1]);
299 } 301 }
300 302
301 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { 303 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
302 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 304 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
303 305
304 std::vector<RegistrationData> registrations; 306 std::vector<RegistrationData> registrations;
305 EXPECT_EQ(SERVICE_WORKER_OK, 307 EXPECT_EQ(SERVICE_WORKER_OK,
306 database->GetAllRegistrations(&registrations)); 308 database->GetAllRegistrations(&registrations));
307 EXPECT_TRUE(registrations.empty()); 309 EXPECT_TRUE(registrations.empty());
308 310
309 std::vector<Resource> resources; 311 std::vector<Resource> resources;
310 312
311 GURL origin1("http://www1.example.com"); 313 GURL origin1("http://www1.example.com");
312 RegistrationData data1; 314 RegistrationData data1;
313 data1.registration_id = 100; 315 data1.registration_id = 100;
314 data1.scope = URL(origin1, "/foo"); 316 data1.scope = URL(origin1, "/foo");
315 data1.script = URL(origin1, "/script1.js"); 317 data1.script = URL(origin1, "/script1.js");
316 data1.version_id = 1000; 318 data1.version_id = 1000;
317 ASSERT_TRUE(database->WriteRegistration(data1, resources)); 319 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources));
318 320
319 GURL origin2("http://www2.example.com"); 321 GURL origin2("http://www2.example.com");
320 RegistrationData data2; 322 RegistrationData data2;
321 data2.registration_id = 200; 323 data2.registration_id = 200;
322 data2.scope = URL(origin2, "/bar"); 324 data2.scope = URL(origin2, "/bar");
323 data2.script = URL(origin2, "/script2.js"); 325 data2.script = URL(origin2, "/script2.js");
324 data2.version_id = 2000; 326 data2.version_id = 2000;
325 ASSERT_TRUE(database->WriteRegistration(data2, resources)); 327 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources));
326 328
327 GURL origin3("http://www3.example.com"); 329 GURL origin3("http://www3.example.com");
328 RegistrationData data3; 330 RegistrationData data3;
329 data3.registration_id = 300; 331 data3.registration_id = 300;
330 data3.scope = URL(origin3, "/hoge"); 332 data3.scope = URL(origin3, "/hoge");
331 data3.script = URL(origin3, "/script3.js"); 333 data3.script = URL(origin3, "/script3.js");
332 data3.version_id = 3000; 334 data3.version_id = 3000;
333 ASSERT_TRUE(database->WriteRegistration(data3, resources)); 335 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources));
334 336
335 // |origin3| has two registrations. 337 // |origin3| has two registrations.
336 RegistrationData data4; 338 RegistrationData data4;
337 data4.registration_id = 400; 339 data4.registration_id = 400;
338 data4.scope = URL(origin3, "/fuga"); 340 data4.scope = URL(origin3, "/fuga");
339 data4.script = URL(origin3, "/script4.js"); 341 data4.script = URL(origin3, "/script4.js");
340 data4.version_id = 4000; 342 data4.version_id = 4000;
341 ASSERT_TRUE(database->WriteRegistration(data4, resources)); 343 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data4, resources));
342 344
343 registrations.clear(); 345 registrations.clear();
344 EXPECT_EQ(SERVICE_WORKER_OK, 346 EXPECT_EQ(SERVICE_WORKER_OK,
345 database->GetAllRegistrations(&registrations)); 347 database->GetAllRegistrations(&registrations));
346 EXPECT_EQ(4U, registrations.size()); 348 EXPECT_EQ(4U, registrations.size());
347 VerifyRegistrationData(data1, registrations[0]); 349 VerifyRegistrationData(data1, registrations[0]);
348 VerifyRegistrationData(data2, registrations[1]); 350 VerifyRegistrationData(data2, registrations[1]);
349 VerifyRegistrationData(data3, registrations[2]); 351 VerifyRegistrationData(data3, registrations[2]);
350 VerifyRegistrationData(data4, registrations[3]); 352 VerifyRegistrationData(data4, registrations[3]);
351 } 353 }
(...skipping 15 matching lines...) Expand all
367 // Write a resource to the uncommitted list to make sure that writing 369 // Write a resource to the uncommitted list to make sure that writing
368 // registration removes resource ids associated with the registration from 370 // registration removes resource ids associated with the registration from
369 // the uncommitted list. 371 // the uncommitted list.
370 std::set<int64> uncommitted_ids; 372 std::set<int64> uncommitted_ids;
371 uncommitted_ids.insert(resources[0].resource_id); 373 uncommitted_ids.insert(resources[0].resource_id);
372 EXPECT_TRUE(database->WriteUncommittedResourceIds(uncommitted_ids)); 374 EXPECT_TRUE(database->WriteUncommittedResourceIds(uncommitted_ids));
373 std::set<int64> uncommitted_ids_out; 375 std::set<int64> uncommitted_ids_out;
374 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); 376 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out));
375 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out); 377 EXPECT_EQ(uncommitted_ids, uncommitted_ids_out);
376 378
377 EXPECT_TRUE(database->WriteRegistration(data, resources)); 379 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources));
378 380
379 // Make sure that the registration and resource records are stored. 381 // Make sure that the registration and resource records are stored.
380 RegistrationData data_out; 382 RegistrationData data_out;
381 std::vector<Resource> resources_out; 383 std::vector<Resource> resources_out;
382 EXPECT_TRUE(database->ReadRegistration( 384 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
383 data.registration_id, origin, &data_out, &resources_out)); 385 data.registration_id, origin, &data_out, &resources_out));
384 VerifyRegistrationData(data, data_out); 386 VerifyRegistrationData(data, data_out);
385 VerifyResourceRecords(resources, resources_out); 387 VerifyResourceRecords(resources, resources_out);
386 388
387 // Make sure that the resource is removed from the uncommitted list. 389 // Make sure that the resource is removed from the uncommitted list.
388 uncommitted_ids_out.clear(); 390 uncommitted_ids_out.clear();
389 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out)); 391 EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out));
390 EXPECT_TRUE(uncommitted_ids_out.empty()); 392 EXPECT_TRUE(uncommitted_ids_out.empty());
391 393
392 EXPECT_TRUE(database->DeleteRegistration(data.registration_id, origin)); 394 EXPECT_EQ(SERVICE_WORKER_OK,
395 database->DeleteRegistration(data.registration_id, origin));
393 396
394 // Make sure that the registration and resource records are gone. 397 // Make sure that the registration and resource records are gone.
395 resources_out.clear(); 398 resources_out.clear();
396 EXPECT_FALSE(database->ReadRegistration( 399 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->ReadRegistration(
397 data.registration_id, origin, &data_out, &resources_out)); 400 data.registration_id, origin, &data_out, &resources_out));
398 EXPECT_TRUE(resources_out.empty()); 401 EXPECT_TRUE(resources_out.empty());
399 402
400 // Resources should be purgeable because these are no longer referred. 403 // Resources should be purgeable because these are no longer referred.
401 std::set<int64> purgeable_ids_out; 404 std::set<int64> purgeable_ids_out;
402 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 405 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
403 EXPECT_EQ(2u, purgeable_ids_out.size()); 406 EXPECT_EQ(2u, purgeable_ids_out.size());
404 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[0].resource_id)); 407 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[0].resource_id));
405 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[1].resource_id)); 408 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[1].resource_id));
406 } 409 }
407 410
408 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { 411 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
409 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 412 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
410 413
411 GURL origin("http://example.com"); 414 GURL origin("http://example.com");
412 RegistrationData data; 415 RegistrationData data;
413 data.registration_id = 100; 416 data.registration_id = 100;
414 data.scope = URL(origin, "/foo"); 417 data.scope = URL(origin, "/foo");
415 data.script = URL(origin, "/script.js"); 418 data.script = URL(origin, "/script.js");
416 data.version_id = 200; 419 data.version_id = 200;
417 420
418 std::vector<Resource> resources1; 421 std::vector<Resource> resources1;
419 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); 422 resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
420 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); 423 resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
421 424
422 EXPECT_TRUE(database->WriteRegistration(data, resources1)); 425 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data, resources1));
423 426
424 // Make sure that the registration and resource records are stored. 427 // Make sure that the registration and resource records are stored.
425 RegistrationData data_out; 428 RegistrationData data_out;
426 std::vector<Resource> resources_out; 429 std::vector<Resource> resources_out;
427 EXPECT_TRUE(database->ReadRegistration( 430 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
428 data.registration_id, origin, &data_out, &resources_out)); 431 data.registration_id, origin, &data_out, &resources_out));
429 VerifyRegistrationData(data, data_out); 432 VerifyRegistrationData(data, data_out);
430 VerifyResourceRecords(resources1, resources_out); 433 VerifyResourceRecords(resources1, resources_out);
431 434
432 // Update the registration. 435 // Update the registration.
433 RegistrationData updated_data = data; 436 RegistrationData updated_data = data;
434 updated_data.version_id = data.version_id + 1; 437 updated_data.version_id = data.version_id + 1;
435 std::vector<Resource> resources2; 438 std::vector<Resource> resources2;
436 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); 439 resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
437 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); 440 resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
438 441
439 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2)); 442 EXPECT_EQ(SERVICE_WORKER_OK,
443 database->WriteRegistration(updated_data, resources2));
440 444
441 // Make sure that |updated_data| is stored and resources referred from |data| 445 // Make sure that |updated_data| is stored and resources referred from |data|
442 // is moved to the purgeable list. 446 // is moved to the purgeable list.
443 resources_out.clear(); 447 resources_out.clear();
444 EXPECT_TRUE(database->ReadRegistration( 448 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
445 updated_data.registration_id, origin, &data_out, &resources_out)); 449 updated_data.registration_id, origin, &data_out, &resources_out));
446 VerifyRegistrationData(updated_data, data_out); 450 VerifyRegistrationData(updated_data, data_out);
447 VerifyResourceRecords(resources2, resources_out); 451 VerifyResourceRecords(resources2, resources_out);
448 452
449 std::set<int64> purgeable_ids_out; 453 std::set<int64> purgeable_ids_out;
450 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 454 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
451 EXPECT_EQ(2u, purgeable_ids_out.size()); 455 EXPECT_EQ(2u, purgeable_ids_out.size());
452 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 456 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
453 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 457 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
454 } 458 }
455 459
456 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { 460 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
457 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 461 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
458 GURL origin("http://example.com"); 462 GURL origin("http://example.com");
459 463
460 // Add registration1. 464 // Add registration1.
461 RegistrationData data1; 465 RegistrationData data1;
462 data1.registration_id = 100; 466 data1.registration_id = 100;
463 data1.scope = URL(origin, "/foo"); 467 data1.scope = URL(origin, "/foo");
464 data1.script = URL(origin, "/script1.js"); 468 data1.script = URL(origin, "/script1.js");
465 data1.version_id = 200; 469 data1.version_id = 200;
466 470
467 std::vector<Resource> resources1; 471 std::vector<Resource> resources1;
468 resources1.push_back(CreateResource(1, URL(origin, "/resource1"))); 472 resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
469 resources1.push_back(CreateResource(2, URL(origin, "/resource2"))); 473 resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
470 EXPECT_TRUE(database->WriteRegistration(data1, resources1)); 474 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources1));
471 475
472 // Add registration2. 476 // Add registration2.
473 RegistrationData data2; 477 RegistrationData data2;
474 data2.registration_id = 101; 478 data2.registration_id = 101;
475 data2.scope = URL(origin, "/bar"); 479 data2.scope = URL(origin, "/bar");
476 data2.script = URL(origin, "/script2.js"); 480 data2.script = URL(origin, "/script2.js");
477 data2.version_id = 201; 481 data2.version_id = 201;
478 482
479 std::vector<Resource> resources2; 483 std::vector<Resource> resources2;
480 resources2.push_back(CreateResource(3, URL(origin, "/resource3"))); 484 resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
481 resources2.push_back(CreateResource(4, URL(origin, "/resource4"))); 485 resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
482 EXPECT_TRUE(database->WriteRegistration(data2, resources2)); 486 EXPECT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources2));
483 487
484 // Make sure that registration1 is stored. 488 // Make sure that registration1 is stored.
485 RegistrationData data_out; 489 RegistrationData data_out;
486 std::vector<Resource> resources_out; 490 std::vector<Resource> resources_out;
487 EXPECT_TRUE(database->ReadRegistration( 491 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
488 data1.registration_id, origin, &data_out, &resources_out)); 492 data1.registration_id, origin, &data_out, &resources_out));
489 VerifyRegistrationData(data1, data_out); 493 VerifyRegistrationData(data1, data_out);
490 VerifyResourceRecords(resources1, resources_out); 494 VerifyResourceRecords(resources1, resources_out);
491 495
492 // Make sure that registration2 is also stored. 496 // Make sure that registration2 is also stored.
493 resources_out.clear(); 497 resources_out.clear();
494 EXPECT_TRUE(database->ReadRegistration( 498 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
495 data2.registration_id, origin, &data_out, &resources_out)); 499 data2.registration_id, origin, &data_out, &resources_out));
496 VerifyRegistrationData(data2, data_out); 500 VerifyRegistrationData(data2, data_out);
497 VerifyResourceRecords(resources2, resources_out); 501 VerifyResourceRecords(resources2, resources_out);
498 502
499 std::set<int64> purgeable_ids_out; 503 std::set<int64> purgeable_ids_out;
500 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 504 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
501 EXPECT_TRUE(purgeable_ids_out.empty()); 505 EXPECT_TRUE(purgeable_ids_out.empty());
502 506
503 // Delete registration1. 507 // Delete registration1.
504 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin)); 508 EXPECT_EQ(SERVICE_WORKER_OK,
509 database->DeleteRegistration(data1.registration_id, origin));
505 510
506 // Make sure that registration1 is gone. 511 // Make sure that registration1 is gone.
507 resources_out.clear(); 512 resources_out.clear();
508 EXPECT_FALSE(database->ReadRegistration( 513 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, database->ReadRegistration(
509 data1.registration_id, origin, &data_out, &resources_out)); 514 data1.registration_id, origin, &data_out, &resources_out));
510 EXPECT_TRUE(resources_out.empty()); 515 EXPECT_TRUE(resources_out.empty());
511 516
512 purgeable_ids_out.clear(); 517 purgeable_ids_out.clear();
513 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 518 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
514 EXPECT_EQ(2u, purgeable_ids_out.size()); 519 EXPECT_EQ(2u, purgeable_ids_out.size());
515 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id)); 520 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
516 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); 521 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
517 522
518 // Make sure that registration2 is still alive. 523 // Make sure that registration2 is still alive.
519 resources_out.clear(); 524 resources_out.clear();
520 EXPECT_TRUE(database->ReadRegistration( 525 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
521 data2.registration_id, origin, &data_out, &resources_out)); 526 data2.registration_id, origin, &data_out, &resources_out));
522 VerifyRegistrationData(data2, data_out); 527 VerifyRegistrationData(data2, data_out);
523 VerifyResourceRecords(resources2, resources_out); 528 VerifyResourceRecords(resources2, resources_out);
524 } 529 }
525 530
526 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { 531 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
527 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); 532 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
528 533
529 // Write {1, 2, 3}. 534 // Write {1, 2, 3}.
530 std::set<int64> ids1; 535 std::set<int64> ids1;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 // |origin1| has two registrations. 612 // |origin1| has two registrations.
608 RegistrationData data1; 613 RegistrationData data1;
609 data1.registration_id = 10; 614 data1.registration_id = 10;
610 data1.scope = URL(origin1, "/foo"); 615 data1.scope = URL(origin1, "/foo");
611 data1.script = URL(origin1, "/script1.js"); 616 data1.script = URL(origin1, "/script1.js");
612 data1.version_id = 100; 617 data1.version_id = 100;
613 618
614 std::vector<Resource> resources1; 619 std::vector<Resource> resources1;
615 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"))); 620 resources1.push_back(CreateResource(1, URL(origin1, "/resource1")));
616 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"))); 621 resources1.push_back(CreateResource(2, URL(origin1, "/resource2")));
617 ASSERT_TRUE(database->WriteRegistration(data1, resources1)); 622 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data1, resources1));
618 623
619 RegistrationData data2; 624 RegistrationData data2;
620 data2.registration_id = 11; 625 data2.registration_id = 11;
621 data2.scope = URL(origin1, "/bar"); 626 data2.scope = URL(origin1, "/bar");
622 data2.script = URL(origin1, "/script2.js"); 627 data2.script = URL(origin1, "/script2.js");
623 data2.version_id = 101; 628 data2.version_id = 101;
624 629
625 std::vector<Resource> resources2; 630 std::vector<Resource> resources2;
626 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"))); 631 resources2.push_back(CreateResource(3, URL(origin1, "/resource3")));
627 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"))); 632 resources2.push_back(CreateResource(4, URL(origin1, "/resource4")));
628 ASSERT_TRUE(database->WriteRegistration(data2, resources2)); 633 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data2, resources2));
629 634
630 // |origin2| has one registration. 635 // |origin2| has one registration.
631 RegistrationData data3; 636 RegistrationData data3;
632 data3.registration_id = 12; 637 data3.registration_id = 12;
633 data3.scope = URL(origin2, "/hoge"); 638 data3.scope = URL(origin2, "/hoge");
634 data3.script = URL(origin2, "/script3.js"); 639 data3.script = URL(origin2, "/script3.js");
635 data3.version_id = 102; 640 data3.version_id = 102;
636 641
637 std::vector<Resource> resources3; 642 std::vector<Resource> resources3;
638 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"))); 643 resources3.push_back(CreateResource(5, URL(origin2, "/resource5")));
639 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"))); 644 resources3.push_back(CreateResource(6, URL(origin2, "/resource6")));
640 ASSERT_TRUE(database->WriteRegistration(data3, resources3)); 645 ASSERT_EQ(SERVICE_WORKER_OK, database->WriteRegistration(data3, resources3));
641 646
642 EXPECT_TRUE(database->DeleteAllDataForOrigin(origin1)); 647 EXPECT_EQ(SERVICE_WORKER_OK, database->DeleteAllDataForOrigin(origin1));
643 648
644 // |origin1| should be removed from the unique origin list. 649 // |origin1| should be removed from the unique origin list.
645 std::set<GURL> unique_origins; 650 std::set<GURL> unique_origins;
646 EXPECT_EQ(SERVICE_WORKER_OK, 651 EXPECT_EQ(SERVICE_WORKER_OK,
647 database->GetOriginsWithRegistrations(&unique_origins)); 652 database->GetOriginsWithRegistrations(&unique_origins));
648 EXPECT_EQ(1u, unique_origins.size()); 653 EXPECT_EQ(1u, unique_origins.size());
649 EXPECT_TRUE(ContainsKey(unique_origins, origin2)); 654 EXPECT_TRUE(ContainsKey(unique_origins, origin2));
650 655
651 // The registrations for |origin1| should be removed. 656 // The registrations for |origin1| should be removed.
652 std::vector<RegistrationData> registrations; 657 std::vector<RegistrationData> registrations;
653 EXPECT_EQ(SERVICE_WORKER_OK, 658 EXPECT_EQ(SERVICE_WORKER_OK,
654 database->GetRegistrationsForOrigin(origin1, &registrations)); 659 database->GetRegistrationsForOrigin(origin1, &registrations));
655 EXPECT_TRUE(registrations.empty()); 660 EXPECT_TRUE(registrations.empty());
656 661
657 // The registration for |origin2| should not be removed. 662 // The registration for |origin2| should not be removed.
658 RegistrationData data_out; 663 RegistrationData data_out;
659 std::vector<Resource> resources_out; 664 std::vector<Resource> resources_out;
660 EXPECT_TRUE(database->ReadRegistration( 665 EXPECT_EQ(SERVICE_WORKER_OK, database->ReadRegistration(
661 data3.registration_id, origin2, &data_out, &resources_out)); 666 data3.registration_id, origin2, &data_out, &resources_out));
662 VerifyRegistrationData(data3, data_out); 667 VerifyRegistrationData(data3, data_out);
663 VerifyResourceRecords(resources3, resources_out); 668 VerifyResourceRecords(resources3, resources_out);
664 669
665 // The resources associated with |origin1| should be purgeable. 670 // The resources associated with |origin1| should be purgeable.
666 std::set<int64> purgeable_ids_out; 671 std::set<int64> purgeable_ids_out;
667 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); 672 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
668 EXPECT_EQ(4u, purgeable_ids_out.size()); 673 EXPECT_EQ(4u, purgeable_ids_out.size());
669 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); 674 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1));
670 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); 675 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2));
671 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); 676 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3));
672 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); 677 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4));
673 } 678 }
674 679
675 } // namespace content 680 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698