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

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

Issue 2715423003: [Mojo-Loading] Use independent URLLoaderClient (Closed)
Patch Set: fix Created 3 years, 9 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"
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" 14 #include "content/browser/devtools/service_worker_devtools_agent_host.h"
15 #include "content/browser/devtools/service_worker_devtools_manager.h" 15 #include "content/browser/devtools/service_worker_devtools_manager.h"
16 #include "content/browser/loader/resource_dispatcher_host_impl.h" 16 #include "content/browser/loader/resource_dispatcher_host_impl.h"
17 #include "content/browser/loader/resource_request_info_impl.h" 17 #include "content/browser/loader/resource_request_info_impl.h"
18 #include "content/browser/loader/resource_requester_info.h" 18 #include "content/browser/loader/resource_requester_info.h"
19 #include "content/browser/loader/url_loader_factory_impl.h" 19 #include "content/browser/loader/url_loader_factory_impl.h"
20 #include "content/browser/service_worker/embedded_worker_status.h" 20 #include "content/browser/service_worker/embedded_worker_status.h"
21 #include "content/browser/service_worker/service_worker_metrics.h" 21 #include "content/browser/service_worker/service_worker_metrics.h"
22 #include "content/browser/service_worker/service_worker_version.h" 22 #include "content/browser/service_worker/service_worker_version.h"
23 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" 23 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
24 #include "content/common/service_worker/service_worker_messages.h" 24 #include "content/common/service_worker/service_worker_messages.h"
25 #include "content/common/service_worker/service_worker_status_code.h" 25 #include "content/common/service_worker/service_worker_status_code.h"
26 #include "content/common/service_worker/service_worker_types.h" 26 #include "content/common/service_worker/service_worker_types.h"
27 #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" 28 #include "content/public/browser/browser_thread.h"
29 #include "content/public/common/browser_side_navigation_policy.h" 29 #include "content/public/common/browser_side_navigation_policy.h"
30 #include "mojo/public/cpp/bindings/associated_binding.h"
31 #include "mojo/public/cpp/bindings/binding.h" 30 #include "mojo/public/cpp/bindings/binding.h"
32 #include "net/base/request_priority.h" 31 #include "net/base/request_priority.h"
33 #include "net/http/http_util.h" 32 #include "net/http/http_util.h"
34 #include "net/log/net_log.h" 33 #include "net/log/net_log.h"
35 #include "net/log/net_log_capture_mode.h" 34 #include "net/log/net_log_capture_mode.h"
36 #include "net/log/net_log_event_type.h" 35 #include "net/log/net_log_event_type.h"
37 #include "net/url_request/url_request.h" 36 #include "net/url_request/url_request.h"
38 37
39 namespace content { 38 namespace content {
40 39
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 client_->OnUploadProgress(current_position, total_size, ack_callback); 150 client_->OnUploadProgress(current_position, total_size, ack_callback);
152 } 151 }
153 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override { 152 void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override {
154 client_->OnReceiveCachedMetadata(data); 153 client_->OnReceiveCachedMetadata(data);
155 } 154 }
156 void OnTransferSizeUpdated(int32_t transfer_size_diff) override { 155 void OnTransferSizeUpdated(int32_t transfer_size_diff) override {
157 client_->OnTransferSizeUpdated(transfer_size_diff); 156 client_->OnTransferSizeUpdated(transfer_size_diff);
158 } 157 }
159 void OnReceiveResponse( 158 void OnReceiveResponse(
160 const ResourceResponseHead& head, 159 const ResourceResponseHead& head,
161 mojom::DownloadedTempFileAssociatedPtrInfo downloaded_file) override { 160 mojom::DownloadedTempFilePtr downloaded_file) override {
162 client_->OnReceiveResponse(head, std::move(downloaded_file)); 161 client_->OnReceiveResponse(head, std::move(downloaded_file));
163 DCHECK(on_response_); 162 DCHECK(on_response_);
164 std::move(on_response_).Run(); 163 std::move(on_response_).Run();
165 AddDevToolsCallback( 164 AddDevToolsCallback(
166 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head)); 165 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head));
167 } 166 }
168 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, 167 void OnReceiveRedirect(const net::RedirectInfo& redirect_info,
169 const ResourceResponseHead& head) override { 168 const ResourceResponseHead& head) override {
170 client_->OnReceiveRedirect(redirect_info, head); 169 client_->OnReceiveRedirect(redirect_info, head);
171 } 170 }
172 void OnStartLoadingResponseBody( 171 void OnStartLoadingResponseBody(
173 mojo::ScopedDataPipeConsumerHandle body) override { 172 mojo::ScopedDataPipeConsumerHandle body) override {
174 client_->OnStartLoadingResponseBody(std::move(body)); 173 client_->OnStartLoadingResponseBody(std::move(body));
175 } 174 }
176 void OnComplete( 175 void OnComplete(
177 const ResourceRequestCompletionStatus& completion_status) override { 176 const ResourceRequestCompletionStatus& completion_status) override {
178 client_->OnComplete(completion_status); 177 client_->OnComplete(completion_status);
179 completed_ = true; 178 completed_ = true;
180 AddDevToolsCallback( 179 AddDevToolsCallback(
181 base::Bind(&NotifyNavigationPreloadCompletedOnUI, completion_status)); 180 base::Bind(&NotifyNavigationPreloadCompletedOnUI, completion_status));
182 } 181 }
183 182
184 void Bind(mojom::URLLoaderClientAssociatedPtrInfo* ptr_info) { 183 void Bind(mojom::URLLoaderClientPtr* ptr_info) { binding_.Bind(ptr_info); }
185 binding_.Bind(ptr_info);
186 }
187 184
188 private: 185 private:
189 void MayBeRunDevToolsCallbacks() { 186 void MayBeRunDevToolsCallbacks() {
190 if (!worker_id_) 187 if (!worker_id_)
191 return; 188 return;
192 while (!devtools_callbacks.empty()) { 189 while (!devtools_callbacks.empty()) {
193 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 190 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
194 base::Bind(std::move(devtools_callbacks.front()), 191 base::Bind(std::move(devtools_callbacks.front()),
195 *worker_id_, devtools_request_id_)); 192 *worker_id_, devtools_request_id_));
196 devtools_callbacks.pop(); 193 devtools_callbacks.pop();
197 } 194 }
198 } 195 }
199 void AddDevToolsCallback( 196 void AddDevToolsCallback(
200 base::Callback<void(const WorkerId&, const std::string&)> callback) { 197 base::Callback<void(const WorkerId&, const std::string&)> callback) {
201 devtools_callbacks.push(callback); 198 devtools_callbacks.push(callback);
202 MayBeRunDevToolsCallbacks(); 199 MayBeRunDevToolsCallbacks();
203 } 200 }
204 201
205 mojo::AssociatedBinding<mojom::URLLoaderClient> binding_; 202 mojo::Binding<mojom::URLLoaderClient> binding_;
206 mojom::URLLoaderClientPtr client_; 203 mojom::URLLoaderClientPtr client_;
207 base::OnceClosure on_response_; 204 base::OnceClosure on_response_;
208 bool completed_ = false; 205 bool completed_ = false;
209 const GURL url_; 206 const GURL url_;
210 207
211 base::Optional<std::pair<int, int>> worker_id_; 208 base::Optional<std::pair<int, int>> worker_id_;
212 std::string devtools_request_id_; 209 std::string devtools_request_id_;
213 std::queue<base::Callback<void(const WorkerId&, const std::string&)>> 210 std::queue<base::Callback<void(const WorkerId&, const std::string&)>>
214 devtools_callbacks; 211 devtools_callbacks;
215 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient); 212 DISALLOW_COPY_AND_ASSIGN(DelegatingURLLoaderClient);
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 572
576 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID(); 573 const int request_id = ResourceDispatcherHostImpl::Get()->MakeRequestID();
577 DCHECK_LT(request_id, -1); 574 DCHECK_LT(request_id, -1);
578 575
579 preload_handle_ = mojom::FetchEventPreloadHandle::New(); 576 preload_handle_ = mojom::FetchEventPreloadHandle::New();
580 mojom::URLLoaderClientPtr url_loader_client_ptr; 577 mojom::URLLoaderClientPtr url_loader_client_ptr;
581 preload_handle_->url_loader_client_request = 578 preload_handle_->url_loader_client_request =
582 mojo::MakeRequest(&url_loader_client_ptr); 579 mojo::MakeRequest(&url_loader_client_ptr);
583 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>( 580 auto url_loader_client = base::MakeUnique<DelegatingURLLoaderClient>(
584 std::move(url_loader_client_ptr), std::move(on_response), request); 581 std::move(url_loader_client_ptr), std::move(on_response), request);
585 mojom::URLLoaderClientAssociatedPtrInfo url_loader_client_associated_ptr_info; 582 mojom::URLLoaderClientPtr url_loader_client_ptr_to_pass;
586 url_loader_client->Bind(&url_loader_client_associated_ptr_info); 583 url_loader_client->Bind(&url_loader_client_ptr_to_pass);
587 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr; 584 mojom::URLLoaderAssociatedPtr url_loader_associated_ptr;
588 585
589 url_loader_factory->CreateLoaderAndStart( 586 url_loader_factory->CreateLoaderAndStart(
590 mojo::MakeRequest(&url_loader_associated_ptr), 587 mojo::MakeRequest(&url_loader_associated_ptr),
591 original_info->GetRouteID(), request_id, request, 588 original_info->GetRouteID(), request_id, request,
592 std::move(url_loader_client_associated_ptr_info)); 589 std::move(url_loader_client_ptr_to_pass));
593 590
594 std::unique_ptr<DelegatingURLLoader> url_loader( 591 std::unique_ptr<DelegatingURLLoader> url_loader(
595 base::MakeUnique<DelegatingURLLoader>( 592 base::MakeUnique<DelegatingURLLoader>(
596 std::move(url_loader_associated_ptr))); 593 std::move(url_loader_associated_ptr)));
597 preload_handle_->url_loader = url_loader->CreateInterfacePtrAndBind(); 594 preload_handle_->url_loader = url_loader->CreateInterfacePtrAndBind();
598 url_loader_assets_ = 595 url_loader_assets_ =
599 new URLLoaderAssets(std::move(url_loader_factory), std::move(url_loader), 596 new URLLoaderAssets(std::move(url_loader_factory), std::move(url_loader),
600 std::move(url_loader_client)); 597 std::move(url_loader_client));
601 return true; 598 return true;
602 } 599 }
(...skipping 10 matching lines...) Expand all
613 ServiceWorkerVersion* version, 610 ServiceWorkerVersion* version,
614 int event_finish_id, 611 int event_finish_id,
615 scoped_refptr<URLLoaderAssets> url_loader_assets, 612 scoped_refptr<URLLoaderAssets> url_loader_assets,
616 ServiceWorkerStatusCode status, 613 ServiceWorkerStatusCode status,
617 base::Time dispatch_event_time) { 614 base::Time dispatch_event_time) {
618 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, 615 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
619 dispatch_event_time); 616 dispatch_event_time);
620 } 617 }
621 618
622 } // namespace content 619 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698