OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 ASSERT(isEnabled()); | 219 ASSERT(isEnabled()); |
220 if (ExecutionContextData* data = m_executionContextDataMap.get(eventTarget->
executionContext())) | 220 if (ExecutionContextData* data = m_executionContextDataMap.get(eventTarget->
executionContext())) |
221 data->m_eventCallChains.remove(event); | 221 data->m_eventCallChains.remove(event); |
222 } | 222 } |
223 | 223 |
224 void AsyncCallStackTracker::willHandleEvent(EventTarget* eventTarget, Event* eve
nt, EventListener* listener, bool useCapture) | 224 void AsyncCallStackTracker::willHandleEvent(EventTarget* eventTarget, Event* eve
nt, EventListener* listener, bool useCapture) |
225 { | 225 { |
226 ASSERT(eventTarget->executionContext()); | 226 ASSERT(eventTarget->executionContext()); |
227 ASSERT(isEnabled()); | 227 ASSERT(isEnabled()); |
228 if (XMLHttpRequest* xhr = toXmlHttpRequest(eventTarget)) { | 228 if (XMLHttpRequest* xhr = toXmlHttpRequest(eventTarget)) { |
229 willHandleXHREvent(xhr, eventTarget, event); | 229 willHandleXHREvent(xhr, event); |
230 } else { | 230 } else { |
231 ExecutionContext* context = eventTarget->executionContext(); | 231 ExecutionContext* context = eventTarget->executionContext(); |
232 if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 232 if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
233 setCurrentAsyncCallChain(context, data->m_eventCallChains.get(event)
); | 233 setCurrentAsyncCallChain(context, data->m_eventCallChains.get(event)
); |
234 else | 234 else |
235 setCurrentAsyncCallChain(context, nullptr); | 235 setCurrentAsyncCallChain(context, nullptr); |
236 } | 236 } |
237 } | 237 } |
238 | 238 |
239 void AsyncCallStackTracker::willLoadXHR(XMLHttpRequest* xhr, const ScriptValue&
callFrames) | 239 void AsyncCallStackTracker::willLoadXHR(XMLHttpRequest* xhr, const ScriptValue&
callFrames) |
240 { | 240 { |
241 ASSERT(xhr->executionContext()); | 241 ASSERT(xhr->executionContext()); |
242 ASSERT(isEnabled()); | 242 ASSERT(isEnabled()); |
243 if (!validateCallFrames(callFrames)) | 243 if (!validateCallFrames(callFrames)) |
244 return; | 244 return; |
245 ExecutionContextData* data = createContextDataIfNeeded(xhr->executionContext
()); | 245 ExecutionContextData* data = createContextDataIfNeeded(xhr->executionContext
()); |
246 data->m_xhrCallChains.set(xhr, createAsyncCallChain(xhrSendName, callFrames)
); | 246 data->m_xhrCallChains.set(xhr, createAsyncCallChain(xhrSendName, callFrames)
); |
247 } | 247 } |
248 | 248 |
249 void AsyncCallStackTracker::willHandleXHREvent(XMLHttpRequest* xhr, EventTarget*
eventTarget, Event* event) | 249 void AsyncCallStackTracker::didLoadXHR(XMLHttpRequest* xhr) |
| 250 { |
| 251 ASSERT(xhr->executionContext()); |
| 252 ASSERT(isEnabled()); |
| 253 if (ExecutionContextData* data = m_executionContextDataMap.get(xhr->executio
nContext())) |
| 254 data->m_xhrCallChains.remove(xhr); |
| 255 } |
| 256 |
| 257 void AsyncCallStackTracker::willHandleXHREvent(XMLHttpRequest* xhr, Event* event
) |
250 { | 258 { |
251 ExecutionContext* context = xhr->executionContext(); | 259 ExecutionContext* context = xhr->executionContext(); |
252 ASSERT(context); | 260 ASSERT(context); |
253 ASSERT(isEnabled()); | 261 ASSERT(isEnabled()); |
254 if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { | 262 if (ExecutionContextData* data = m_executionContextDataMap.get(context)) |
255 bool isXHRDownload = (xhr == eventTarget); | 263 setCurrentAsyncCallChain(context, data->m_xhrCallChains.get(xhr)); |
256 if (isXHRDownload && event->type() == EventTypeNames::loadend) | 264 else |
257 setCurrentAsyncCallChain(context, data->m_xhrCallChains.take(xhr)); | |
258 else | |
259 setCurrentAsyncCallChain(context, data->m_xhrCallChains.get(xhr)); | |
260 } else { | |
261 setCurrentAsyncCallChain(context, nullptr); | 265 setCurrentAsyncCallChain(context, nullptr); |
262 } | |
263 } | 266 } |
264 | 267 |
265 void AsyncCallStackTracker::didEnqueueMutationRecord(ExecutionContext* context,
MutationObserver* observer, const ScriptValue& callFrames) | 268 void AsyncCallStackTracker::didEnqueueMutationRecord(ExecutionContext* context,
MutationObserver* observer, const ScriptValue& callFrames) |
266 { | 269 { |
267 ASSERT(context); | 270 ASSERT(context); |
268 ASSERT(isEnabled()); | 271 ASSERT(isEnabled()); |
269 if (!validateCallFrames(callFrames)) | 272 if (!validateCallFrames(callFrames)) |
270 return; | 273 return; |
271 ExecutionContextData* data = createContextDataIfNeeded(context); | 274 ExecutionContextData* data = createContextDataIfNeeded(context); |
272 data->m_mutationObserverCallChains.set(observer, createAsyncCallChain(enqueu
eMutationRecordName, callFrames)); | 275 data->m_mutationObserverCallChains.set(observer, createAsyncCallChain(enqueu
eMutationRecordName, callFrames)); |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 { | 421 { |
419 m_currentAsyncCallChain.clear(); | 422 m_currentAsyncCallChain.clear(); |
420 m_nestedAsyncCallCount = 0; | 423 m_nestedAsyncCallCount = 0; |
421 ExecutionContextDataMap copy; | 424 ExecutionContextDataMap copy; |
422 m_executionContextDataMap.swap(copy); | 425 m_executionContextDataMap.swap(copy); |
423 for (ExecutionContextDataMap::const_iterator it = copy.begin(); it != copy.e
nd(); ++it) | 426 for (ExecutionContextDataMap::const_iterator it = copy.begin(); it != copy.e
nd(); ++it) |
424 delete it->value; | 427 delete it->value; |
425 } | 428 } |
426 | 429 |
427 } // namespace WebCore | 430 } // namespace WebCore |
OLD | NEW |