1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #include "config.h"
32 #include "InspectorInstrumentation.h"
33
34 #if ENABLE(INSPECTOR)
35
36 #include "DOMWindow.h"
37 #include "Database.h"
38 #include "DocumentLoader.h"
39 #include "Event.h"
40 #include "EventContext.h"
41 #include "InspectorAgent.h"
42 #include "InspectorApplicationCacheAgent.h"
43 #include "InspectorBrowserDebuggerAgent.h"
44 #include "InspectorCSSAgent.h"
45 #include "InspectorConsoleAgent.h"
46 #include "InspectorDatabaseAgent.h"
47 #include "InspectorDOMAgent.h"
48 #include "InspectorDOMStorageAgent.h"
49 #include "InspectorDebuggerAgent.h"
50 #include "InspectorPageAgent.h"
51 #include "InspectorProfilerAgent.h"
52 #include "InspectorResourceAgent.h"
53 #include "InspectorTimelineAgent.h"
54 #include "InstrumentingAgents.h"
55 #include "ScriptArguments.h"
56 #include "ScriptCallStack.h"
57 #include "XMLHttpRequest.h"
58 #include <wtf/text/CString.h>
59
60 namespace WebCore {
61
62 static const char* const listenerEventCategoryType = "listener";
63 static const char* const instrumentationEventCategoryType = "instrumentation";
64
65 static const char* const setTimerEventName = "setTimer";
66 static const char* const clearTimerEventName = "clearTimer";
67 static const char* const timerFiredEventName = "timerFired";
68
inspectorAgents()69 HashMap<Page*, InspectorAgent*>& InspectorInstrumentation::inspectorAgents()
70 {
71 static HashMap<Page*, InspectorAgent*>& agents = *new HashMap<Page*, InspectorAgent*>;
72 return agents;
73 }
74
75 int InspectorInstrumentation::s_frontendCounter = 0;
76
eventHasListeners(const AtomicString & eventType,DOMWindow * window,Node * node,const Vector<EventContext> & ancestors)77 static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
78 {
79 if (window && window->hasEventListeners(eventType))
80 return true;
81
82 if (node->hasEventListeners(eventType))
83 return true;
84
85 for (size_t i = 0; i < ancestors.size(); i++) {
86 Node* ancestor = ancestors[i].node();
87 if (ancestor->hasEventListeners(eventType))
88 return true;
89 }
90
91 return false;
92 }
93
didClearWindowObjectInWorldImpl(InspectorAgent * inspectorAgent,Frame * frame,DOMWrapperWorld * world)94 void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InspectorAgent* inspectorAgent, Frame* frame, DOMWrapperWorld* world)
95 {
96 if (InspectorPageAgent* pageAgent = inspectorAgent->instrumentingAgents()->inspectorPageAgent())
97 pageAgent->didClearWindowObjectInWorld(frame, world);
98 inspectorAgent->didClearWindowObjectInWorld(frame, world);
99 }
100
inspectedPageDestroyedImpl(InspectorAgent * inspectorAgent)101 void InspectorInstrumentation::inspectedPageDestroyedImpl(InspectorAgent* inspectorAgent)
102 {
103 inspectorAgent->inspectedPageDestroyed();
104 }
105
willInsertDOMNodeImpl(InspectorAgent * inspectorAgent,Node * node,Node * parent)106 void InspectorInstrumentation::willInsertDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node, Node* parent)
107 {
108 #if ENABLE(JAVASCRIPT_DEBUGGER)
109 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
110 browserDebuggerAgent->willInsertDOMNode(node, parent);
111 #endif
112 }
113
didInsertDOMNodeImpl(InspectorAgent * inspectorAgent,Node * node)114 void InspectorInstrumentation::didInsertDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
115 {
116 if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
117 domAgent->didInsertDOMNode(node);
118 #if ENABLE(JAVASCRIPT_DEBUGGER)
119 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
120 browserDebuggerAgent->didInsertDOMNode(node);
121 #endif
122 }
123
willRemoveDOMNodeImpl(InspectorAgent * inspectorAgent,Node * node)124 void InspectorInstrumentation::willRemoveDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
125 {
126 #if ENABLE(JAVASCRIPT_DEBUGGER)
127 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
128 browserDebuggerAgent->willRemoveDOMNode(node);
129 #endif
130 }
131
didRemoveDOMNodeImpl(InspectorAgent * inspectorAgent,Node * node)132 void InspectorInstrumentation::didRemoveDOMNodeImpl(InspectorAgent* inspectorAgent, Node* node)
133 {
134 #if ENABLE(JAVASCRIPT_DEBUGGER)
135 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
136 browserDebuggerAgent->didRemoveDOMNode(node);
137 #endif
138 if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
139 domAgent->didRemoveDOMNode(node);
140 }
141
willModifyDOMAttrImpl(InspectorAgent * inspectorAgent,Element * element)142 void InspectorInstrumentation::willModifyDOMAttrImpl(InspectorAgent* inspectorAgent, Element* element)
143 {
144 #if ENABLE(JAVASCRIPT_DEBUGGER)
145 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
146 browserDebuggerAgent->willModifyDOMAttr(element);
147 #endif
148 }
149
didModifyDOMAttrImpl(InspectorAgent * inspectorAgent,Element * element)150 void InspectorInstrumentation::didModifyDOMAttrImpl(InspectorAgent* inspectorAgent, Element* element)
151 {
152 if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
153 domAgent->didModifyDOMAttr(element);
154 }
155
didInvalidateStyleAttrImpl(InspectorAgent * inspectorAgent,Node * node)156 void InspectorInstrumentation::didInvalidateStyleAttrImpl(InspectorAgent* inspectorAgent, Node* node)
157 {
158 if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
159 domAgent->didInvalidateStyleAttr(node);
160 }
161
mouseDidMoveOverElementImpl(InspectorAgent * inspectorAgent,const HitTestResult & result,unsigned modifierFlags)162 void InspectorInstrumentation::mouseDidMoveOverElementImpl(InspectorAgent* inspectorAgent, const HitTestResult& result, unsigned modifierFlags)
163 {
164 if (InspectorDOMAgent* domAgent = inspectorAgent->instrumentingAgents()->inspectorDOMAgent())
165 domAgent->mouseDidMoveOverElement(result, modifierFlags);
166 }
167
handleMousePressImpl(InspectorAgent * inspectorAgent)168 bool InspectorInstrumentation::handleMousePressImpl(InspectorAgent* inspectorAgent)
169 {
170 if (InspectorDOMAgent* domAgent = inspectorAgent->instrumentingAgents()->inspectorDOMAgent())
171 return domAgent->handleMousePress();
172 return false;
173 }
174
characterDataModifiedImpl(InspectorAgent * inspectorAgent,CharacterData * characterData)175 void InspectorInstrumentation::characterDataModifiedImpl(InspectorAgent* inspectorAgent, CharacterData* characterData)
176 {
177 if (InspectorDOMAgent* domAgent = inspectorAgent->domAgent())
178 domAgent->characterDataModified(characterData);
179 }
180
willSendXMLHttpRequestImpl(InspectorAgent * inspectorAgent,const String & url)181 void InspectorInstrumentation::willSendXMLHttpRequestImpl(InspectorAgent* inspectorAgent, const String& url)
182 {
183 #if ENABLE(JAVASCRIPT_DEBUGGER)
184 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
185 browserDebuggerAgent->willSendXMLHttpRequest(url);
186 #endif
187 }
188
didScheduleResourceRequestImpl(InspectorAgent * inspectorAgent,const String & url)189 void InspectorInstrumentation::didScheduleResourceRequestImpl(InspectorAgent* inspectorAgent, const String& url)
190 {
191 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
192 timelineAgent->didScheduleResourceRequest(url);
193 }
194
didInstallTimerImpl(InspectorAgent * inspectorAgent,int timerId,int timeout,bool singleShot)195 void InspectorInstrumentation::didInstallTimerImpl(InspectorAgent* inspectorAgent, int timerId, int timeout, bool singleShot)
196 {
197 pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, setTimerEventName, true);
198 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
199 timelineAgent->didInstallTimer(timerId, timeout, singleShot);
200 }
201
didRemoveTimerImpl(InspectorAgent * inspectorAgent,int timerId)202 void InspectorInstrumentation::didRemoveTimerImpl(InspectorAgent* inspectorAgent, int timerId)
203 {
204 pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, clearTimerEventName, true);
205 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
206 timelineAgent->didRemoveTimer(timerId);
207 }
208
willCallFunctionImpl(InspectorAgent * inspectorAgent,const String & scriptName,int scriptLine)209 InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InspectorAgent* inspectorAgent, const String& scriptName, int scriptLine)
210 {
211 int timelineAgentId = 0;
212 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
213 if (timelineAgent) {
214 timelineAgent->willCallFunction(scriptName, scriptLine);
215 timelineAgentId = timelineAgent->id();
216 }
217 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
218 }
219
didCallFunctionImpl(const InspectorInstrumentationCookie & cookie)220 void InspectorInstrumentation::didCallFunctionImpl(const InspectorInstrumentationCookie& cookie)
221 {
222 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
223 timelineAgent->didCallFunction();
224 }
225
willChangeXHRReadyStateImpl(InspectorAgent * inspectorAgent,XMLHttpRequest * request)226 InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyStateImpl(InspectorAgent* inspectorAgent, XMLHttpRequest* request)
227 {
228 int timelineAgentId = 0;
229 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
230 if (timelineAgent && request->hasEventListeners(eventNames().readystatechangeEvent)) {
231 timelineAgent->willChangeXHRReadyState(request->url().string(), request->readyState());
232 timelineAgentId = timelineAgent->id();
233 }
234 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
235 }
236
didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie & cookie)237 void InspectorInstrumentation::didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie& cookie)
238 {
239 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
240 timelineAgent->didChangeXHRReadyState();
241 }
242
willDispatchEventImpl(InspectorAgent * inspectorAgent,const Event & event,DOMWindow * window,Node * node,const Vector<EventContext> & ancestors)243 InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorAgent* inspectorAgent, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
244 {
245 pauseOnNativeEventIfNeeded(inspectorAgent, listenerEventCategoryType, event.type(), false);
246
247 int timelineAgentId = 0;
248 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
249 if (timelineAgent && eventHasListeners(event.type(), window, node, ancestors)) {
250 timelineAgent->willDispatchEvent(event);
251 timelineAgentId = timelineAgent->id();
252 }
253 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
254 }
255
didDispatchEventImpl(const InspectorInstrumentationCookie & cookie)256 void InspectorInstrumentation::didDispatchEventImpl(const InspectorInstrumentationCookie& cookie)
257 {
258 cancelPauseOnNativeEvent(cookie.first);
259
260 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
261 timelineAgent->didDispatchEvent();
262 }
263
willDispatchEventOnWindowImpl(InspectorAgent * inspectorAgent,const Event & event,DOMWindow * window)264 InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InspectorAgent* inspectorAgent, const Event& event, DOMWindow* window)
265 {
266 pauseOnNativeEventIfNeeded(inspectorAgent, listenerEventCategoryType, event.type(), false);
267
268 int timelineAgentId = 0;
269 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
270 if (timelineAgent && window->hasEventListeners(event.type())) {
271 timelineAgent->willDispatchEvent(event);
272 timelineAgentId = timelineAgent->id();
273 }
274 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
275 }
276
didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie & cookie)277 void InspectorInstrumentation::didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie& cookie)
278 {
279 cancelPauseOnNativeEvent(cookie.first);
280
281 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
282 timelineAgent->didDispatchEvent();
283 }
284
willEvaluateScriptImpl(InspectorAgent * inspectorAgent,const String & url,int lineNumber)285 InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScriptImpl(InspectorAgent* inspectorAgent, const String& url, int lineNumber)
286 {
287 int timelineAgentId = 0;
288 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
289 if (timelineAgent) {
290 timelineAgent->willEvaluateScript(url, lineNumber);
291 timelineAgentId = timelineAgent->id();
292 }
293 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
294 }
295
didEvaluateScriptImpl(const InspectorInstrumentationCookie & cookie)296 void InspectorInstrumentation::didEvaluateScriptImpl(const InspectorInstrumentationCookie& cookie)
297 {
298 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
299 timelineAgent->didEvaluateScript();
300 }
301
willFireTimerImpl(InspectorAgent * inspectorAgent,int timerId)302 InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InspectorAgent* inspectorAgent, int timerId)
303 {
304 pauseOnNativeEventIfNeeded(inspectorAgent, instrumentationEventCategoryType, timerFiredEventName, false);
305
306 int timelineAgentId = 0;
307 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
308 if (timelineAgent) {
309 timelineAgent->willFireTimer(timerId);
310 timelineAgentId = timelineAgent->id();
311 }
312 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
313 }
314
didFireTimerImpl(const InspectorInstrumentationCookie & cookie)315 void InspectorInstrumentation::didFireTimerImpl(const InspectorInstrumentationCookie& cookie)
316 {
317 cancelPauseOnNativeEvent(cookie.first);
318
319 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
320 timelineAgent->didFireTimer();
321 }
322
willLayoutImpl(InspectorAgent * inspectorAgent)323 InspectorInstrumentationCookie InspectorInstrumentation::willLayoutImpl(InspectorAgent* inspectorAgent)
324 {
325 int timelineAgentId = 0;
326 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
327 if (timelineAgent) {
328 timelineAgent->willLayout();
329 timelineAgentId = timelineAgent->id();
330 }
331 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
332 }
333
didLayoutImpl(const InspectorInstrumentationCookie & cookie)334 void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCookie& cookie)
335 {
336 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
337 timelineAgent->didLayout();
338 }
339
willLoadXHRImpl(InspectorAgent * inspectorAgent,XMLHttpRequest * request)340 InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHRImpl(InspectorAgent* inspectorAgent, XMLHttpRequest* request)
341 {
342 int timelineAgentId = 0;
343 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
344 if (timelineAgent && request->hasEventListeners(eventNames().loadEvent)) {
345 timelineAgent->willLoadXHR(request->url());
346 timelineAgentId = timelineAgent->id();
347 }
348 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
349 }
350
didLoadXHRImpl(const InspectorInstrumentationCookie & cookie)351 void InspectorInstrumentation::didLoadXHRImpl(const InspectorInstrumentationCookie& cookie)
352 {
353 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
354 timelineAgent->didLoadXHR();
355 }
356
willPaintImpl(InspectorAgent * inspectorAgent,const IntRect & rect)357 InspectorInstrumentationCookie InspectorInstrumentation::willPaintImpl(InspectorAgent* inspectorAgent, const IntRect& rect)
358 {
359 int timelineAgentId = 0;
360 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
361 if (timelineAgent) {
362 timelineAgent->willPaint(rect);
363 timelineAgentId = timelineAgent->id();
364 }
365 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
366 }
367
didPaintImpl(const InspectorInstrumentationCookie & cookie)368 void InspectorInstrumentation::didPaintImpl(const InspectorInstrumentationCookie& cookie)
369 {
370 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
371 timelineAgent->didPaint();
372 }
373
willRecalculateStyleImpl(InspectorAgent * inspectorAgent)374 InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyleImpl(InspectorAgent* inspectorAgent)
375 {
376 int timelineAgentId = 0;
377 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
378 if (timelineAgent) {
379 timelineAgent->willRecalculateStyle();
380 timelineAgentId = timelineAgent->id();
381 }
382 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
383 }
384
didRecalculateStyleImpl(const InspectorInstrumentationCookie & cookie)385 void InspectorInstrumentation::didRecalculateStyleImpl(const InspectorInstrumentationCookie& cookie)
386 {
387 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
388 timelineAgent->didRecalculateStyle();
389 }
390
applyUserAgentOverrideImpl(InspectorAgent * inspectorAgent,String * userAgent)391 void InspectorInstrumentation::applyUserAgentOverrideImpl(InspectorAgent* inspectorAgent, String* userAgent)
392 {
393 if (InspectorPageAgent* pageAgent = retrievePageAgent(inspectorAgent))
394 pageAgent->applyUserAgentOverride(userAgent);
395 }
396
willSendRequestImpl(InspectorAgent * inspectorAgent,unsigned long identifier,DocumentLoader * loader,ResourceRequest & request,const ResourceResponse & redirectResponse)397 void InspectorInstrumentation::willSendRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse)
398 {
399 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
400 timelineAgent->willSendResourceRequest(identifier, request);
401 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
402 resourceAgent->willSendRequest(identifier, loader, request, redirectResponse);
403 }
404
markResourceAsCachedImpl(InspectorAgent * inspectorAgent,unsigned long identifier)405 void InspectorInstrumentation::markResourceAsCachedImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
406 {
407 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
408 resourceAgent->markResourceAsCached(identifier);
409 }
410
didLoadResourceFromMemoryCacheImpl(InspectorAgent * inspectorAgent,DocumentLoader * loader,const CachedResource * cachedResource)411 void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InspectorAgent* inspectorAgent, DocumentLoader* loader, const CachedResource* cachedResource)
412 {
413 if (!inspectorAgent->enabled())
414 return;
415 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
416 resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource);
417 }
418
willReceiveResourceDataImpl(InspectorAgent * inspectorAgent,unsigned long identifier)419 InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceDataImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
420 {
421 int timelineAgentId = 0;
422 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
423 if (timelineAgent) {
424 timelineAgent->willReceiveResourceData(identifier);
425 timelineAgentId = timelineAgent->id();
426 }
427 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
428 }
429
didReceiveResourceDataImpl(const InspectorInstrumentationCookie & cookie)430 void InspectorInstrumentation::didReceiveResourceDataImpl(const InspectorInstrumentationCookie& cookie)
431 {
432 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
433 timelineAgent->didReceiveResourceData();
434 }
435
willReceiveResourceResponseImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const ResourceResponse & response)436 InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponseImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const ResourceResponse& response)
437 {
438 int timelineAgentId = 0;
439 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
440 if (timelineAgent) {
441 timelineAgent->willReceiveResourceResponse(identifier, response);
442 timelineAgentId = timelineAgent->id();
443 }
444 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
445 }
446
didReceiveResourceResponseImpl(const InspectorInstrumentationCookie & cookie,unsigned long identifier,DocumentLoader * loader,const ResourceResponse & response)447 void InspectorInstrumentation::didReceiveResourceResponseImpl(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response)
448 {
449 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
450 timelineAgent->didReceiveResourceResponse();
451 if (!loader)
452 return;
453 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(loader->frame())) {
454 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
455 resourceAgent->didReceiveResponse(identifier, loader, response);
456 inspectorAgent->consoleAgent()->didReceiveResponse(identifier, response); // This should come AFTER resource notification, front-end relies on this.
457 }
458 }
459
didReceiveResourceResponseButCanceledImpl(Frame * frame,DocumentLoader * loader,unsigned long identifier,const ResourceResponse & r)460 void InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
461 {
462 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(frame, identifier, r);
463 InspectorInstrumentation::didReceiveResourceResponse(cookie, identifier, loader, r);
464 }
465
continueAfterXFrameOptionsDeniedImpl(Frame * frame,DocumentLoader * loader,unsigned long identifier,const ResourceResponse & r)466 void InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
467 {
468 didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r);
469 }
470
continueWithPolicyDownloadImpl(Frame * frame,DocumentLoader * loader,unsigned long identifier,const ResourceResponse & r)471 void InspectorInstrumentation::continueWithPolicyDownloadImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
472 {
473 didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r);
474 }
475
continueWithPolicyIgnoreImpl(Frame * frame,DocumentLoader * loader,unsigned long identifier,const ResourceResponse & r)476 void InspectorInstrumentation::continueWithPolicyIgnoreImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
477 {
478 didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r);
479 }
480
didReceiveContentLengthImpl(InspectorAgent * inspectorAgent,unsigned long identifier,int dataLength,int encodedDataLength)481 void InspectorInstrumentation::didReceiveContentLengthImpl(InspectorAgent* inspectorAgent, unsigned long identifier, int dataLength, int encodedDataLength)
482 {
483 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
484 resourceAgent->didReceiveContentLength(identifier, dataLength, encodedDataLength);
485 }
486
didFinishLoadingImpl(InspectorAgent * inspectorAgent,unsigned long identifier,double finishTime)487 void InspectorInstrumentation::didFinishLoadingImpl(InspectorAgent* inspectorAgent, unsigned long identifier, double finishTime)
488 {
489 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
490 timelineAgent->didFinishLoadingResource(identifier, false, finishTime);
491 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
492 resourceAgent->didFinishLoading(identifier, finishTime);
493 }
494
didFailLoadingImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const ResourceError & error)495 void InspectorInstrumentation::didFailLoadingImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const ResourceError& error)
496 {
497 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent))
498 timelineAgent->didFinishLoadingResource(identifier, true, 0);
499 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
500 resourceAgent->didFailLoading(identifier, error);
501 inspectorAgent->consoleAgent()->didFailLoading(identifier, error); // This should come AFTER resource notification, front-end relies on this.
502 }
503
resourceRetrievedByXMLHttpRequestImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const String & sourceString,const String & url,const String & sendURL,unsigned sendLineNumber)504 void InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
505 {
506 inspectorAgent->consoleAgent()->resourceRetrievedByXMLHttpRequest(url, sendURL, sendLineNumber);
507 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
508 resourceAgent->setInitialXHRContent(identifier, sourceString);
509 }
510
scriptImportedImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const String & sourceString)511 void InspectorInstrumentation::scriptImportedImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const String& sourceString)
512 {
513 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
514 resourceAgent->setInitialScriptContent(identifier, sourceString);
515 }
516
domContentLoadedEventFiredImpl(InspectorAgent * inspectorAgent,Frame * frame,const KURL & url)517 void InspectorInstrumentation::domContentLoadedEventFiredImpl(InspectorAgent* inspectorAgent, Frame* frame, const KURL& url)
518 {
519 DocumentLoader* documentLoader = frame->loader()->documentLoader();
520 ASSERT(documentLoader);
521
522 if (frame->page()->mainFrame() != frame || url != documentLoader->requestURL())
523 return;
524
525 inspectorAgent->domContentLoadedEventFired();
526
527 if (InspectorDOMAgent* domAgent = inspectorAgent->instrumentingAgents()->inspectorDOMAgent())
528 domAgent->mainFrameDOMContentLoaded();
529
530 if (InspectorTimelineAgent* timelineAgent = inspectorAgent->instrumentingAgents()->inspectorTimelineAgent())
531 timelineAgent->didMarkDOMContentEvent();
532
533 if (InspectorResourceAgent* resourceAgent = inspectorAgent->instrumentingAgents()->inspectorResourceAgent())
534 resourceAgent->domContentEventFired();
535
536 if (InspectorPageAgent* pageAgent = inspectorAgent->instrumentingAgents()->inspectorPageAgent())
537 pageAgent->domContentEventFired();
538 }
539
loadEventFiredImpl(InspectorAgent * inspectorAgent,Frame * frame,const KURL & url)540 void InspectorInstrumentation::loadEventFiredImpl(InspectorAgent* inspectorAgent, Frame* frame, const KURL& url)
541 {
542 DocumentLoader* documentLoader = frame->loader()->documentLoader();
543 ASSERT(documentLoader);
544
545 if (InspectorDOMAgent* domAgent = inspectorAgent->instrumentingAgents()->inspectorDOMAgent())
546 domAgent->loadEventFired(documentLoader->frame()->document());
547
548 if (frame->page()->mainFrame() != frame || url != documentLoader->requestURL())
549 return;
550
551 if (InspectorTimelineAgent* timelineAgent = inspectorAgent->instrumentingAgents()->inspectorTimelineAgent())
552 timelineAgent->didMarkLoadEvent();
553
554 if (InspectorResourceAgent* resourceAgent = inspectorAgent->instrumentingAgents()->inspectorResourceAgent())
555 resourceAgent->loadEventFired();
556
557 if (InspectorPageAgent* pageAgent = inspectorAgent->instrumentingAgents()->inspectorPageAgent())
558 pageAgent->loadEventFired();
559 }
560
frameDetachedFromParentImpl(InspectorAgent * inspectorAgent,Frame * frame)561 void InspectorInstrumentation::frameDetachedFromParentImpl(InspectorAgent* inspectorAgent, Frame* frame)
562 {
563 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
564 resourceAgent->frameDetachedFromParent(frame);
565 }
566
didCommitLoadImpl(Page * page,InspectorAgent * inspectorAgent,DocumentLoader * loader)567 void InspectorInstrumentation::didCommitLoadImpl(Page* page, InspectorAgent* inspectorAgent, DocumentLoader* loader)
568 {
569 if (!inspectorAgent->enabled())
570 return;
571
572 InstrumentingAgents* instrumentingAgents = inspectorAgent->instrumentingAgents();
573 if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent())
574 resourceAgent->didCommitLoad(loader);
575
576 Frame* mainFrame = page->mainFrame();
577 if (loader->frame() != mainFrame)
578 return;
579
580 if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent())
581 consoleAgent->reset();
582 #if ENABLE(JAVASCRIPT_DEBUGGER)
583 if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) {
584 KURL url = inspectorAgent->inspectedURLWithoutFragment();
585 debuggerAgent->inspectedURLChanged(url);
586 }
587 #endif
588 #if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
589 if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) {
590 profilerAgent->stopUserInitiatedProfiling(true);
591 profilerAgent->resetState();
592 }
593 #endif
594 if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent())
595 cssAgent->reset();
596 #if ENABLE(DATABASE)
597 if (InspectorDatabaseAgent* databaseAgent = instrumentingAgents->inspectorDatabaseAgent())
598 databaseAgent->clearResources();
599 #endif
600 #if ENABLE(DOM_STORAGE)
601 if (InspectorDOMStorageAgent* domStorageAgent = instrumentingAgents->inspectorDOMStorageAgent())
602 domStorageAgent->clearResources();
603 #endif
604 if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent())
605 domAgent->setDocument(mainFrame->document());
606
607 if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent())
608 pageAgent->inspectedURLChanged(loader->url().string());
609
610 inspectorAgent->didCommitLoad();
611 }
612
willWriteHTMLImpl(InspectorAgent * inspectorAgent,unsigned int length,unsigned int startLine)613 InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTMLImpl(InspectorAgent* inspectorAgent, unsigned int length, unsigned int startLine)
614 {
615 int timelineAgentId = 0;
616 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent);
617 if (timelineAgent) {
618 timelineAgent->willWriteHTML(length, startLine);
619 timelineAgentId = timelineAgent->id();
620 }
621 return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId);
622 }
623
didWriteHTMLImpl(const InspectorInstrumentationCookie & cookie,unsigned int endLine)624 void InspectorInstrumentation::didWriteHTMLImpl(const InspectorInstrumentationCookie& cookie, unsigned int endLine)
625 {
626 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie))
627 timelineAgent->didWriteHTML(endLine);
628 }
629
addMessageToConsoleImpl(InspectorAgent * inspectorAgent,MessageSource source,MessageType type,MessageLevel level,const String & message,PassRefPtr<ScriptArguments> arguments,PassRefPtr<ScriptCallStack> callStack)630 void InspectorInstrumentation::addMessageToConsoleImpl(InspectorAgent* inspectorAgent, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack)
631 {
632 inspectorAgent->consoleAgent()->addMessageToConsole(source, type, level, message, arguments, callStack);
633 }
634
addMessageToConsoleImpl(InspectorAgent * inspectorAgent,MessageSource source,MessageType type,MessageLevel level,const String & message,unsigned lineNumber,const String & sourceID)635 void InspectorInstrumentation::addMessageToConsoleImpl(InspectorAgent* inspectorAgent, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
636 {
637 inspectorAgent->consoleAgent()->addMessageToConsole(source, type, level, message, lineNumber, sourceID);
638 }
639
consoleCountImpl(InspectorAgent * inspectorAgent,PassRefPtr<ScriptArguments> arguments,PassRefPtr<ScriptCallStack> stack)640 void InspectorInstrumentation::consoleCountImpl(InspectorAgent* inspectorAgent, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> stack)
641 {
642 inspectorAgent->consoleAgent()->count(arguments, stack);
643 }
644
startConsoleTimingImpl(InspectorAgent * inspectorAgent,const String & title)645 void InspectorInstrumentation::startConsoleTimingImpl(InspectorAgent* inspectorAgent, const String& title)
646 {
647 inspectorAgent->consoleAgent()->startTiming(title);
648 }
649
stopConsoleTimingImpl(InspectorAgent * inspectorAgent,const String & title,PassRefPtr<ScriptCallStack> stack)650 void InspectorInstrumentation::stopConsoleTimingImpl(InspectorAgent* inspectorAgent, const String& title, PassRefPtr<ScriptCallStack> stack)
651 {
652 inspectorAgent->consoleAgent()->stopTiming(title, stack);
653 }
654
consoleMarkTimelineImpl(InspectorAgent * inspectorAgent,PassRefPtr<ScriptArguments> arguments)655 void InspectorInstrumentation::consoleMarkTimelineImpl(InspectorAgent* inspectorAgent, PassRefPtr<ScriptArguments> arguments)
656 {
657 if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent)) {
658 String message;
659 arguments->getFirstArgumentAsString(message);
660 timelineAgent->didMarkTimeline(message);
661 }
662 }
663
664 #if ENABLE(JAVASCRIPT_DEBUGGER)
addStartProfilingMessageToConsoleImpl(InspectorAgent * inspectorAgent,const String & title,unsigned lineNumber,const String & sourceURL)665 void InspectorInstrumentation::addStartProfilingMessageToConsoleImpl(InspectorAgent* inspectorAgent, const String& title, unsigned lineNumber, const String& sourceURL)
666 {
667 if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent())
668 profilerAgent->addStartProfilingMessageToConsole(title, lineNumber, sourceURL);
669 }
670
addProfileImpl(InspectorAgent * inspectorAgent,RefPtr<ScriptProfile> profile,PassRefPtr<ScriptCallStack> callStack)671 void InspectorInstrumentation::addProfileImpl(InspectorAgent* inspectorAgent, RefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack)
672 {
673 if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent()) {
674 const ScriptCallFrame& lastCaller = callStack->at(0);
675 profilerAgent->addProfile(profile, lastCaller.lineNumber(), lastCaller.sourceURL());
676 }
677 }
678
getCurrentUserInitiatedProfileNameImpl(InspectorAgent * inspectorAgent,bool incrementProfileNumber)679 String InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(InspectorAgent* inspectorAgent, bool incrementProfileNumber)
680 {
681 if (InspectorProfilerAgent* profilerAgent = inspectorAgent->profilerAgent())
682 return profilerAgent->getCurrentUserInitiatedProfileName(incrementProfileNumber);
683 return "";
684 }
685
profilerEnabledImpl(InspectorAgent * inspectorAgent)686 bool InspectorInstrumentation::profilerEnabledImpl(InspectorAgent* inspectorAgent)
687 {
688 return inspectorAgent->instrumentingAgents()->inspectorProfilerAgent()->enabled();
689 }
690 #endif
691
692 #if ENABLE(DATABASE)
didOpenDatabaseImpl(InspectorAgent * inspectorAgent,PassRefPtr<Database> database,const String & domain,const String & name,const String & version)693 void InspectorInstrumentation::didOpenDatabaseImpl(InspectorAgent* inspectorAgent, PassRefPtr<Database> database, const String& domain, const String& name, const String& version)
694 {
695 if (!inspectorAgent->enabled())
696 return;
697 if (InspectorDatabaseAgent* dbAgent = inspectorAgent->instrumentingAgents()->inspectorDatabaseAgent())
698 dbAgent->didOpenDatabase(database, domain, name, version);
699 }
700 #endif
701
702 #if ENABLE(DOM_STORAGE)
didUseDOMStorageImpl(InspectorAgent * inspectorAgent,StorageArea * storageArea,bool isLocalStorage,Frame * frame)703 void InspectorInstrumentation::didUseDOMStorageImpl(InspectorAgent* inspectorAgent, StorageArea* storageArea, bool isLocalStorage, Frame* frame)
704 {
705 if (!inspectorAgent->enabled())
706 return;
707 if (InspectorDOMStorageAgent* domStorageAgent = inspectorAgent->instrumentingAgents()->inspectorDOMStorageAgent())
708 domStorageAgent->didUseDOMStorage(storageArea, isLocalStorage, frame);
709 }
710 #endif
711
712 #if ENABLE(WORKERS)
didCreateWorkerImpl(InspectorAgent * inspectorAgent,intptr_t id,const String & url,bool isSharedWorker)713 void InspectorInstrumentation::didCreateWorkerImpl(InspectorAgent* inspectorAgent, intptr_t id, const String& url, bool isSharedWorker)
714 {
715 inspectorAgent->didCreateWorker(id, url, isSharedWorker);
716 }
717
didDestroyWorkerImpl(InspectorAgent * inspectorAgent,intptr_t id)718 void InspectorInstrumentation::didDestroyWorkerImpl(InspectorAgent* inspectorAgent, intptr_t id)
719 {
720 inspectorAgent->didDestroyWorker(id);
721 }
722 #endif
723
724 #if ENABLE(WEB_SOCKETS)
didCreateWebSocketImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const KURL & requestURL,const KURL &)725 void InspectorInstrumentation::didCreateWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const KURL& requestURL, const KURL&)
726 {
727 if (!inspectorAgent->enabled())
728 return;
729 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
730 resourceAgent->didCreateWebSocket(identifier, requestURL);
731 }
732
willSendWebSocketHandshakeRequestImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const WebSocketHandshakeRequest & request)733 void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeRequest& request)
734 {
735 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
736 resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
737 }
738
didReceiveWebSocketHandshakeResponseImpl(InspectorAgent * inspectorAgent,unsigned long identifier,const WebSocketHandshakeResponse & response)739 void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeResponse& response)
740 {
741 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
742 resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
743 }
744
didCloseWebSocketImpl(InspectorAgent * inspectorAgent,unsigned long identifier)745 void InspectorInstrumentation::didCloseWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
746 {
747 if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
748 resourceAgent->didCloseWebSocket(identifier);
749 }
750 #endif
751
752 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
networkStateChangedImpl(InspectorAgent * inspectorAgent)753 void InspectorInstrumentation::networkStateChangedImpl(InspectorAgent* inspectorAgent)
754 {
755 if (InspectorApplicationCacheAgent* applicationCacheAgent = inspectorAgent->instrumentingAgents()->inspectorApplicationCacheAgent())
756 applicationCacheAgent->networkStateChanged();
757 }
758
updateApplicationCacheStatusImpl(InspectorAgent * inspectorAgent,Frame * frame)759 void InspectorInstrumentation::updateApplicationCacheStatusImpl(InspectorAgent* inspectorAgent, Frame* frame)
760 {
761 if (InspectorApplicationCacheAgent* applicationCacheAgent = inspectorAgent->instrumentingAgents()->inspectorApplicationCacheAgent())
762 applicationCacheAgent->updateApplicationCacheStatus(frame);
763 }
764 #endif
765
hasFrontend(InspectorAgent * inspectorAgent)766 bool InspectorInstrumentation::hasFrontend(InspectorAgent* inspectorAgent)
767 {
768 return inspectorAgent->hasFrontend();
769 }
770
pauseOnNativeEventIfNeeded(InspectorAgent * inspectorAgent,const String & categoryType,const String & eventName,bool synchronous)771 void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InspectorAgent* inspectorAgent, const String& categoryType, const String& eventName, bool synchronous)
772 {
773 #if ENABLE(JAVASCRIPT_DEBUGGER)
774 if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorAgent->instrumentingAgents()->inspectorBrowserDebuggerAgent())
775 browserDebuggerAgent->pauseOnNativeEventIfNeeded(categoryType, eventName, synchronous);
776 #endif
777 }
778
cancelPauseOnNativeEvent(InspectorAgent * inspectorAgent)779 void InspectorInstrumentation::cancelPauseOnNativeEvent(InspectorAgent* inspectorAgent)
780 {
781 #if ENABLE(JAVASCRIPT_DEBUGGER)
782 if (InspectorDebuggerAgent* debuggerAgent = inspectorAgent->debuggerAgent())
783 debuggerAgent->cancelPauseOnNextStatement();
784 #endif
785 }
786
retrieveTimelineAgent(InspectorAgent * inspectorAgent)787 InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(InspectorAgent* inspectorAgent)
788 {
789 return inspectorAgent->instrumentingAgents()->inspectorTimelineAgent();
790 }
791
retrieveTimelineAgent(const InspectorInstrumentationCookie & cookie)792 InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(const InspectorInstrumentationCookie& cookie)
793 {
794 if (!cookie.first)
795 return 0;
796 InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie.first);
797 if (timelineAgent && timelineAgent->id() == cookie.second)
798 return timelineAgent;
799 return 0;
800 }
801
retrieveResourceAgent(InspectorAgent * inspectorAgent)802 InspectorResourceAgent* InspectorInstrumentation::retrieveResourceAgent(InspectorAgent* inspectorAgent)
803 {
804 return inspectorAgent->instrumentingAgents()->inspectorResourceAgent();
805 }
806
retrievePageAgent(InspectorAgent * inspectorAgent)807 InspectorPageAgent* InspectorInstrumentation::retrievePageAgent(InspectorAgent* inspectorAgent)
808 {
809 return inspectorAgent->instrumentingAgents()->inspectorPageAgent();
810 }
811
812 } // namespace WebCore
813
814 #endif // !ENABLE(INSPECTOR)
815