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