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

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

Issue 2034663002: ServiceWorker: Keep the worker alive until FetchEvent.waitUntil settles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "content/browser/service_worker/service_worker_version.h" 11 #include "content/browser/service_worker/service_worker_version.h"
12 #include "content/common/service_worker/service_worker_messages.h" 12 #include "content/common/service_worker/service_worker_messages.h"
13 #include "content/common/service_worker/service_worker_utils.h"
13 14
14 namespace content { 15 namespace content {
15 16
16 namespace { 17 namespace {
17 using EventType = ServiceWorkerMetrics::EventType; 18 using EventType = ServiceWorkerMetrics::EventType;
18 EventType ResourceTypeToEventType(ResourceType resource_type) { 19 EventType ResourceTypeToEventType(ResourceType resource_type) {
19 switch (resource_type) { 20 switch (resource_type) {
20 case RESOURCE_TYPE_MAIN_FRAME: 21 case RESOURCE_TYPE_MAIN_FRAME:
21 return EventType::FETCH_MAIN_FRAME; 22 return EventType::FETCH_MAIN_FRAME;
22 case RESOURCE_TYPE_SUB_FRAME: 23 case RESOURCE_TYPE_SUB_FRAME:
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 88 }
88 89
89 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { 90 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
90 DCHECK_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()) 91 DCHECK_EQ(ServiceWorkerVersion::RUNNING, version_->running_status())
91 << "Worker stopped too soon after it was started."; 92 << "Worker stopped too soon after it was started.";
92 93
93 DCHECK(!prepare_callback_.is_null()); 94 DCHECK(!prepare_callback_.is_null());
94 base::Closure prepare_callback = prepare_callback_; 95 base::Closure prepare_callback = prepare_callback_;
95 prepare_callback.Run(); 96 prepare_callback.Run();
96 97
97 int request_id = version_->StartRequest( 98 int response_request_id = version_->StartRequest(
98 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidFail, 99 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidFail,
99 weak_factory_.GetWeakPtr())); 100 weak_factory_.GetWeakPtr()));
100 version_->DispatchEvent<ServiceWorkerHostMsg_FetchEventFinished>( 101 int finish_request_id = version_->StartRequest(
101 request_id, ServiceWorkerMsg_FetchEvent(request_id, *request_.get()), 102 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL,
103 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
104
105 version_->DispatchFetchEvent(
106 response_request_id, finish_request_id, *request_.get(),
102 base::Bind(&ServiceWorkerFetchDispatcher::DidFinish, 107 base::Bind(&ServiceWorkerFetchDispatcher::DidFinish,
103 weak_factory_.GetWeakPtr())); 108 weak_factory_.GetWeakPtr()));
104 } 109 }
105 110
106 void ServiceWorkerFetchDispatcher::DidPrepare() { 111 void ServiceWorkerFetchDispatcher::DidPrepare() {
107 DCHECK(!prepare_callback_.is_null()); 112 DCHECK(!prepare_callback_.is_null());
108 base::Closure prepare_callback = prepare_callback_; 113 base::Closure prepare_callback = prepare_callback_;
109 prepare_callback.Run(); 114 prepare_callback.Run();
110 } 115 }
111 116
(...skipping 21 matching lines...) Expand all
133 } 138 }
134 139
135 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 140 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
136 const { 141 const {
137 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 142 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
138 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 143 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
139 return ResourceTypeToEventType(resource_type_); 144 return ResourceTypeToEventType(resource_type_);
140 } 145 }
141 146
142 } // namespace content 147 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698