1 /* 2 * Copyright (C) 2010 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 #ifndef InspectorInstrumentation_h 32 #define InspectorInstrumentation_h 33 34 #include "Console.h" 35 #include "Frame.h" 36 #include "Page.h" 37 #include "ScriptExecutionContext.h" 38 #include <wtf/HashMap.h> 39 40 namespace WebCore { 41 42 class CharacterData; 43 class DOMWrapperWorld; 44 class Database; 45 class Document; 46 class Element; 47 class EventContext; 48 class DocumentLoader; 49 class HitTestResult; 50 class InspectorAgent; 51 class InspectorPageAgent; 52 class InspectorResourceAgent; 53 class InspectorTimelineAgent; 54 class KURL; 55 class Node; 56 class ResourceRequest; 57 class ResourceResponse; 58 class ScriptArguments; 59 class ScriptCallStack; 60 class ScriptExecutionContext; 61 class StorageArea; 62 class XMLHttpRequest; 63 64 #if ENABLE(WEB_SOCKETS) 65 class WebSocketHandshakeRequest; 66 class WebSocketHandshakeResponse; 67 #endif 68 69 typedef pair<InspectorAgent*, int> InspectorInstrumentationCookie; 70 71 class InspectorInstrumentation { 72 public: 73 static void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*); 74 static void inspectedPageDestroyed(Page*); 75 76 static void willInsertDOMNode(Document*, Node*, Node* parent); 77 static void didInsertDOMNode(Document*, Node*); 78 static void willRemoveDOMNode(Document*, Node*); 79 static void willModifyDOMAttr(Document*, Element*); 80 static void didModifyDOMAttr(Document*, Element*); 81 static void characterDataModified(Document*, CharacterData*); 82 static void didInvalidateStyleAttr(Document*, Node*); 83 84 static void mouseDidMoveOverElement(Page*, const HitTestResult&, unsigned modifierFlags); 85 static bool handleMousePress(Page*); 86 87 static void willSendXMLHttpRequest(ScriptExecutionContext*, const String& url); 88 static void didScheduleResourceRequest(Document*, const String& url); 89 static void didInstallTimer(ScriptExecutionContext*, int timerId, int timeout, bool singleShot); 90 static void didRemoveTimer(ScriptExecutionContext*, int timerId); 91 92 static InspectorInstrumentationCookie willCallFunction(Frame*, const String& scriptName, int scriptLine); 93 static void didCallFunction(const InspectorInstrumentationCookie&); 94 static InspectorInstrumentationCookie willChangeXHRReadyState(ScriptExecutionContext*, XMLHttpRequest* request); 95 static void didChangeXHRReadyState(const InspectorInstrumentationCookie&); 96 static InspectorInstrumentationCookie willDispatchEvent(Document*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors); 97 static void didDispatchEvent(const InspectorInstrumentationCookie&); 98 static InspectorInstrumentationCookie willDispatchEventOnWindow(Frame*, const Event& event, DOMWindow* window); 99 static void didDispatchEventOnWindow(const InspectorInstrumentationCookie&); 100 static InspectorInstrumentationCookie willEvaluateScript(Frame*, const String& url, int lineNumber); 101 static void didEvaluateScript(const InspectorInstrumentationCookie&); 102 static InspectorInstrumentationCookie willFireTimer(ScriptExecutionContext*, int timerId); 103 static void didFireTimer(const InspectorInstrumentationCookie&); 104 static InspectorInstrumentationCookie willLayout(Frame*); 105 static void didLayout(const InspectorInstrumentationCookie&); 106 static InspectorInstrumentationCookie willLoadXHR(ScriptExecutionContext*, XMLHttpRequest*); 107 static void didLoadXHR(const InspectorInstrumentationCookie&); 108 static InspectorInstrumentationCookie willPaint(Frame*, const IntRect& rect); 109 static void didPaint(const InspectorInstrumentationCookie&); 110 static InspectorInstrumentationCookie willRecalculateStyle(Document*); 111 static void didRecalculateStyle(const InspectorInstrumentationCookie&); 112 113 static void applyUserAgentOverride(Frame*, String*); 114 static void willSendRequest(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse); 115 static void markResourceAsCached(Page*, unsigned long identifier); 116 static void didLoadResourceFromMemoryCache(Page*, DocumentLoader*, const CachedResource*); 117 static InspectorInstrumentationCookie willReceiveResourceData(Frame*, unsigned long identifier); 118 static void didReceiveResourceData(const InspectorInstrumentationCookie&); 119 static InspectorInstrumentationCookie willReceiveResourceResponse(Frame*, unsigned long identifier, const ResourceResponse&); 120 static void didReceiveResourceResponse(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&); 121 static void continueAfterXFrameOptionsDenied(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 122 static void continueWithPolicyDownload(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 123 static void continueWithPolicyIgnore(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 124 static void didReceiveContentLength(Frame*, unsigned long identifier, int dataLength, int encodedDataLength); 125 static void didFinishLoading(Frame*, unsigned long identifier, double finishTime); 126 static void didFailLoading(Frame*, unsigned long identifier, const ResourceError&); 127 static void resourceRetrievedByXMLHttpRequest(ScriptExecutionContext*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber); 128 static void scriptImported(ScriptExecutionContext*, unsigned long identifier, const String& sourceString); 129 static void domContentLoadedEventFired(Frame*, const KURL&); 130 static void loadEventFired(Frame*, const KURL&); 131 static void frameDetachedFromParent(Frame*); 132 static void didCommitLoad(Frame*, DocumentLoader*); 133 134 static InspectorInstrumentationCookie willWriteHTML(Document*, unsigned int length, unsigned int startLine); 135 static void didWriteHTML(const InspectorInstrumentationCookie&, unsigned int endLine); 136 137 static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); 138 static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&); 139 static void consoleCount(Page*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); 140 static void startConsoleTiming(Page*, const String& title); 141 static void stopConsoleTiming(Page*, const String& title, PassRefPtr<ScriptCallStack>); 142 static void consoleMarkTimeline(Page*, PassRefPtr<ScriptArguments>); 143 144 #if ENABLE(JAVASCRIPT_DEBUGGER) 145 static void addStartProfilingMessageToConsole(Page*, const String& title, unsigned lineNumber, const String& sourceURL); 146 static void addProfile(Page*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>); 147 static String getCurrentUserInitiatedProfileName(Page*, bool incrementProfileNumber); 148 static bool profilerEnabled(Page*); 149 #endif 150 151 #if ENABLE(DATABASE) 152 static void didOpenDatabase(ScriptExecutionContext*, PassRefPtr<Database>, const String& domain, const String& name, const String& version); 153 #endif 154 155 #if ENABLE(DOM_STORAGE) 156 static void didUseDOMStorage(Page*, StorageArea*, bool isLocalStorage, Frame*); 157 #endif 158 159 #if ENABLE(WORKERS) 160 static void didCreateWorker(ScriptExecutionContext*, intptr_t id, const String& url, bool isSharedWorker); 161 static void didDestroyWorker(ScriptExecutionContext*, intptr_t id); 162 #endif 163 164 #if ENABLE(WEB_SOCKETS) 165 static void didCreateWebSocket(ScriptExecutionContext*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL); 166 static void willSendWebSocketHandshakeRequest(ScriptExecutionContext*, unsigned long identifier, const WebSocketHandshakeRequest&); 167 static void didReceiveWebSocketHandshakeResponse(ScriptExecutionContext*, unsigned long identifier, const WebSocketHandshakeResponse&); 168 static void didCloseWebSocket(ScriptExecutionContext*, unsigned long identifier); 169 #endif 170 171 static void networkStateChanged(Page*); 172 173 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 174 static void updateApplicationCacheStatus(Frame*); 175 #endif 176 177 #if ENABLE(INSPECTOR) 178 static void bindInspectorAgent(Page* page, InspectorAgent* inspectorAgent) { inspectorAgents().set(page, inspectorAgent); } 179 static void unbindInspectorAgent(Page* page) { inspectorAgents().remove(page); } 180 static void frontendCreated() { s_frontendCounter += 1; } 181 static void frontendDeleted() { s_frontendCounter -= 1; } 182 static bool hasFrontends() { return s_frontendCounter; } 183 static bool hasFrontend(Page*); 184 #else 185 static bool hasFrontends() { return false; } 186 static bool hasFrontend(Page*) { return false; } 187 #endif 188 189 private: 190 #if ENABLE(INSPECTOR) 191 static void didClearWindowObjectInWorldImpl(InspectorAgent*, Frame*, DOMWrapperWorld*); 192 static void inspectedPageDestroyedImpl(InspectorAgent*); 193 194 static void willInsertDOMNodeImpl(InspectorAgent*, Node* node, Node* parent); 195 static void didInsertDOMNodeImpl(InspectorAgent*, Node*); 196 static void willRemoveDOMNodeImpl(InspectorAgent*, Node*); 197 static void didRemoveDOMNodeImpl(InspectorAgent*, Node*); 198 static void willModifyDOMAttrImpl(InspectorAgent*, Element*); 199 static void didModifyDOMAttrImpl(InspectorAgent*, Element*); 200 static void characterDataModifiedImpl(InspectorAgent*, CharacterData*); 201 static void didInvalidateStyleAttrImpl(InspectorAgent*, Node*); 202 203 static void mouseDidMoveOverElementImpl(InspectorAgent*, const HitTestResult&, unsigned modifierFlags); 204 static bool handleMousePressImpl(InspectorAgent*); 205 206 static void willSendXMLHttpRequestImpl(InspectorAgent*, const String& url); 207 static void didScheduleResourceRequestImpl(InspectorAgent*, const String& url); 208 static void didInstallTimerImpl(InspectorAgent*, int timerId, int timeout, bool singleShot); 209 static void didRemoveTimerImpl(InspectorAgent*, int timerId); 210 211 static InspectorInstrumentationCookie willCallFunctionImpl(InspectorAgent*, const String& scriptName, int scriptLine); 212 static void didCallFunctionImpl(const InspectorInstrumentationCookie&); 213 static InspectorInstrumentationCookie willChangeXHRReadyStateImpl(InspectorAgent*, XMLHttpRequest* request); 214 static void didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie&); 215 static InspectorInstrumentationCookie willDispatchEventImpl(InspectorAgent*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors); 216 static void didDispatchEventImpl(const InspectorInstrumentationCookie&); 217 static InspectorInstrumentationCookie willDispatchEventOnWindowImpl(InspectorAgent*, const Event& event, DOMWindow* window); 218 static void didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie&); 219 static InspectorInstrumentationCookie willEvaluateScriptImpl(InspectorAgent*, const String& url, int lineNumber); 220 static void didEvaluateScriptImpl(const InspectorInstrumentationCookie&); 221 static InspectorInstrumentationCookie willFireTimerImpl(InspectorAgent*, int timerId); 222 static void didFireTimerImpl(const InspectorInstrumentationCookie&); 223 static InspectorInstrumentationCookie willLayoutImpl(InspectorAgent*); 224 static void didLayoutImpl(const InspectorInstrumentationCookie&); 225 static InspectorInstrumentationCookie willLoadXHRImpl(InspectorAgent*, XMLHttpRequest* request); 226 static void didLoadXHRImpl(const InspectorInstrumentationCookie&); 227 static InspectorInstrumentationCookie willPaintImpl(InspectorAgent*, const IntRect& rect); 228 static void didPaintImpl(const InspectorInstrumentationCookie&); 229 static InspectorInstrumentationCookie willRecalculateStyleImpl(InspectorAgent*); 230 static void didRecalculateStyleImpl(const InspectorInstrumentationCookie&); 231 232 static void applyUserAgentOverrideImpl(InspectorAgent*, String*); 233 static void willSendRequestImpl(InspectorAgent*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse); 234 static void markResourceAsCachedImpl(InspectorAgent*, unsigned long identifier); 235 static void didLoadResourceFromMemoryCacheImpl(InspectorAgent*, DocumentLoader*, const CachedResource*); 236 static InspectorInstrumentationCookie willReceiveResourceDataImpl(InspectorAgent*, unsigned long identifier); 237 static void didReceiveResourceDataImpl(const InspectorInstrumentationCookie&); 238 static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorAgent*, unsigned long identifier, const ResourceResponse&); 239 static void didReceiveResourceResponseImpl(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&); 240 static void didReceiveResourceResponseButCanceledImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 241 static void continueAfterXFrameOptionsDeniedImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 242 static void continueWithPolicyDownloadImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 243 static void continueWithPolicyIgnoreImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&); 244 static void didReceiveContentLengthImpl(InspectorAgent*, unsigned long identifier, int dataLength, int encodedDataLength); 245 static void didFinishLoadingImpl(InspectorAgent*, unsigned long identifier, double finishTime); 246 static void didFailLoadingImpl(InspectorAgent*, unsigned long identifier, const ResourceError&); 247 static void resourceRetrievedByXMLHttpRequestImpl(InspectorAgent*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber); 248 static void scriptImportedImpl(InspectorAgent*, unsigned long identifier, const String& sourceString); 249 static void domContentLoadedEventFiredImpl(InspectorAgent*, Frame*, const KURL&); 250 static void loadEventFiredImpl(InspectorAgent*, Frame*, const KURL&); 251 static void frameDetachedFromParentImpl(InspectorAgent*, Frame*); 252 static void didCommitLoadImpl(Page*, InspectorAgent*, DocumentLoader*); 253 254 static InspectorInstrumentationCookie willWriteHTMLImpl(InspectorAgent*, unsigned int length, unsigned int startLine); 255 static void didWriteHTMLImpl(const InspectorInstrumentationCookie&, unsigned int endLine); 256 257 static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); 258 static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID); 259 static void consoleCountImpl(InspectorAgent*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); 260 static void startConsoleTimingImpl(InspectorAgent*, const String& title); 261 static void stopConsoleTimingImpl(InspectorAgent*, const String& title, PassRefPtr<ScriptCallStack>); 262 static void consoleMarkTimelineImpl(InspectorAgent*, PassRefPtr<ScriptArguments>); 263 264 #if ENABLE(JAVASCRIPT_DEBUGGER) 265 static void addStartProfilingMessageToConsoleImpl(InspectorAgent*, const String& title, unsigned lineNumber, const String& sourceURL); 266 static void addProfileImpl(InspectorAgent*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>); 267 static String getCurrentUserInitiatedProfileNameImpl(InspectorAgent*, bool incrementProfileNumber); 268 static bool profilerEnabledImpl(InspectorAgent*); 269 #endif 270 271 #if ENABLE(DATABASE) 272 static void didOpenDatabaseImpl(InspectorAgent*, PassRefPtr<Database>, const String& domain, const String& name, const String& version); 273 #endif 274 275 #if ENABLE(DOM_STORAGE) 276 static void didUseDOMStorageImpl(InspectorAgent*, StorageArea*, bool isLocalStorage, Frame*); 277 #endif 278 279 #if ENABLE(WORKERS) 280 static void didCreateWorkerImpl(InspectorAgent*, intptr_t id, const String& url, bool isSharedWorker); 281 static void didDestroyWorkerImpl(InspectorAgent*, intptr_t id); 282 #endif 283 284 #if ENABLE(WEB_SOCKETS) 285 static void didCreateWebSocketImpl(InspectorAgent*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL); 286 static void willSendWebSocketHandshakeRequestImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeRequest&); 287 static void didReceiveWebSocketHandshakeResponseImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeResponse&); 288 static void didCloseWebSocketImpl(InspectorAgent*, unsigned long identifier); 289 #endif 290 291 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 292 static void networkStateChangedImpl(InspectorAgent*); 293 static void updateApplicationCacheStatusImpl(InspectorAgent*, Frame*); 294 #endif 295 296 static InspectorAgent* inspectorAgentForFrame(Frame*); 297 static InspectorAgent* inspectorAgentForContext(ScriptExecutionContext*); 298 static InspectorAgent* inspectorAgentForPage(Page*); 299 static InspectorAgent* inspectorAgentWithFrontendForContext(ScriptExecutionContext*); 300 static InspectorAgent* inspectorAgentWithFrontendForDocument(Document*); 301 static InspectorAgent* inspectorAgentWithFrontendForFrame(Frame*); 302 static InspectorAgent* inspectorAgentWithFrontendForPage(Page*); 303 304 static bool hasFrontend(InspectorAgent*); 305 static void pauseOnNativeEventIfNeeded(InspectorAgent*, const String& categoryType, const String& eventName, bool synchronous); 306 static void cancelPauseOnNativeEvent(InspectorAgent*); 307 static InspectorTimelineAgent* retrieveTimelineAgent(InspectorAgent*); 308 static InspectorTimelineAgent* retrieveTimelineAgent(const InspectorInstrumentationCookie&); 309 static InspectorResourceAgent* retrieveResourceAgent(InspectorAgent*); 310 static InspectorPageAgent* retrievePageAgent(InspectorAgent*); 311 312 static HashMap<Page*, InspectorAgent*>& inspectorAgents(); 313 static int s_frontendCounter; 314 #endif 315 }; 316 317 inline void InspectorInstrumentation::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) 318 { 319 #if ENABLE(INSPECTOR) 320 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 321 didClearWindowObjectInWorldImpl(inspectorAgent, frame, world); 322 #endif 323 } 324 325 inline void InspectorInstrumentation::inspectedPageDestroyed(Page* page) 326 { 327 #if ENABLE(INSPECTOR) 328 if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) 329 inspectedPageDestroyedImpl(inspectorAgent); 330 #endif 331 } 332 333 inline void InspectorInstrumentation::willInsertDOMNode(Document* document, Node* node, Node* parent) 334 { 335 #if ENABLE(INSPECTOR) 336 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 337 willInsertDOMNodeImpl(inspectorAgent, node, parent); 338 #endif 339 } 340 341 inline void InspectorInstrumentation::didInsertDOMNode(Document* document, Node* node) 342 { 343 #if ENABLE(INSPECTOR) 344 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 345 didInsertDOMNodeImpl(inspectorAgent, node); 346 #endif 347 } 348 349 inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node* node) 350 { 351 #if ENABLE(INSPECTOR) 352 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) { 353 willRemoveDOMNodeImpl(inspectorAgent, node); 354 didRemoveDOMNodeImpl(inspectorAgent, node); 355 } 356 #endif 357 } 358 359 inline void InspectorInstrumentation::willModifyDOMAttr(Document* document, Element* element) 360 { 361 #if ENABLE(INSPECTOR) 362 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 363 willModifyDOMAttrImpl(inspectorAgent, element); 364 #endif 365 } 366 367 inline void InspectorInstrumentation::didModifyDOMAttr(Document* document, Element* element) 368 { 369 #if ENABLE(INSPECTOR) 370 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 371 didModifyDOMAttrImpl(inspectorAgent, element); 372 #endif 373 } 374 375 inline void InspectorInstrumentation::didInvalidateStyleAttr(Document* document, Node* node) 376 { 377 #if ENABLE(INSPECTOR) 378 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 379 didInvalidateStyleAttrImpl(inspectorAgent, node); 380 #endif 381 } 382 383 inline void InspectorInstrumentation::mouseDidMoveOverElement(Page* page, const HitTestResult& result, unsigned modifierFlags) 384 { 385 #if ENABLE(INSPECTOR) 386 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page)) 387 mouseDidMoveOverElementImpl(inspectorAgent, result, modifierFlags); 388 #endif 389 } 390 391 inline bool InspectorInstrumentation::handleMousePress(Page* page) 392 { 393 #if ENABLE(INSPECTOR) 394 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page)) 395 return handleMousePressImpl(inspectorAgent); 396 #endif 397 return false; 398 } 399 400 inline void InspectorInstrumentation::characterDataModified(Document* document, CharacterData* characterData) 401 { 402 #if ENABLE(INSPECTOR) 403 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 404 characterDataModifiedImpl(inspectorAgent, characterData); 405 #endif 406 } 407 408 inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionContext* context, const String& url) 409 { 410 #if ENABLE(INSPECTOR) 411 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 412 willSendXMLHttpRequestImpl(inspectorAgent, url); 413 #endif 414 } 415 416 inline void InspectorInstrumentation::didScheduleResourceRequest(Document* document, const String& url) 417 { 418 #if ENABLE(INSPECTOR) 419 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 420 didScheduleResourceRequestImpl(inspectorAgent, url); 421 #endif 422 } 423 424 inline void InspectorInstrumentation::didInstallTimer(ScriptExecutionContext* context, int timerId, int timeout, bool singleShot) 425 { 426 #if ENABLE(INSPECTOR) 427 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 428 didInstallTimerImpl(inspectorAgent, timerId, timeout, singleShot); 429 #endif 430 } 431 432 inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* context, int timerId) 433 { 434 #if ENABLE(INSPECTOR) 435 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 436 didRemoveTimerImpl(inspectorAgent, timerId); 437 #endif 438 } 439 440 441 inline InspectorInstrumentationCookie InspectorInstrumentation::willCallFunction(Frame* frame, const String& scriptName, int scriptLine) 442 { 443 #if ENABLE(INSPECTOR) 444 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 445 return willCallFunctionImpl(inspectorAgent, scriptName, scriptLine); 446 #endif 447 return InspectorInstrumentationCookie(); 448 } 449 450 inline void InspectorInstrumentation::didCallFunction(const InspectorInstrumentationCookie& cookie) 451 { 452 #if ENABLE(INSPECTOR) 453 if (hasFrontends() && cookie.first) 454 didCallFunctionImpl(cookie); 455 #endif 456 } 457 458 inline InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyState(ScriptExecutionContext* context, XMLHttpRequest* request) 459 { 460 #if ENABLE(INSPECTOR) 461 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 462 return willChangeXHRReadyStateImpl(inspectorAgent, request); 463 #endif 464 return InspectorInstrumentationCookie(); 465 } 466 467 inline void InspectorInstrumentation::didChangeXHRReadyState(const InspectorInstrumentationCookie& cookie) 468 { 469 #if ENABLE(INSPECTOR) 470 if (hasFrontends() && cookie.first) 471 didChangeXHRReadyStateImpl(cookie); 472 #endif 473 } 474 475 inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors) 476 { 477 #if ENABLE(INSPECTOR) 478 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 479 return willDispatchEventImpl(inspectorAgent, event, window, node, ancestors); 480 #endif 481 return InspectorInstrumentationCookie(); 482 } 483 484 inline void InspectorInstrumentation::didDispatchEvent(const InspectorInstrumentationCookie& cookie) 485 { 486 #if ENABLE(INSPECTOR) 487 if (hasFrontends() && cookie.first) 488 didDispatchEventImpl(cookie); 489 #endif 490 } 491 492 inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindow(Frame* frame, const Event& event, DOMWindow* window) 493 { 494 #if ENABLE(INSPECTOR) 495 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 496 return willDispatchEventOnWindowImpl(inspectorAgent, event, window); 497 #endif 498 return InspectorInstrumentationCookie(); 499 } 500 501 inline void InspectorInstrumentation::didDispatchEventOnWindow(const InspectorInstrumentationCookie& cookie) 502 { 503 #if ENABLE(INSPECTOR) 504 if (hasFrontends() && cookie.first) 505 didDispatchEventOnWindowImpl(cookie); 506 #endif 507 } 508 509 inline InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScript(Frame* frame, const String& url, int lineNumber) 510 { 511 #if ENABLE(INSPECTOR) 512 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 513 return willEvaluateScriptImpl(inspectorAgent, url, lineNumber); 514 #endif 515 return InspectorInstrumentationCookie(); 516 } 517 518 inline void InspectorInstrumentation::didEvaluateScript(const InspectorInstrumentationCookie& cookie) 519 { 520 #if ENABLE(INSPECTOR) 521 if (hasFrontends() && cookie.first) 522 didEvaluateScriptImpl(cookie); 523 #endif 524 } 525 526 inline InspectorInstrumentationCookie InspectorInstrumentation::willFireTimer(ScriptExecutionContext* context, int timerId) 527 { 528 #if ENABLE(INSPECTOR) 529 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 530 return willFireTimerImpl(inspectorAgent, timerId); 531 #endif 532 return InspectorInstrumentationCookie(); 533 } 534 535 inline void InspectorInstrumentation::didFireTimer(const InspectorInstrumentationCookie& cookie) 536 { 537 #if ENABLE(INSPECTOR) 538 if (hasFrontends() && cookie.first) 539 didFireTimerImpl(cookie); 540 #endif 541 } 542 543 inline InspectorInstrumentationCookie InspectorInstrumentation::willLayout(Frame* frame) 544 { 545 #if ENABLE(INSPECTOR) 546 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 547 return willLayoutImpl(inspectorAgent); 548 #endif 549 return InspectorInstrumentationCookie(); 550 } 551 552 inline void InspectorInstrumentation::didLayout(const InspectorInstrumentationCookie& cookie) 553 { 554 #if ENABLE(INSPECTOR) 555 if (hasFrontends() && cookie.first) 556 didLayoutImpl(cookie); 557 #endif 558 } 559 560 inline InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHR(ScriptExecutionContext* context, XMLHttpRequest* request) 561 { 562 #if ENABLE(INSPECTOR) 563 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 564 return willLoadXHRImpl(inspectorAgent, request); 565 #endif 566 return InspectorInstrumentationCookie(); 567 } 568 569 inline void InspectorInstrumentation::didLoadXHR(const InspectorInstrumentationCookie& cookie) 570 { 571 #if ENABLE(INSPECTOR) 572 if (hasFrontends() && cookie.first) 573 didLoadXHRImpl(cookie); 574 #endif 575 } 576 577 inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame, const IntRect& rect) 578 { 579 #if ENABLE(INSPECTOR) 580 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 581 return willPaintImpl(inspectorAgent, rect); 582 #endif 583 return InspectorInstrumentationCookie(); 584 } 585 586 inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCookie& cookie) 587 { 588 #if ENABLE(INSPECTOR) 589 if (hasFrontends() && cookie.first) 590 didPaintImpl(cookie); 591 #endif 592 } 593 594 inline InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyle(Document* document) 595 { 596 #if ENABLE(INSPECTOR) 597 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 598 return willRecalculateStyleImpl(inspectorAgent); 599 #endif 600 return InspectorInstrumentationCookie(); 601 } 602 603 inline void InspectorInstrumentation::didRecalculateStyle(const InspectorInstrumentationCookie& cookie) 604 { 605 #if ENABLE(INSPECTOR) 606 if (hasFrontends() && cookie.first) 607 didRecalculateStyleImpl(cookie); 608 #endif 609 } 610 611 inline void InspectorInstrumentation::applyUserAgentOverride(Frame* frame, String* userAgent) 612 { 613 #if ENABLE(INSPECTOR) 614 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 615 applyUserAgentOverrideImpl(inspectorAgent, userAgent); 616 #endif 617 } 618 619 inline void InspectorInstrumentation::willSendRequest(Frame* frame, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse) 620 { 621 #if ENABLE(INSPECTOR) 622 if (InspectorAgent* ic = inspectorAgentForFrame(frame)) 623 willSendRequestImpl(ic, identifier, loader, request, redirectResponse); 624 #endif 625 } 626 627 inline void InspectorInstrumentation::markResourceAsCached(Page* page, unsigned long identifier) 628 { 629 #if ENABLE(INSPECTOR) 630 markResourceAsCachedImpl(inspectorAgentForPage(page), identifier); 631 #endif 632 } 633 634 inline void InspectorInstrumentation::didLoadResourceFromMemoryCache(Page* page, DocumentLoader* loader, const CachedResource* resource) 635 { 636 #if ENABLE(INSPECTOR) 637 didLoadResourceFromMemoryCacheImpl(inspectorAgentForPage(page), loader, resource); 638 #endif 639 } 640 641 inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceData(Frame* frame, unsigned long identifier) 642 { 643 #if ENABLE(INSPECTOR) 644 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 645 return willReceiveResourceDataImpl(inspectorAgent, identifier); 646 #endif 647 return InspectorInstrumentationCookie(); 648 } 649 650 inline void InspectorInstrumentation::didReceiveResourceData(const InspectorInstrumentationCookie& cookie) 651 { 652 #if ENABLE(INSPECTOR) 653 if (hasFrontends() && cookie.first) 654 didReceiveResourceDataImpl(cookie); 655 #endif 656 } 657 658 inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponse(Frame* frame, unsigned long identifier, const ResourceResponse& response) 659 { 660 #if ENABLE(INSPECTOR) 661 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 662 return willReceiveResourceResponseImpl(inspectorAgent, identifier, response); 663 #endif 664 return InspectorInstrumentationCookie(); 665 } 666 667 inline void InspectorInstrumentation::didReceiveResourceResponse(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) 668 { 669 #if ENABLE(INSPECTOR) 670 // Call this unconditionally so that we're able to log to console with no front-end attached. 671 didReceiveResourceResponseImpl(cookie, identifier, loader, response); 672 #endif 673 } 674 675 inline void InspectorInstrumentation::continueAfterXFrameOptionsDenied(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) 676 { 677 #if ENABLE(INSPECTOR) 678 if (inspectorAgentWithFrontendForFrame(frame)) 679 InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl(frame, loader, identifier, r); 680 #endif 681 } 682 683 inline void InspectorInstrumentation::continueWithPolicyDownload(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) 684 { 685 #if ENABLE(INSPECTOR) 686 if (inspectorAgentWithFrontendForFrame(frame)) 687 InspectorInstrumentation::continueWithPolicyDownloadImpl(frame, loader, identifier, r); 688 #endif 689 } 690 691 inline void InspectorInstrumentation::continueWithPolicyIgnore(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) 692 { 693 #if ENABLE(INSPECTOR) 694 if (inspectorAgentWithFrontendForFrame(frame)) 695 InspectorInstrumentation::continueWithPolicyIgnoreImpl(frame, loader, identifier, r); 696 #endif 697 } 698 699 inline void InspectorInstrumentation::didReceiveContentLength(Frame* frame, unsigned long identifier, int dataLength, int encodedDataLength) 700 { 701 #if ENABLE(INSPECTOR) 702 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 703 didReceiveContentLengthImpl(inspectorAgent, identifier, dataLength, encodedDataLength); 704 #endif 705 } 706 707 inline void InspectorInstrumentation::didFinishLoading(Frame* frame, unsigned long identifier, double finishTime) 708 { 709 #if ENABLE(INSPECTOR) 710 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 711 didFinishLoadingImpl(inspectorAgent, identifier, finishTime); 712 #endif 713 } 714 715 inline void InspectorInstrumentation::didFailLoading(Frame* frame, unsigned long identifier, const ResourceError& error) 716 { 717 #if ENABLE(INSPECTOR) 718 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 719 didFailLoadingImpl(inspectorAgent, identifier, error); 720 #endif 721 } 722 723 inline void InspectorInstrumentation::resourceRetrievedByXMLHttpRequest(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber) 724 { 725 #if ENABLE(INSPECTOR) 726 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 727 resourceRetrievedByXMLHttpRequestImpl(inspectorAgent, identifier, sourceString, url, sendURL, sendLineNumber); 728 #endif 729 } 730 731 inline void InspectorInstrumentation::scriptImported(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString) 732 { 733 #if ENABLE(INSPECTOR) 734 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 735 scriptImportedImpl(inspectorAgent, identifier, sourceString); 736 #endif 737 } 738 739 inline void InspectorInstrumentation::domContentLoadedEventFired(Frame* frame, const KURL& url) 740 { 741 #if ENABLE(INSPECTOR) 742 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 743 domContentLoadedEventFiredImpl(inspectorAgent, frame, url); 744 #endif 745 } 746 747 inline void InspectorInstrumentation::loadEventFired(Frame* frame, const KURL& url) 748 { 749 #if ENABLE(INSPECTOR) 750 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 751 loadEventFiredImpl(inspectorAgent, frame, url); 752 #endif 753 } 754 755 inline void InspectorInstrumentation::frameDetachedFromParent(Frame* frame) 756 { 757 #if ENABLE(INSPECTOR) 758 if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame)) 759 frameDetachedFromParentImpl(inspectorAgent, frame); 760 #endif 761 } 762 763 inline void InspectorInstrumentation::didCommitLoad(Frame* frame, DocumentLoader* loader) 764 { 765 #if ENABLE(INSPECTOR) 766 if (!frame) 767 return; 768 Page* page = frame->page(); 769 if (!page) 770 return; 771 if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) 772 didCommitLoadImpl(page, inspectorAgent, loader); 773 #endif 774 } 775 776 inline InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTML(Document* document, unsigned int length, unsigned int startLine) 777 { 778 #if ENABLE(INSPECTOR) 779 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) 780 return willWriteHTMLImpl(inspectorAgent, length, startLine); 781 #endif 782 return InspectorInstrumentationCookie(); 783 } 784 785 inline void InspectorInstrumentation::didWriteHTML(const InspectorInstrumentationCookie& cookie, unsigned int endLine) 786 { 787 #if ENABLE(INSPECTOR) 788 if (hasFrontends() && cookie.first) 789 didWriteHTMLImpl(cookie, endLine); 790 #endif 791 } 792 793 #if ENABLE(DOM_STORAGE) 794 inline void InspectorInstrumentation::didUseDOMStorage(Page* page, StorageArea* storageArea, bool isLocalStorage, Frame* frame) 795 { 796 #if ENABLE(INSPECTOR) 797 if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) 798 didUseDOMStorageImpl(inspectorAgent, storageArea, isLocalStorage, frame); 799 #endif 800 } 801 #endif 802 803 #if ENABLE(WORKERS) 804 inline void InspectorInstrumentation::didCreateWorker(ScriptExecutionContext* context, intptr_t id, const String& url, bool isSharedWorker) 805 { 806 #if ENABLE(INSPECTOR) 807 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 808 didCreateWorkerImpl(inspectorAgent, id, url, isSharedWorker); 809 #endif 810 } 811 812 inline void InspectorInstrumentation::didDestroyWorker(ScriptExecutionContext* context, intptr_t id) 813 { 814 #if ENABLE(INSPECTOR) 815 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context)) 816 didDestroyWorkerImpl(inspectorAgent, id); 817 #endif 818 } 819 #endif 820 821 822 #if ENABLE(WEB_SOCKETS) 823 inline void InspectorInstrumentation::didCreateWebSocket(ScriptExecutionContext* context, unsigned long identifier, const KURL& requestURL, const KURL& documentURL) 824 { 825 #if ENABLE(INSPECTOR) 826 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 827 didCreateWebSocketImpl(inspectorAgent, identifier, requestURL, documentURL); 828 #endif 829 } 830 831 inline void InspectorInstrumentation::willSendWebSocketHandshakeRequest(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeRequest& request) 832 { 833 #if ENABLE(INSPECTOR) 834 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 835 willSendWebSocketHandshakeRequestImpl(inspectorAgent, identifier, request); 836 #endif 837 } 838 839 inline void InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeResponse& response) 840 { 841 #if ENABLE(INSPECTOR) 842 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 843 didReceiveWebSocketHandshakeResponseImpl(inspectorAgent, identifier, response); 844 #endif 845 } 846 847 inline void InspectorInstrumentation::didCloseWebSocket(ScriptExecutionContext* context, unsigned long identifier) 848 { 849 #if ENABLE(INSPECTOR) 850 if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context)) 851 didCloseWebSocketImpl(inspectorAgent, identifier); 852 #endif 853 } 854 #endif 855 856 inline void InspectorInstrumentation::networkStateChanged(Page* page) 857 { 858 #if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) 859 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page)) 860 networkStateChangedImpl(inspectorAgent); 861 #endif 862 } 863 864 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 865 inline void InspectorInstrumentation::updateApplicationCacheStatus(Frame* frame) 866 { 867 #if ENABLE(INSPECTOR) 868 if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame)) 869 updateApplicationCacheStatusImpl(inspectorAgent, frame); 870 #endif 871 } 872 #endif 873 874 #if ENABLE(INSPECTOR) 875 inline bool InspectorInstrumentation::hasFrontend(Page* page) 876 { 877 return inspectorAgentWithFrontendForPage(page); 878 } 879 #endif 880 881 882 #if ENABLE(INSPECTOR) 883 inline InspectorAgent* InspectorInstrumentation::inspectorAgentForContext(ScriptExecutionContext* context) 884 { 885 if (context && context->isDocument()) 886 return inspectorAgentForPage(static_cast<Document*>(context)->page()); 887 return 0; 888 } 889 890 inline InspectorAgent* InspectorInstrumentation::inspectorAgentForFrame(Frame* frame) 891 { 892 if (frame) 893 return inspectorAgentForPage(frame->page()); 894 return 0; 895 } 896 897 inline InspectorAgent* InspectorInstrumentation::inspectorAgentForPage(Page* page) 898 { 899 if (!page) 900 return 0; 901 return inspectorAgents().get(page); 902 } 903 904 inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForContext(ScriptExecutionContext* context) 905 { 906 if (hasFrontends() && context && context->isDocument()) 907 return inspectorAgentWithFrontendForPage(static_cast<Document*>(context)->page()); 908 return 0; 909 } 910 911 inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForDocument(Document* document) 912 { 913 if (hasFrontends() && document) 914 return inspectorAgentWithFrontendForPage(document->page()); 915 return 0; 916 } 917 918 inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForFrame(Frame* frame) 919 { 920 if (hasFrontends() && frame) 921 return inspectorAgentWithFrontendForPage(frame->page()); 922 return 0; 923 } 924 925 inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForPage(Page* page) 926 { 927 if (page) { 928 if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) { 929 if (hasFrontend(inspectorAgent)) 930 return inspectorAgent; 931 } 932 } 933 return 0; 934 } 935 936 #endif 937 938 } // namespace WebCore 939 940 #endif // !defined(InspectorInstrumentation_h) 941