blob: d82c6a942de3307d3cb2c5fc4ecc9fec7fded318 [file] [log] [blame]
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef InspectorInstrumentation_h
#define InspectorInstrumentation_h
#include "Console.h"
#include "Frame.h"
#include "Page.h"
#include "ScriptExecutionContext.h"
#include <wtf/HashMap.h>
namespace WebCore {
class CharacterData;
class DOMWrapperWorld;
class Database;
class Document;
class Element;
class EventContext;
class DocumentLoader;
class HitTestResult;
class InspectorAgent;
class InspectorPageAgent;
class InspectorResourceAgent;
class InspectorTimelineAgent;
class KURL;
class Node;
class ResourceRequest;
class ResourceResponse;
class ScriptArguments;
class ScriptCallStack;
class ScriptExecutionContext;
class StorageArea;
class XMLHttpRequest;
#if ENABLE(WEB_SOCKETS)
class WebSocketHandshakeRequest;
class WebSocketHandshakeResponse;
#endif
typedef pair<InspectorAgent*, int> InspectorInstrumentationCookie;
class InspectorInstrumentation {
public:
static void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*);
static void inspectedPageDestroyed(Page*);
static void willInsertDOMNode(Document*, Node*, Node* parent);
static void didInsertDOMNode(Document*, Node*);
static void willRemoveDOMNode(Document*, Node*);
static void willModifyDOMAttr(Document*, Element*);
static void didModifyDOMAttr(Document*, Element*);
static void characterDataModified(Document*, CharacterData*);
static void didInvalidateStyleAttr(Document*, Node*);
static void mouseDidMoveOverElement(Page*, const HitTestResult&, unsigned modifierFlags);
static bool handleMousePress(Page*);
static void willSendXMLHttpRequest(ScriptExecutionContext*, const String& url);
static void didScheduleResourceRequest(Document*, const String& url);
static void didInstallTimer(ScriptExecutionContext*, int timerId, int timeout, bool singleShot);
static void didRemoveTimer(ScriptExecutionContext*, int timerId);
static InspectorInstrumentationCookie willCallFunction(Frame*, const String& scriptName, int scriptLine);
static void didCallFunction(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willChangeXHRReadyState(ScriptExecutionContext*, XMLHttpRequest* request);
static void didChangeXHRReadyState(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEvent(Document*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
static void didDispatchEvent(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEventOnWindow(Frame*, const Event& event, DOMWindow* window);
static void didDispatchEventOnWindow(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willEvaluateScript(Frame*, const String& url, int lineNumber);
static void didEvaluateScript(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willFireTimer(ScriptExecutionContext*, int timerId);
static void didFireTimer(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willLayout(Frame*);
static void didLayout(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willLoadXHR(ScriptExecutionContext*, XMLHttpRequest*);
static void didLoadXHR(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willPaint(Frame*, const IntRect& rect);
static void didPaint(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willRecalculateStyle(Document*);
static void didRecalculateStyle(const InspectorInstrumentationCookie&);
static void applyUserAgentOverride(Frame*, String*);
static void willSendRequest(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
static void markResourceAsCached(Page*, unsigned long identifier);
static void didLoadResourceFromMemoryCache(Page*, DocumentLoader*, const CachedResource*);
static InspectorInstrumentationCookie willReceiveResourceData(Frame*, unsigned long identifier);
static void didReceiveResourceData(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willReceiveResourceResponse(Frame*, unsigned long identifier, const ResourceResponse&);
static void didReceiveResourceResponse(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&);
static void continueAfterXFrameOptionsDenied(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void continueWithPolicyDownload(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void continueWithPolicyIgnore(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void didReceiveContentLength(Frame*, unsigned long identifier, int dataLength, int encodedDataLength);
static void didFinishLoading(Frame*, unsigned long identifier, double finishTime);
static void didFailLoading(Frame*, unsigned long identifier, const ResourceError&);
static void resourceRetrievedByXMLHttpRequest(ScriptExecutionContext*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
static void scriptImported(ScriptExecutionContext*, unsigned long identifier, const String& sourceString);
static void domContentLoadedEventFired(Frame*, const KURL&);
static void loadEventFired(Frame*, const KURL&);
static void frameDetachedFromParent(Frame*);
static void didCommitLoad(Frame*, DocumentLoader*);
static InspectorInstrumentationCookie willWriteHTML(Document*, unsigned int length, unsigned int startLine);
static void didWriteHTML(const InspectorInstrumentationCookie&, unsigned int endLine);
static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&);
static void consoleCount(Page*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void startConsoleTiming(Page*, const String& title);
static void stopConsoleTiming(Page*, const String& title, PassRefPtr<ScriptCallStack>);
static void consoleMarkTimeline(Page*, PassRefPtr<ScriptArguments>);
#if ENABLE(JAVASCRIPT_DEBUGGER)
static void addStartProfilingMessageToConsole(Page*, const String& title, unsigned lineNumber, const String& sourceURL);
static void addProfile(Page*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>);
static String getCurrentUserInitiatedProfileName(Page*, bool incrementProfileNumber);
static bool profilerEnabled(Page*);
#endif
#if ENABLE(DATABASE)
static void didOpenDatabase(ScriptExecutionContext*, PassRefPtr<Database>, const String& domain, const String& name, const String& version);
#endif
#if ENABLE(DOM_STORAGE)
static void didUseDOMStorage(Page*, StorageArea*, bool isLocalStorage, Frame*);
#endif
#if ENABLE(WORKERS)
static void didCreateWorker(ScriptExecutionContext*, intptr_t id, const String& url, bool isSharedWorker);
static void didDestroyWorker(ScriptExecutionContext*, intptr_t id);
#endif
#if ENABLE(WEB_SOCKETS)
static void didCreateWebSocket(ScriptExecutionContext*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
static void willSendWebSocketHandshakeRequest(ScriptExecutionContext*, unsigned long identifier, const WebSocketHandshakeRequest&);
static void didReceiveWebSocketHandshakeResponse(ScriptExecutionContext*, unsigned long identifier, const WebSocketHandshakeResponse&);
static void didCloseWebSocket(ScriptExecutionContext*, unsigned long identifier);
#endif
static void networkStateChanged(Page*);
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
static void updateApplicationCacheStatus(Frame*);
#endif
#if ENABLE(INSPECTOR)
static void bindInspectorAgent(Page* page, InspectorAgent* inspectorAgent) { inspectorAgents().set(page, inspectorAgent); }
static void unbindInspectorAgent(Page* page) { inspectorAgents().remove(page); }
static void frontendCreated() { s_frontendCounter += 1; }
static void frontendDeleted() { s_frontendCounter -= 1; }
static bool hasFrontends() { return s_frontendCounter; }
static bool hasFrontend(Page*);
#else
static bool hasFrontends() { return false; }
static bool hasFrontend(Page*) { return false; }
#endif
private:
#if ENABLE(INSPECTOR)
static void didClearWindowObjectInWorldImpl(InspectorAgent*, Frame*, DOMWrapperWorld*);
static void inspectedPageDestroyedImpl(InspectorAgent*);
static void willInsertDOMNodeImpl(InspectorAgent*, Node* node, Node* parent);
static void didInsertDOMNodeImpl(InspectorAgent*, Node*);
static void willRemoveDOMNodeImpl(InspectorAgent*, Node*);
static void didRemoveDOMNodeImpl(InspectorAgent*, Node*);
static void willModifyDOMAttrImpl(InspectorAgent*, Element*);
static void didModifyDOMAttrImpl(InspectorAgent*, Element*);
static void characterDataModifiedImpl(InspectorAgent*, CharacterData*);
static void didInvalidateStyleAttrImpl(InspectorAgent*, Node*);
static void mouseDidMoveOverElementImpl(InspectorAgent*, const HitTestResult&, unsigned modifierFlags);
static bool handleMousePressImpl(InspectorAgent*);
static void willSendXMLHttpRequestImpl(InspectorAgent*, const String& url);
static void didScheduleResourceRequestImpl(InspectorAgent*, const String& url);
static void didInstallTimerImpl(InspectorAgent*, int timerId, int timeout, bool singleShot);
static void didRemoveTimerImpl(InspectorAgent*, int timerId);
static InspectorInstrumentationCookie willCallFunctionImpl(InspectorAgent*, const String& scriptName, int scriptLine);
static void didCallFunctionImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willChangeXHRReadyStateImpl(InspectorAgent*, XMLHttpRequest* request);
static void didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEventImpl(InspectorAgent*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
static void didDispatchEventImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEventOnWindowImpl(InspectorAgent*, const Event& event, DOMWindow* window);
static void didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willEvaluateScriptImpl(InspectorAgent*, const String& url, int lineNumber);
static void didEvaluateScriptImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willFireTimerImpl(InspectorAgent*, int timerId);
static void didFireTimerImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willLayoutImpl(InspectorAgent*);
static void didLayoutImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willLoadXHRImpl(InspectorAgent*, XMLHttpRequest* request);
static void didLoadXHRImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willPaintImpl(InspectorAgent*, const IntRect& rect);
static void didPaintImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willRecalculateStyleImpl(InspectorAgent*);
static void didRecalculateStyleImpl(const InspectorInstrumentationCookie&);
static void applyUserAgentOverrideImpl(InspectorAgent*, String*);
static void willSendRequestImpl(InspectorAgent*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
static void markResourceAsCachedImpl(InspectorAgent*, unsigned long identifier);
static void didLoadResourceFromMemoryCacheImpl(InspectorAgent*, DocumentLoader*, const CachedResource*);
static InspectorInstrumentationCookie willReceiveResourceDataImpl(InspectorAgent*, unsigned long identifier);
static void didReceiveResourceDataImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorAgent*, unsigned long identifier, const ResourceResponse&);
static void didReceiveResourceResponseImpl(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&);
static void didReceiveResourceResponseButCanceledImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void continueAfterXFrameOptionsDeniedImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void continueWithPolicyDownloadImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void continueWithPolicyIgnoreImpl(Frame*, DocumentLoader*, unsigned long identifier, const ResourceResponse&);
static void didReceiveContentLengthImpl(InspectorAgent*, unsigned long identifier, int dataLength, int encodedDataLength);
static void didFinishLoadingImpl(InspectorAgent*, unsigned long identifier, double finishTime);
static void didFailLoadingImpl(InspectorAgent*, unsigned long identifier, const ResourceError&);
static void resourceRetrievedByXMLHttpRequestImpl(InspectorAgent*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
static void scriptImportedImpl(InspectorAgent*, unsigned long identifier, const String& sourceString);
static void domContentLoadedEventFiredImpl(InspectorAgent*, Frame*, const KURL&);
static void loadEventFiredImpl(InspectorAgent*, Frame*, const KURL&);
static void frameDetachedFromParentImpl(InspectorAgent*, Frame*);
static void didCommitLoadImpl(Page*, InspectorAgent*, DocumentLoader*);
static InspectorInstrumentationCookie willWriteHTMLImpl(InspectorAgent*, unsigned int length, unsigned int startLine);
static void didWriteHTMLImpl(const InspectorInstrumentationCookie&, unsigned int endLine);
static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void addMessageToConsoleImpl(InspectorAgent*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
static void consoleCountImpl(InspectorAgent*, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
static void startConsoleTimingImpl(InspectorAgent*, const String& title);
static void stopConsoleTimingImpl(InspectorAgent*, const String& title, PassRefPtr<ScriptCallStack>);
static void consoleMarkTimelineImpl(InspectorAgent*, PassRefPtr<ScriptArguments>);
#if ENABLE(JAVASCRIPT_DEBUGGER)
static void addStartProfilingMessageToConsoleImpl(InspectorAgent*, const String& title, unsigned lineNumber, const String& sourceURL);
static void addProfileImpl(InspectorAgent*, RefPtr<ScriptProfile>, PassRefPtr<ScriptCallStack>);
static String getCurrentUserInitiatedProfileNameImpl(InspectorAgent*, bool incrementProfileNumber);
static bool profilerEnabledImpl(InspectorAgent*);
#endif
#if ENABLE(DATABASE)
static void didOpenDatabaseImpl(InspectorAgent*, PassRefPtr<Database>, const String& domain, const String& name, const String& version);
#endif
#if ENABLE(DOM_STORAGE)
static void didUseDOMStorageImpl(InspectorAgent*, StorageArea*, bool isLocalStorage, Frame*);
#endif
#if ENABLE(WORKERS)
static void didCreateWorkerImpl(InspectorAgent*, intptr_t id, const String& url, bool isSharedWorker);
static void didDestroyWorkerImpl(InspectorAgent*, intptr_t id);
#endif
#if ENABLE(WEB_SOCKETS)
static void didCreateWebSocketImpl(InspectorAgent*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
static void willSendWebSocketHandshakeRequestImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeRequest&);
static void didReceiveWebSocketHandshakeResponseImpl(InspectorAgent*, unsigned long identifier, const WebSocketHandshakeResponse&);
static void didCloseWebSocketImpl(InspectorAgent*, unsigned long identifier);
#endif
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
static void networkStateChangedImpl(InspectorAgent*);
static void updateApplicationCacheStatusImpl(InspectorAgent*, Frame*);
#endif
static InspectorAgent* inspectorAgentForFrame(Frame*);
static InspectorAgent* inspectorAgentForContext(ScriptExecutionContext*);
static InspectorAgent* inspectorAgentForPage(Page*);
static InspectorAgent* inspectorAgentWithFrontendForContext(ScriptExecutionContext*);
static InspectorAgent* inspectorAgentWithFrontendForDocument(Document*);
static InspectorAgent* inspectorAgentWithFrontendForFrame(Frame*);
static InspectorAgent* inspectorAgentWithFrontendForPage(Page*);
static bool hasFrontend(InspectorAgent*);
static void pauseOnNativeEventIfNeeded(InspectorAgent*, const String& categoryType, const String& eventName, bool synchronous);
static void cancelPauseOnNativeEvent(InspectorAgent*);
static InspectorTimelineAgent* retrieveTimelineAgent(InspectorAgent*);
static InspectorTimelineAgent* retrieveTimelineAgent(const InspectorInstrumentationCookie&);
static InspectorResourceAgent* retrieveResourceAgent(InspectorAgent*);
static InspectorPageAgent* retrievePageAgent(InspectorAgent*);
static HashMap<Page*, InspectorAgent*>& inspectorAgents();
static int s_frontendCounter;
#endif
};
inline void InspectorInstrumentation::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
didClearWindowObjectInWorldImpl(inspectorAgent, frame, world);
#endif
}
inline void InspectorInstrumentation::inspectedPageDestroyed(Page* page)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
inspectedPageDestroyedImpl(inspectorAgent);
#endif
}
inline void InspectorInstrumentation::willInsertDOMNode(Document* document, Node* node, Node* parent)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
willInsertDOMNodeImpl(inspectorAgent, node, parent);
#endif
}
inline void InspectorInstrumentation::didInsertDOMNode(Document* document, Node* node)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
didInsertDOMNodeImpl(inspectorAgent, node);
#endif
}
inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node* node)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document)) {
willRemoveDOMNodeImpl(inspectorAgent, node);
didRemoveDOMNodeImpl(inspectorAgent, node);
}
#endif
}
inline void InspectorInstrumentation::willModifyDOMAttr(Document* document, Element* element)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
willModifyDOMAttrImpl(inspectorAgent, element);
#endif
}
inline void InspectorInstrumentation::didModifyDOMAttr(Document* document, Element* element)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
didModifyDOMAttrImpl(inspectorAgent, element);
#endif
}
inline void InspectorInstrumentation::didInvalidateStyleAttr(Document* document, Node* node)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
didInvalidateStyleAttrImpl(inspectorAgent, node);
#endif
}
inline void InspectorInstrumentation::mouseDidMoveOverElement(Page* page, const HitTestResult& result, unsigned modifierFlags)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
mouseDidMoveOverElementImpl(inspectorAgent, result, modifierFlags);
#endif
}
inline bool InspectorInstrumentation::handleMousePress(Page* page)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
return handleMousePressImpl(inspectorAgent);
#endif
return false;
}
inline void InspectorInstrumentation::characterDataModified(Document* document, CharacterData* characterData)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
characterDataModifiedImpl(inspectorAgent, characterData);
#endif
}
inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionContext* context, const String& url)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
willSendXMLHttpRequestImpl(inspectorAgent, url);
#endif
}
inline void InspectorInstrumentation::didScheduleResourceRequest(Document* document, const String& url)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
didScheduleResourceRequestImpl(inspectorAgent, url);
#endif
}
inline void InspectorInstrumentation::didInstallTimer(ScriptExecutionContext* context, int timerId, int timeout, bool singleShot)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
didInstallTimerImpl(inspectorAgent, timerId, timeout, singleShot);
#endif
}
inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* context, int timerId)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
didRemoveTimerImpl(inspectorAgent, timerId);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willCallFunction(Frame* frame, const String& scriptName, int scriptLine)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willCallFunctionImpl(inspectorAgent, scriptName, scriptLine);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didCallFunction(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didCallFunctionImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyState(ScriptExecutionContext* context, XMLHttpRequest* request)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
return willChangeXHRReadyStateImpl(inspectorAgent, request);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didChangeXHRReadyState(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didChangeXHRReadyStateImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
return willDispatchEventImpl(inspectorAgent, event, window, node, ancestors);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didDispatchEvent(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didDispatchEventImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindow(Frame* frame, const Event& event, DOMWindow* window)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willDispatchEventOnWindowImpl(inspectorAgent, event, window);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didDispatchEventOnWindow(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didDispatchEventOnWindowImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScript(Frame* frame, const String& url, int lineNumber)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willEvaluateScriptImpl(inspectorAgent, url, lineNumber);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didEvaluateScript(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didEvaluateScriptImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willFireTimer(ScriptExecutionContext* context, int timerId)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
return willFireTimerImpl(inspectorAgent, timerId);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didFireTimer(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didFireTimerImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willLayout(Frame* frame)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willLayoutImpl(inspectorAgent);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didLayout(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didLayoutImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHR(ScriptExecutionContext* context, XMLHttpRequest* request)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
return willLoadXHRImpl(inspectorAgent, request);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didLoadXHR(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didLoadXHRImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame, const IntRect& rect)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willPaintImpl(inspectorAgent, rect);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didPaintImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyle(Document* document)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
return willRecalculateStyleImpl(inspectorAgent);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didRecalculateStyle(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didRecalculateStyleImpl(cookie);
#endif
}
inline void InspectorInstrumentation::applyUserAgentOverride(Frame* frame, String* userAgent)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
applyUserAgentOverrideImpl(inspectorAgent, userAgent);
#endif
}
inline void InspectorInstrumentation::willSendRequest(Frame* frame, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* ic = inspectorAgentForFrame(frame))
willSendRequestImpl(ic, identifier, loader, request, redirectResponse);
#endif
}
inline void InspectorInstrumentation::markResourceAsCached(Page* page, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
markResourceAsCachedImpl(inspectorAgentForPage(page), identifier);
#endif
}
inline void InspectorInstrumentation::didLoadResourceFromMemoryCache(Page* page, DocumentLoader* loader, const CachedResource* resource)
{
#if ENABLE(INSPECTOR)
didLoadResourceFromMemoryCacheImpl(inspectorAgentForPage(page), loader, resource);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceData(Frame* frame, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
return willReceiveResourceDataImpl(inspectorAgent, identifier);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didReceiveResourceData(const InspectorInstrumentationCookie& cookie)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didReceiveResourceDataImpl(cookie);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponse(Frame* frame, unsigned long identifier, const ResourceResponse& response)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
return willReceiveResourceResponseImpl(inspectorAgent, identifier, response);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didReceiveResourceResponse(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response)
{
#if ENABLE(INSPECTOR)
// Call this unconditionally so that we're able to log to console with no front-end attached.
didReceiveResourceResponseImpl(cookie, identifier, loader, response);
#endif
}
inline void InspectorInstrumentation::continueAfterXFrameOptionsDenied(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
{
#if ENABLE(INSPECTOR)
if (inspectorAgentWithFrontendForFrame(frame))
InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl(frame, loader, identifier, r);
#endif
}
inline void InspectorInstrumentation::continueWithPolicyDownload(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
{
#if ENABLE(INSPECTOR)
if (inspectorAgentWithFrontendForFrame(frame))
InspectorInstrumentation::continueWithPolicyDownloadImpl(frame, loader, identifier, r);
#endif
}
inline void InspectorInstrumentation::continueWithPolicyIgnore(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r)
{
#if ENABLE(INSPECTOR)
if (inspectorAgentWithFrontendForFrame(frame))
InspectorInstrumentation::continueWithPolicyIgnoreImpl(frame, loader, identifier, r);
#endif
}
inline void InspectorInstrumentation::didReceiveContentLength(Frame* frame, unsigned long identifier, int dataLength, int encodedDataLength)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
didReceiveContentLengthImpl(inspectorAgent, identifier, dataLength, encodedDataLength);
#endif
}
inline void InspectorInstrumentation::didFinishLoading(Frame* frame, unsigned long identifier, double finishTime)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
didFinishLoadingImpl(inspectorAgent, identifier, finishTime);
#endif
}
inline void InspectorInstrumentation::didFailLoading(Frame* frame, unsigned long identifier, const ResourceError& error)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
didFailLoadingImpl(inspectorAgent, identifier, error);
#endif
}
inline void InspectorInstrumentation::resourceRetrievedByXMLHttpRequest(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
resourceRetrievedByXMLHttpRequestImpl(inspectorAgent, identifier, sourceString, url, sendURL, sendLineNumber);
#endif
}
inline void InspectorInstrumentation::scriptImported(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
scriptImportedImpl(inspectorAgent, identifier, sourceString);
#endif
}
inline void InspectorInstrumentation::domContentLoadedEventFired(Frame* frame, const KURL& url)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
domContentLoadedEventFiredImpl(inspectorAgent, frame, url);
#endif
}
inline void InspectorInstrumentation::loadEventFired(Frame* frame, const KURL& url)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
loadEventFiredImpl(inspectorAgent, frame, url);
#endif
}
inline void InspectorInstrumentation::frameDetachedFromParent(Frame* frame)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForFrame(frame))
frameDetachedFromParentImpl(inspectorAgent, frame);
#endif
}
inline void InspectorInstrumentation::didCommitLoad(Frame* frame, DocumentLoader* loader)
{
#if ENABLE(INSPECTOR)
if (!frame)
return;
Page* page = frame->page();
if (!page)
return;
if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
didCommitLoadImpl(page, inspectorAgent, loader);
#endif
}
inline InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTML(Document* document, unsigned int length, unsigned int startLine)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForDocument(document))
return willWriteHTMLImpl(inspectorAgent, length, startLine);
#endif
return InspectorInstrumentationCookie();
}
inline void InspectorInstrumentation::didWriteHTML(const InspectorInstrumentationCookie& cookie, unsigned int endLine)
{
#if ENABLE(INSPECTOR)
if (hasFrontends() && cookie.first)
didWriteHTMLImpl(cookie, endLine);
#endif
}
#if ENABLE(DOM_STORAGE)
inline void InspectorInstrumentation::didUseDOMStorage(Page* page, StorageArea* storageArea, bool isLocalStorage, Frame* frame)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page))
didUseDOMStorageImpl(inspectorAgent, storageArea, isLocalStorage, frame);
#endif
}
#endif
#if ENABLE(WORKERS)
inline void InspectorInstrumentation::didCreateWorker(ScriptExecutionContext* context, intptr_t id, const String& url, bool isSharedWorker)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
didCreateWorkerImpl(inspectorAgent, id, url, isSharedWorker);
#endif
}
inline void InspectorInstrumentation::didDestroyWorker(ScriptExecutionContext* context, intptr_t id)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForContext(context))
didDestroyWorkerImpl(inspectorAgent, id);
#endif
}
#endif
#if ENABLE(WEB_SOCKETS)
inline void InspectorInstrumentation::didCreateWebSocket(ScriptExecutionContext* context, unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
didCreateWebSocketImpl(inspectorAgent, identifier, requestURL, documentURL);
#endif
}
inline void InspectorInstrumentation::willSendWebSocketHandshakeRequest(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeRequest& request)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
willSendWebSocketHandshakeRequestImpl(inspectorAgent, identifier, request);
#endif
}
inline void InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeResponse& response)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
didReceiveWebSocketHandshakeResponseImpl(inspectorAgent, identifier, response);
#endif
}
inline void InspectorInstrumentation::didCloseWebSocket(ScriptExecutionContext* context, unsigned long identifier)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentForContext(context))
didCloseWebSocketImpl(inspectorAgent, identifier);
#endif
}
#endif
inline void InspectorInstrumentation::networkStateChanged(Page* page)
{
#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForPage(page))
networkStateChangedImpl(inspectorAgent);
#endif
}
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
inline void InspectorInstrumentation::updateApplicationCacheStatus(Frame* frame)
{
#if ENABLE(INSPECTOR)
if (InspectorAgent* inspectorAgent = inspectorAgentWithFrontendForFrame(frame))
updateApplicationCacheStatusImpl(inspectorAgent, frame);
#endif
}
#endif
#if ENABLE(INSPECTOR)
inline bool InspectorInstrumentation::hasFrontend(Page* page)
{
return inspectorAgentWithFrontendForPage(page);
}
#endif
#if ENABLE(INSPECTOR)
inline InspectorAgent* InspectorInstrumentation::inspectorAgentForContext(ScriptExecutionContext* context)
{
if (context && context->isDocument())
return inspectorAgentForPage(static_cast<Document*>(context)->page());
return 0;
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentForFrame(Frame* frame)
{
if (frame)
return inspectorAgentForPage(frame->page());
return 0;
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentForPage(Page* page)
{
if (!page)
return 0;
return inspectorAgents().get(page);
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForContext(ScriptExecutionContext* context)
{
if (hasFrontends() && context && context->isDocument())
return inspectorAgentWithFrontendForPage(static_cast<Document*>(context)->page());
return 0;
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForDocument(Document* document)
{
if (hasFrontends() && document)
return inspectorAgentWithFrontendForPage(document->page());
return 0;
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForFrame(Frame* frame)
{
if (hasFrontends() && frame)
return inspectorAgentWithFrontendForPage(frame->page());
return 0;
}
inline InspectorAgent* InspectorInstrumentation::inspectorAgentWithFrontendForPage(Page* page)
{
if (page) {
if (InspectorAgent* inspectorAgent = inspectorAgentForPage(page)) {
if (hasFrontend(inspectorAgent))
return inspectorAgent;
}
}
return 0;
}
#endif
} // namespace WebCore
#endif // !defined(InspectorInstrumentation_h)