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(origin1, "/script1.js"); |
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 |