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