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

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

Issue 2118243002: [proof-of-concept] SW thread independent of the main thread Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 3 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 const base::Closure& prepare_callback, 110 const base::Closure& prepare_callback,
111 const FetchCallback& fetch_callback) 111 const FetchCallback& fetch_callback)
112 : version_(version), 112 : version_(version),
113 net_log_(net_log), 113 net_log_(net_log),
114 prepare_callback_(prepare_callback), 114 prepare_callback_(prepare_callback),
115 fetch_callback_(fetch_callback), 115 fetch_callback_(fetch_callback),
116 request_(std::move(request)), 116 request_(std::move(request)),
117 resource_type_(resource_type), 117 resource_type_(resource_type),
118 did_complete_(false), 118 did_complete_(false),
119 weak_factory_(this) { 119 weak_factory_(this) {
120 LOG(ERROR) << "ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher "
121 << this;
120 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, 122 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT,
121 net::NetLog::StringCallback( 123 net::NetLog::StringCallback(
122 "event_type", ServiceWorkerMetrics::EventTypeToString( 124 "event_type", ServiceWorkerMetrics::EventTypeToString(
123 GetEventType()))); 125 GetEventType())));
124 } 126 }
125 127
126 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { 128 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() {
129 LOG(ERROR) << "ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher "
130 << this;
127 if (!did_complete_) 131 if (!did_complete_)
128 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT); 132 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT);
129 } 133 }
130 134
131 void ServiceWorkerFetchDispatcher::Run() { 135 void ServiceWorkerFetchDispatcher::Run() {
132 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING || 136 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING ||
133 version_->status() == ServiceWorkerVersion::ACTIVATED) 137 version_->status() == ServiceWorkerVersion::ACTIVATED)
134 << version_->status(); 138 << version_->status();
135 139
136 if (version_->status() == ServiceWorkerVersion::ACTIVATING) { 140 if (version_->status() == ServiceWorkerVersion::ACTIVATING) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 } 180 }
177 181
178 void ServiceWorkerFetchDispatcher::DidFailToStartWorker( 182 void ServiceWorkerFetchDispatcher::DidFailToStartWorker(
179 ServiceWorkerStatusCode status) { 183 ServiceWorkerStatusCode status) {
180 EndNetLogEventWithServiceWorkerStatus( 184 EndNetLogEventWithServiceWorkerStatus(
181 net_log_, net::NetLog::TYPE_SERVICE_WORKER_START_WORKER, status); 185 net_log_, net::NetLog::TYPE_SERVICE_WORKER_START_WORKER, status);
182 DidFail(status); 186 DidFail(status);
183 } 187 }
184 188
185 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { 189 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
190 LOG(ERROR) << "ServiceWorkerFetchDispatcher::DispatchFetchEvent";
186 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) 191 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status())
187 << "Worker stopped too soon after it was started."; 192 << "Worker stopped too soon after it was started.";
188 193
189 DCHECK(!prepare_callback_.is_null()); 194 DCHECK(!prepare_callback_.is_null());
190 base::Closure prepare_callback = prepare_callback_; 195 base::Closure prepare_callback = prepare_callback_;
191 prepare_callback.Run(); 196 prepare_callback.Run();
192 197
193 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); 198 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT);
199
200 if (version_->IsIsolatedWorker()) {
201 int response_id = version_->StartRequest(
202 GetEventType(),
203 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch,
204 weak_factory_.GetWeakPtr()));
205 int event_finish_id = version_->StartRequest(
206 FetchTypeToWaitUntilEventType(request_->fetch_type),
207 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
208 version_->isolated_worker_ptr()->OnFetchEvent(
209 response_id, event_finish_id, request_->url.spec(),
210 request_->mode == FETCH_REQUEST_MODE_NAVIGATE,
211 base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventCallback,
212 weak_factory_.GetWeakPtr()));
213 return;
214 }
215
194 int response_id = version_->StartRequest( 216 int response_id = version_->StartRequest(
195 GetEventType(), 217 GetEventType(),
196 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, 218 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch,
197 weak_factory_.GetWeakPtr())); 219 weak_factory_.GetWeakPtr()));
198 int event_finish_id = version_->StartRequest( 220 int event_finish_id = version_->StartRequest(
199 FetchTypeToWaitUntilEventType(request_->fetch_type), 221 FetchTypeToWaitUntilEventType(request_->fetch_type),
200 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 222 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
201 223
202 ResponseCallback* response_callback = 224 ResponseCallback* response_callback =
203 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); 225 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get());
(...skipping 22 matching lines...) Expand all
226 } 248 }
227 249
228 void ServiceWorkerFetchDispatcher::DidFinish( 250 void ServiceWorkerFetchDispatcher::DidFinish(
229 int request_id, 251 int request_id,
230 ServiceWorkerFetchEventResult fetch_result, 252 ServiceWorkerFetchEventResult fetch_result,
231 const ServiceWorkerResponse& response) { 253 const ServiceWorkerResponse& response) {
232 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); 254 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT);
233 Complete(SERVICE_WORKER_OK, fetch_result, response); 255 Complete(SERVICE_WORKER_OK, fetch_result, response);
234 } 256 }
235 257
258 void ServiceWorkerFetchDispatcher::OnFetchEventCallback(
259 bool handled,
260 mojo::StructPtr<blink::mojom::ServiceWorkerResponse> response) {
261 LOG(ERROR) << "ServiceWorkerFetchDispatcher::OnFetchEventCallback "
262 << handled;
263 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT);
264 ServiceWorkerResponse result;
265 if (response) {
266 LOG(ERROR) << " url: " << response->url;
267 LOG(ERROR) << " status_code: " << response->status_code;
268 LOG(ERROR) << " status_text: " << response->status_text;
269 LOG(ERROR) << " blob_uuid: " << response->blob_uuid;
270 LOG(ERROR) << " blob_size: " << response->blob_size;
271 LOG(ERROR) << " stream_url: " << response->stream_url;
272 result.url = GURL(std::string(response->url));
273 result.status_code = response->status_code;
274 result.status_text = response->status_text;
275 result.blob_uuid = response->blob_uuid;
276 result.blob_size = response->blob_size;
277 result.stream_url = GURL(std::string(response->stream_url));
278 }
279 Complete(SERVICE_WORKER_OK,
280 handled ? SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE
281 : SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
282 result);
283 }
284
236 void ServiceWorkerFetchDispatcher::Complete( 285 void ServiceWorkerFetchDispatcher::Complete(
237 ServiceWorkerStatusCode status, 286 ServiceWorkerStatusCode status,
238 ServiceWorkerFetchEventResult fetch_result, 287 ServiceWorkerFetchEventResult fetch_result,
239 const ServiceWorkerResponse& response) { 288 const ServiceWorkerResponse& response) {
240 DCHECK(!fetch_callback_.is_null()); 289 DCHECK(!fetch_callback_.is_null());
241 290
242 did_complete_ = true; 291 did_complete_ = true;
243 net_log_.EndEvent( 292 net_log_.EndEvent(
244 net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, 293 net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT,
245 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); 294 base::Bind(&NetLogFetchEventCallback, status, fetch_result));
246 295
247 FetchCallback fetch_callback = fetch_callback_; 296 FetchCallback fetch_callback = fetch_callback_;
248 scoped_refptr<ServiceWorkerVersion> version = version_; 297 scoped_refptr<ServiceWorkerVersion> version = version_;
249 fetch_callback.Run(status, fetch_result, response, version); 298 fetch_callback.Run(status, fetch_result, response, version);
250 } 299 }
251 300
252 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 301 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
253 const { 302 const {
254 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 303 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
255 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 304 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
256 return ResourceTypeToEventType(resource_type_); 305 return ResourceTypeToEventType(resource_type_);
257 } 306 }
258 307
259 } // namespace content 308 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698