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

Unified Diff: content/browser/service_worker/service_worker_fetch_dispatcher.cc

Issue 2518523003: Limit timeout for foreign fetch events when triggered by another service worker. (Closed)
Patch Set: don't intercept worker main resource fetches Created 4 years 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 side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698