blob: b333401d763afc5c45f3fdaba9a0546d92d14dc4 [file] [log] [blame]
/*
* Copyright (C) 2013 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.
*/
/*
* CodeGeneratorInstrumentation.py uses this file as a source to generate
* InspectorInstrumentationInl.h and InspectorInstrumentationImpl.cpp
*
* The code below is not a correct IDL but a mix of IDL and C++.
*
* The syntax for an instrumentation method is as follows:
*
* [methodAttributes] returnValue methodName([paramAttr1] param1, [paramAttr2] param2, ...)
*
* Where:
* methodAttributes - optional list of method attributes.
* Attributes containing "=" are code generation options:
* Inline=Custom - do not generate the public inline method.
* Inline=FastReturn - return early from the inline method if there are no frontends.
* Inline=Forward - generate a simple forwarding inline method that does not
modify the parameter list (implies Inline=FastReturn)
* Attributes without "=" are the names of the agents to be invoked.
* Examples: DOM, Page, Debugger.
*
* paramAttr - optional attribute controlling the parameters handling (one attribute per parameter max).
* Keep - pass first parameter (used to access the InstrumentingAgents instance) to agents.
* FastReturn - return early from the inline method if this parameter is 0/false.
*
* returnValue: C++ return value. Only "void" and "InspectorInstrumentationCookie" are supported.
*
* methodName: C++ name for the public instrumentation method and agents methods.
*
* paramList: C++ parameter list with optional names. Names will be deduced from types if omitted but you have to
* specify explicit names for multiple parameters of the same type.
*/
interface InspectorInstrumentation {
#include "core/dom/PseudoElement.h"
[Page, Inspector, PageDebugger, PageRuntime]
void didClearWindowObjectInWorld([Keep] Frame*, DOMWrapperWorld*);
[DOMDebugger, Inline=FastReturn]
void willInsertDOMNode([Keep] Node* parent);
[DOM, DOMDebugger, Inline=FastReturn]
void didInsertDOMNode([Keep] Node*);
[DOMDebugger, DOM, Inline=FastReturn]
void willRemoveDOMNode([Keep] Node*);
[DOMDebugger, DOM, Inline=FastReturn]
void willModifyDOMAttr([Keep] Element*, const AtomicString& oldValue, const AtomicString& newValue);
[DOM, Inline=FastReturn]
void didModifyDOMAttr([Keep] Element*, const AtomicString& name, const AtomicString& value);
[DOM, Inline=FastReturn]
void didRemoveDOMAttr([Keep] Element*, const AtomicString& name);
[DOM, Inline=FastReturn]
void characterDataModified([Keep] CharacterData*);
[DOM, DOMDebugger, Inline=FastReturn]
void didInvalidateStyleAttr([Keep] Node*);
[CSS, Inline=FastReturn]
void activeStyleSheetsUpdated([Keep] Document*, const Vector<RefPtr<StyleSheet> >& newSheets);
[Console]
void frameWindowDiscarded(Frame*, DOMWindow* domWindow);
[CSS, Inline=FastReturn]
void mediaQueryResultChanged(Document*);
[DOM, Inline=FastReturn]
void didPushShadowRoot([Keep] Element* host, ShadowRoot*);
[DOM, Inline=FastReturn]
void willPopShadowRoot([Keep] Element* host, ShadowRoot*);
[CSS, Inline=FastReturn]
void didCreateNamedFlow([Keep] Document*, NamedFlow*);
[CSS, Inline=FastReturn]
void willRemoveNamedFlow([Keep] Document*, NamedFlow*);
[CSS, Inline=FastReturn]
void didUpdateRegionLayout([Keep] Document*, NamedFlow*);
[CSS, Inline=FastReturn]
void didChangeRegionOverset([Keep] Document*, NamedFlow*);
[DOMDebugger, Inline=FastReturn]
void willSendXMLHttpRequest(ExecutionContext*, const String& url);
[DOMDebugger, Inline=FastReturn]
void didFireWebGLError(Element*, const String& errorName);
[DOMDebugger, Inline=FastReturn]
void didFireWebGLWarning(Element*);
[DOMDebugger, Inline=FastReturn]
void didFireWebGLErrorOrWarning(Element*, const String& message);
[Timeline, Inline=FastReturn]
void didScheduleResourceRequest([Keep] Document*, const String& url);
[DOMDebugger, Timeline, Inline=FastReturn]
void didInstallTimer([Keep] ExecutionContext*, int timerId, int timeout, bool singleShot);
[DOMDebugger, Timeline, Inline=FastReturn]
void didRemoveTimer([Keep] ExecutionContext*, int timerId);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willCallFunction([Keep] ExecutionContext*, const String& scriptName, int scriptLine);
[Timeline, Inline=FastReturn]
void didCallFunction(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willDispatchXHRReadyStateChangeEvent([Keep] ExecutionContext*, XMLHttpRequest*);
[Timeline, Inline=FastReturn]
void didDispatchXHRReadyStateChangeEvent(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willDispatchEvent([Keep] Document*, const Event&, DOMWindow*, Node*, const EventPath&);
[Timeline, Inline=FastReturn]
void didDispatchEvent(const InspectorInstrumentationCookie&);
[DOMDebugger, Inline=FastReturn]
InspectorInstrumentationCookie willHandleEvent(ExecutionContext*, Event*);
[Debugger, Inline=FastReturn]
void didHandleEvent(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willDispatchEventOnWindow(Frame*, const Event&, DOMWindow*);
[Timeline, Inline=FastReturn]
void didDispatchEventOnWindow(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willEvaluateScript([Keep] Frame*, const String& url, int lineNumber);
[Timeline, Inline=FastReturn]
void didEvaluateScript(const InspectorInstrumentationCookie&);
[Page, Inline=FastReturn]
void scriptsEnabled(Page*, bool isEnabled);
[PageRuntime, Inline=FastReturn]
void didCreateIsolatedContext([Keep] Frame*, ScriptState*, SecurityOrigin*);
[DOMDebugger, Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willFireTimer([Keep] ExecutionContext*, int timerId);
[Debugger, Timeline, Inline=FastReturn]
void didFireTimer(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
void didInvalidateLayout([Keep] Frame*);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willLayout([Keep] Frame*);
[Timeline, Page, Inline=FastReturn]
void didLayout(const InspectorInstrumentationCookie&, RenderObject* root);
[Timeline, Inline=FastReturn]
void willAutosizeText([Keep] RenderObject* root);
[Timeline, Inline=FastReturn]
void didAutosizeText([Keep] RenderObject* root);
[Page, Inline=FastReturn]
void didScroll(Page*);
[Page, Inline=FastReturn]
void didResizeMainFrame(Page*);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willDispatchXHRLoadEvent([Keep] ExecutionContext*, XMLHttpRequest*);
[Timeline, Inline=FastReturn]
void didDispatchXHRLoadEvent(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
void willScrollLayer([Keep] RenderObject*);
[Timeline, Inline=FastReturn]
void didScrollLayer(RenderObject*);
[Timeline, Inline=FastReturn]
void willPaint([Keep] RenderObject*);
[Timeline, Page, LayerTree, Inline=FastReturn]
void didPaint([Keep] RenderObject*, GraphicsContext*, const LayoutRect&);
[Timeline, Inline=FastReturn]
void willPaintImage([Keep] RenderImage*);
[Timeline, Inline=FastReturn]
void didPaintImage(RenderImage*);
[Resource, Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willRecalculateStyle([Keep] Document*);
[Timeline, Resource, Page, Inline=FastReturn]
void didRecalculateStyle(const InspectorInstrumentationCookie&);
[Timeline, Inline=FastReturn]
void didRecalculateStyleForElement(Element*);
[Timeline, Resource, Inline=FastReturn]
void didScheduleStyleRecalculation([Keep] Document*);
[Resource, Inline=FastReturn]
void applyUserAgentOverride(Frame*, String* userAgent);
[Page, Inline=FastReturn]
void applyEmulatedMedia(Frame*, String* media);
[Timeline, Resource]
void willSendRequest(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse, const FetchInitiatorInfo&);
void continueAfterPingLoader(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse&);
[Resource]
void markResourceAsCached(Page*, unsigned long identifier);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willReceiveResourceData([Keep] Frame*, unsigned long identifier, int length);
[Timeline, Inline=FastReturn]
void didReceiveResourceData(const InspectorInstrumentationCookie&);
[Timeline]
InspectorInstrumentationCookie willReceiveResourceResponse([Keep] Frame*, unsigned long identifier, const ResourceResponse&);
[Timeline, Resource, Console] // Console should come AFTER Resource notification, front-end relies on this.
void didReceiveResourceResponse(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
[Inline=Forward]
void continueAfterXFrameOptionsDenied(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
[Inline=Forward]
void continueWithPolicyDownload(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
[Inline=Forward]
void continueWithPolicyIgnore(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
[Resource]
void didReceiveData(Frame*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
[Timeline, Resource]
void didFinishLoading(Frame* frame, unsigned long identifier, DocumentLoader*, double finishTime);
[Resource]
void didReceiveCORSRedirectResponse(Frame*, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
[Timeline, Resource, Console] // Console should come AFTER Resource notification, front-end relies on this.
void didFailLoading(Frame* frame, unsigned long identifier, DocumentLoader*, const ResourceError&);
[Resource]
void documentThreadableLoaderStartedLoadingForClient(ExecutionContext*, unsigned long identifier, ThreadableLoaderClient* client);
[Resource]
void willLoadXHR(ExecutionContext*, ThreadableLoaderClient* client, const String& method, const KURL& url, bool async, PassRefPtr<FormData>, const HTTPHeaderMap& headers, bool includeCredentials);
[Resource]
void didFailXHRLoading(ExecutionContext*, ThreadableLoaderClient* client);
[Console, Resource]
void didFinishXHRLoading(ExecutionContext*, ThreadableLoaderClient* client, unsigned long identifier, ScriptString sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
[Resource]
void didReceiveXHRResponse(ExecutionContext*, unsigned long identifier);
[Resource]
void scriptImported(ExecutionContext*, unsigned long identifier, const String& sourceString);
[Debugger]
void scriptExecutionBlockedByCSP(ExecutionContext*, const String& directiveText);
[Resource]
void didReceiveScriptResponse(ExecutionContext*, unsigned long identifier);
[Timeline, Inspector, DOM, Page]
void domContentLoadedEventFired([Keep] Frame*);
[Timeline, Page]
void loadEventFired([Keep] Frame*);
[Page]
void frameAttachedToParent([Keep] Frame*);
[Canvas, Page, CSS]
void frameDetachedFromParent([Keep] Frame*);
[Page, Inline=FastReturn]
void childDocumentOpened([Keep] Document*);
[Console, Resource, CSS, Database, DOM, Inspector, Canvas, Page, PageDebugger]
void didCommitLoad([Keep] Frame*, DocumentLoader*);
[DOM, Inline=FastReturn]
void frameDocumentUpdated([Keep] Frame*);
[Page]
void loaderDetachedFromFrame(Frame*, DocumentLoader*);
[Page]
void frameStartedLoading([Keep] Frame*);
[Page]
void frameStoppedLoading([Keep] Frame*);
[Page, Resource]
void frameScheduledNavigation([Keep] Frame*, double delay);
[Page, Resource]
void frameClearedScheduledNavigation([Keep] Frame*);
[Page, Inline=FastReturn]
InspectorInstrumentationCookie willRunJavaScriptDialog(Page*, const String& message);
[Page, Inline=FastReturn]
void didRunJavaScriptDialog(const InspectorInstrumentationCookie&);
[Inline=Forward]
void willDestroyResource(Resource* cachedResource);
[Timeline, Inline=FastReturn]
InspectorInstrumentationCookie willWriteHTML([Keep] Document*, unsigned startLine);
[Timeline, Inline=FastReturn]
void didWriteHTML(const InspectorInstrumentationCookie&, unsigned endLine);
[DOMDebugger, Timeline]
void didRequestAnimationFrame([Keep] Document*, int callbackId);
[DOMDebugger, Timeline]
void didCancelAnimationFrame([Keep] Document*, int callbackId);
[DOMDebugger, Timeline]
InspectorInstrumentationCookie willFireAnimationFrame([Keep] Document*, int callbackId);
[Timeline, Inline=FastReturn]
void didFireAnimationFrame(const InspectorInstrumentationCookie&);
[DOMStorage, Inline=FastReturn]
void didDispatchDOMStorageEvent(Page* page, const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin);
[Worker]
void didStartWorkerGlobalScope(ExecutionContext*, WorkerGlobalScopeProxy* proxy, const KURL& url);
[WorkerRuntime]
void willEvaluateWorkerScript([Keep] WorkerGlobalScope* context, int workerThreadStartMode);
[Worker]
void workerGlobalScopeTerminated(ExecutionContext*, WorkerGlobalScopeProxy* proxy);
[Profiler, Timeline]
void willProcessTask(WorkerGlobalScope* context);
[Profiler, Timeline]
void didProcessTask(WorkerGlobalScope* context);
[Profiler]
void willEnterNestedRunLoop(WorkerGlobalScope* context);
[Profiler]
void didLeaveNestedRunLoop(WorkerGlobalScope* context);
[Resource, Timeline]
void didCreateWebSocket([Keep] Document*, unsigned long identifier, const KURL& requestURL, const String& protocol);
[Resource, Timeline]
void willSendWebSocketHandshakeRequest([Keep] Document*, unsigned long identifier, const WebSocketHandshakeRequest& request);
[Resource, Timeline]
void didReceiveWebSocketHandshakeResponse([Keep] Document*, unsigned long identifier, const WebSocketHandshakeResponse& response);
[Resource, Timeline]
void didCloseWebSocket([Keep] Document*, unsigned long identifier);
[Resource]
void didReceiveWebSocketFrame(Document*, unsigned long identifier, const WebSocketFrame& frame);
[Resource]
void didSendWebSocketFrame(Document*, unsigned long identifier, const WebSocketFrame& frame);
[Resource]
void didReceiveWebSocketFrameError(Document*, unsigned long identifier, const String& errorMessage);
[ApplicationCache, Inline=FastReturn]
void networkStateChanged(Page*, bool online);
[ApplicationCache, Inline=FastReturn]
void updateApplicationCacheStatus([Keep] Frame*);
[LayerTree]
void layerTreeDidChange(Page*);
[DOM, Inline=FastReturn]
void pseudoElementCreated([Keep] PseudoElement*);
[DOM, Inline=FastReturn]
void pseudoElementDestroyed([Keep] PseudoElement*);
}
interface InspectorConsoleInstrumentation {
#include "core/inspector/ScriptArguments.h"
#include "core/inspector/ScriptCallStack.h"
#include "core/inspector/ScriptProfile.h"
// FIXME: Convert to ScriptArguments to match non-worker context.
// Use the same implementation as above as a similar method dispatched on Page.
[Console]
void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, unsigned long requestIdentifier = 0);
// Use the same implementation as above as a similar method dispatched on Page.
[Console]
void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& scriptId, unsigned lineNumber, unsigned columnNumber, ScriptState* state, unsigned long requestIdentifier = 0);
[Console, Debugger]
void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptState* state, PassRefPtr<ScriptArguments> arguments, unsigned long requestIdentifier = 0);
[Console]
void consoleCount(ExecutionContext* context, ScriptState* state, PassRefPtr<ScriptArguments> arguments);
[Timeline, Console]
void consoleTime([Keep] ExecutionContext* context, const String& title);
[Console, Timeline]
void consoleTimeEnd([Keep] ExecutionContext* context, const String& title, ScriptState* state);
[Timeline, Inline=FastReturn]
void consoleTimeStamp([Keep] ExecutionContext* context, const String& title);
[Console, Inline=FastReturn]
void consoleTimeline([Keep] ExecutionContext* context, const String& title, ScriptState* state);
[Console, Inline=FastReturn]
void consoleTimelineEnd([Keep] ExecutionContext* context, const String& title, ScriptState* state);
[Profiler]
void addProfile(ExecutionContext* context, PassRefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack);
}
interface InspectorDatabaseInstrumentation {
#include "modules/webdatabase/Database.h"
[Database]
void didOpenDatabase(ExecutionContext* context, PassRefPtr<Database> database, const String& domain, const String& name, const String& version);
}
interface InspectorOverrides {
[CSS, Inline=FastReturn]
bool forcePseudoState([Keep] Element* element, CSSSelector::PseudoType pseudoState);
[Worker, Inline=FastReturn]
bool shouldPauseDedicatedWorkerOnStart(ExecutionContext* context);
[Page, Inline=FastReturn]
GeolocationPosition* overrideGeolocationPosition(Page* page, [DefaultReturn] GeolocationPosition* position);
[Page, Inline=FastReturn]
float overrideTextAutosizingFontScaleFactor(Page* page, [DefaultReturn] float fontScaleFactor);
[Page, Inline=FastReturn]
bool overrideTextAutosizing(Page* page, [DefaultReturn] bool textAutosizing);
[Profiler]
String getCurrentUserInitiatedProfileName(ExecutionContext* context, bool incrementProfileNumber);
}
interface InspectorCanvasInstrumentation {
#include "bindings/v8/ScriptObject.h"
[Canvas]
ScriptObject wrapCanvas2DRenderingContextForInstrumentation(Document*, const ScriptObject&);
[Canvas]
ScriptObject wrapWebGLRenderingContextForInstrumentation(Document*, const ScriptObject&);
}