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" |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 // Owns |this|. | 203 // Owns |this|. |
204 ServiceWorkerVersion* version_; | 204 ServiceWorkerVersion* version_; |
205 | 205 |
206 DISALLOW_COPY_AND_ASSIGN(ResponseCallback); | 206 DISALLOW_COPY_AND_ASSIGN(ResponseCallback); |
207 }; | 207 }; |
208 | 208 |
209 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( | 209 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( |
210 std::unique_ptr<ServiceWorkerFetchRequest> request, | 210 std::unique_ptr<ServiceWorkerFetchRequest> request, |
211 ServiceWorkerVersion* version, | 211 ServiceWorkerVersion* version, |
212 ResourceType resource_type, | 212 ResourceType resource_type, |
| 213 const base::Optional<base::TimeDelta>& timeout, |
213 const net::NetLogWithSource& net_log, | 214 const net::NetLogWithSource& net_log, |
214 const base::Closure& prepare_callback, | 215 const base::Closure& prepare_callback, |
215 const FetchCallback& fetch_callback) | 216 const FetchCallback& fetch_callback) |
216 : version_(version), | 217 : version_(version), |
217 net_log_(net_log), | 218 net_log_(net_log), |
218 prepare_callback_(prepare_callback), | 219 prepare_callback_(prepare_callback), |
219 fetch_callback_(fetch_callback), | 220 fetch_callback_(fetch_callback), |
220 request_(std::move(request)), | 221 request_(std::move(request)), |
221 resource_type_(resource_type), | 222 resource_type_(resource_type), |
| 223 timeout_(timeout), |
222 did_complete_(false), | 224 did_complete_(false), |
223 weak_factory_(this) { | 225 weak_factory_(this) { |
224 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT, | 226 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT, |
225 net::NetLog::StringCallback( | 227 net::NetLog::StringCallback( |
226 "event_type", ServiceWorkerMetrics::EventTypeToString( | 228 "event_type", ServiceWorkerMetrics::EventTypeToString( |
227 GetEventType()))); | 229 GetEventType()))); |
228 } | 230 } |
229 | 231 |
230 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { | 232 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { |
231 if (!did_complete_) | 233 if (!did_complete_) |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 | 292 |
291 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { | 293 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { |
292 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) | 294 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) |
293 << "Worker stopped too soon after it was started."; | 295 << "Worker stopped too soon after it was started."; |
294 | 296 |
295 DCHECK(!prepare_callback_.is_null()); | 297 DCHECK(!prepare_callback_.is_null()); |
296 base::Closure prepare_callback = prepare_callback_; | 298 base::Closure prepare_callback = prepare_callback_; |
297 prepare_callback.Run(); | 299 prepare_callback.Run(); |
298 | 300 |
299 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT); | 301 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT); |
300 int fetch_event_id = version_->StartRequest( | 302 int fetch_event_id; |
301 GetEventType(), | 303 int event_finish_id; |
302 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, | 304 if (timeout_) { |
303 weak_factory_.GetWeakPtr())); | 305 fetch_event_id = version_->StartRequestWithCustomTimeout( |
304 int event_finish_id = version_->StartRequest( | 306 GetEventType(), |
305 FetchTypeToWaitUntilEventType(request_->fetch_type), | 307 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
306 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 308 weak_factory_.GetWeakPtr()), |
| 309 *timeout_, ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); |
| 310 event_finish_id = version_->StartRequestWithCustomTimeout( |
| 311 FetchTypeToWaitUntilEventType(request_->fetch_type), |
| 312 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), *timeout_, |
| 313 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); |
| 314 } else { |
| 315 fetch_event_id = version_->StartRequest( |
| 316 GetEventType(), |
| 317 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
| 318 weak_factory_.GetWeakPtr())); |
| 319 event_finish_id = version_->StartRequest( |
| 320 FetchTypeToWaitUntilEventType(request_->fetch_type), |
| 321 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 322 } |
307 | 323 |
308 ResponseCallback* response_callback = | 324 ResponseCallback* response_callback = |
309 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); | 325 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); |
310 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( | 326 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( |
311 fetch_event_id, | 327 fetch_event_id, |
312 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, | 328 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, |
313 base::Owned(response_callback))); | 329 base::Owned(response_callback))); |
314 | 330 |
315 // |event_dispatcher| is owned by |version_|. So it is safe to pass the | 331 // |event_dispatcher| is owned by |version_|. So it is safe to pass the |
316 // unretained raw pointer of |version_| to OnFetchEventFinished callback. | 332 // unretained raw pointer of |version_| to OnFetchEventFinished callback. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 } | 466 } |
451 | 467 |
452 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() | 468 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() |
453 const { | 469 const { |
454 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) | 470 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) |
455 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; | 471 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; |
456 return ResourceTypeToEventType(resource_type_); | 472 return ResourceTypeToEventType(resource_type_); |
457 } | 473 } |
458 | 474 |
459 } // namespace content | 475 } // namespace content |
OLD | NEW |