Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 813673005: Service Worker: Improve some exception messages (Chromium). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: typo Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/message_port_message_filter.h" 10 #include "content/browser/message_port_message_filter.h"
11 #include "content/browser/message_port_service.h" 11 #include "content/browser/message_port_service.h"
12 #include "content/browser/service_worker/embedded_worker_registry.h" 12 #include "content/browser/service_worker/embedded_worker_registry.h"
13 #include "content/browser/service_worker/service_worker_context_core.h" 13 #include "content/browser/service_worker/service_worker_context_core.h"
14 #include "content/browser/service_worker/service_worker_context_wrapper.h" 14 #include "content/browser/service_worker/service_worker_context_wrapper.h"
15 #include "content/browser/service_worker/service_worker_handle.h" 15 #include "content/browser/service_worker/service_worker_handle.h"
16 #include "content/browser/service_worker/service_worker_registration.h" 16 #include "content/browser/service_worker/service_worker_registration.h"
17 #include "content/browser/service_worker/service_worker_registration_handle.h" 17 #include "content/browser/service_worker/service_worker_registration_handle.h"
18 #include "content/browser/service_worker/service_worker_utils.h" 18 #include "content/browser/service_worker/service_worker_utils.h"
19 #include "content/common/service_worker/embedded_worker_messages.h" 19 #include "content/common/service_worker/embedded_worker_messages.h"
20 #include "content/common/service_worker/service_worker_messages.h" 20 #include "content/common/service_worker/service_worker_messages.h"
21 #include "content/common/service_worker/service_worker_types.h"
21 #include "content/public/browser/content_browser_client.h" 22 #include "content/public/browser/content_browser_client.h"
22 #include "content/public/common/content_client.h" 23 #include "content/public/common/content_client.h"
23 #include "ipc/ipc_message_macros.h" 24 #include "ipc/ipc_message_macros.h"
24 #include "net/base/net_util.h" 25 #include "net/base/net_util.h"
25 #include "third_party/WebKit/public/platform/WebServiceWorkerError.h" 26 #include "third_party/WebKit/public/platform/WebServiceWorkerError.h"
26 #include "url/gurl.h" 27 #include "url/gurl.h"
27 28
28 using blink::WebServiceWorkerError; 29 using blink::WebServiceWorkerError;
29 30
30 namespace content { 31 namespace content {
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( 250 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
250 int thread_id, 251 int thread_id,
251 int request_id, 252 int request_id,
252 int provider_id, 253 int provider_id,
253 const GURL& pattern, 254 const GURL& pattern,
254 const GURL& script_url) { 255 const GURL& script_url) {
255 TRACE_EVENT0("ServiceWorker", 256 TRACE_EVENT0("ServiceWorker",
256 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); 257 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker");
257 if (!GetContext()) { 258 if (!GetContext()) {
258 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 259 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
259 thread_id, 260 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
260 request_id, 261 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
261 WebServiceWorkerError::ErrorTypeAbort, 262 base::ASCIIToUTF16(kShutdownErrorMessage)));
262 base::ASCIIToUTF16(kShutdownErrorMessage)));
263 return; 263 return;
264 } 264 }
265 if (!pattern.is_valid() || !script_url.is_valid()) { 265 if (!pattern.is_valid() || !script_url.is_valid()) {
266 BadMessageReceived(); 266 BadMessageReceived();
267 return; 267 return;
268 } 268 }
269 269
270 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost( 270 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost(
271 render_process_id_, provider_id); 271 render_process_id_, provider_id);
272 if (!provider_host) { 272 if (!provider_host) {
273 BadMessageReceived(); 273 BadMessageReceived();
274 return; 274 return;
275 } 275 }
276 if (!provider_host->IsContextAlive()) { 276 if (!provider_host->IsContextAlive()) {
277 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 277 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
278 thread_id, 278 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
279 request_id, 279 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
280 WebServiceWorkerError::ErrorTypeAbort, 280 base::ASCIIToUTF16(kShutdownErrorMessage)));
281 base::ASCIIToUTF16(kShutdownErrorMessage)));
282 return; 281 return;
283 } 282 }
284 283
285 // TODO(ksakamoto): Currently, document_url is empty if the document is in an 284 // TODO(ksakamoto): Currently, document_url is empty if the document is in an
286 // IFRAME using frame.contentDocument.write(...). We can remove this check 285 // IFRAME using frame.contentDocument.write(...). We can remove this check
287 // once crbug.com/439697 is fixed. 286 // once crbug.com/439697 is fixed.
288 if (provider_host->document_url().is_empty()) { 287 if (provider_host->document_url().is_empty()) {
289 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 288 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
290 thread_id, 289 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
291 request_id, 290 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
292 WebServiceWorkerError::ErrorTypeSecurity, 291 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
293 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
294 return; 292 return;
295 } 293 }
296 294
297 if (!CanRegisterServiceWorker( 295 if (!CanRegisterServiceWorker(
298 provider_host->document_url(), pattern, script_url)) { 296 provider_host->document_url(), pattern, script_url)) {
299 BadMessageReceived(); 297 BadMessageReceived();
300 return; 298 return;
301 } 299 }
302 300
303 std::string error_message; 301 std::string error_message;
304 if (!ServiceWorkerUtils::IsPathRestrictionSatisfied( 302 if (!ServiceWorkerUtils::IsPathRestrictionSatisfied(
305 pattern, script_url, &error_message)) { 303 pattern, script_url, &error_message)) {
306 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 304 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
307 thread_id, 305 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
308 request_id, 306 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
309 WebServiceWorkerError::ErrorTypeSecurity, 307 base::UTF8ToUTF16(error_message)));
310 base::UTF8ToUTF16(error_message)));
311 return; 308 return;
312 } 309 }
313 310
314 if (!GetContentClient()->browser()->AllowServiceWorker( 311 if (!GetContentClient()->browser()->AllowServiceWorker(
315 pattern, provider_host->topmost_frame_url(), resource_context_)) { 312 pattern, provider_host->topmost_frame_url(), resource_context_)) {
316 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 313 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
317 thread_id, 314 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown,
318 request_id, 315 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
319 WebServiceWorkerError::ErrorTypeUnknown, 316 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
320 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
321 return; 317 return;
322 } 318 }
323 319
324 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", 320 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
325 "ServiceWorkerDispatcherHost::RegisterServiceWorker", 321 "ServiceWorkerDispatcherHost::RegisterServiceWorker",
326 request_id, 322 request_id,
327 "Pattern", pattern.spec(), 323 "Pattern", pattern.spec(),
328 "Script URL", script_url.spec()); 324 "Script URL", script_url.spec());
329 GetContext()->RegisterServiceWorker( 325 GetContext()->RegisterServiceWorker(
330 pattern, 326 pattern,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 408
413 void ServiceWorkerDispatcherHost::OnGetRegistration( 409 void ServiceWorkerDispatcherHost::OnGetRegistration(
414 int thread_id, 410 int thread_id,
415 int request_id, 411 int request_id,
416 int provider_id, 412 int provider_id,
417 const GURL& document_url) { 413 const GURL& document_url) {
418 TRACE_EVENT0("ServiceWorker", 414 TRACE_EVENT0("ServiceWorker",
419 "ServiceWorkerDispatcherHost::OnGetRegistration"); 415 "ServiceWorkerDispatcherHost::OnGetRegistration");
420 if (!GetContext()) { 416 if (!GetContext()) {
421 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 417 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
422 thread_id, 418 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort,
423 request_id, 419 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
424 blink::WebServiceWorkerError::ErrorTypeAbort, 420 base::ASCIIToUTF16(kShutdownErrorMessage)));
425 base::ASCIIToUTF16(kShutdownErrorMessage)));
426 return; 421 return;
427 } 422 }
428 if (!document_url.is_valid()) { 423 if (!document_url.is_valid()) {
429 BadMessageReceived(); 424 BadMessageReceived();
430 return; 425 return;
431 } 426 }
432 427
433 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost( 428 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost(
434 render_process_id_, provider_id); 429 render_process_id_, provider_id);
435 if (!provider_host) { 430 if (!provider_host) {
436 BadMessageReceived(); 431 BadMessageReceived();
437 return; 432 return;
438 } 433 }
439 if (!provider_host->IsContextAlive()) { 434 if (!provider_host->IsContextAlive()) {
440 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 435 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
441 thread_id, 436 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort,
442 request_id, 437 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
443 blink::WebServiceWorkerError::ErrorTypeAbort, 438 base::ASCIIToUTF16(kShutdownErrorMessage)));
444 base::ASCIIToUTF16(kShutdownErrorMessage)));
445 return; 439 return;
446 } 440 }
447 441
448 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed. 442 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed.
449 if (provider_host->document_url().is_empty()) { 443 if (provider_host->document_url().is_empty()) {
450 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 444 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
451 thread_id, 445 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
452 request_id, 446 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
453 WebServiceWorkerError::ErrorTypeSecurity, 447 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
454 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
455 return; 448 return;
456 } 449 }
457 450
458 if (!CanGetRegistration(provider_host->document_url(), document_url)) { 451 if (!CanGetRegistration(provider_host->document_url(), document_url)) {
459 BadMessageReceived(); 452 BadMessageReceived();
460 return; 453 return;
461 } 454 }
462 455
463 if (!GetContentClient()->browser()->AllowServiceWorker( 456 if (!GetContentClient()->browser()->AllowServiceWorker(
464 provider_host->document_url(), 457 provider_host->document_url(),
465 provider_host->topmost_frame_url(), 458 provider_host->topmost_frame_url(),
466 resource_context_)) { 459 resource_context_)) {
467 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 460 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
468 thread_id, 461 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown,
469 request_id, 462 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
470 WebServiceWorkerError::ErrorTypeUnknown, 463 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
471 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
472 return; 464 return;
473 } 465 }
474 466
475 DCHECK_CURRENTLY_ON(BrowserThread::IO); 467 DCHECK_CURRENTLY_ON(BrowserThread::IO);
476 if (GetContext()->storage()->IsDisabled()) { 468 if (GetContext()->storage()->IsDisabled()) {
477 SendGetRegistrationError(thread_id, request_id, SERVICE_WORKER_ERROR_ABORT); 469 SendGetRegistrationError(thread_id, request_id, SERVICE_WORKER_ERROR_ABORT);
478 return; 470 return;
479 } 471 }
480 472
481 TRACE_EVENT_ASYNC_BEGIN1( 473 TRACE_EVENT_ASYNC_BEGIN1(
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 852
861 void ServiceWorkerDispatcherHost::SendRegistrationError( 853 void ServiceWorkerDispatcherHost::SendRegistrationError(
862 int thread_id, 854 int thread_id,
863 int request_id, 855 int request_id,
864 ServiceWorkerStatusCode status) { 856 ServiceWorkerStatusCode status) {
865 base::string16 error_message; 857 base::string16 error_message;
866 blink::WebServiceWorkerError::ErrorType error_type; 858 blink::WebServiceWorkerError::ErrorType error_type;
867 GetServiceWorkerRegistrationStatusResponse( 859 GetServiceWorkerRegistrationStatusResponse(
868 status, &error_type, &error_message); 860 status, &error_type, &error_message);
869 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 861 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
870 thread_id, request_id, error_type, error_message)); 862 thread_id, request_id, error_type,
863 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + error_message));
dominicc (has gone to gerrit) 2015/01/14 06:16:37 Realize that this is not in your patch, but do you
falken 2015/01/14 07:29:21 That's a good question. I found this post: https:/
871 } 864 }
872 865
873 void ServiceWorkerDispatcherHost::SendUnregistrationError( 866 void ServiceWorkerDispatcherHost::SendUnregistrationError(
874 int thread_id, 867 int thread_id,
875 int request_id, 868 int request_id,
876 ServiceWorkerStatusCode status) { 869 ServiceWorkerStatusCode status) {
877 base::string16 error_message; 870 base::string16 error_message;
878 blink::WebServiceWorkerError::ErrorType error_type; 871 blink::WebServiceWorkerError::ErrorType error_type;
879 GetServiceWorkerRegistrationStatusResponse( 872 GetServiceWorkerRegistrationStatusResponse(
880 status, &error_type, &error_message); 873 status, &error_type, &error_message);
881 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( 874 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
882 thread_id, request_id, error_type, error_message)); 875 thread_id, request_id, error_type,
876 base::ASCIIToUTF16(kServiceWorkerUnregisterErrorPrefix) + error_message));
883 } 877 }
884 878
885 void ServiceWorkerDispatcherHost::SendGetRegistrationError( 879 void ServiceWorkerDispatcherHost::SendGetRegistrationError(
886 int thread_id, 880 int thread_id,
887 int request_id, 881 int request_id,
888 ServiceWorkerStatusCode status) { 882 ServiceWorkerStatusCode status) {
889 base::string16 error_message; 883 base::string16 error_message;
890 blink::WebServiceWorkerError::ErrorType error_type; 884 blink::WebServiceWorkerError::ErrorType error_type;
891 GetServiceWorkerRegistrationStatusResponse( 885 GetServiceWorkerRegistrationStatusResponse(
892 status, &error_type, &error_message); 886 status, &error_type, &error_message);
893 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 887 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
894 thread_id, request_id, error_type, error_message)); 888 thread_id, request_id, error_type,
889 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
890 error_message));
895 } 891 }
896 892
897 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 893 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
898 if (!context_wrapper_.get()) 894 if (!context_wrapper_.get())
899 return nullptr; 895 return nullptr;
900 return context_wrapper_->context(); 896 return context_wrapper_->context();
901 } 897 }
902 898
903 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) { 899 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) {
904 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 900 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
(...skipping 11 matching lines...) Expand all
916 handles_.AddWithID(handle.release(), handle_id); 912 handles_.AddWithID(handle.release(), handle_id);
917 } 913 }
918 914
919 void ServiceWorkerDispatcherHost::RegisterServiceWorkerRegistrationHandle( 915 void ServiceWorkerDispatcherHost::RegisterServiceWorkerRegistrationHandle(
920 scoped_ptr<ServiceWorkerRegistrationHandle> handle) { 916 scoped_ptr<ServiceWorkerRegistrationHandle> handle) {
921 int handle_id = handle->handle_id(); 917 int handle_id = handle->handle_id();
922 registration_handles_.AddWithID(handle.release(), handle_id); 918 registration_handles_.AddWithID(handle.release(), handle_id);
923 } 919 }
924 920
925 } // namespace content 921 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698