| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/renderer/service_worker/service_worker_context_client.h" | 5 #include "content/renderer/service_worker/service_worker_context_client.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/threading/thread_checker.h" | 14 #include "base/threading/thread_checker.h" |
| 15 #include "base/threading/thread_local.h" | 15 #include "base/threading/thread_local.h" |
| 16 #include "base/threading/thread_task_runner_handle.h" | 16 #include "base/threading/thread_task_runner_handle.h" |
| 17 #include "base/time/time.h" |
| 17 #include "base/trace_event/trace_event.h" | 18 #include "base/trace_event/trace_event.h" |
| 18 #include "content/child/notifications/notification_data_conversions.h" | 19 #include "content/child/notifications/notification_data_conversions.h" |
| 19 #include "content/child/request_extra_data.h" | 20 #include "content/child/request_extra_data.h" |
| 20 #include "content/child/service_worker/service_worker_dispatcher.h" | 21 #include "content/child/service_worker/service_worker_dispatcher.h" |
| 21 #include "content/child/service_worker/service_worker_handle_reference.h" | 22 #include "content/child/service_worker/service_worker_handle_reference.h" |
| 22 #include "content/child/service_worker/service_worker_network_provider.h" | 23 #include "content/child/service_worker/service_worker_network_provider.h" |
| 23 #include "content/child/service_worker/service_worker_provider_context.h" | 24 #include "content/child/service_worker/service_worker_provider_context.h" |
| 24 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" | 25 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" |
| 25 #include "content/child/service_worker/web_service_worker_impl.h" | 26 #include "content/child/service_worker/web_service_worker_impl.h" |
| 26 #include "content/child/service_worker/web_service_worker_provider_impl.h" | 27 #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 struct ServiceWorkerContextClient::WorkerContextData { | 170 struct ServiceWorkerContextClient::WorkerContextData { |
| 170 using ClientsCallbacksMap = | 171 using ClientsCallbacksMap = |
| 171 IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>; | 172 IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>; |
| 172 using ClaimClientsCallbacksMap = | 173 using ClaimClientsCallbacksMap = |
| 173 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>; | 174 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>; |
| 174 using ClientCallbacksMap = | 175 using ClientCallbacksMap = |
| 175 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>; | 176 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>; |
| 176 using SkipWaitingCallbacksMap = | 177 using SkipWaitingCallbacksMap = |
| 177 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; | 178 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; |
| 178 using SyncEventCallbacksMap = | 179 using SyncEventCallbacksMap = |
| 179 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus)>, | 180 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus, |
| 181 double /* dispatch_event_time */)>, |
| 180 IDMapOwnPointer>; | 182 IDMapOwnPointer>; |
| 181 | 183 |
| 182 explicit WorkerContextData(ServiceWorkerContextClient* owner) | 184 explicit WorkerContextData(ServiceWorkerContextClient* owner) |
| 183 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} | 185 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} |
| 184 | 186 |
| 185 ~WorkerContextData() { | 187 ~WorkerContextData() { |
| 186 DCHECK(thread_checker.CalledOnValidThread()); | 188 DCHECK(thread_checker.CalledOnValidThread()); |
| 187 } | 189 } |
| 188 | 190 |
| 189 // Pending callbacks for GetClientDocuments(). | 191 // Pending callbacks for GetClientDocuments(). |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 message.utf8(), state_cookie.utf8()); | 486 message.utf8(), state_cookie.utf8()); |
| 485 } | 487 } |
| 486 | 488 |
| 487 blink::WebDevToolsAgentClient::WebKitClientMessageLoop* | 489 blink::WebDevToolsAgentClient::WebKitClientMessageLoop* |
| 488 ServiceWorkerContextClient::createDevToolsMessageLoop() { | 490 ServiceWorkerContextClient::createDevToolsMessageLoop() { |
| 489 return DevToolsAgent::createMessageLoopWrapper(); | 491 return DevToolsAgent::createMessageLoopWrapper(); |
| 490 } | 492 } |
| 491 | 493 |
| 492 void ServiceWorkerContextClient::didHandleActivateEvent( | 494 void ServiceWorkerContextClient::didHandleActivateEvent( |
| 493 int request_id, | 495 int request_id, |
| 494 blink::WebServiceWorkerEventResult result) { | 496 blink::WebServiceWorkerEventResult result, |
| 497 double event_dispatch_time) { |
| 495 Send(new ServiceWorkerHostMsg_ActivateEventFinished( | 498 Send(new ServiceWorkerHostMsg_ActivateEventFinished( |
| 496 GetRoutingID(), request_id, result)); | 499 GetRoutingID(), request_id, result, |
| 500 base::Time::FromDoubleT(event_dispatch_time))); |
| 497 } | 501 } |
| 498 | 502 |
| 499 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( | 503 void ServiceWorkerContextClient::didHandleExtendableMessageEvent( |
| 500 int request_id, | 504 int request_id, |
| 501 blink::WebServiceWorkerEventResult result) { | 505 blink::WebServiceWorkerEventResult result, |
| 506 double event_dispatch_time) { |
| 502 Send(new ServiceWorkerHostMsg_ExtendableMessageEventFinished( | 507 Send(new ServiceWorkerHostMsg_ExtendableMessageEventFinished( |
| 503 GetRoutingID(), request_id, result)); | 508 GetRoutingID(), request_id, result, |
| 509 base::Time::FromDoubleT(event_dispatch_time))); |
| 504 } | 510 } |
| 505 | 511 |
| 506 void ServiceWorkerContextClient::didHandleInstallEvent( | 512 void ServiceWorkerContextClient::didHandleInstallEvent( |
| 507 int request_id, | 513 int request_id, |
| 508 blink::WebServiceWorkerEventResult result) { | 514 blink::WebServiceWorkerEventResult result, |
| 515 double event_dispatch_time) { |
| 509 Send(new ServiceWorkerHostMsg_InstallEventFinished( | 516 Send(new ServiceWorkerHostMsg_InstallEventFinished( |
| 510 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler())); | 517 GetRoutingID(), request_id, result, proxy_->hasFetchEventHandler(), |
| 511 } | 518 base::Time::FromDoubleT(event_dispatch_time))); |
| 512 | |
| 513 void ServiceWorkerContextClient::respondToFetchEvent(int response_id) { | |
| 514 Send(new ServiceWorkerHostMsg_FetchEventResponse( | |
| 515 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, | |
| 516 ServiceWorkerResponse())); | |
| 517 } | 519 } |
| 518 | 520 |
| 519 void ServiceWorkerContextClient::respondToFetchEvent( | 521 void ServiceWorkerContextClient::respondToFetchEvent( |
| 520 int response_id, | 522 int response_id, |
| 521 const blink::WebServiceWorkerResponse& web_response) { | 523 double event_dispatch_time) { |
| 524 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 525 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, |
| 526 ServiceWorkerResponse(), base::Time::FromDoubleT(event_dispatch_time))); |
| 527 } |
| 528 |
| 529 void ServiceWorkerContextClient::respondToFetchEvent( |
| 530 int response_id, |
| 531 const blink::WebServiceWorkerResponse& web_response, |
| 532 double event_dispatch_time) { |
| 522 ServiceWorkerHeaderMap headers; | 533 ServiceWorkerHeaderMap headers; |
| 523 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); | 534 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); |
| 524 ServiceWorkerHeaderList cors_exposed_header_names; | 535 ServiceWorkerHeaderList cors_exposed_header_names; |
| 525 GetCorsExposedHeaderNamesFromWebResponse(web_response, | 536 GetCorsExposedHeaderNamesFromWebResponse(web_response, |
| 526 &cors_exposed_header_names); | 537 &cors_exposed_header_names); |
| 527 ServiceWorkerResponse response( | 538 ServiceWorkerResponse response( |
| 528 web_response.url(), web_response.status(), | 539 web_response.url(), web_response.status(), |
| 529 web_response.statusText().utf8(), web_response.responseType(), headers, | 540 web_response.statusText().utf8(), web_response.responseType(), headers, |
| 530 web_response.blobUUID().utf8(), web_response.blobSize(), | 541 web_response.blobUUID().utf8(), web_response.blobSize(), |
| 531 web_response.streamURL(), web_response.error(), | 542 web_response.streamURL(), web_response.error(), |
| 532 base::Time::FromInternalValue(web_response.responseTime()), | 543 base::Time::FromInternalValue(web_response.responseTime()), |
| 533 !web_response.cacheStorageCacheName().isNull(), | 544 !web_response.cacheStorageCacheName().isNull(), |
| 534 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); | 545 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); |
| 535 Send(new ServiceWorkerHostMsg_FetchEventResponse( | 546 Send(new ServiceWorkerHostMsg_FetchEventResponse( |
| 536 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 547 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 537 response)); | 548 response, base::Time::FromDoubleT(event_dispatch_time))); |
| 538 } | 549 } |
| 539 | 550 |
| 540 void ServiceWorkerContextClient::didHandleFetchEvent( | 551 void ServiceWorkerContextClient::didHandleFetchEvent( |
| 541 int event_finish_id, | 552 int event_finish_id, |
| 542 blink::WebServiceWorkerEventResult result) { | 553 blink::WebServiceWorkerEventResult result, |
| 543 Send(new ServiceWorkerHostMsg_FetchEventFinished(GetRoutingID(), | 554 double event_dispatch_time) { |
| 544 event_finish_id, result)); | 555 Send(new ServiceWorkerHostMsg_FetchEventFinished( |
| 556 GetRoutingID(), event_finish_id, result, |
| 557 base::Time::FromDoubleT(event_dispatch_time))); |
| 545 } | 558 } |
| 546 | 559 |
| 547 void ServiceWorkerContextClient::didHandleNotificationClickEvent( | 560 void ServiceWorkerContextClient::didHandleNotificationClickEvent( |
| 548 int request_id, | 561 int request_id, |
| 549 blink::WebServiceWorkerEventResult result) { | 562 blink::WebServiceWorkerEventResult result, |
| 563 double event_dispatch_time) { |
| 550 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( | 564 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( |
| 551 GetRoutingID(), request_id, result)); | 565 GetRoutingID(), request_id, result, |
| 566 base::Time::FromDoubleT(event_dispatch_time))); |
| 552 } | 567 } |
| 553 | 568 |
| 554 void ServiceWorkerContextClient::didHandleNotificationCloseEvent( | 569 void ServiceWorkerContextClient::didHandleNotificationCloseEvent( |
| 555 int request_id, | 570 int request_id, |
| 556 blink::WebServiceWorkerEventResult result) { | 571 blink::WebServiceWorkerEventResult result, |
| 572 double event_dispatch_time) { |
| 557 Send(new ServiceWorkerHostMsg_NotificationCloseEventFinished( | 573 Send(new ServiceWorkerHostMsg_NotificationCloseEventFinished( |
| 558 GetRoutingID(), request_id, result)); | 574 GetRoutingID(), request_id, result, |
| 575 base::Time::FromDoubleT(event_dispatch_time))); |
| 559 } | 576 } |
| 560 | 577 |
| 561 void ServiceWorkerContextClient::didHandlePushEvent( | 578 void ServiceWorkerContextClient::didHandlePushEvent( |
| 562 int request_id, | 579 int request_id, |
| 563 blink::WebServiceWorkerEventResult result) { | 580 blink::WebServiceWorkerEventResult result, |
| 581 double event_dispatch_time) { |
| 564 Send(new ServiceWorkerHostMsg_PushEventFinished( | 582 Send(new ServiceWorkerHostMsg_PushEventFinished( |
| 565 GetRoutingID(), request_id, result)); | 583 GetRoutingID(), request_id, result, |
| 584 base::Time::FromDoubleT(event_dispatch_time))); |
| 566 } | 585 } |
| 567 | 586 |
| 568 void ServiceWorkerContextClient::didHandleSyncEvent( | 587 void ServiceWorkerContextClient::didHandleSyncEvent( |
| 569 int request_id, | 588 int request_id, |
| 570 blink::WebServiceWorkerEventResult result) { | 589 blink::WebServiceWorkerEventResult result, |
| 590 double event_dispatch_time) { |
| 571 const SyncCallback* callback = | 591 const SyncCallback* callback = |
| 572 context_->sync_event_callbacks.Lookup(request_id); | 592 context_->sync_event_callbacks.Lookup(request_id); |
| 573 if (!callback) | 593 if (!callback) |
| 574 return; | 594 return; |
| 575 if (result == blink::WebServiceWorkerEventResultCompleted) { | 595 if (result == blink::WebServiceWorkerEventResultCompleted) { |
| 576 callback->Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED); | 596 callback->Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED, |
| 597 event_dispatch_time); |
| 577 } else { | 598 } else { |
| 578 callback->Run(blink::mojom::ServiceWorkerEventStatus::REJECTED); | 599 callback->Run(blink::mojom::ServiceWorkerEventStatus::REJECTED, |
| 600 event_dispatch_time); |
| 579 } | 601 } |
| 580 context_->sync_event_callbacks.Remove(request_id); | 602 context_->sync_event_callbacks.Remove(request_id); |
| 581 } | 603 } |
| 582 | 604 |
| 583 blink::WebServiceWorkerNetworkProvider* | 605 blink::WebServiceWorkerNetworkProvider* |
| 584 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( | 606 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( |
| 585 blink::WebDataSource* data_source) { | 607 blink::WebDataSource* data_source) { |
| 586 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 608 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); |
| 587 | 609 |
| 588 // Create a content::ServiceWorkerNetworkProvider for this data source so | 610 // Create a content::ServiceWorkerNetworkProvider for this data source so |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1035 } | 1057 } |
| 1036 | 1058 |
| 1037 base::WeakPtr<ServiceWorkerContextClient> | 1059 base::WeakPtr<ServiceWorkerContextClient> |
| 1038 ServiceWorkerContextClient::GetWeakPtr() { | 1060 ServiceWorkerContextClient::GetWeakPtr() { |
| 1039 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1061 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
| 1040 DCHECK(context_); | 1062 DCHECK(context_); |
| 1041 return context_->weak_factory.GetWeakPtr(); | 1063 return context_->weak_factory.GetWeakPtr(); |
| 1042 } | 1064 } |
| 1043 | 1065 |
| 1044 } // namespace content | 1066 } // namespace content |
| OLD | NEW |