| OLD | NEW |
| 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" |
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
| 14 #include "content/browser/devtools/service_worker_devtools_agent_host.h" |
| 15 #include "content/browser/devtools/service_worker_devtools_manager.h" |
| 14 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 16 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 15 #include "content/browser/loader/resource_request_info_impl.h" | 17 #include "content/browser/loader/resource_request_info_impl.h" |
| 16 #include "content/browser/loader/resource_requester_info.h" | 18 #include "content/browser/loader/resource_requester_info.h" |
| 17 #include "content/browser/loader/url_loader_factory_impl.h" | 19 #include "content/browser/loader/url_loader_factory_impl.h" |
| 18 #include "content/browser/service_worker/embedded_worker_status.h" | 20 #include "content/browser/service_worker/embedded_worker_status.h" |
| 19 #include "content/browser/service_worker/service_worker_metrics.h" | 21 #include "content/browser/service_worker/service_worker_metrics.h" |
| 20 #include "content/browser/service_worker/service_worker_version.h" | 22 #include "content/browser/service_worker/service_worker_version.h" |
| 21 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" | 23 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" |
| 22 #include "content/common/service_worker/service_worker_messages.h" | 24 #include "content/common/service_worker/service_worker_messages.h" |
| 23 #include "content/common/service_worker/service_worker_status_code.h" | 25 #include "content/common/service_worker/service_worker_status_code.h" |
| 24 #include "content/common/service_worker/service_worker_types.h" | 26 #include "content/common/service_worker/service_worker_types.h" |
| 25 #include "content/common/service_worker/service_worker_utils.h" | 27 #include "content/common/service_worker/service_worker_utils.h" |
| 28 #include "content/public/browser/browser_thread.h" |
| 26 #include "content/public/common/browser_side_navigation_policy.h" | 29 #include "content/public/common/browser_side_navigation_policy.h" |
| 27 #include "mojo/public/cpp/bindings/associated_binding.h" | 30 #include "mojo/public/cpp/bindings/associated_binding.h" |
| 28 #include "mojo/public/cpp/bindings/binding.h" | 31 #include "mojo/public/cpp/bindings/binding.h" |
| 29 #include "net/http/http_util.h" | 32 #include "net/http/http_util.h" |
| 30 #include "net/log/net_log.h" | 33 #include "net/log/net_log.h" |
| 31 #include "net/log/net_log_capture_mode.h" | 34 #include "net/log/net_log_capture_mode.h" |
| 32 #include "net/log/net_log_event_type.h" | 35 #include "net/log/net_log_event_type.h" |
| 33 #include "net/url_request/url_request.h" | 36 #include "net/url_request/url_request.h" |
| 34 | 37 |
| 35 namespace content { | 38 namespace content { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 61 // Cancel loading as stated in url_loader.mojom. | 64 // Cancel loading as stated in url_loader.mojom. |
| 62 loader_ = nullptr; | 65 loader_ = nullptr; |
| 63 } | 66 } |
| 64 | 67 |
| 65 mojo::Binding<mojom::URLLoader> binding_; | 68 mojo::Binding<mojom::URLLoader> binding_; |
| 66 mojom::URLLoaderAssociatedPtr loader_; | 69 mojom::URLLoaderAssociatedPtr loader_; |
| 67 | 70 |
| 68 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoader); | 71 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoader); |
| 69 }; | 72 }; |
| 70 | 73 |
| 74 ServiceWorkerDevToolsAgentHost* GetAgentHost( |
| 75 const std::pair<int, int>& worker_id) { |
| 76 return ServiceWorkerDevToolsManager::GetInstance() |
| 77 ->GetDevToolsAgentHostForWorker(worker_id.first, worker_id.second); |
| 78 } |
| 79 |
| 80 void NotifyNavigationPreloadRequestSentOnUI( |
| 81 const ResourceRequest& request, |
| 82 const std::pair<int, int>& worker_id, |
| 83 const std::string& request_id) { |
| 84 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 85 if (ServiceWorkerDevToolsAgentHost* agent_host = GetAgentHost(worker_id)) |
| 86 agent_host->NavigationPreloadRequestSent(request_id, request); |
| 87 } |
| 88 |
| 89 void NotifyNavigationPreloadResponseReceivedOnUI( |
| 90 const GURL& url, |
| 91 const ResourceResponseHead& head, |
| 92 const std::pair<int, int>& worker_id, |
| 93 const std::string& request_id) { |
| 94 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 95 if (ServiceWorkerDevToolsAgentHost* agent_host = GetAgentHost(worker_id)) |
| 96 agent_host->NavigationPreloadResponseReceived(request_id, url, head); |
| 97 } |
| 98 |
| 99 void NotifyNavigationPreloadCompletedOnUI( |
| 100 const ResourceRequestCompletionStatus& completion_status, |
| 101 const std::pair<int, int>& worker_id, |
| 102 const std::string& request_id) { |
| 103 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 104 if (ServiceWorkerDevToolsAgentHost* agent_host = GetAgentHost(worker_id)) |
| 105 agent_host->NavigationPreloadCompleted(request_id, completion_status); |
| 106 } |
| 107 |
| 71 // This class wraps a mojo::InterfacePtr<URLLoaderClient>. It also is a | 108 // This class wraps a mojo::InterfacePtr<URLLoaderClient>. It also is a |
| 72 // URLLoaderClient implementation and delegates URLLoaderClient calls to the | 109 // URLLoaderClient implementation and delegates URLLoaderClient calls to the |
| 73 // wrapped client. | 110 // wrapped client. |
| 74 class DelegatingURLLoaderClient final : public mojom::URLLoaderClient { | 111 class DelegatingURLLoaderClient final : public mojom::URLLoaderClient { |
| 75 public: | 112 public: |
| 113 using WorkerId = std::pair<int, int>; |
| 76 explicit DelegatingURLLoaderClient(mojom::URLLoaderClientPtr client, | 114 explicit DelegatingURLLoaderClient(mojom::URLLoaderClientPtr client, |
| 77 base::OnceClosure on_response) | 115 base::OnceClosure on_response, |
| 116 const ResourceRequest& request) |
| 78 : binding_(this), | 117 : binding_(this), |
| 79 client_(std::move(client)), | 118 client_(std::move(client)), |
| 80 on_response_(std::move(on_response)) {} | 119 on_response_(std::move(on_response)), |
| 120 url_(request.url) { |
| 121 AddDevToolsCallback( |
| 122 base::Bind(&NotifyNavigationPreloadRequestSentOnUI, request)); |
| 123 } |
| 81 ~DelegatingURLLoaderClient() override { | 124 ~DelegatingURLLoaderClient() override { |
| 82 if (!completed_) { | 125 if (!completed_) { |
| 83 // Let the service worker know that the request has been canceled. | 126 // Let the service worker know that the request has been canceled. |
| 84 ResourceRequestCompletionStatus status; | 127 ResourceRequestCompletionStatus status; |
| 85 status.error_code = net::ERR_ABORTED; | 128 status.error_code = net::ERR_ABORTED; |
| 86 client_->OnComplete(status); | 129 client_->OnComplete(status); |
| 87 } | 130 } |
| 88 } | 131 } |
| 89 | 132 |
| 133 void MayBeReportToDevTools(WorkerId worker_id, int fetch_event_id) { |
| 134 worker_id_ = worker_id; |
| 135 devtools_request_id_ = base::StringPrintf("preload-%d", fetch_event_id); |
| 136 MayBeRunDevToolsCallbacks(); |
| 137 } |
| 138 |
| 90 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override { | 139 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override { |
| 91 client_->OnDataDownloaded(data_length, encoded_length); | 140 client_->OnDataDownloaded(data_length, encoded_length); |
| 92 } | 141 } |
| 93 void OnUploadProgress(int64_t current_position, | 142 void OnUploadProgress(int64_t current_position, |
| 94 int64_t total_size, | 143 int64_t total_size, |
| 95 const base::Closure& ack_callback) override { | 144 const base::Closure& ack_callback) override { |
| 96 client_->OnUploadProgress(current_position, total_size, ack_callback); | 145 client_->OnUploadProgress(current_position, total_size, ack_callback); |
| 97 } | 146 } |
| 98 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override { | 147 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override { |
| 99 client_->OnReceiveCachedMetadata(data); | 148 client_->OnReceiveCachedMetadata(data); |
| 100 } | 149 } |
| 101 void OnTransferSizeUpdated(int32_t transfer_size_diff) override { | 150 void OnTransferSizeUpdated(int32_t transfer_size_diff) override { |
| 102 client_->OnTransferSizeUpdated(transfer_size_diff); | 151 client_->OnTransferSizeUpdated(transfer_size_diff); |
| 103 } | 152 } |
| 104 void OnReceiveResponse( | 153 void OnReceiveResponse( |
| 105 const ResourceResponseHead& head, | 154 const ResourceResponseHead& head, |
| 106 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file) override { | 155 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file) override { |
| 107 client_->OnReceiveResponse(head, std::move(downloaded_file)); | 156 client_->OnReceiveResponse(head, std::move(downloaded_file)); |
| 108 DCHECK(on_response_); | 157 DCHECK(on_response_); |
| 109 std::move(on_response_).Run(); | 158 std::move(on_response_).Run(); |
| 159 AddDevToolsCallback( |
| 160 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head)); |
| 110 } | 161 } |
| 111 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, | 162 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, |
| 112 const ResourceResponseHead& head) override { | 163 const ResourceResponseHead& head) override { |
| 113 client_->OnReceiveRedirect(redirect_info, head); | 164 client_->OnReceiveRedirect(redirect_info, head); |
| 114 } | 165 } |
| 115 void OnStartLoadingResponseBody( | 166 void OnStartLoadingResponseBody( |
| 116 mojo::ScopedDataPipeConsumerHandle body) override { | 167 mojo::ScopedDataPipeConsumerHandle body) override { |
| 117 client_->OnStartLoadingResponseBody(std::move(body)); | 168 client_->OnStartLoadingResponseBody(std::move(body)); |
| 118 } | 169 } |
| 119 void OnComplete( | 170 void OnComplete( |
| 120 const ResourceRequestCompletionStatus& completion_status) override { | 171 const ResourceRequestCompletionStatus& completion_status) override { |
| 121 client_->OnComplete(completion_status); | 172 client_->OnComplete(completion_status); |
| 122 completed_ = true; | 173 completed_ = true; |
| 174 AddDevToolsCallback( |
| 175 base::Bind(&NotifyNavigationPreloadCompletedOnUI, completion_status)); |
| 123 } | 176 } |
| 124 | 177 |
| 125 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info, | 178 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info, |
| 126 mojo::AssociatedGroup* associated_group) { | 179 mojo::AssociatedGroup* associated_group) { |
| 127 binding_.Bind(ptr_info, associated_group); | 180 binding_.Bind(ptr_info, associated_group); |
| 128 } | 181 } |
| 129 | 182 |
| 130 private: | 183 private: |
| 184 void MayBeRunDevToolsCallbacks() { |
| 185 if (!worker_id_) |
| 186 return; |
| 187 while (!devtools_callbacks.empty()) { |
| 188 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 189 base::Bind(std::move(devtools_callbacks.front()), |
| 190 *worker_id_, devtools_request_id_)); |
| 191 devtools_callbacks.pop(); |
| 192 } |
| 193 } |
| 194 void AddDevToolsCallback( |
| 195 base::Callback<void(const WorkerId&, const std::string&)> callback) { |
| 196 devtools_callbacks.push(callback); |
| 197 MayBeRunDevToolsCallbacks(); |
| 198 } |
| 199 |
| 131 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_; | 200 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_; |
| 132 mojom::URLLoaderClientPtr client_; | 201 mojom::URLLoaderClientPtr client_; |
| 133 base::OnceClosure on_response_; | 202 base::OnceClosure on_response_; |
| 134 bool completed_ = false; | 203 bool completed_ = false; |
| 204 const GURL url_; |
| 135 | 205 |
| 206 base::Optional<std::pair<int, int>> worker_id_; |
| 207 std::string devtools_request_id_; |
| 208 std::queue<base::Callback<void(const WorkerId&, const std::string&)>> |
| 209 devtools_callbacks; |
| 136 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient); | 210 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient); |
| 137 }; | 211 }; |
| 138 | 212 |
| 139 using EventType = ServiceWorkerMetrics::EventType; | 213 using EventType = ServiceWorkerMetrics::EventType; |
| 140 EventType ResourceTypeToEventType(ResourceType resource_type) { | 214 EventType ResourceTypeToEventType(ResourceType resource_type) { |
| 141 switch (resource_type) { | 215 switch (resource_type) { |
| 142 case RESOURCE_TYPE_MAIN_FRAME: | 216 case RESOURCE_TYPE_MAIN_FRAME: |
| 143 return EventType::FETCH_MAIN_FRAME; | 217 return EventType::FETCH_MAIN_FRAME; |
| 144 case RESOURCE_TYPE_SUB_FRAME: | 218 case RESOURCE_TYPE_SUB_FRAME: |
| 145 return EventType::FETCH_SUB_FRAME; | 219 return EventType::FETCH_SUB_FRAME; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 DISALLOW_COPY_AND_ASSIGN(ResponseCallback); | 293 DISALLOW_COPY_AND_ASSIGN(ResponseCallback); |
| 220 }; | 294 }; |
| 221 | 295 |
| 222 // This class keeps the URL loader related assets alive while the FetchEvent is | 296 // This class keeps the URL loader related assets alive while the FetchEvent is |
| 223 // ongoing in the service worker. | 297 // ongoing in the service worker. |
| 224 class ServiceWorkerFetchDispatcher::URLLoaderAssets | 298 class ServiceWorkerFetchDispatcher::URLLoaderAssets |
| 225 : public base::RefCounted<ServiceWorkerFetchDispatcher::URLLoaderAssets> { | 299 : public base::RefCounted<ServiceWorkerFetchDispatcher::URLLoaderAssets> { |
| 226 public: | 300 public: |
| 227 URLLoaderAssets(mojom::URLLoaderFactoryPtr url_loader_factory, | 301 URLLoaderAssets(mojom::URLLoaderFactoryPtr url_loader_factory, |
| 228 std::unique_ptr<mojom::URLLoader> url_loader, | 302 std::unique_ptr<mojom::URLLoader> url_loader, |
| 229 std::unique_ptr<mojom::URLLoaderClient> url_loader_client) | 303 std::unique_ptr<DelegatingURLLoaderClient> url_loader_client) |
| 230 : url_loader_factory_(std::move(url_loader_factory)), | 304 : url_loader_factory_(std::move(url_loader_factory)), |
| 231 url_loader_(std::move(url_loader)), | 305 url_loader_(std::move(url_loader)), |
| 232 url_loader_client_(std::move(url_loader_client)) {} | 306 url_loader_client_(std::move(url_loader_client)) {} |
| 233 | 307 |
| 308 void MayBeReportToDevTools(std::pair<int, int> worker_id, |
| 309 int fetch_event_id) { |
| 310 url_loader_client_->MayBeReportToDevTools(worker_id, fetch_event_id); |
| 311 } |
| 312 |
| 234 private: | 313 private: |
| 235 friend class base::RefCounted<URLLoaderAssets>; | 314 friend class base::RefCounted<URLLoaderAssets>; |
| 236 virtual ~URLLoaderAssets() {} | 315 virtual ~URLLoaderAssets() {} |
| 237 | 316 |
| 238 mojom::URLLoaderFactoryPtr url_loader_factory_; | 317 mojom::URLLoaderFactoryPtr url_loader_factory_; |
| 239 std::unique_ptr<mojom::URLLoader> url_loader_; | 318 std::unique_ptr<mojom::URLLoader> url_loader_; |
| 240 std::unique_ptr<mojom::URLLoaderClient> url_loader_client_; | 319 std::unique_ptr<DelegatingURLLoaderClient> url_loader_client_; |
| 241 | 320 |
| 242 DISALLOW_COPY_AND_ASSIGN(URLLoaderAssets); | 321 DISALLOW_COPY_AND_ASSIGN(URLLoaderAssets); |
| 243 }; | 322 }; |
| 244 | 323 |
| 245 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( | 324 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( |
| 246 std::unique_ptr<ServiceWorkerFetchRequest> request, | 325 std::unique_ptr<ServiceWorkerFetchRequest> request, |
| 247 ServiceWorkerVersion* version, | 326 ServiceWorkerVersion* version, |
| 248 ResourceType resource_type, | 327 ResourceType resource_type, |
| 249 const base::Optional<base::TimeDelta>& timeout, | 328 const base::Optional<base::TimeDelta>& timeout, |
| 250 const net::NetLogWithSource& net_log, | 329 const net::NetLogWithSource& net_log, |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 436 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 358 } | 437 } |
| 359 | 438 |
| 360 ResponseCallback* response_callback = | 439 ResponseCallback* response_callback = |
| 361 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); | 440 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); |
| 362 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( | 441 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( |
| 363 fetch_event_id, | 442 fetch_event_id, |
| 364 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, | 443 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, |
| 365 base::Owned(response_callback))); | 444 base::Owned(response_callback))); |
| 366 | 445 |
| 446 if (url_loader_assets_) { |
| 447 url_loader_assets_->MayBeReportToDevTools( |
| 448 std::make_pair( |
| 449 version_->embedded_worker()->process_id(), |
| 450 version_->embedded_worker()->worker_devtools_agent_route_id()), |
| 451 fetch_event_id); |
| 452 } |
| 453 |
| 367 // |event_dispatcher| is owned by |version_|. So it is safe to pass the | 454 // |event_dispatcher| is owned by |version_|. So it is safe to pass the |
| 368 // unretained raw pointer of |version_| to OnFetchEventFinished callback. | 455 // unretained raw pointer of |version_| to OnFetchEventFinished callback. |
| 369 // Pass |url_loader_assets_| to the callback to keep the URL loader related | 456 // Pass |url_loader_assets_| to the callback to keep the URL loader related |
| 370 // assets alive while the FetchEvent is ongoing in the service worker. | 457 // assets alive while the FetchEvent is ongoing in the service worker. |
| 371 version_->event_dispatcher()->DispatchFetchEvent( | 458 version_->event_dispatcher()->DispatchFetchEvent( |
| 372 fetch_event_id, *request_, std::move(preload_handle_), | 459 fetch_event_id, *request_, std::move(preload_handle_), |
| 373 base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventFinished, | 460 base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventFinished, |
| 374 base::Unretained(version_.get()), event_finish_id, | 461 base::Unretained(version_.get()), event_finish_id, |
| 375 url_loader_assets_)); | 462 url_loader_assets_)); |
| 376 } | 463 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 request.load_flags = original_request->load_flags(); | 552 request.load_flags = original_request->load_flags(); |
| 466 // Set to SUB_RESOURCE because we shouldn't trigger NavigationResourceThrottle | 553 // Set to SUB_RESOURCE because we shouldn't trigger NavigationResourceThrottle |
| 467 // for the service worker navigation preload request. | 554 // for the service worker navigation preload request. |
| 468 request.resource_type = RESOURCE_TYPE_SUB_RESOURCE; | 555 request.resource_type = RESOURCE_TYPE_SUB_RESOURCE; |
| 469 request.priority = original_request->priority(); | 556 request.priority = original_request->priority(); |
| 470 request.skip_service_worker = SkipServiceWorker::ALL; | 557 request.skip_service_worker = SkipServiceWorker::ALL; |
| 471 request.do_not_prompt_for_login = true; | 558 request.do_not_prompt_for_login = true; |
| 472 request.render_frame_id = original_info->GetRenderFrameID(); | 559 request.render_frame_id = original_info->GetRenderFrameID(); |
| 473 request.is_main_frame = original_info->IsMainFrame(); | 560 request.is_main_frame = original_info->IsMainFrame(); |
| 474 request.parent_is_main_frame = original_info->ParentIsMainFrame(); | 561 request.parent_is_main_frame = original_info->ParentIsMainFrame(); |
| 562 request.enable_load_timing = original_info->is_load_timing_enabled(); |
| 563 request.report_raw_headers = original_info->ShouldReportRawHeaders(); |
| 475 | 564 |
| 476 DCHECK(net::HttpUtil::IsValidHeaderValue( | 565 DCHECK(net::HttpUtil::IsValidHeaderValue( |
| 477 version_->navigation_preload_state().header)); | 566 version_->navigation_preload_state().header)); |
| 478 ServiceWorkerMetrics::RecordNavigationPreloadRequestHeaderSize( | 567 ServiceWorkerMetrics::RecordNavigationPreloadRequestHeaderSize( |
| 479 version_->navigation_preload_state().header.length()); | 568 version_->navigation_preload_state().header.length()); |
| 480 request.headers = "Service-Worker-Navigation-Preload: " + | 569 request.headers = "Service-Worker-Navigation-Preload: " + |
| 481 version_->navigation_preload_state().header + "\r\n" + | 570 version_->navigation_preload_state().header + "\r\n" + |
| 482 original_request->extra_request_headers().ToString(); | 571 original_request->extra_request_headers().ToString(); |
| 483 | 572 |
| 484 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID(); | 573 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID(); |
| 485 DCHECK_LT(request_id, -1); | 574 DCHECK_LT(request_id, -1); |
| 486 | 575 |
| 487 preload_handle_ = mojom::FetchEventPreloadHandle::New(); | 576 preload_handle_ = mojom::FetchEventPreloadHandle::New(); |
| 488 mojom::URLLoaderClientPtr url_loader_client_ptr; | 577 mojom::URLLoaderClientPtr url_loader_client_ptr; |
| 489 preload_handle_->url_loader_client_request = | 578 preload_handle_->url_loader_client_request = |
| 490 mojo::MakeRequest(&url_loader_client_ptr); | 579 mojo::MakeRequest(&url_loader_client_ptr); |
| 491 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>( | 580 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>( |
| 492 std::move(url_loader_client_ptr), std::move(on_response)); | 581 std::move(url_loader_client_ptr), std::move(on_response), request); |
| 493 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info; | 582 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info; |
| 494 url_loader_client->Bind(&url_loader_client_associated_ptr_info, | 583 url_loader_client->Bind(&url_loader_client_associated_ptr_info, |
| 495 url_loader_factory.associated_group()); | 584 url_loader_factory.associated_group()); |
| 496 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr; | 585 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr; |
| 497 | 586 |
| 498 url_loader_factory->CreateLoaderAndStart( | 587 url_loader_factory->CreateLoaderAndStart( |
| 499 mojo::MakeRequest(&url_loader_associated_ptr, | 588 mojo::MakeRequest(&url_loader_associated_ptr, |
| 500 url_loader_factory.associated_group()), | 589 url_loader_factory.associated_group()), |
| 501 original_info->GetRouteID(), request_id, request, | 590 original_info->GetRouteID(), request_id, request, |
| 502 std::move(url_loader_client_associated_ptr_info)); | 591 std::move(url_loader_client_associated_ptr_info)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 523 ServiceWorkerVersion* version, | 612 ServiceWorkerVersion* version, |
| 524 int event_finish_id, | 613 int event_finish_id, |
| 525 scoped_refptr<URLLoaderAssets> url_loader_assets, | 614 scoped_refptr<URLLoaderAssets> url_loader_assets, |
| 526 ServiceWorkerStatusCode status, | 615 ServiceWorkerStatusCode status, |
| 527 base::Time dispatch_event_time) { | 616 base::Time dispatch_event_time) { |
| 528 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, | 617 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, |
| 529 dispatch_event_time); | 618 dispatch_event_time); |
| 530 } | 619 } |
| 531 | 620 |
| 532 } // namespace content | 621 } // namespace content |
| OLD | NEW |