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

Side by Side 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 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698