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