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

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

Issue 2660423002: M57: service worker: Add UMA for navigation preload response timing. (Closed)
Patch Set: Created 3 years, 10 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::OnceClosure 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 DCHECK(on_response_);
104 std::move(on_response_).Run();
100 } 105 }
101 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, 106 void OnReceiveRedirect(const net::RedirectInfo& redirect_info,
102 const ResourceResponseHead& head) override { 107 const ResourceResponseHead& head) override {
103 client_->OnReceiveRedirect(redirect_info, head); 108 client_->OnReceiveRedirect(redirect_info, head);
104 } 109 }
105 void OnStartLoadingResponseBody( 110 void OnStartLoadingResponseBody(
106 mojo::ScopedDataPipeConsumerHandle body) override { 111 mojo::ScopedDataPipeConsumerHandle body) override {
107 client_->OnStartLoadingResponseBody(std::move(body)); 112 client_->OnStartLoadingResponseBody(std::move(body));
108 } 113 }
109 void OnComplete( 114 void OnComplete(
110 const ResourceRequestCompletionStatus& completion_status) override { 115 const ResourceRequestCompletionStatus& completion_status) override {
111 client_->OnComplete(completion_status); 116 client_->OnComplete(completion_status);
112 completed_ = true; 117 completed_ = true;
113 } 118 }
114 119
115 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info, 120 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info,
116 mojo::AssociatedGroup* associated_group) { 121 mojo::AssociatedGroup* associated_group) {
117 binding_.Bind(ptr_info, associated_group); 122 binding_.Bind(ptr_info, associated_group);
118 } 123 }
119 124
120 private: 125 private:
121 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_; 126 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_;
122 mojom::URLLoaderClientPtr client_; 127 mojom::URLLoaderClientPtr client_;
128 base::OnceClosure on_response_;
123 bool completed_ = false; 129 bool completed_ = false;
124 130
125 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient); 131 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient);
126 }; 132 };
127 133
128 using EventType = ServiceWorkerMetrics::EventType; 134 using EventType = ServiceWorkerMetrics::EventType;
129 EventType ResourceTypeToEventType(ResourceType resource_type) { 135 EventType ResourceTypeToEventType(ResourceType resource_type) {
130 switch (resource_type) { 136 switch (resource_type) {
131 case RESOURCE_TYPE_MAIN_FRAME: 137 case RESOURCE_TYPE_MAIN_FRAME:
132 return EventType::FETCH_MAIN_FRAME; 138 return EventType::FETCH_MAIN_FRAME;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 net_log_.EndEvent( 401 net_log_.EndEvent(
396 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT, 402 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT,
397 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); 403 base::Bind(&NetLogFetchEventCallback, status, fetch_result));
398 404
399 FetchCallback fetch_callback = fetch_callback_; 405 FetchCallback fetch_callback = fetch_callback_;
400 scoped_refptr<ServiceWorkerVersion> version = version_; 406 scoped_refptr<ServiceWorkerVersion> version = version_;
401 fetch_callback.Run(status, fetch_result, response, version); 407 fetch_callback.Run(status, fetch_result, response, version);
402 } 408 }
403 409
404 bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload( 410 bool ServiceWorkerFetchDispatcher::MaybeStartNavigationPreload(
405 net::URLRequest* original_request) { 411 net::URLRequest* original_request,
412 base::OnceClosure on_response) {
406 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME && 413 if (resource_type_ != RESOURCE_TYPE_MAIN_FRAME &&
407 resource_type_ != RESOURCE_TYPE_SUB_FRAME) { 414 resource_type_ != RESOURCE_TYPE_SUB_FRAME) {
408 return false; 415 return false;
409 } 416 }
410 if (!version_->navigation_preload_state().enabled) 417 if (!version_->navigation_preload_state().enabled)
411 return false; 418 return false;
412 // TODO(horo): Currently NavigationPreload doesn't support request body. 419 // TODO(horo): Currently NavigationPreload doesn't support request body.
413 if (!request_->blob_uuid.empty()) 420 if (!request_->blob_uuid.empty())
414 return false; 421 return false;
415 422
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 version_->navigation_preload_state().header; 476 version_->navigation_preload_state().header;
470 477
471 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID(); 478 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID();
472 DCHECK_LT(request_id, -1); 479 DCHECK_LT(request_id, -1);
473 480
474 preload_handle_ = mojom::FetchEventPreloadHandle::New(); 481 preload_handle_ = mojom::FetchEventPreloadHandle::New();
475 mojom::URLLoaderClientPtr url_loader_client_ptr; 482 mojom::URLLoaderClientPtr url_loader_client_ptr;
476 preload_handle_->url_loader_client_request = 483 preload_handle_->url_loader_client_request =
477 mojo::MakeRequest(&url_loader_client_ptr); 484 mojo::MakeRequest(&url_loader_client_ptr);
478 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>( 485 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>(
479 std::move(url_loader_client_ptr)); 486 std::move(url_loader_client_ptr), std::move(on_response));
480 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info; 487 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info;
481 url_loader_client->Bind(&url_loader_client_associated_ptr_info, 488 url_loader_client->Bind(&url_loader_client_associated_ptr_info,
482 url_loader_factory.associated_group()); 489 url_loader_factory.associated_group());
483 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr; 490 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr;
484 491
485 url_loader_factory->CreateLoaderAndStart( 492 url_loader_factory->CreateLoaderAndStart(
486 mojo::MakeRequest(&url_loader_associated_ptr, 493 mojo::MakeRequest(&url_loader_associated_ptr,
487 url_loader_factory.associated_group()), 494 url_loader_factory.associated_group()),
488 original_info->GetRouteID(), request_id, request, 495 original_info->GetRouteID(), request_id, request,
489 std::move(url_loader_client_associated_ptr_info)); 496 std::move(url_loader_client_associated_ptr_info));
(...skipping 20 matching lines...) Expand all
510 ServiceWorkerVersion* version, 517 ServiceWorkerVersion* version,
511 int event_finish_id, 518 int event_finish_id,
512 scoped_refptr<URLLoaderAssets> url_loader_assets, 519 scoped_refptr<URLLoaderAssets> url_loader_assets,
513 ServiceWorkerStatusCode status, 520 ServiceWorkerStatusCode status,
514 base::Time dispatch_event_time) { 521 base::Time dispatch_event_time) {
515 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, 522 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
516 dispatch_event_time); 523 dispatch_event_time);
517 } 524 }
518 525
519 } // namespace content 526 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698