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

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

Issue 2652603002: service worker: Add UMA for navigation preload response timing. (Closed)
Patch Set: ws Created 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_fetch_dispatcher.h" 5 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 mojom::URLLoaderAssociatedPtr loader_; 66 mojom::URLLoaderAssociatedPtr loader_;
67 67
68 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoader); 68 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoader);
69 }; 69 };
70 70
71 // This class wraps a mojo::InterfacePtr<URLLoaderClient>. It also is a 71 // This class wraps a mojo::InterfacePtr<URLLoaderClient>. It also is a
72 // URLLoaderClient implementation and delegates URLLoaderClient calls to the 72 // URLLoaderClient implementation and delegates URLLoaderClient calls to the
73 // wrapped client. 73 // wrapped client.
74 class DelegatingURLLoaderClient final : public mojom::URLLoaderClient { 74 class DelegatingURLLoaderClient final : public mojom::URLLoaderClient {
75 public: 75 public:
76 explicit DelegatingURLLoaderClient(mojom::URLLoaderClientPtr client) 76 explicit DelegatingURLLoaderClient(mojom::URLLoaderClientPtr client,
77 : binding_(this), client_(std::move(client)) {} 77 base::Closure on_response)
78 : binding_(this),
79 client_(std::move(client)),
80 on_response_(std::move(on_response)) {}
78 ~DelegatingURLLoaderClient() override { 81 ~DelegatingURLLoaderClient() override {
79 if (!completed_) { 82 if (!completed_) {
80 // Let the service worker know that the request has been canceled. 83 // Let the service worker know that the request has been canceled.
81 ResourceRequestCompletionStatus status; 84 ResourceRequestCompletionStatus status;
82 status.error_code = net::ERR_ABORTED; 85 status.error_code = net::ERR_ABORTED;
83 client_->OnComplete(status); 86 client_->OnComplete(status);
84 } 87 }
85 } 88 }
86 89
87 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override { 90 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override {
88 client_->OnDataDownloaded(data_length, encoded_length); 91 client_->OnDataDownloaded(data_length, encoded_length);
89 } 92 }
90 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override { 93 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override {
91 client_->OnReceiveCachedMetadata(data); 94 client_->OnReceiveCachedMetadata(data);
92 } 95 }
93 void OnTransferSizeUpdated(int32_t transfer_size_diff) override { 96 void OnTransferSizeUpdated(int32_t transfer_size_diff) override {
94 client_->OnTransferSizeUpdated(transfer_size_diff); 97 client_->OnTransferSizeUpdated(transfer_size_diff);
95 } 98 }
96 void OnReceiveResponse( 99 void OnReceiveResponse(
97 const ResourceResponseHead& head, 100 const ResourceResponseHead& head,
98 mojom::DownloadedTempFilePtr downloaded_file) override { 101 mojom::DownloadedTempFilePtr downloaded_file) override {
99 client_->OnReceiveResponse(head, std::move(downloaded_file)); 102 client_->OnReceiveResponse(head, std::move(downloaded_file));
103 on_response_.Run();
100 } 104 }
101 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, 105 void OnReceiveRedirect(const net::RedirectInfo& redirect_info,
102 const ResourceResponseHead& head) override { 106 const ResourceResponseHead& head) override {
103 client_->OnReceiveRedirect(redirect_info, head); 107 client_->OnReceiveRedirect(redirect_info, head);
104 } 108 }
105 void OnStartLoadingResponseBody( 109 void OnStartLoadingResponseBody(
106 mojo::ScopedDataPipeConsumerHandle body) override { 110 mojo::ScopedDataPipeConsumerHandle body) override {
107 client_->OnStartLoadingResponseBody(std::move(body)); 111 client_->OnStartLoadingResponseBody(std::move(body));
108 } 112 }
109 void OnComplete( 113 void OnComplete(
110 const ResourceRequestCompletionStatus& completion_status) override { 114 const ResourceRequestCompletionStatus& completion_status) override {
111 client_->OnComplete(completion_status); 115 client_->OnComplete(completion_status);
112 completed_ = true; 116 completed_ = true;
113 } 117 }
114 118
115 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info, 119 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info,
116 mojo::AssociatedGroup* associated_group) { 120 mojo::AssociatedGroup* associated_group) {
117 binding_.Bind(ptr_info, associated_group); 121 binding_.Bind(ptr_info, associated_group);
118 } 122 }
119 123
120 private: 124 private:
121 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_; 125 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_;
122 mojom::URLLoaderClientPtr client_; 126 mojom::URLLoaderClientPtr client_;
127 base::Closure on_response_;
123 bool completed_ = false; 128 bool completed_ = false;
124 129
125 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient); 130 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient);
126 }; 131 };
127 132
128 using EventType = ServiceWorkerMetrics::EventType; 133 using EventType = ServiceWorkerMetrics::EventType;
129 EventType ResourceTypeToEventType(ResourceType resource_type) { 134 EventType ResourceTypeToEventType(ResourceType resource_type) {
130 switch (resource_type) { 135 switch (resource_type) {
131 case RESOURCE_TYPE_MAIN_FRAME: 136 case RESOURCE_TYPE_MAIN_FRAME:
132 return EventType::FETCH_MAIN_FRAME; 137 return EventType::FETCH_MAIN_FRAME;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 net_log_.EndEvent( 400 net_log_.EndEvent(
396 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT, 401 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT,
397 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); 402 base::Bind(&NetLogFetchEventCallback, status, fetch_result));
398 403
399 FetchCallback fetch_callback = fetch_callback_; 404 FetchCallback fetch_callback = fetch_callback_;
400 scoped_refptr<ServiceWorkerVersion> version = version_; 405 scoped_refptr<ServiceWorkerVersion> version = version_;
401 fetch_callback.Run(status, fetch_result, response, version); 406 fetch_callback.Run(status, fetch_result, response, version);
402 } 407 }
403 408
404 bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload( 409 bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
405 net::URLRequest* original_request) { 410 net::URLRequest* original_request,
411 base::Closure on_response) {
406 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME && 412 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME &&
407 resource_type_ != RESOURCE_TYPE_SUB_FRAME) { 413 resource_type_ != RESOURCE_TYPE_SUB_FRAME) {
408 return false; 414 return false;
409 } 415 }
410 if (!version_->navigation_preload_state().enabled) 416 if (!version_->navigation_preload_state().enabled)
411 return false; 417 return false;
412 // TODO(horo): Currently NavigationPreload doesn't support request body. 418 // TODO(horo): Currently NavigationPreload doesn't support request body.
413 if (!request_->blob_uuid.empty()) 419 if (!request_->blob_uuid.empty())
414 return false; 420 return false;
415 421
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 version_->navigation_preload_state().header; 475 version_->navigation_preload_state().header;
470 476
471 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID(); 477 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID();
472 DCHECK_LT(request_id, -1); 478 DCHECK_LT(request_id, -1);
473 479
474 preload_handle_ = mojom::FetchEventPreloadHandle::New(); 480 preload_handle_ = mojom::FetchEventPreloadHandle::New();
475 mojom::URLLoaderClientPtr url_loader_client_ptr; 481 mojom::URLLoaderClientPtr url_loader_client_ptr;
476 preload_handle_->url_loader_client_request = 482 preload_handle_->url_loader_client_request =
477 mojo::MakeRequest(&url_loader_client_ptr); 483 mojo::MakeRequest(&url_loader_client_ptr);
478 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>( 484 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>(
479 std::move(url_loader_client_ptr)); 485 std::move(url_loader_client_ptr), std::move(on_response));
480 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info; 486 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info;
481 url_loader_client->Bind(&url_loader_client_associated_ptr_info, 487 url_loader_client->Bind(&url_loader_client_associated_ptr_info,
482 url_loader_factory.associated_group()); 488 url_loader_factory.associated_group());
483 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr; 489 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr;
484 490
485 url_loader_factory->CreateLoaderAndStart( 491 url_loader_factory->CreateLoaderAndStart(
486 mojo::MakeRequest(&url_loader_associated_ptr, 492 mojo::MakeRequest(&url_loader_associated_ptr,
487 url_loader_factory.associated_group()), 493 url_loader_factory.associated_group()),
488 original_info->GetRouteID(), request_id, request, 494 original_info->GetRouteID(), request_id, request,
489 std::move(url_loader_client_associated_ptr_info)); 495 std::move(url_loader_client_associated_ptr_info));
(...skipping 20 matching lines...) Expand all
510 ServiceWorkerVersion* version, 516 ServiceWorkerVersion* version,
511 int event_finish_id, 517 int event_finish_id,
512 scoped_refptr<URLLoaderAssets> url_loader_assets, 518 scoped_refptr<URLLoaderAssets> url_loader_assets,
513 ServiceWorkerStatusCode status, 519 ServiceWorkerStatusCode status,
514 base::Time dispatch_event_time) { 520 base::Time dispatch_event_time) {
515 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, 521 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
516 dispatch_event_time); 522 dispatch_event_time);
517 } 523 }
518 524
519 } // namespace content 525 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698