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

Side by Side Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2218943002: Introduce ServiceWorker.EventDispatchingDelay UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated mpearson@'s comment Created 4 years, 3 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698