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

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

Issue 2919313004: Get rid of URLLoaderFactory in browser-side case (Closed)
Patch Set: . Created 3 years, 6 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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_url_job_wrapper.h" 5 #include "content/browser/service_worker/service_worker_url_job_wrapper.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "content/browser/service_worker/service_worker_response_type.h" 8 #include "content/browser/service_worker/service_worker_response_type.h"
9 #include "content/browser/service_worker/service_worker_version.h" 9 #include "content/browser/service_worker/service_worker_version.h"
10 #include "content/common/service_worker/service_worker_utils.h" 10 #include "content/common/service_worker/service_worker_utils.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/resource_request_info.h" 12 #include "content/public/browser/resource_request_info.h"
13 #include "content/public/common/browser_side_navigation_policy.h" 13 #include "content/public/common/browser_side_navigation_policy.h"
14 #include "content/public/common/content_switches.h" 14 #include "content/public/common/content_switches.h"
15 #include "mojo/public/cpp/bindings/strong_associated_binding.h" 15 #include "mojo/public/cpp/bindings/strong_associated_binding.h"
16 #include "net/base/io_buffer.h" 16 #include "net/base/io_buffer.h"
17 #include "storage/browser/blob/blob_storage_context.h" 17 #include "storage/browser/blob/blob_storage_context.h"
18 18
19 namespace content { 19 namespace content {
20 20
21 namespace { 21 namespace {
22 22
23 class URLLoaderImpl : public mojom::URLLoader { 23 class URLLoaderImpl : public mojom::URLLoader {
24 public: 24 public:
25 static void Start(
26 const ServiceWorkerResponse& response,
27 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
28 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
29 mojom::URLLoaderAssociatedRequest request,
30 mojom::URLLoaderClientPtr client) {
31 mojo::MakeStrongAssociatedBinding(
32 base::MakeUnique<URLLoaderImpl>(response, std::move(body_as_stream),
33 blob_storage_context,
34 std::move(client)),
35 std::move(request));
36 }
37
25 URLLoaderImpl(const ServiceWorkerResponse& response, 38 URLLoaderImpl(const ServiceWorkerResponse& response,
26 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream, 39 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
27 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, 40 base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
28 mojom::URLLoaderClientPtr url_loader_client) 41 mojom::URLLoaderClientPtr url_loader_client)
29 : blob_storage_context_(blob_storage_context), 42 : blob_storage_context_(blob_storage_context),
30 url_loader_client_(std::move(url_loader_client)), 43 url_loader_client_(std::move(url_loader_client)),
31 weak_factory_(this) { 44 weak_factory_(this) {
32 ResourceResponseHead head; 45 ResourceResponseHead head;
33 // TODO(scottmg): More fields in |head| required? 46 // TODO(scottmg): More fields in |head| required?
34 head.headers = new net::HttpResponseHeaders(""); 47 head.headers = new net::HttpResponseHeaders("");
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 std::unique_ptr<storage::BlobReader> blob_reader_; 108 std::unique_ptr<storage::BlobReader> blob_reader_;
96 mojo::DataPipe data_pipe_; 109 mojo::DataPipe data_pipe_;
97 110
98 base::WeakPtrFactory<URLLoaderImpl> weak_factory_; 111 base::WeakPtrFactory<URLLoaderImpl> weak_factory_;
99 112
100 DISALLOW_COPY_AND_ASSIGN(URLLoaderImpl); 113 DISALLOW_COPY_AND_ASSIGN(URLLoaderImpl);
101 }; 114 };
102 115
103 } // namespace 116 } // namespace
104 117
105 class ServiceWorkerURLJobWrapper::Factory : public mojom::URLLoaderFactory {
106 public:
107 Factory(const ServiceWorkerResponse& response,
108 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
109 base::WeakPtr<storage::BlobStorageContext> blob_storage_context)
110 : response_(response),
111 body_as_stream_(std::move(body_as_stream)),
112 blob_storage_context_(blob_storage_context) {}
113
114 void CreateLoaderAndStart(mojom::URLLoaderAssociatedRequest request,
115 int32_t routing_id,
116 int32_t request_id,
117 uint32_t options,
118 const ResourceRequest& url_request,
119 mojom::URLLoaderClientPtr client) override {
120 // Note that url_request is ignored here, as we've already processed the
121 // fetch before even creating the factory.
122 // TODO(scottmg): Use options.
123 mojo::MakeStrongAssociatedBinding(
124 base::MakeUnique<URLLoaderImpl>(response_, std::move(body_as_stream_),
125 blob_storage_context_,
126 std::move(client)),
127 std::move(request));
128 }
129
130 void SyncLoad(int32_t routing_id,
131 int32_t request_id,
132 const ResourceRequest& url_request,
133 SyncLoadCallback callback) override {
134 NOTREACHED();
135 }
136
137 private:
138 ServiceWorkerResponse response_;
139 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream_;
140 base::WeakPtr<storage::BlobStorageContext> blob_storage_context_;
141
142 DISALLOW_COPY_AND_ASSIGN(Factory);
143 };
144
145 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper( 118 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
146 base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job) 119 base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job)
147 : job_type_(JobType::kURLRequest), 120 : job_type_(JobType::kURLRequest),
148 url_request_job_(std::move(url_request_job)), 121 url_request_job_(std::move(url_request_job)),
149 weak_factory_(this) {} 122 weak_factory_(this) {}
150 123
151 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper( 124 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
152 LoaderFactoryCallback callback, 125 LoaderCallback callback,
153 Delegate* delegate, 126 Delegate* delegate,
154 const ResourceRequest& resource_request, 127 const ResourceRequest& resource_request,
155 base::WeakPtr<storage::BlobStorageContext> blob_storage_context) 128 base::WeakPtr<storage::BlobStorageContext> blob_storage_context)
156 : job_type_(JobType::kURLLoader), 129 : job_type_(JobType::kURLLoader),
157 loader_factory_callback_(std::move(callback)), 130 loader_callback_(std::move(callback)),
158 delegate_(delegate), 131 delegate_(delegate),
159 resource_request_(resource_request), 132 resource_request_(resource_request),
160 blob_storage_context_(blob_storage_context), 133 blob_storage_context_(blob_storage_context),
161 weak_factory_(this) { 134 weak_factory_(this) {
162 DCHECK(IsBrowserSideNavigationEnabled() && 135 DCHECK(IsBrowserSideNavigationEnabled() &&
163 base::CommandLine::ForCurrentProcess()->HasSwitch( 136 base::CommandLine::ForCurrentProcess()->HasSwitch(
164 switches::kEnableNetworkService)); 137 switches::kEnableNetworkService));
165 } 138 }
166 139
167 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {} 140 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {}
168 141
169 void ServiceWorkerURLJobWrapper::FallbackToNetwork() { 142 void ServiceWorkerURLJobWrapper::FallbackToNetwork() {
170 if (job_type_ == JobType::kURLLoader) { 143 if (job_type_ == JobType::kURLLoader) {
171 response_type_ = FALLBACK_TO_NETWORK; 144 response_type_ = FALLBACK_TO_NETWORK;
172 // This could be called multiple times in some cases because we simply 145 // This could be called multiple times in some cases because we simply
173 // call this synchronously here and don't wait for a separate async 146 // call this synchronously here and don't wait for a separate async
174 // StartRequest cue like what URLRequestJob case does. 147 // StartRequest cue like what URLRequestJob case does.
175 // TODO(kinuko): Make sure this is ok or we need to make this async. 148 // TODO(kinuko): Make sure this is ok or we need to make this async.
176 if (!loader_factory_callback_.is_null()) { 149 if (!loader_callback_.is_null()) {
177 std::move(loader_factory_callback_).Run(nullptr); 150 std::move(loader_callback_).Run(StartLoaderCallback());
178 } 151 }
179 } else { 152 } else {
180 url_request_job_->FallbackToNetwork(); 153 url_request_job_->FallbackToNetwork();
181 } 154 }
182 } 155 }
183 156
184 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() { 157 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
185 if (job_type_ == JobType::kURLLoader) { 158 if (job_type_ == JobType::kURLLoader) {
186 // TODO(kinuko): Implement this. Now we always fallback to network. 159 // TODO(kinuko): Implement this. Now we always fallback to network.
187 FallbackToNetwork(); 160 FallbackToNetwork();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 void ServiceWorkerURLJobWrapper::FailDueToLostController() { 206 void ServiceWorkerURLJobWrapper::FailDueToLostController() {
234 if (job_type_ == JobType::kURLLoader) { 207 if (job_type_ == JobType::kURLLoader) {
235 NOTIMPLEMENTED(); 208 NOTIMPLEMENTED();
236 } else { 209 } else {
237 url_request_job_->FailDueToLostController(); 210 url_request_job_->FailDueToLostController();
238 } 211 }
239 } 212 }
240 213
241 bool ServiceWorkerURLJobWrapper::WasCanceled() const { 214 bool ServiceWorkerURLJobWrapper::WasCanceled() const {
242 if (job_type_ == JobType::kURLLoader) { 215 if (job_type_ == JobType::kURLLoader) {
243 return loader_factory_callback_.is_null(); 216 return loader_callback_.is_null();
244 } else { 217 } else {
245 return !url_request_job_; 218 return !url_request_job_;
246 } 219 }
247 } 220 }
248 221
249 void ServiceWorkerURLJobWrapper::StartRequest() { 222 void ServiceWorkerURLJobWrapper::StartRequest() {
250 DCHECK_EQ(FORWARD_TO_SERVICE_WORKER, response_type_); 223 DCHECK_EQ(FORWARD_TO_SERVICE_WORKER, response_type_);
251 224
252 ServiceWorkerMetrics::URLRequestJobResult result = 225 ServiceWorkerMetrics::URLRequestJobResult result =
253 ServiceWorkerMetrics::REQUEST_JOB_ERROR_BAD_DELEGATE; 226 ServiceWorkerMetrics::REQUEST_JOB_ERROR_BAD_DELEGATE;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 void ServiceWorkerURLJobWrapper::DidPrepareFetchEvent( 268 void ServiceWorkerURLJobWrapper::DidPrepareFetchEvent(
296 scoped_refptr<ServiceWorkerVersion> version) {} 269 scoped_refptr<ServiceWorkerVersion> version) {}
297 270
298 void ServiceWorkerURLJobWrapper::DidDispatchFetchEvent( 271 void ServiceWorkerURLJobWrapper::DidDispatchFetchEvent(
299 ServiceWorkerStatusCode status, 272 ServiceWorkerStatusCode status,
300 ServiceWorkerFetchEventResult fetch_result, 273 ServiceWorkerFetchEventResult fetch_result,
301 const ServiceWorkerResponse& response, 274 const ServiceWorkerResponse& response,
302 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream, 275 blink::mojom::ServiceWorkerStreamHandlePtr body_as_stream,
303 const scoped_refptr<ServiceWorkerVersion>& version) { 276 const scoped_refptr<ServiceWorkerVersion>& version) {
304 if (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK) { 277 if (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK) {
305 std::move(loader_factory_callback_).Run(nullptr); 278 std::move(loader_callback_).Run(StartLoaderCallback());
306 return; 279 return;
307 } 280 }
308 DCHECK_EQ(fetch_result, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE); 281 DCHECK_EQ(fetch_result, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE);
309 282 std::move(loader_callback_)
310 factory_ = base::MakeUnique<Factory>(response, std::move(body_as_stream), 283 .Run(base::Bind(&URLLoaderImpl::Start, response,
311 blob_storage_context_); 284 base::Passed(std::move(body_as_stream)),
312 std::move(loader_factory_callback_).Run(factory_.get()); 285 blob_storage_context_));
313 } 286 }
314 287
315 } // namespace content 288 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698