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

Side by Side Diff: third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp

Issue 2218943002: Introduce ServiceWorker.EventDispatchingDelay UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated mpearson@'s comment 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 "modules/serviceworkers/RespondWithObserver.h" 5 #include "modules/serviceworkers/RespondWithObserver.h"
6 6
7 #include "bindings/core/v8/ScriptFunction.h" 7 #include "bindings/core/v8/ScriptFunction.h"
8 #include "bindings/core/v8/ScriptPromise.h" 8 #include "bindings/core/v8/ScriptPromise.h"
9 #include "bindings/core/v8/ScriptValue.h" 9 #include "bindings/core/v8/ScriptValue.h"
10 #include "bindings/core/v8/V8Binding.h" 10 #include "bindings/core/v8/V8Binding.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 { 154 {
155 ContextLifecycleObserver::contextDestroyed(); 155 ContextLifecycleObserver::contextDestroyed();
156 if (m_observer) { 156 if (m_observer) {
157 DCHECK_EQ(Pending, m_state); 157 DCHECK_EQ(Pending, m_state);
158 m_observer->decrementPendingActivity(); 158 m_observer->decrementPendingActivity();
159 m_observer.clear(); 159 m_observer.clear();
160 } 160 }
161 m_state = Done; 161 m_state = Done;
162 } 162 }
163 163
164 void RespondWithObserver::willDispatchEvent()
165 {
166 m_eventDispatchTime = WTF::currentTime();
167 }
168
164 void RespondWithObserver::didDispatchEvent(DispatchEventResult dispatchResult) 169 void RespondWithObserver::didDispatchEvent(DispatchEventResult dispatchResult)
165 { 170 {
166 ASSERT(getExecutionContext()); 171 ASSERT(getExecutionContext());
167 if (m_state != Initial) 172 if (m_state != Initial)
168 return; 173 return;
169 174
170 if (dispatchResult != DispatchEventResult::NotCanceled) { 175 if (dispatchResult != DispatchEventResult::NotCanceled) {
171 m_observer->incrementPendingActivity(); 176 m_observer->incrementPendingActivity();
172 responseWasRejected(WebServiceWorkerResponseErrorDefaultPrevented); 177 responseWasRejected(WebServiceWorkerResponseErrorDefaultPrevented);
173 return; 178 return;
174 } 179 }
175 180
176 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID); 181 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID, m_eventDispatchTime);
177 m_state = Done; 182 m_state = Done;
178 m_observer.clear(); 183 m_observer.clear();
179 } 184 }
180 185
181 void RespondWithObserver::respondWith(ScriptState* scriptState, ScriptPromise sc riptPromise, ExceptionState& exceptionState) 186 void RespondWithObserver::respondWith(ScriptState* scriptState, ScriptPromise sc riptPromise, ExceptionState& exceptionState)
182 { 187 {
183 if (m_state != Initial) { 188 if (m_state != Initial) {
184 exceptionState.throwDOMException(InvalidStateError, "The fetch event has already been responded to."); 189 exceptionState.throwDOMException(InvalidStateError, "The fetch event has already been responded to.");
185 return; 190 return;
186 } 191 }
187 192
188 m_state = Pending; 193 m_state = Pending;
189 m_observer->incrementPendingActivity(); 194 m_observer->incrementPendingActivity();
190 scriptPromise.then( 195 scriptPromise.then(
191 ThenFunction::createFunction(scriptState, this, ThenFunction::Fulfilled) , 196 ThenFunction::createFunction(scriptState, this, ThenFunction::Fulfilled) ,
192 ThenFunction::createFunction(scriptState, this, ThenFunction::Rejected)) ; 197 ThenFunction::createFunction(scriptState, this, ThenFunction::Rejected)) ;
193 } 198 }
194 199
195 void RespondWithObserver::responseWasRejected(WebServiceWorkerResponseError erro r) 200 void RespondWithObserver::responseWasRejected(WebServiceWorkerResponseError erro r)
196 { 201 {
197 ASSERT(getExecutionContext()); 202 ASSERT(getExecutionContext());
198 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSou rce, WarningMessageLevel, getMessageForResponseError(error, m_requestURL))); 203 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSou rce, WarningMessageLevel, getMessageForResponseError(error, m_requestURL)));
199 204
200 // The default value of WebServiceWorkerResponse's status is 0, which maps 205 // The default value of WebServiceWorkerResponse's status is 0, which maps
201 // to a network error. 206 // to a network error.
202 WebServiceWorkerResponse webResponse; 207 WebServiceWorkerResponse webResponse;
203 webResponse.setError(error); 208 webResponse.setError(error);
204 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID, webResponse); 209 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID, webResponse, m_eventDispatchTime);
205 m_state = Done; 210 m_state = Done;
206 m_observer->decrementPendingActivity(); 211 m_observer->decrementPendingActivity();
207 m_observer.clear(); 212 m_observer.clear();
208 } 213 }
209 214
210 void RespondWithObserver::responseWasFulfilled(const ScriptValue& value) 215 void RespondWithObserver::responseWasFulfilled(const ScriptValue& value)
211 { 216 {
212 ASSERT(getExecutionContext()); 217 ASSERT(getExecutionContext());
213 if (!V8Response::hasInstance(value.v8Value(), toIsolate(getExecutionContext( )))) { 218 if (!V8Response::hasInstance(value.v8Value(), toIsolate(getExecutionContext( )))) {
214 responseWasRejected(WebServiceWorkerResponseErrorNoV8Instance); 219 responseWasRejected(WebServiceWorkerResponseErrorNoV8Instance);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 if (buffer) { 265 if (buffer) {
261 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(Fe tchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); 266 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(Fe tchDataConsumerHandle::Reader::AllowBlobWithInvalidSize);
262 if (blobDataHandle) { 267 if (blobDataHandle) {
263 webResponse.setBlobDataHandle(blobDataHandle); 268 webResponse.setBlobDataHandle(blobDataHandle);
264 } else { 269 } else {
265 Stream* outStream = Stream::create(getExecutionContext(), ""); 270 Stream* outStream = Stream::create(getExecutionContext(), "");
266 webResponse.setStreamURL(outStream->url()); 271 webResponse.setStreamURL(outStream->url());
267 buffer->startLoading(FetchDataLoader::createLoaderAsStream(outStream ), new NoopLoaderClient); 272 buffer->startLoading(FetchDataLoader::createLoaderAsStream(outStream ), new NoopLoaderClient);
268 } 273 }
269 } 274 }
270 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID, webResponse); 275 ServiceWorkerGlobalScopeClient::from(getExecutionContext())->respondToFetchE vent(m_eventID, webResponse, m_eventDispatchTime);
271 m_state = Done; 276 m_state = Done;
272 m_observer->decrementPendingActivity(); 277 m_observer->decrementPendingActivity();
273 m_observer.clear(); 278 m_observer.clear();
274 } 279 }
275 280
276 RespondWithObserver::RespondWithObserver(ExecutionContext* context, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode requestMode, WebURLRequ est::FrameType frameType, WebURLRequest::RequestContext requestContext, WaitUnti lObserver* observer) 281 RespondWithObserver::RespondWithObserver(ExecutionContext* context, int eventID, const KURL& requestURL, WebURLRequest::FetchRequestMode requestMode, WebURLRequ est::FrameType frameType, WebURLRequest::RequestContext requestContext, WaitUnti lObserver* observer)
277 : ContextLifecycleObserver(context) 282 : ContextLifecycleObserver(context)
278 , m_eventID(eventID) 283 , m_eventID(eventID)
279 , m_requestURL(requestURL) 284 , m_requestURL(requestURL)
280 , m_requestMode(requestMode) 285 , m_requestMode(requestMode)
281 , m_frameType(frameType) 286 , m_frameType(frameType)
282 , m_requestContext(requestContext) 287 , m_requestContext(requestContext)
283 , m_state(Initial) 288 , m_state(Initial)
284 , m_observer(observer) 289 , m_observer(observer)
285 { 290 {
286 } 291 }
287 292
288 DEFINE_TRACE(RespondWithObserver) 293 DEFINE_TRACE(RespondWithObserver)
289 { 294 {
290 visitor->trace(m_observer); 295 visitor->trace(m_observer);
291 ContextLifecycleObserver::trace(visitor); 296 ContextLifecycleObserver::trace(visitor);
292 } 297 }
293 298
294 } // namespace blink 299 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698