Index: content/browser/service_worker/service_worker_fetch_dispatcher.cc |
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc |
index 23446d510478fb3105532f20dfaa3becab85d9fc..c899c8e5ad6e353fd628984da32df27054c8e3ad 100644 |
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc |
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc |
@@ -210,6 +210,7 @@ ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( |
std::unique_ptr<ServiceWorkerFetchRequest> request, |
ServiceWorkerVersion* version, |
ResourceType resource_type, |
+ const base::Optional<base::TimeDelta>& timeout, |
const net::NetLogWithSource& net_log, |
const base::Closure& prepare_callback, |
const FetchCallback& fetch_callback) |
@@ -219,6 +220,7 @@ ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( |
fetch_callback_(fetch_callback), |
request_(std::move(request)), |
resource_type_(resource_type), |
+ timeout_(timeout), |
did_complete_(false), |
weak_factory_(this) { |
net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT, |
@@ -297,13 +299,27 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { |
prepare_callback.Run(); |
net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT); |
- int fetch_event_id = version_->StartRequest( |
- GetEventType(), |
- base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
- weak_factory_.GetWeakPtr())); |
- int event_finish_id = version_->StartRequest( |
- FetchTypeToWaitUntilEventType(request_->fetch_type), |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
+ int fetch_event_id; |
+ int event_finish_id; |
+ if (timeout_) { |
+ fetch_event_id = version_->StartRequestWithCustomTimeout( |
+ GetEventType(), |
+ base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
+ weak_factory_.GetWeakPtr()), |
+ *timeout_, ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); |
+ event_finish_id = version_->StartRequestWithCustomTimeout( |
+ FetchTypeToWaitUntilEventType(request_->fetch_type), |
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), *timeout_, |
+ ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); |
+ } else { |
+ fetch_event_id = version_->StartRequest( |
+ GetEventType(), |
+ base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
+ weak_factory_.GetWeakPtr())); |
+ event_finish_id = version_->StartRequest( |
+ FetchTypeToWaitUntilEventType(request_->fetch_type), |
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
+ } |
ResponseCallback* response_callback = |
new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); |