OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_dispatcher_host.h" | 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 228 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); |
229 } | 229 } |
230 | 230 |
231 TEST_F(ServiceWorkerDispatcherHostTest, Register_NonSecureOriginShouldFail) { | 231 TEST_F(ServiceWorkerDispatcherHostTest, Register_NonSecureOriginShouldFail) { |
232 const int64 kProviderId = 99; // Dummy value | 232 const int64 kProviderId = 99; // Dummy value |
233 scoped_ptr<ServiceWorkerProviderHost> host( | 233 scoped_ptr<ServiceWorkerProviderHost> host( |
234 CreateServiceWorkerProviderHost(kProviderId)); | 234 CreateServiceWorkerProviderHost(kProviderId)); |
235 host->SetDocumentUrl(GURL("http://www.example.com/foo")); | 235 host->SetDocumentUrl(GURL("http://www.example.com/foo")); |
236 context()->AddProviderHost(host.Pass()); | 236 context()->AddProviderHost(host.Pass()); |
237 | 237 |
238 SendRegister(kProviderId, | 238 Register(kProviderId, |
239 GURL("http://www.example.com/"), | 239 GURL("http://www.example.com/"), |
240 GURL("http://www.example.com/bar")); | 240 GURL("http://www.example.com/bar"), |
241 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 241 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
242 } | 242 } |
243 | 243 |
244 TEST_F(ServiceWorkerDispatcherHostTest, Register_CrossOriginShouldFail) { | 244 TEST_F(ServiceWorkerDispatcherHostTest, Register_CrossOriginShouldFail) { |
245 const int64 kProviderId = 99; // Dummy value | 245 const int64 kProviderId = 99; // Dummy value |
246 scoped_ptr<ServiceWorkerProviderHost> host( | 246 scoped_ptr<ServiceWorkerProviderHost> host( |
247 CreateServiceWorkerProviderHost(kProviderId)); | 247 CreateServiceWorkerProviderHost(kProviderId)); |
248 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 248 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
249 context()->AddProviderHost(host.Pass()); | 249 context()->AddProviderHost(host.Pass()); |
250 | 250 |
251 // Script has a different host | 251 // Script has a different host |
252 SendRegister(kProviderId, | 252 Register(kProviderId, |
253 GURL("https://www.example.com/"), | 253 GURL("https://www.example.com/"), |
254 GURL("https://foo.example.com/bar")); | 254 GURL("https://foo.example.com/bar"), |
255 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 255 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
256 | 256 |
257 // Scope has a different host | 257 // Scope has a different host |
258 SendRegister(kProviderId, | 258 Register(kProviderId, |
259 GURL("https://foo.example.com/"), | 259 GURL("https://foo.example.com/"), |
260 GURL("https://www.example.com/bar")); | 260 GURL("https://www.example.com/bar"), |
261 EXPECT_EQ(2, dispatcher_host_->bad_messages_received_count_); | 261 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
262 | 262 |
263 // Script has a different port | 263 // Script has a different port |
264 SendRegister(kProviderId, | 264 Register(kProviderId, |
265 GURL("https://www.example.com/"), | 265 GURL("https://www.example.com/"), |
266 GURL("https://www.example.com:8080/bar")); | 266 GURL("https://www.example.com:8080/bar"), |
267 EXPECT_EQ(3, dispatcher_host_->bad_messages_received_count_); | 267 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
268 | 268 |
269 // Scope has a different transport | 269 // Scope has a different transport |
270 SendRegister(kProviderId, | 270 Register(kProviderId, |
271 GURL("wss://www.example.com/"), | 271 GURL("wss://www.example.com/"), |
272 GURL("https://www.example.com/bar")); | 272 GURL("https://www.example.com/bar"), |
273 EXPECT_EQ(4, dispatcher_host_->bad_messages_received_count_); | 273 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
274 | 274 |
275 // Script and scope have a different host but match each other | 275 // Script and scope have a different host but match each other |
276 SendRegister(kProviderId, | 276 Register(kProviderId, |
277 GURL("https://foo.example.com/"), | 277 GURL("https://foo.example.com/"), |
278 GURL("https://foo.example.com/bar")); | 278 GURL("https://foo.example.com/bar"), |
279 EXPECT_EQ(5, dispatcher_host_->bad_messages_received_count_); | 279 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
280 | 280 |
281 // Script and scope URLs are invalid | 281 // Script and scope URLs are invalid |
282 SendRegister(kProviderId, | 282 SendRegister(kProviderId, |
283 GURL(), | 283 GURL(), |
284 GURL("h@ttps://@")); | 284 GURL("h@ttps://@")); |
285 EXPECT_EQ(6, dispatcher_host_->bad_messages_received_count_); | 285 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); |
| 286 } |
| 287 |
| 288 TEST_F(ServiceWorkerDispatcherHostTest, |
| 289 Register_FileSystemDocumentShouldFail) { |
| 290 const int64 kProviderId = 99; // Dummy value |
| 291 scoped_ptr<ServiceWorkerProviderHost> host( |
| 292 CreateServiceWorkerProviderHost(kProviderId)); |
| 293 host->SetDocumentUrl(GURL("filesystem:https://www.example.com/temporary/a")); |
| 294 context()->AddProviderHost(host.Pass()); |
| 295 |
| 296 Register(kProviderId, |
| 297 GURL("filesystem:https://www.example.com/temporary/"), |
| 298 GURL("https://www.example.com/temporary/bar"), |
| 299 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
| 300 |
| 301 Register(kProviderId, |
| 302 GURL("https://www.example.com/temporary/"), |
| 303 GURL("filesystem:https://www.example.com/temporary/bar"), |
| 304 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
| 305 |
| 306 Register(kProviderId, |
| 307 GURL("filesystem:https://www.example.com/temporary/"), |
| 308 GURL("filesystem:https://www.example.com/temporary/bar"), |
| 309 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
| 310 } |
| 311 |
| 312 TEST_F(ServiceWorkerDispatcherHostTest, |
| 313 Register_FileSystemScriptOrScopeShouldFail) { |
| 314 const int64 kProviderId = 99; // Dummy value |
| 315 scoped_ptr<ServiceWorkerProviderHost> host( |
| 316 CreateServiceWorkerProviderHost(kProviderId)); |
| 317 host->SetDocumentUrl(GURL("https://www.example.com/temporary/")); |
| 318 context()->AddProviderHost(host.Pass()); |
| 319 |
| 320 Register(kProviderId, |
| 321 GURL("filesystem:https://www.example.com/temporary/"), |
| 322 GURL("https://www.example.com/temporary/bar"), |
| 323 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
| 324 |
| 325 Register(kProviderId, |
| 326 GURL("https://www.example.com/temporary/"), |
| 327 GURL("filesystem:https://www.example.com/temporary/bar"), |
| 328 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
| 329 |
| 330 Register(kProviderId, |
| 331 GURL("filesystem:https://www.example.com/temporary/"), |
| 332 GURL("filesystem:https://www.example.com/temporary/bar"), |
| 333 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID); |
286 } | 334 } |
287 | 335 |
288 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_HTTPS) { | 336 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_HTTPS) { |
289 const int64 kProviderId = 99; // Dummy value | 337 const int64 kProviderId = 99; // Dummy value |
290 scoped_ptr<ServiceWorkerProviderHost> host( | 338 scoped_ptr<ServiceWorkerProviderHost> host( |
291 CreateServiceWorkerProviderHost(kProviderId)); | 339 CreateServiceWorkerProviderHost(kProviderId)); |
292 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 340 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
293 context()->AddProviderHost(host.Pass()); | 341 context()->AddProviderHost(host.Pass()); |
294 | 342 |
295 Unregister(kProviderId, | 343 Unregister(kProviderId, |
(...skipping 14 matching lines...) Expand all Loading... |
310 ServiceWorkerMsg_ServiceWorkerUnregistered::ID); | 358 ServiceWorkerMsg_ServiceWorkerUnregistered::ID); |
311 } | 359 } |
312 | 360 |
313 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_CrossOriginShouldFail) { | 361 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_CrossOriginShouldFail) { |
314 const int64 kProviderId = 99; // Dummy value | 362 const int64 kProviderId = 99; // Dummy value |
315 scoped_ptr<ServiceWorkerProviderHost> host( | 363 scoped_ptr<ServiceWorkerProviderHost> host( |
316 CreateServiceWorkerProviderHost(kProviderId)); | 364 CreateServiceWorkerProviderHost(kProviderId)); |
317 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 365 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
318 context()->AddProviderHost(host.Pass()); | 366 context()->AddProviderHost(host.Pass()); |
319 | 367 |
320 SendUnregister(kProviderId, GURL("https://foo.example.com/")); | 368 Unregister(kProviderId, |
321 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 369 GURL("https://foo.example.com/"), |
| 370 ServiceWorkerMsg_ServiceWorkerUnregistrationError::ID); |
322 } | 371 } |
323 | 372 |
324 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_InvalidScopeShouldFail) { | 373 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_InvalidScopeShouldFail) { |
325 const int64 kProviderId = 99; // Dummy value | 374 const int64 kProviderId = 99; // Dummy value |
326 scoped_ptr<ServiceWorkerProviderHost> host( | 375 scoped_ptr<ServiceWorkerProviderHost> host( |
327 CreateServiceWorkerProviderHost(kProviderId)); | 376 CreateServiceWorkerProviderHost(kProviderId)); |
328 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 377 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
329 context()->AddProviderHost(host.Pass()); | 378 context()->AddProviderHost(host.Pass()); |
330 | 379 |
331 SendUnregister(kProviderId, GURL("")); | 380 SendUnregister(kProviderId, GURL("")); |
332 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 381 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); |
333 } | 382 } |
334 | 383 |
335 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_NonSecureOriginShouldFail) { | 384 TEST_F(ServiceWorkerDispatcherHostTest, Unregister_NonSecureOriginShouldFail) { |
336 const int64 kProviderId = 99; // Dummy value | 385 const int64 kProviderId = 99; // Dummy value |
337 scoped_ptr<ServiceWorkerProviderHost> host( | 386 scoped_ptr<ServiceWorkerProviderHost> host( |
338 CreateServiceWorkerProviderHost(kProviderId)); | 387 CreateServiceWorkerProviderHost(kProviderId)); |
339 host->SetDocumentUrl(GURL("http://www.example.com/foo")); | 388 host->SetDocumentUrl(GURL("http://www.example.com/foo")); |
340 context()->AddProviderHost(host.Pass()); | 389 context()->AddProviderHost(host.Pass()); |
341 | 390 |
342 SendUnregister(kProviderId, GURL("http://www.example.com/")); | 391 Unregister(kProviderId, |
343 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 392 GURL("http://www.example.com/"), |
| 393 ServiceWorkerMsg_ServiceWorkerUnregistrationError::ID); |
344 } | 394 } |
345 | 395 |
346 TEST_F(ServiceWorkerDispatcherHostTest, EarlyContextDeletion) { | 396 TEST_F(ServiceWorkerDispatcherHostTest, EarlyContextDeletion) { |
347 helper_->ShutdownContext(); | 397 helper_->ShutdownContext(); |
348 | 398 |
349 // Let the shutdown reach the simulated IO thread. | 399 // Let the shutdown reach the simulated IO thread. |
350 base::RunLoop().RunUntilIdle(); | 400 base::RunLoop().RunUntilIdle(); |
351 | 401 |
352 Register(-1, | 402 Register(-1, |
353 GURL(), | 403 GURL(), |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 ServiceWorkerMsg_DidGetRegistration::ID); | 448 ServiceWorkerMsg_DidGetRegistration::ID); |
399 } | 449 } |
400 | 450 |
401 TEST_F(ServiceWorkerDispatcherHostTest, GetRegistration_CrossOriginShouldFail) { | 451 TEST_F(ServiceWorkerDispatcherHostTest, GetRegistration_CrossOriginShouldFail) { |
402 const int64 kProviderId = 99; // Dummy value | 452 const int64 kProviderId = 99; // Dummy value |
403 scoped_ptr<ServiceWorkerProviderHost> host( | 453 scoped_ptr<ServiceWorkerProviderHost> host( |
404 CreateServiceWorkerProviderHost(kProviderId)); | 454 CreateServiceWorkerProviderHost(kProviderId)); |
405 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 455 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
406 context()->AddProviderHost(host.Pass()); | 456 context()->AddProviderHost(host.Pass()); |
407 | 457 |
408 SendGetRegistration(kProviderId, GURL("https://foo.example.com/")); | 458 GetRegistration(kProviderId, |
409 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 459 GURL("https://foo.example.com/"), |
| 460 ServiceWorkerMsg_ServiceWorkerGetRegistrationError::ID); |
410 } | 461 } |
411 | 462 |
412 TEST_F(ServiceWorkerDispatcherHostTest, | 463 TEST_F(ServiceWorkerDispatcherHostTest, |
413 GetRegistration_InvalidScopeShouldFail) { | 464 GetRegistration_InvalidScopeShouldFail) { |
414 const int64 kProviderId = 99; // Dummy value | 465 const int64 kProviderId = 99; // Dummy value |
415 scoped_ptr<ServiceWorkerProviderHost> host( | 466 scoped_ptr<ServiceWorkerProviderHost> host( |
416 CreateServiceWorkerProviderHost(kProviderId)); | 467 CreateServiceWorkerProviderHost(kProviderId)); |
417 host->SetDocumentUrl(GURL("https://www.example.com/foo")); | 468 host->SetDocumentUrl(GURL("https://www.example.com/foo")); |
418 context()->AddProviderHost(host.Pass()); | 469 context()->AddProviderHost(host.Pass()); |
419 | 470 |
420 SendGetRegistration(kProviderId, GURL("")); | 471 SendGetRegistration(kProviderId, GURL("")); |
421 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 472 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); |
422 } | 473 } |
423 | 474 |
424 TEST_F(ServiceWorkerDispatcherHostTest, | 475 TEST_F(ServiceWorkerDispatcherHostTest, |
425 GetRegistration_NotSecureOriginShouldFail) { | 476 GetRegistration_NotSecureOriginShouldFail) { |
426 const int64 kProviderId = 99; // Dummy value | 477 const int64 kProviderId = 99; // Dummy value |
427 scoped_ptr<ServiceWorkerProviderHost> host( | 478 scoped_ptr<ServiceWorkerProviderHost> host( |
428 CreateServiceWorkerProviderHost(kProviderId)); | 479 CreateServiceWorkerProviderHost(kProviderId)); |
429 host->SetDocumentUrl(GURL("http://www.example.com/foo")); | 480 host->SetDocumentUrl(GURL("http://www.example.com/foo")); |
430 context()->AddProviderHost(host.Pass()); | 481 context()->AddProviderHost(host.Pass()); |
431 | 482 |
432 SendGetRegistration(kProviderId, GURL("http://www.example.com/")); | 483 GetRegistration(kProviderId, |
433 EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); | 484 GURL("http://www.example.com/"), |
| 485 ServiceWorkerMsg_ServiceWorkerGetRegistrationError::ID); |
434 } | 486 } |
435 | 487 |
436 TEST_F(ServiceWorkerDispatcherHostTest, GetRegistration_EarlyContextDeletion) { | 488 TEST_F(ServiceWorkerDispatcherHostTest, GetRegistration_EarlyContextDeletion) { |
437 helper_->ShutdownContext(); | 489 helper_->ShutdownContext(); |
438 | 490 |
439 // Let the shutdown reach the simulated IO thread. | 491 // Let the shutdown reach the simulated IO thread. |
440 base::RunLoop().RunUntilIdle(); | 492 base::RunLoop().RunUntilIdle(); |
441 | 493 |
442 GetRegistration(-1, | 494 GetRegistration(-1, |
443 GURL(), | 495 GURL(), |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 | 544 |
493 // To show the new dispatcher can operate, simulate provider creation. Since | 545 // To show the new dispatcher can operate, simulate provider creation. Since |
494 // the old dispatcher cleaned up the old provider host, the new one won't | 546 // the old dispatcher cleaned up the old provider host, the new one won't |
495 // complain. | 547 // complain. |
496 new_dispatcher_host->OnMessageReceived( | 548 new_dispatcher_host->OnMessageReceived( |
497 ServiceWorkerHostMsg_ProviderCreated(kProviderId, MSG_ROUTING_NONE)); | 549 ServiceWorkerHostMsg_ProviderCreated(kProviderId, MSG_ROUTING_NONE)); |
498 EXPECT_EQ(0, new_dispatcher_host->bad_messages_received_count_); | 550 EXPECT_EQ(0, new_dispatcher_host->bad_messages_received_count_); |
499 } | 551 } |
500 | 552 |
501 } // namespace content | 553 } // namespace content |
OLD | NEW |