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