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

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

Issue 2315613002: Extracted NetLog class's inner enum types into their own enum classes and (Closed)
Patch Set: Ran "git cl format" on code. Much formatting ensued. Created 4 years, 3 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 <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "content/browser/service_worker/embedded_worker_status.h" 13 #include "content/browser/service_worker/embedded_worker_status.h"
14 #include "content/browser/service_worker/service_worker_version.h" 14 #include "content/browser/service_worker/service_worker_version.h"
15 #include "content/common/service_worker/service_worker_messages.h" 15 #include "content/common/service_worker/service_worker_messages.h"
16 #include "content/common/service_worker/service_worker_utils.h" 16 #include "content/common/service_worker/service_worker_utils.h"
17 #include "net/log/net_log_event_type.h"
17 18
18 namespace content { 19 namespace content {
19 20
20 namespace { 21 namespace {
21 22
22 using EventType = ServiceWorkerMetrics::EventType; 23 using EventType = ServiceWorkerMetrics::EventType;
23 EventType ResourceTypeToEventType(ResourceType resource_type) { 24 EventType ResourceTypeToEventType(ResourceType resource_type) {
24 switch (resource_type) { 25 switch (resource_type) {
25 case RESOURCE_TYPE_MAIN_FRAME: 26 case RESOURCE_TYPE_MAIN_FRAME:
26 return EventType::FETCH_MAIN_FRAME; 27 return EventType::FETCH_MAIN_FRAME;
(...skipping 23 matching lines...) Expand all
50 ServiceWorkerFetchEventResult result, 51 ServiceWorkerFetchEventResult result,
51 net::NetLogCaptureMode) { 52 net::NetLogCaptureMode) {
52 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 53 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
53 dict->SetString("status", ServiceWorkerStatusToString(status)); 54 dict->SetString("status", ServiceWorkerStatusToString(status));
54 dict->SetBoolean("has_response", 55 dict->SetBoolean("has_response",
55 result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE); 56 result == SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE);
56 return std::move(dict); 57 return std::move(dict);
57 } 58 }
58 59
59 void EndNetLogEventWithServiceWorkerStatus(const net::BoundNetLog& net_log, 60 void EndNetLogEventWithServiceWorkerStatus(const net::BoundNetLog& net_log,
60 net::NetLog::EventType type, 61 net::NetLogEventType type,
61 ServiceWorkerStatusCode status) { 62 ServiceWorkerStatusCode status) {
62 net_log.EndEvent(type, 63 net_log.EndEvent(type,
63 base::Bind(&NetLogServiceWorkerStatusCallback, status)); 64 base::Bind(&NetLogServiceWorkerStatusCallback, status));
64 } 65 }
65 66
66 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType( 67 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType(
67 ServiceWorkerFetchType type) { 68 ServiceWorkerFetchType type) {
68 if (type == ServiceWorkerFetchType::FOREIGN_FETCH) 69 if (type == ServiceWorkerFetchType::FOREIGN_FETCH)
69 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL; 70 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL;
70 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL; 71 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 const base::Closure& prepare_callback, 111 const base::Closure& prepare_callback,
111 const FetchCallback& fetch_callback) 112 const FetchCallback& fetch_callback)
112 : version_(version), 113 : version_(version),
113 net_log_(net_log), 114 net_log_(net_log),
114 prepare_callback_(prepare_callback), 115 prepare_callback_(prepare_callback),
115 fetch_callback_(fetch_callback), 116 fetch_callback_(fetch_callback),
116 request_(std::move(request)), 117 request_(std::move(request)),
117 resource_type_(resource_type), 118 resource_type_(resource_type),
118 did_complete_(false), 119 did_complete_(false),
119 weak_factory_(this) { 120 weak_factory_(this) {
120 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, 121 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT,
121 net::NetLog::StringCallback( 122 net::NetLog::StringCallback(
122 "event_type", ServiceWorkerMetrics::EventTypeToString( 123 "event_type", ServiceWorkerMetrics::EventTypeToString(
123 GetEventType()))); 124 GetEventType())));
124 } 125 }
125 126
126 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { 127 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() {
127 if (!did_complete_) 128 if (!did_complete_)
128 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT); 129 net_log_.EndEvent(
130 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT);
129 } 131 }
130 132
131 void ServiceWorkerFetchDispatcher::Run() { 133 void ServiceWorkerFetchDispatcher::Run() {
132 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING || 134 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING ||
133 version_->status() == ServiceWorkerVersion::ACTIVATED) 135 version_->status() == ServiceWorkerVersion::ACTIVATED)
134 << version_->status(); 136 << version_->status();
135 137
136 if (version_->status() == ServiceWorkerVersion::ACTIVATING) { 138 if (version_->status() == ServiceWorkerVersion::ACTIVATING) {
137 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_WAIT_FOR_ACTIVATION); 139 net_log_.BeginEvent(
140 net::NetLogEventType::SERVICE_WORKER_WAIT_FOR_ACTIVATION);
138 version_->RegisterStatusChangeCallback( 141 version_->RegisterStatusChangeCallback(
139 base::Bind(&ServiceWorkerFetchDispatcher::DidWaitForActivation, 142 base::Bind(&ServiceWorkerFetchDispatcher::DidWaitForActivation,
140 weak_factory_.GetWeakPtr())); 143 weak_factory_.GetWeakPtr()));
141 return; 144 return;
142 } 145 }
143 StartWorker(); 146 StartWorker();
144 } 147 }
145 148
146 void ServiceWorkerFetchDispatcher::DidWaitForActivation() { 149 void ServiceWorkerFetchDispatcher::DidWaitForActivation() {
147 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_WAIT_FOR_ACTIVATION); 150 net_log_.EndEvent(net::NetLogEventType::SERVICE_WORKER_WAIT_FOR_ACTIVATION);
148 StartWorker(); 151 StartWorker();
149 } 152 }
150 153
151 void ServiceWorkerFetchDispatcher::StartWorker() { 154 void ServiceWorkerFetchDispatcher::StartWorker() {
152 // We might be REDUNDANT if a new worker started activating and kicked us out 155 // We might be REDUNDANT if a new worker started activating and kicked us out
153 // before we could finish activation. 156 // before we could finish activation.
154 if (version_->status() != ServiceWorkerVersion::ACTIVATED) { 157 if (version_->status() != ServiceWorkerVersion::ACTIVATED) {
155 DCHECK_EQ(ServiceWorkerVersion::REDUNDANT, version_->status()); 158 DCHECK_EQ(ServiceWorkerVersion::REDUNDANT, version_->status());
156 DidFail(SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED); 159 DidFail(SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED);
157 return; 160 return;
158 } 161 }
159 162
160 if (version_->running_status() == EmbeddedWorkerStatus::RUNNING) { 163 if (version_->running_status() == EmbeddedWorkerStatus::RUNNING) {
161 DispatchFetchEvent(); 164 DispatchFetchEvent();
162 return; 165 return;
163 } 166 }
164 167
165 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_START_WORKER); 168 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_START_WORKER);
166 version_->RunAfterStartWorker( 169 version_->RunAfterStartWorker(
167 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidStartWorker, 170 GetEventType(), base::Bind(&ServiceWorkerFetchDispatcher::DidStartWorker,
168 weak_factory_.GetWeakPtr()), 171 weak_factory_.GetWeakPtr()),
169 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToStartWorker, 172 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToStartWorker,
170 weak_factory_.GetWeakPtr())); 173 weak_factory_.GetWeakPtr()));
171 } 174 }
172 175
173 void ServiceWorkerFetchDispatcher::DidStartWorker() { 176 void ServiceWorkerFetchDispatcher::DidStartWorker() {
174 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_START_WORKER); 177 net_log_.EndEvent(net::NetLogEventType::SERVICE_WORKER_START_WORKER);
175 DispatchFetchEvent(); 178 DispatchFetchEvent();
176 } 179 }
177 180
178 void ServiceWorkerFetchDispatcher::DidFailToStartWorker( 181 void ServiceWorkerFetchDispatcher::DidFailToStartWorker(
179 ServiceWorkerStatusCode status) { 182 ServiceWorkerStatusCode status) {
180 EndNetLogEventWithServiceWorkerStatus( 183 EndNetLogEventWithServiceWorkerStatus(
181 net_log_, net::NetLog::TYPE_SERVICE_WORKER_START_WORKER, status); 184 net_log_, net::NetLogEventType::SERVICE_WORKER_START_WORKER, status);
182 DidFail(status); 185 DidFail(status);
183 } 186 }
184 187
185 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { 188 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
186 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) 189 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status())
187 << "Worker stopped too soon after it was started."; 190 << "Worker stopped too soon after it was started.";
188 191
189 DCHECK(!prepare_callback_.is_null()); 192 DCHECK(!prepare_callback_.is_null());
190 base::Closure prepare_callback = prepare_callback_; 193 base::Closure prepare_callback = prepare_callback_;
191 prepare_callback.Run(); 194 prepare_callback.Run();
192 195
193 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); 196 net_log_.BeginEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT);
194 int response_id = version_->StartRequest( 197 int response_id = version_->StartRequest(
195 GetEventType(), 198 GetEventType(),
196 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, 199 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch,
197 weak_factory_.GetWeakPtr())); 200 weak_factory_.GetWeakPtr()));
198 int event_finish_id = version_->StartRequest( 201 int event_finish_id = version_->StartRequest(
199 FetchTypeToWaitUntilEventType(request_->fetch_type), 202 FetchTypeToWaitUntilEventType(request_->fetch_type),
200 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 203 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
201 204
202 ResponseCallback* response_callback = 205 ResponseCallback* response_callback =
203 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); 206 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get());
204 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( 207 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>(
205 response_id, 208 response_id,
206 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run, 209 base::Bind(&ServiceWorkerFetchDispatcher::ResponseCallback::Run,
207 base::Owned(response_callback))); 210 base::Owned(response_callback)));
208 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>( 211 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>(
209 event_finish_id); 212 event_finish_id);
210 version_->DispatchEvent({response_id, event_finish_id}, 213 version_->DispatchEvent({response_id, event_finish_id},
211 ServiceWorkerMsg_FetchEvent( 214 ServiceWorkerMsg_FetchEvent(
212 response_id, event_finish_id, *request_.get())); 215 response_id, event_finish_id, *request_.get()));
213 } 216 }
214 217
215 void ServiceWorkerFetchDispatcher::DidFailToDispatch( 218 void ServiceWorkerFetchDispatcher::DidFailToDispatch(
216 ServiceWorkerStatusCode status) { 219 ServiceWorkerStatusCode status) {
217 EndNetLogEventWithServiceWorkerStatus( 220 EndNetLogEventWithServiceWorkerStatus(
218 net_log_, net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT, status); 221 net_log_, net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT, status);
219 DidFail(status); 222 DidFail(status);
220 } 223 }
221 224
222 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { 225 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) {
223 DCHECK_NE(SERVICE_WORKER_OK, status); 226 DCHECK_NE(SERVICE_WORKER_OK, status);
224 Complete(status, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, 227 Complete(status, SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
225 ServiceWorkerResponse()); 228 ServiceWorkerResponse());
226 } 229 }
227 230
228 void ServiceWorkerFetchDispatcher::DidFinish( 231 void ServiceWorkerFetchDispatcher::DidFinish(
229 int request_id, 232 int request_id,
230 ServiceWorkerFetchEventResult fetch_result, 233 ServiceWorkerFetchEventResult fetch_result,
231 const ServiceWorkerResponse& response) { 234 const ServiceWorkerResponse& response) {
232 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); 235 net_log_.EndEvent(net::NetLogEventType::SERVICE_WORKER_FETCH_EVENT);
233 Complete(SERVICE_WORKER_OK, fetch_result, response); 236 Complete(SERVICE_WORKER_OK, fetch_result, response);
234 } 237 }
235 238
236 void ServiceWorkerFetchDispatcher::Complete( 239 void ServiceWorkerFetchDispatcher::Complete(
237 ServiceWorkerStatusCode status, 240 ServiceWorkerStatusCode status,
238 ServiceWorkerFetchEventResult fetch_result, 241 ServiceWorkerFetchEventResult fetch_result,
239 const ServiceWorkerResponse& response) { 242 const ServiceWorkerResponse& response) {
240 DCHECK(!fetch_callback_.is_null()); 243 DCHECK(!fetch_callback_.is_null());
241 244
242 did_complete_ = true; 245 did_complete_ = true;
243 net_log_.EndEvent( 246 net_log_.EndEvent(
244 net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, 247 net::NetLogEventType::SERVICE_WORKER_DISPATCH_FETCH_EVENT,
245 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); 248 base::Bind(&NetLogFetchEventCallback, status, fetch_result));
246 249
247 FetchCallback fetch_callback = fetch_callback_; 250 FetchCallback fetch_callback = fetch_callback_;
248 scoped_refptr<ServiceWorkerVersion> version = version_; 251 scoped_refptr<ServiceWorkerVersion> version = version_;
249 fetch_callback.Run(status, fetch_result, response, version); 252 fetch_callback.Run(status, fetch_result, response, version);
250 } 253 }
251 254
252 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() 255 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType()
253 const { 256 const {
254 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) 257 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH)
255 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; 258 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH;
256 return ResourceTypeToEventType(resource_type_); 259 return ResourceTypeToEventType(resource_type_);
257 } 260 }
258 261
259 } // namespace content 262 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/media_internals_proxy.cc ('k') | content/browser/service_worker/service_worker_url_request_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698