Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/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" |
| 11 #include "content/browser/service_worker/service_worker_database.pb.h" | 11 #include "content/browser/service_worker/service_worker_database.pb.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 namespace content { | 14 namespace content { |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 typedef ServiceWorkerDatabase::RegistrationData RegistrationData; | 18 typedef ServiceWorkerDatabase::RegistrationData RegistrationData; |
| 19 typedef ServiceWorkerDatabase::ResourceRecord Resource; | 19 typedef ServiceWorkerDatabase::ResourceRecord Resource; |
| 20 | 20 |
| 21 struct AvailableIds { | 21 struct AvailableIds { |
| 22 int64 reg_id; | 22 int64 reg_id; |
| 23 int64 res_id; | 23 int64 res_id; |
| 24 int64 ver_id; | 24 int64 ver_id; |
| 25 | 25 |
| 26 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} | 26 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} |
| 27 ~AvailableIds() {} | 27 ~AvailableIds() {} |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 // TODO(nhiroki): Refactor tests using this helper. | |
| 31 GURL URL(const GURL& origin, const std::string& path) { | 30 GURL URL(const GURL& origin, const std::string& path) { |
| 32 EXPECT_TRUE(origin.is_valid()); | 31 EXPECT_TRUE(origin.is_valid()); |
| 33 GURL out(origin.GetOrigin().spec() + path); | 32 GURL out(origin.GetOrigin().spec() + path); |
| 34 EXPECT_TRUE(out.is_valid()); | 33 EXPECT_TRUE(out.is_valid()); |
| 35 return out; | 34 return out; |
| 36 } | 35 } |
| 37 | 36 |
| 38 // TODO(nhiroki): Remove this. | |
| 39 Resource CreateResource(int64 resource_id, const std::string& url) { | |
| 40 Resource resource; | |
| 41 resource.resource_id = resource_id; | |
| 42 resource.url = GURL(url); | |
| 43 EXPECT_TRUE(resource.url.is_valid()); | |
| 44 return resource; | |
| 45 } | |
| 46 | |
| 47 Resource CreateResource(int64 resource_id, const GURL& url) { | 37 Resource CreateResource(int64 resource_id, const GURL& url) { |
| 48 Resource resource; | 38 Resource resource; |
| 49 resource.resource_id = resource_id; | 39 resource.resource_id = resource_id; |
| 50 resource.url = url; | 40 resource.url = url; |
| 51 EXPECT_TRUE(resource.url.is_valid()); | 41 EXPECT_TRUE(resource.url.is_valid()); |
| 52 return resource; | 42 return resource; |
| 53 } | 43 } |
| 54 | 44 |
| 55 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { | 45 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { |
| 56 return new ServiceWorkerDatabase(path); | 46 return new ServiceWorkerDatabase(path); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 | 120 |
| 131 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version)); | 121 EXPECT_TRUE(database->ReadDatabaseVersion(&db_version)); |
| 132 EXPECT_LT(0, db_version); | 122 EXPECT_LT(0, db_version); |
| 133 } | 123 } |
| 134 | 124 |
| 135 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { | 125 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
| 136 base::ScopedTempDir database_dir; | 126 base::ScopedTempDir database_dir; |
| 137 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 127 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 138 scoped_ptr<ServiceWorkerDatabase> database( | 128 scoped_ptr<ServiceWorkerDatabase> database( |
| 139 CreateDatabase(database_dir.path())); | 129 CreateDatabase(database_dir.path())); |
| 140 AvailableIds ids; | 130 |
| 131 GURL origin("http://example.com"); | |
| 141 | 132 |
| 142 // The database has never been used, so returns initial values. | 133 // The database has never been used, so returns initial values. |
| 134 AvailableIds ids; | |
| 143 EXPECT_TRUE(database->GetNextAvailableIds( | 135 EXPECT_TRUE(database->GetNextAvailableIds( |
| 144 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 136 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 145 EXPECT_EQ(0, ids.reg_id); | 137 EXPECT_EQ(0, ids.reg_id); |
| 146 EXPECT_EQ(0, ids.ver_id); | 138 EXPECT_EQ(0, ids.ver_id); |
| 147 EXPECT_EQ(0, ids.res_id); | 139 EXPECT_EQ(0, ids.res_id); |
| 148 | 140 |
| 149 ASSERT_TRUE(database->LazyOpen(true)); | 141 ASSERT_TRUE(database->LazyOpen(true)); |
| 150 EXPECT_TRUE(database->GetNextAvailableIds( | 142 EXPECT_TRUE(database->GetNextAvailableIds( |
| 151 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 143 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 152 EXPECT_EQ(0, ids.reg_id); | 144 EXPECT_EQ(0, ids.reg_id); |
| 153 EXPECT_EQ(0, ids.ver_id); | 145 EXPECT_EQ(0, ids.ver_id); |
| 154 EXPECT_EQ(0, ids.res_id); | 146 EXPECT_EQ(0, ids.res_id); |
| 155 | 147 |
| 156 // Writing a registration bumps the next available ids. | 148 // Writing a registration bumps the next available ids. |
| 157 std::vector<Resource> resources; | 149 std::vector<Resource> resources; |
| 158 RegistrationData data1; | 150 RegistrationData data1; |
| 159 data1.registration_id = 100; | 151 data1.registration_id = 100; |
| 160 data1.scope = GURL("http://example.com/foo"); | 152 data1.scope = URL(origin, "/foo"); |
| 161 data1.script = GURL("http://example.com/script1.js"); | 153 data1.script = URL(origin, "/script1.js"); |
| 162 data1.version_id = 200; | 154 data1.version_id = 200; |
| 163 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 155 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 164 | 156 |
| 165 EXPECT_TRUE(database->GetNextAvailableIds( | 157 EXPECT_TRUE(database->GetNextAvailableIds( |
| 166 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 158 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 167 EXPECT_EQ(101, ids.reg_id); | 159 EXPECT_EQ(101, ids.reg_id); |
| 168 EXPECT_EQ(201, ids.ver_id); | 160 EXPECT_EQ(201, ids.ver_id); |
| 169 EXPECT_EQ(0, ids.res_id); | 161 EXPECT_EQ(0, ids.res_id); |
| 170 | 162 |
| 171 // Writing a registration whose ids are lower than the stored ones should not | 163 // Writing a registration whose ids are lower than the stored ones should not |
| 172 // bump the next available ids. | 164 // bump the next available ids. |
| 173 RegistrationData data2; | 165 RegistrationData data2; |
| 174 data2.registration_id = 10; | 166 data2.registration_id = 10; |
| 175 data2.scope = GURL("http://example.com/bar"); | 167 data2.scope = URL(origin, "/bar"); |
| 176 data2.script = GURL("http://example.com/script2.js"); | 168 data2.script = URL(origin, "/script2.js"); |
| 177 data2.version_id = 20; | 169 data2.version_id = 20; |
| 178 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 170 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 179 | 171 |
| 180 // Close and reopen the database to verify the stored values. | 172 // Close and reopen the database to verify the stored values. |
| 181 database.reset(CreateDatabase(database_dir.path())); | 173 database.reset(CreateDatabase(database_dir.path())); |
| 182 | 174 |
| 183 EXPECT_TRUE(database->GetNextAvailableIds( | 175 EXPECT_TRUE(database->GetNextAvailableIds( |
| 184 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 176 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 185 EXPECT_EQ(101, ids.reg_id); | 177 EXPECT_EQ(101, ids.reg_id); |
| 186 EXPECT_EQ(201, ids.ver_id); | 178 EXPECT_EQ(201, ids.ver_id); |
| 187 EXPECT_EQ(0, ids.res_id); | 179 EXPECT_EQ(0, ids.res_id); |
| 188 } | 180 } |
| 189 | 181 |
| 190 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { | 182 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
| 191 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 183 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 192 | 184 |
| 193 std::set<GURL> origins; | 185 std::set<GURL> origins; |
| 194 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 186 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); |
| 195 EXPECT_TRUE(origins.empty()); | 187 EXPECT_TRUE(origins.empty()); |
| 196 | 188 |
| 197 std::vector<Resource> resources; | 189 std::vector<Resource> resources; |
| 198 | 190 |
| 191 GURL origin1("http://example.com"); | |
| 199 RegistrationData data1; | 192 RegistrationData data1; |
| 200 data1.registration_id = 123; | 193 data1.registration_id = 123; |
| 201 data1.scope = GURL("http://example.com/foo"); | 194 data1.scope = URL(origin1, "/foo"); |
| 202 data1.script = GURL("http://example.com/script1.js"); | 195 data1.script = URL(origin1, "/script1.js"); |
| 203 data1.version_id = 456; | 196 data1.version_id = 456; |
| 204 GURL origin1 = data1.script.GetOrigin(); | |
| 205 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 197 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 206 | 198 |
| 199 GURL origin2("https://www.example.com"); | |
| 207 RegistrationData data2; | 200 RegistrationData data2; |
| 208 data2.registration_id = 234; | 201 data2.registration_id = 234; |
| 209 data2.scope = GURL("https://www.example.com/bar"); | 202 data2.scope = URL(origin2, "/bar"); |
| 210 data2.script = GURL("https://www.example.com/script2.js"); | 203 data2.script = URL(origin2, "/script2.js"); |
| 211 data2.version_id = 567; | 204 data2.version_id = 567; |
| 212 GURL origin2 = data2.script.GetOrigin(); | |
| 213 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 205 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 214 | 206 |
| 207 GURL origin3("https://example.org"); | |
| 215 RegistrationData data3; | 208 RegistrationData data3; |
| 216 data3.registration_id = 345; | 209 data3.registration_id = 345; |
| 217 data3.scope = GURL("https://example.org/hoge"); | 210 data3.scope = URL(origin3, "/hoge"); |
| 218 data3.script = GURL("https://example.org/script3.js"); | 211 data3.script = URL(origin3, "/script3.js"); |
| 219 data3.version_id = 678; | 212 data3.version_id = 678; |
| 220 GURL origin3 = data3.script.GetOrigin(); | |
| 221 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 213 ASSERT_TRUE(database->WriteRegistration(data3, resources)); |
| 222 | 214 |
| 223 // |origin3| has two registrations. | 215 // |origin3| has two registrations. |
| 224 RegistrationData data4; | 216 RegistrationData data4; |
| 225 data4.registration_id = 456; | 217 data4.registration_id = 456; |
| 226 data4.scope = GURL("https://example.org/fuga"); | 218 data4.scope = URL(origin3, "/fuga"); |
| 227 data4.script = GURL("https://example.org/script4.js"); | 219 data4.script = URL(origin3, "/script4.js"); |
| 228 data4.version_id = 789; | 220 data4.version_id = 789; |
| 229 ASSERT_EQ(origin3, data4.scope.GetOrigin()); | 221 ASSERT_EQ(origin3, data4.scope.GetOrigin()); |
| 230 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 222 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 231 | 223 |
| 232 origins.clear(); | 224 origins.clear(); |
| 233 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 225 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); |
| 234 EXPECT_EQ(3U, origins.size()); | 226 EXPECT_EQ(3U, origins.size()); |
| 235 EXPECT_TRUE(ContainsKey(origins, origin1)); | 227 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 236 EXPECT_TRUE(ContainsKey(origins, origin2)); | 228 EXPECT_TRUE(ContainsKey(origins, origin2)); |
| 237 EXPECT_TRUE(ContainsKey(origins, origin3)); | 229 EXPECT_TRUE(ContainsKey(origins, origin3)); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 253 origins.clear(); | 245 origins.clear(); |
| 254 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); | 246 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); |
| 255 EXPECT_EQ(2U, origins.size()); | 247 EXPECT_EQ(2U, origins.size()); |
| 256 EXPECT_TRUE(ContainsKey(origins, origin1)); | 248 EXPECT_TRUE(ContainsKey(origins, origin1)); |
| 257 EXPECT_TRUE(ContainsKey(origins, origin2)); | 249 EXPECT_TRUE(ContainsKey(origins, origin2)); |
| 258 } | 250 } |
| 259 | 251 |
| 260 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { | 252 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
| 261 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 253 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 262 | 254 |
| 263 GURL origin("https://example.org"); | 255 GURL origin1("http://example.com"); |
| 256 GURL origin2("https://www.example.com"); | |
| 257 GURL origin3("https://example.org"); | |
| 258 | |
| 264 std::vector<RegistrationData> registrations; | 259 std::vector<RegistrationData> registrations; |
| 265 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, ®istrations)); | 260 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, ®istrations)); |
| 266 EXPECT_TRUE(registrations.empty()); | 261 EXPECT_TRUE(registrations.empty()); |
| 267 | 262 |
| 268 std::vector<Resource> resources; | 263 std::vector<Resource> resources; |
| 269 | 264 |
| 270 RegistrationData data1; | 265 RegistrationData data1; |
| 271 data1.registration_id = 100; | 266 data1.registration_id = 100; |
| 272 data1.scope = GURL("http://example.com/foo"); | 267 data1.scope = URL(origin1, "/foo"); |
| 273 data1.script = GURL("http://example.com/script1.js"); | 268 data1.script = URL(origin2, "/script1.js"); |
|
kinuko
2014/05/12 10:16:29
origin1 ?
nhiroki
2014/05/12 10:22:57
Good catch! Done.
| |
| 274 data1.version_id = 1000; | 269 data1.version_id = 1000; |
| 275 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 270 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 276 | 271 |
| 277 RegistrationData data2; | 272 RegistrationData data2; |
| 278 data2.registration_id = 200; | 273 data2.registration_id = 200; |
| 279 data2.scope = GURL("https://www.example.com/bar"); | 274 data2.scope = URL(origin2, "/bar"); |
| 280 data2.script = GURL("https://www.example.com/script2.js"); | 275 data2.script = URL(origin2, "/script2.js"); |
| 281 data2.version_id = 2000; | 276 data2.version_id = 2000; |
| 282 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 277 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 283 | 278 |
| 284 RegistrationData data3; | 279 RegistrationData data3; |
| 285 data3.registration_id = 300; | 280 data3.registration_id = 300; |
| 286 data3.scope = GURL("https://example.org/hoge"); | 281 data3.scope = URL(origin3, "/hoge"); |
| 287 data3.script = GURL("https://example.org/script3.js"); | 282 data3.script = URL(origin3, "/script3.js"); |
| 288 data3.version_id = 3000; | 283 data3.version_id = 3000; |
| 289 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 284 ASSERT_TRUE(database->WriteRegistration(data3, resources)); |
| 290 | 285 |
| 291 // Same origin with |data3|. | 286 // |origin3| has two registrations. |
| 292 RegistrationData data4; | 287 RegistrationData data4; |
| 293 data4.registration_id = 400; | 288 data4.registration_id = 400; |
| 294 data4.scope = GURL("https://example.org/fuga"); | 289 data4.scope = URL(origin3, "/fuga"); |
| 295 data4.script = GURL("https://example.org/script4.js"); | 290 data4.script = URL(origin3, "/script4.js"); |
| 296 data4.version_id = 4000; | 291 data4.version_id = 4000; |
| 297 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 292 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 298 | 293 |
| 299 registrations.clear(); | 294 registrations.clear(); |
| 300 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, ®istrations)); | 295 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin3, ®istrations)); |
| 301 EXPECT_EQ(2U, registrations.size()); | 296 EXPECT_EQ(2U, registrations.size()); |
| 302 VerifyRegistrationData(data3, registrations[0]); | 297 VerifyRegistrationData(data3, registrations[0]); |
| 303 VerifyRegistrationData(data4, registrations[1]); | 298 VerifyRegistrationData(data4, registrations[1]); |
| 304 } | 299 } |
| 305 | 300 |
| 306 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { | 301 TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) { |
| 307 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 302 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 308 | 303 |
| 309 std::vector<RegistrationData> registrations; | 304 std::vector<RegistrationData> registrations; |
| 310 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); | 305 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); |
| 311 EXPECT_TRUE(registrations.empty()); | 306 EXPECT_TRUE(registrations.empty()); |
| 312 | 307 |
| 313 std::vector<Resource> resources; | 308 std::vector<Resource> resources; |
| 314 | 309 |
| 310 GURL origin1("http://www1.example.com"); | |
| 315 RegistrationData data1; | 311 RegistrationData data1; |
| 316 data1.registration_id = 100; | 312 data1.registration_id = 100; |
| 317 data1.scope = GURL("http://www1.example.com/foo"); | 313 data1.scope = URL(origin1, "/foo"); |
| 318 data1.script = GURL("http://www1.example.com/script1.js"); | 314 data1.script = URL(origin1, "/script1.js"); |
| 319 data1.version_id = 1000; | 315 data1.version_id = 1000; |
| 320 ASSERT_TRUE(database->WriteRegistration(data1, resources)); | 316 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 321 | 317 |
| 318 GURL origin2("http://www2.example.com"); | |
| 322 RegistrationData data2; | 319 RegistrationData data2; |
| 323 data2.registration_id = 200; | 320 data2.registration_id = 200; |
| 324 data2.scope = GURL("http://www2.example.com/bar"); | 321 data2.scope = URL(origin2, "/bar"); |
| 325 data2.script = GURL("http://www2.example.com/script2.js"); | 322 data2.script = URL(origin2, "/script2.js"); |
| 326 data2.version_id = 2000; | 323 data2.version_id = 2000; |
| 327 ASSERT_TRUE(database->WriteRegistration(data2, resources)); | 324 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 328 | 325 |
| 326 GURL origin3("http://www3.example.com"); | |
| 329 RegistrationData data3; | 327 RegistrationData data3; |
| 330 data3.registration_id = 300; | 328 data3.registration_id = 300; |
| 331 data3.scope = GURL("http://www3.example.com/hoge"); | 329 data3.scope = URL(origin3, "/hoge"); |
| 332 data3.script = GURL("http://www3.example.com/script3.js"); | 330 data3.script = URL(origin3, "/script3.js"); |
| 333 data3.version_id = 3000; | 331 data3.version_id = 3000; |
| 334 ASSERT_TRUE(database->WriteRegistration(data3, resources)); | 332 ASSERT_TRUE(database->WriteRegistration(data3, resources)); |
| 335 | 333 |
| 336 // Same origin with |data3|. | 334 // |origin3| has two registrations. |
| 337 RegistrationData data4; | 335 RegistrationData data4; |
| 338 data4.registration_id = 400; | 336 data4.registration_id = 400; |
| 339 data4.scope = GURL("http://www4.example.com/fuga"); | 337 data4.scope = URL(origin3, "/fuga"); |
| 340 data4.script = GURL("http://www4.example.com/script4.js"); | 338 data4.script = URL(origin3, "/script4.js"); |
| 341 data4.version_id = 4000; | 339 data4.version_id = 4000; |
| 342 ASSERT_TRUE(database->WriteRegistration(data4, resources)); | 340 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 343 | 341 |
| 344 registrations.clear(); | 342 registrations.clear(); |
| 345 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); | 343 EXPECT_TRUE(database->GetAllRegistrations(®istrations)); |
| 346 EXPECT_EQ(4U, registrations.size()); | 344 EXPECT_EQ(4U, registrations.size()); |
| 347 VerifyRegistrationData(data1, registrations[0]); | 345 VerifyRegistrationData(data1, registrations[0]); |
| 348 VerifyRegistrationData(data2, registrations[1]); | 346 VerifyRegistrationData(data2, registrations[1]); |
| 349 VerifyRegistrationData(data3, registrations[2]); | 347 VerifyRegistrationData(data3, registrations[2]); |
| 350 VerifyRegistrationData(data4, registrations[3]); | 348 VerifyRegistrationData(data4, registrations[3]); |
| 351 } | 349 } |
| 352 | 350 |
| 353 // TODO(nhiroki): Record read/write operations using gtest fixture to avoid | 351 // TODO(nhiroki): Record read/write operations using gtest fixture to avoid |
| 354 // building expectations by hand. For example, expected purgeable resource ids | 352 // building expectations by hand. For example, expected purgeable resource ids |
| 355 // should be calculated automatically. | 353 // should be calculated automatically. |
| 356 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { | 354 TEST(ServiceWorkerDatabaseTest, Registration_Basic) { |
| 357 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 355 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 358 | 356 |
| 357 GURL origin("http://example.com"); | |
| 359 RegistrationData data; | 358 RegistrationData data; |
| 360 data.registration_id = 100; | 359 data.registration_id = 100; |
| 361 data.scope = GURL("http://example.com/foo"); | 360 data.scope = URL(origin, "/foo"); |
| 362 data.script = GURL("http://example.com/script.js"); | 361 data.script = URL(origin, "/script.js"); |
| 363 data.version_id = 200; | 362 data.version_id = 200; |
| 364 GURL origin = data.scope.GetOrigin(); | |
| 365 | 363 |
| 366 Resource resource1 = CreateResource(1, "http://example.com/resource1"); | 364 Resource resource1 = CreateResource(1, URL(origin, "/resource1")); |
| 367 Resource resource2 = CreateResource(2, "http://example.com/resource2"); | 365 Resource resource2 = CreateResource(2, URL(origin, "/resource2")); |
| 368 | 366 |
| 369 std::vector<Resource> resources; | 367 std::vector<Resource> resources; |
| 370 resources.push_back(resource1); | 368 resources.push_back(resource1); |
| 371 resources.push_back(resource2); | 369 resources.push_back(resource2); |
| 372 | 370 |
| 373 // Write |resource1| to the uncommitted list to make sure that writing | 371 // Write |resource1| to the uncommitted list to make sure that writing |
| 374 // registration removes resource ids associated with the registration from | 372 // registration removes resource ids associated with the registration from |
| 375 // the uncommitted list. | 373 // the uncommitted list. |
| 376 std::set<int64> uncommitted_ids; | 374 std::set<int64> uncommitted_ids; |
| 377 uncommitted_ids.insert(resource1.resource_id); | 375 uncommitted_ids.insert(resource1.resource_id); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 409 std::set<int64> purgeable_resource_ids; | 407 std::set<int64> purgeable_resource_ids; |
| 410 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); | 408 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); |
| 411 EXPECT_EQ(2u, purgeable_resource_ids.size()); | 409 EXPECT_EQ(2u, purgeable_resource_ids.size()); |
| 412 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); | 410 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); |
| 413 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); | 411 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); |
| 414 } | 412 } |
| 415 | 413 |
| 416 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { | 414 TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) { |
| 417 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 415 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 418 | 416 |
| 417 GURL origin("http://example.com"); | |
| 419 RegistrationData data; | 418 RegistrationData data; |
| 420 data.registration_id = 100; | 419 data.registration_id = 100; |
| 421 data.scope = GURL("http://example.com/foo"); | 420 data.scope = URL(origin, "/foo"); |
| 422 data.script = GURL("http://example.com/script.js"); | 421 data.script = URL(origin, "/script.js"); |
| 423 data.version_id = 200; | 422 data.version_id = 200; |
| 424 GURL origin = data.scope.GetOrigin(); | |
| 425 | 423 |
| 426 Resource resource1 = CreateResource(1, "http://example.com/resource1"); | 424 Resource resource1 = CreateResource(1, URL(origin, "/resource1")); |
| 427 Resource resource2 = CreateResource(2, "http://example.com/resource2"); | 425 Resource resource2 = CreateResource(2, URL(origin, "/resource2")); |
| 428 | 426 |
| 429 std::vector<Resource> resources1; | 427 std::vector<Resource> resources1; |
| 430 resources1.push_back(resource1); | 428 resources1.push_back(resource1); |
| 431 resources1.push_back(resource2); | 429 resources1.push_back(resource2); |
| 432 | 430 |
| 433 EXPECT_TRUE(database->WriteRegistration(data, resources1)); | 431 EXPECT_TRUE(database->WriteRegistration(data, resources1)); |
| 434 | 432 |
| 435 // Make sure that the registration and resource records are stored. | 433 // Make sure that the registration and resource records are stored. |
| 436 RegistrationData data_out; | 434 RegistrationData data_out; |
| 437 std::vector<Resource> resources_out; | 435 std::vector<Resource> resources_out; |
| 438 EXPECT_TRUE(database->ReadRegistration( | 436 EXPECT_TRUE(database->ReadRegistration( |
| 439 data.registration_id, origin, &data_out, &resources_out)); | 437 data.registration_id, origin, &data_out, &resources_out)); |
| 440 VerifyRegistrationData(data, data_out); | 438 VerifyRegistrationData(data, data_out); |
| 441 VerifyResourceRecords(resources1, resources_out); | 439 VerifyResourceRecords(resources1, resources_out); |
| 442 | 440 |
| 443 // Update the registration. | 441 // Update the registration. |
| 444 RegistrationData updated_data = data; | 442 RegistrationData updated_data = data; |
| 445 updated_data.version_id = data.version_id + 1; | 443 updated_data.version_id = data.version_id + 1; |
| 446 Resource resource3 = CreateResource(3, "http://example.com/resource3"); | 444 Resource resource3 = CreateResource(3, URL(origin, "/resource3")); |
| 447 Resource resource4 = CreateResource(4, "http://example.com/resource4"); | 445 Resource resource4 = CreateResource(4, URL(origin, "/resource4")); |
| 448 std::vector<Resource> resources2; | 446 std::vector<Resource> resources2; |
| 449 resources2.push_back(resource3); | 447 resources2.push_back(resource3); |
| 450 resources2.push_back(resource4); | 448 resources2.push_back(resource4); |
| 451 | 449 |
| 452 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2)); | 450 EXPECT_TRUE(database->WriteRegistration(updated_data, resources2)); |
| 453 | 451 |
| 454 // Make sure that |updated_data| is stored and resources referred from |data| | 452 // Make sure that |updated_data| is stored and resources referred from |data| |
| 455 // is moved to the purgeable list. | 453 // is moved to the purgeable list. |
| 456 resources_out.clear(); | 454 resources_out.clear(); |
| 457 EXPECT_TRUE(database->ReadRegistration( | 455 EXPECT_TRUE(database->ReadRegistration( |
| 458 updated_data.registration_id, origin, &data_out, &resources_out)); | 456 updated_data.registration_id, origin, &data_out, &resources_out)); |
| 459 VerifyRegistrationData(updated_data, data_out); | 457 VerifyRegistrationData(updated_data, data_out); |
| 460 VerifyResourceRecords(resources2, resources_out); | 458 VerifyResourceRecords(resources2, resources_out); |
| 461 | 459 |
| 462 std::set<int64> purgeable_resource_ids; | 460 std::set<int64> purgeable_resource_ids; |
| 463 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); | 461 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); |
| 464 EXPECT_EQ(2u, purgeable_resource_ids.size()); | 462 EXPECT_EQ(2u, purgeable_resource_ids.size()); |
| 465 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); | 463 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); |
| 466 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); | 464 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); |
| 467 } | 465 } |
| 468 | 466 |
| 469 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { | 467 TEST(ServiceWorkerDatabaseTest, Registration_Multiple) { |
| 470 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 468 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 471 | 469 |
| 470 GURL origin("http://example.com"); | |
| 471 | |
| 472 // Add registration1. | 472 // Add registration1. |
| 473 RegistrationData data1; | 473 RegistrationData data1; |
| 474 data1.registration_id = 100; | 474 data1.registration_id = 100; |
| 475 data1.scope = GURL("http://example.com/foo"); | 475 data1.scope = URL(origin, "/foo"); |
| 476 data1.script = GURL("http://example.com/script1.js"); | 476 data1.script = URL(origin, "/script1.js"); |
| 477 data1.version_id = 200; | 477 data1.version_id = 200; |
| 478 GURL origin1 = data1.scope.GetOrigin(); | 478 GURL origin1 = data1.scope.GetOrigin(); |
| 479 | 479 |
| 480 Resource resource1 = CreateResource(1, "http://example.com/resource1"); | 480 Resource resource1 = CreateResource(1, URL(origin, "/resource1")); |
| 481 Resource resource2 = CreateResource(2, "http://example.com/resource2"); | 481 Resource resource2 = CreateResource(2, URL(origin, "/resource2")); |
| 482 | 482 |
| 483 std::vector<Resource> resources1; | 483 std::vector<Resource> resources1; |
| 484 resources1.push_back(resource1); | 484 resources1.push_back(resource1); |
| 485 resources1.push_back(resource2); | 485 resources1.push_back(resource2); |
| 486 EXPECT_TRUE(database->WriteRegistration(data1, resources1)); | 486 EXPECT_TRUE(database->WriteRegistration(data1, resources1)); |
| 487 | 487 |
| 488 // Add registration2. | 488 // Add registration2. |
| 489 RegistrationData data2; | 489 RegistrationData data2; |
| 490 data2.registration_id = 101; | 490 data2.registration_id = 101; |
| 491 data2.scope = GURL("http://example.com/bar"); | 491 data2.scope = URL(origin, "/bar"); |
| 492 data2.script = GURL("http://example.com/script2.js"); | 492 data2.script = URL(origin, "/script2.js"); |
| 493 data2.version_id = 201; | 493 data2.version_id = 201; |
| 494 GURL origin2 = data2.scope.GetOrigin(); | 494 GURL origin2 = data2.scope.GetOrigin(); |
| 495 | 495 |
| 496 Resource resource3 = CreateResource(3, "http://example.com/resource3"); | 496 Resource resource3 = CreateResource(3, URL(origin, "/resource3")); |
| 497 Resource resource4 = CreateResource(4, "http://example.com/resource4"); | 497 Resource resource4 = CreateResource(4, URL(origin, "/resource4")); |
| 498 | 498 |
| 499 std::vector<Resource> resources2; | 499 std::vector<Resource> resources2; |
| 500 resources2.push_back(resource3); | 500 resources2.push_back(resource3); |
| 501 resources2.push_back(resource4); | 501 resources2.push_back(resource4); |
| 502 EXPECT_TRUE(database->WriteRegistration(data2, resources2)); | 502 EXPECT_TRUE(database->WriteRegistration(data2, resources2)); |
| 503 | 503 |
| 504 // Make sure that registration1 is stored. | 504 // Make sure that registration1 is stored. |
| 505 RegistrationData data_out; | 505 RegistrationData data_out; |
| 506 std::vector<Resource> resources_out; | 506 std::vector<Resource> resources_out; |
| 507 EXPECT_TRUE(database->ReadRegistration( | 507 EXPECT_TRUE(database->ReadRegistration( |
| 508 data1.registration_id, origin1, &data_out, &resources_out)); | 508 data1.registration_id, origin, &data_out, &resources_out)); |
| 509 VerifyRegistrationData(data1, data_out); | 509 VerifyRegistrationData(data1, data_out); |
| 510 VerifyResourceRecords(resources1, resources_out); | 510 VerifyResourceRecords(resources1, resources_out); |
| 511 | 511 |
| 512 // Make sure that registration2 is also stored. | 512 // Make sure that registration2 is also stored. |
| 513 resources_out.clear(); | 513 resources_out.clear(); |
| 514 EXPECT_TRUE(database->ReadRegistration( | 514 EXPECT_TRUE(database->ReadRegistration( |
| 515 data2.registration_id, origin2, &data_out, &resources_out)); | 515 data2.registration_id, origin, &data_out, &resources_out)); |
| 516 VerifyRegistrationData(data2, data_out); | 516 VerifyRegistrationData(data2, data_out); |
| 517 VerifyResourceRecords(resources2, resources_out); | 517 VerifyResourceRecords(resources2, resources_out); |
| 518 | 518 |
| 519 std::set<int64> purgeable_resource_ids; | 519 std::set<int64> purgeable_resource_ids; |
| 520 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); | 520 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); |
| 521 EXPECT_TRUE(purgeable_resource_ids.empty()); | 521 EXPECT_TRUE(purgeable_resource_ids.empty()); |
| 522 | 522 |
| 523 // Delete registration1. | 523 // Delete registration1. |
| 524 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin1)); | 524 EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin)); |
| 525 | 525 |
| 526 // Make sure that registration1 is gone. | 526 // Make sure that registration1 is gone. |
| 527 resources_out.clear(); | 527 resources_out.clear(); |
| 528 EXPECT_FALSE(database->ReadRegistration( | 528 EXPECT_FALSE(database->ReadRegistration( |
| 529 data1.registration_id, origin1, &data_out, &resources_out)); | 529 data1.registration_id, origin, &data_out, &resources_out)); |
| 530 EXPECT_TRUE(resources_out.empty()); | 530 EXPECT_TRUE(resources_out.empty()); |
| 531 | 531 |
| 532 purgeable_resource_ids.clear(); | 532 purgeable_resource_ids.clear(); |
| 533 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); | 533 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids)); |
| 534 EXPECT_EQ(2u, purgeable_resource_ids.size()); | 534 EXPECT_EQ(2u, purgeable_resource_ids.size()); |
| 535 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); | 535 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id)); |
| 536 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); | 536 EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id)); |
| 537 | 537 |
| 538 // Make sure that registration2 is still alive. | 538 // Make sure that registration2 is still alive. |
| 539 resources_out.clear(); | 539 resources_out.clear(); |
| 540 EXPECT_TRUE(database->ReadRegistration( | 540 EXPECT_TRUE(database->ReadRegistration( |
| 541 data2.registration_id, origin2, &data_out, &resources_out)); | 541 data2.registration_id, origin, &data_out, &resources_out)); |
| 542 VerifyRegistrationData(data2, data_out); | 542 VerifyRegistrationData(data2, data_out); |
| 543 VerifyResourceRecords(resources2, resources_out); | 543 VerifyResourceRecords(resources2, resources_out); |
| 544 } | 544 } |
| 545 | 545 |
| 546 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { | 546 TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) { |
| 547 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 547 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 548 | 548 |
| 549 // Write {1, 2, 3}. | 549 // Write {1, 2, 3}. |
| 550 std::set<int64> ids1; | 550 std::set<int64> ids1; |
| 551 ids1.insert(1); | 551 ids1.insert(1); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 694 std::set<int64> purgeable_ids_out; | 694 std::set<int64> purgeable_ids_out; |
| 695 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); | 695 EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out)); |
| 696 EXPECT_EQ(4u, purgeable_ids_out.size()); | 696 EXPECT_EQ(4u, purgeable_ids_out.size()); |
| 697 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); | 697 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); |
| 698 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); | 698 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); |
| 699 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); | 699 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); |
| 700 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); | 700 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); |
| 701 } | 701 } |
| 702 | 702 |
| 703 } // namespace content | 703 } // namespace content |
| OLD | NEW |