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/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
10 #include "content/browser/message_port_message_filter.h" | 10 #include "content/browser/message_port_message_filter.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "url/gurl.h" | 27 #include "url/gurl.h" |
28 | 28 |
29 using blink::WebServiceWorkerError; | 29 using blink::WebServiceWorkerError; |
30 | 30 |
31 namespace content { | 31 namespace content { |
32 | 32 |
33 namespace { | 33 namespace { |
34 | 34 |
35 const char kNoDocumentURLErrorMessage[] = | 35 const char kNoDocumentURLErrorMessage[] = |
36 "No URL is associated with the caller's document."; | 36 "No URL is associated with the caller's document."; |
37 const char kDisallowedURLErrorMessage[] = | |
38 "The URL is not supported."; | |
39 const char kShutdownErrorMessage[] = | 37 const char kShutdownErrorMessage[] = |
40 "The Service Worker system has shutdown."; | 38 "The Service Worker system has shutdown."; |
41 const char kUserDeniedPermissionMessage[] = | 39 const char kUserDeniedPermissionMessage[] = |
42 "The user denied permission to use Service Worker."; | 40 "The user denied permission to use Service Worker."; |
43 | 41 |
44 const uint32 kFilteredMessageClasses[] = { | 42 const uint32 kFilteredMessageClasses[] = { |
45 ServiceWorkerMsgStart, | 43 ServiceWorkerMsgStart, |
46 EmbeddedWorkerMsgStart, | 44 EmbeddedWorkerMsgStart, |
47 }; | 45 }; |
48 | 46 |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 if (provider_host->document_url().is_empty()) { | 292 if (provider_host->document_url().is_empty()) { |
295 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 293 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
296 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | 294 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, |
297 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 295 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
298 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); | 296 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); |
299 return; | 297 return; |
300 } | 298 } |
301 | 299 |
302 if (!CanRegisterServiceWorker( | 300 if (!CanRegisterServiceWorker( |
303 provider_host->document_url(), pattern, script_url)) { | 301 provider_host->document_url(), pattern, script_url)) { |
304 // TODO(kinuko): Change this back to BadMessageReceived() once we start | 302 BadMessageReceived(); |
305 // to check these in the renderer too. (http://crbug.com/453982) | |
306 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | |
307 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | |
308 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | |
309 base::ASCIIToUTF16(kDisallowedURLErrorMessage))); | |
310 return; | 303 return; |
311 } | 304 } |
312 | 305 |
313 std::string error_message; | 306 std::string error_message; |
314 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, | 307 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, |
315 &error_message)) { | 308 &error_message)) { |
316 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 309 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
317 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | 310 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, |
318 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + | 311 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + |
319 base::UTF8ToUTF16(error_message))); | 312 base::UTF8ToUTF16(error_message))); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 if (provider_host->document_url().is_empty()) { | 377 if (provider_host->document_url().is_empty()) { |
385 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( | 378 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( |
386 thread_id, | 379 thread_id, |
387 request_id, | 380 request_id, |
388 WebServiceWorkerError::ErrorTypeSecurity, | 381 WebServiceWorkerError::ErrorTypeSecurity, |
389 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); | 382 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); |
390 return; | 383 return; |
391 } | 384 } |
392 | 385 |
393 if (!CanUnregisterServiceWorker(provider_host->document_url(), pattern)) { | 386 if (!CanUnregisterServiceWorker(provider_host->document_url(), pattern)) { |
394 // TODO(kinuko): Change this back to BadMessageReceived() once we start | 387 BadMessageReceived(); |
395 // to check these in the renderer too. (http://crbug.com/453982) | |
396 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( | |
397 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | |
398 base::ASCIIToUTF16(kServiceWorkerUnregisterErrorPrefix) + | |
399 base::ASCIIToUTF16(kDisallowedURLErrorMessage))); | |
400 return; | 388 return; |
401 } | 389 } |
402 | 390 |
403 if (!GetContentClient()->browser()->AllowServiceWorker( | 391 if (!GetContentClient()->browser()->AllowServiceWorker( |
404 pattern, provider_host->topmost_frame_url(), resource_context_)) { | 392 pattern, provider_host->topmost_frame_url(), resource_context_)) { |
405 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( | 393 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( |
406 thread_id, | 394 thread_id, |
407 request_id, | 395 request_id, |
408 WebServiceWorkerError::ErrorTypeUnknown, | 396 WebServiceWorkerError::ErrorTypeUnknown, |
409 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); | 397 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed. | 447 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed. |
460 if (provider_host->document_url().is_empty()) { | 448 if (provider_host->document_url().is_empty()) { |
461 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( | 449 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( |
462 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | 450 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, |
463 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + | 451 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + |
464 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); | 452 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); |
465 return; | 453 return; |
466 } | 454 } |
467 | 455 |
468 if (!CanGetRegistration(provider_host->document_url(), document_url)) { | 456 if (!CanGetRegistration(provider_host->document_url(), document_url)) { |
469 // TODO(kinuko): Change this back to BadMessageReceived() once we start | 457 BadMessageReceived(); |
470 // to check these in the renderer too. (http://crbug.com/453982) | |
471 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( | |
472 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, | |
473 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + | |
474 base::ASCIIToUTF16(kDisallowedURLErrorMessage))); | |
475 return; | 458 return; |
476 } | 459 } |
477 | 460 |
478 if (!GetContentClient()->browser()->AllowServiceWorker( | 461 if (!GetContentClient()->browser()->AllowServiceWorker( |
479 provider_host->document_url(), | 462 provider_host->document_url(), |
480 provider_host->topmost_frame_url(), | 463 provider_host->topmost_frame_url(), |
481 resource_context_)) { | 464 resource_context_)) { |
482 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( | 465 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( |
483 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, | 466 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, |
484 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + | 467 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); | 951 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); |
969 if (!handle) { | 952 if (!handle) { |
970 BadMessageReceived(); | 953 BadMessageReceived(); |
971 return; | 954 return; |
972 } | 955 } |
973 handle->version()->StopWorker( | 956 handle->version()->StopWorker( |
974 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 957 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
975 } | 958 } |
976 | 959 |
977 } // namespace content | 960 } // namespace content |
OLD | NEW |