diff options
Diffstat (limited to 'Source/WebCore/inspector/InspectorInstrumentation.cpp')
-rw-r--r-- | Source/WebCore/inspector/InspectorInstrumentation.cpp | 1151 |
1 files changed, 572 insertions, 579 deletions
diff --git a/Source/WebCore/inspector/InspectorInstrumentation.cpp b/Source/WebCore/inspector/InspectorInstrumentation.cpp index df1357227..87f0d93ff 100644 --- a/Source/WebCore/inspector/InspectorInstrumentation.cpp +++ b/Source/WebCore/inspector/InspectorInstrumentation.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 Google Inc. All rights reserved. +* Copyright (C) 2014-2017 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -31,12 +32,6 @@ #include "config.h" #include "InspectorInstrumentation.h" -#if ENABLE(INSPECTOR) - -#include "CSSRule.h" -#include "CSSStyleRule.h" -#include "ConsoleAPITypes.h" -#include "ConsoleTypes.h" #include "DOMWindow.h" #include "DOMWrapperWorld.h" #include "Database.h" @@ -45,38 +40,37 @@ #include "EventDispatcher.h" #include "InspectorApplicationCacheAgent.h" #include "InspectorCSSAgent.h" -#include "InspectorCanvasAgent.h" -#include "InspectorConsoleAgent.h" #include "InspectorDOMAgent.h" #include "InspectorDOMDebuggerAgent.h" #include "InspectorDOMStorageAgent.h" #include "InspectorDatabaseAgent.h" -#include "InspectorHeapProfilerAgent.h" #include "InspectorLayerTreeAgent.h" +#include "InspectorMemoryAgent.h" +#include "InspectorNetworkAgent.h" #include "InspectorPageAgent.h" -#include "InspectorProfilerAgent.h" -#include "InspectorResourceAgent.h" #include "InspectorTimelineAgent.h" #include "InspectorWorkerAgent.h" #include "InstrumentingAgents.h" #include "MainFrame.h" #include "PageDebuggerAgent.h" +#include "PageHeapAgent.h" #include "PageRuntimeAgent.h" #include "RenderObject.h" #include "RenderView.h" -#include "ScriptArguments.h" -#include "ScriptCallStack.h" #include "ScriptController.h" -#include "ScriptProfile.h" -#include "StyleResolver.h" -#include "StyleRule.h" -#include "WorkerGlobalScope.h" -#include "WorkerRuntimeAgent.h" -#include "WorkerThread.h" -#include "XMLHttpRequest.h" +#include "WebConsoleAgent.h" +#include "WebSocketFrame.h" +#include <inspector/ConsoleMessage.h> +#include <inspector/ScriptArguments.h> +#include <inspector/ScriptCallStack.h> #include <inspector/agents/InspectorDebuggerAgent.h> +#include <runtime/ConsoleTypes.h> #include <wtf/StdLibExtras.h> -#include <wtf/text/CString.h> + +#if ENABLE(WEB_REPLAY) +#include "InspectorReplayAgent.h" +#include "ReplayController.h" +#endif using namespace Inspector; @@ -89,276 +83,312 @@ static const char* const setTimerEventName = "setTimer"; static const char* const clearTimerEventName = "clearTimer"; static const char* const timerFiredEventName = "timerFired"; +enum AsyncCallType { + AsyncCallTypeRequestAnimationFrame, + AsyncCallTypeTimer, +}; + namespace { -static HashSet<InstrumentingAgents*>* instrumentingAgentsSet = nullptr; +static HashSet<InstrumentingAgents*>* s_instrumentingAgentsSet = nullptr; } int InspectorInstrumentation::s_frontendCounter = 0; +static void didScheduleAsyncCall(InstrumentingAgents& instrumentingAgents, AsyncCallType type, int callbackId, ScriptExecutionContext& context, bool singleShot) +{ + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) { + JSC::ExecState* scriptState = context.execState(); + if (!scriptState) + return; + + debuggerAgent->didScheduleAsyncCall(scriptState, type, callbackId, singleShot); + } +} + static Frame* frameForScriptExecutionContext(ScriptExecutionContext* context) { Frame* frame = nullptr; - if (context->isDocument()) - frame = toDocument(context)->frame(); + if (is<Document>(*context)) + frame = downcast<Document>(*context).frame(); + return frame; +} + +static Frame* frameForScriptExecutionContext(ScriptExecutionContext& context) +{ + Frame* frame = nullptr; + if (is<Document>(context)) + frame = downcast<Document>(context).frame(); return frame; } -void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, DOMWrapperWorld& world) +void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, DOMWrapperWorld& world) { - InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent(); + InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent(); if (pageAgent) - pageAgent->didClearWindowObjectInWorld(frame, world); - if (PageDebuggerAgent* debuggerAgent = instrumentingAgents->pageDebuggerAgent()) { - if (pageAgent && &world == &mainThreadNormalWorld() && frame == pageAgent->mainFrame()) + pageAgent->didClearWindowObjectInWorld(&frame, world); + if (PageDebuggerAgent* debuggerAgent = instrumentingAgents.pageDebuggerAgent()) { + if (pageAgent && &world == &mainThreadNormalWorld() && &frame == &pageAgent->mainFrame()) debuggerAgent->didClearMainFrameWindowObject(); } - if (PageRuntimeAgent* pageRuntimeAgent = instrumentingAgents->pageRuntimeAgent()) { + if (PageRuntimeAgent* pageRuntimeAgent = instrumentingAgents.pageRuntimeAgent()) { if (&world == &mainThreadNormalWorld()) pageRuntimeAgent->didCreateMainWorldContext(frame); } } -bool InspectorInstrumentation::isDebuggerPausedImpl(InstrumentingAgents* instrumentingAgents) +bool InspectorInstrumentation::isDebuggerPausedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) return debuggerAgent->isPaused(); return false; } -void InspectorInstrumentation::willInsertDOMNodeImpl(InstrumentingAgents* instrumentingAgents, Node* parent) +void InspectorInstrumentation::willInsertDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& parent) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->willInsertDOMNode(parent); } -void InspectorInstrumentation::didInsertDOMNodeImpl(InstrumentingAgents* instrumentingAgents, Node* node) +void InspectorInstrumentation::didInsertDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& node) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didInsertDOMNode(node); - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->didInsertDOMNode(node); } -void InspectorInstrumentation::willRemoveDOMNodeImpl(InstrumentingAgents* instrumentingAgents, Node* node) +void InspectorInstrumentation::willRemoveDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& node) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->willRemoveDOMNode(node); } -void InspectorInstrumentation::didRemoveDOMNodeImpl(InstrumentingAgents* instrumentingAgents, Node* node) +void InspectorInstrumentation::didRemoveDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& node) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->didRemoveDOMNode(node); - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didRemoveDOMNode(node); } -void InspectorInstrumentation::willModifyDOMAttrImpl(InstrumentingAgents* instrumentingAgents, Element* element, const AtomicString& oldValue, const AtomicString& newValue) +void InspectorInstrumentation::willModifyDOMAttrImpl(InstrumentingAgents& instrumentingAgents, Element& element, const AtomicString& oldValue, const AtomicString& newValue) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->willModifyDOMAttr(element); - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->willModifyDOMAttr(element, oldValue, newValue); } -void InspectorInstrumentation::didModifyDOMAttrImpl(InstrumentingAgents* instrumentingAgents, Element* element, const AtomicString& name, const AtomicString& value) +void InspectorInstrumentation::didModifyDOMAttrImpl(InstrumentingAgents& instrumentingAgents, Element& element, const AtomicString& name, const AtomicString& value) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didModifyDOMAttr(element, name, value); } -void InspectorInstrumentation::didRemoveDOMAttrImpl(InstrumentingAgents* instrumentingAgents, Element* element, const AtomicString& name) +void InspectorInstrumentation::didRemoveDOMAttrImpl(InstrumentingAgents& instrumentingAgents, Element& element, const AtomicString& name) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didRemoveDOMAttr(element, name); } -void InspectorInstrumentation::didInvalidateStyleAttrImpl(InstrumentingAgents* instrumentingAgents, Node* node) +void InspectorInstrumentation::didInvalidateStyleAttrImpl(InstrumentingAgents& instrumentingAgents, Node& node) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didInvalidateStyleAttr(node); - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->didInvalidateStyleAttr(node); } -void InspectorInstrumentation::frameWindowDiscardedImpl(InstrumentingAgents* instrumentingAgents, DOMWindow* window) +void InspectorInstrumentation::documentDetachedImpl(InstrumentingAgents& instrumentingAgents, Document& document) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) + cssAgent->documentDetached(document); +} + +void InspectorInstrumentation::frameWindowDiscardedImpl(InstrumentingAgents& instrumentingAgents, DOMWindow* window) +{ + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) consoleAgent->frameWindowDiscarded(window); } -void InspectorInstrumentation::mediaQueryResultChangedImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::mediaQueryResultChangedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) cssAgent->mediaQueryResultChanged(); } -void InspectorInstrumentation::didPushShadowRootImpl(InstrumentingAgents* instrumentingAgents, Element* host, ShadowRoot* root) +void InspectorInstrumentation::activeStyleSheetsUpdatedImpl(InstrumentingAgents& instrumentingAgents, Document& document) +{ + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) + cssAgent->activeStyleSheetsUpdated(document); +} + +void InspectorInstrumentation::didPushShadowRootImpl(InstrumentingAgents& instrumentingAgents, Element& host, ShadowRoot& root) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->didPushShadowRoot(host, root); } -void InspectorInstrumentation::willPopShadowRootImpl(InstrumentingAgents* instrumentingAgents, Element* host, ShadowRoot* root) +void InspectorInstrumentation::willPopShadowRootImpl(InstrumentingAgents& instrumentingAgents, Element& host, ShadowRoot& root) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->willPopShadowRoot(host, root); } -void InspectorInstrumentation::didCreateNamedFlowImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow) +void InspectorInstrumentation::didChangeCustomElementStateImpl(InstrumentingAgents& instrumentingAgents, Element& element) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) - cssAgent->didCreateNamedFlow(document, namedFlow); + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) + domAgent->didChangeCustomElementState(element); } -void InspectorInstrumentation::willRemoveNamedFlowImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow) +void InspectorInstrumentation::pseudoElementCreatedImpl(InstrumentingAgents& instrumentingAgents, PseudoElement& pseudoElement) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) - cssAgent->willRemoveNamedFlow(document, namedFlow); + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) + domAgent->pseudoElementCreated(pseudoElement); +} + +void InspectorInstrumentation::pseudoElementDestroyedImpl(InstrumentingAgents& instrumentingAgents, PseudoElement& pseudoElement) +{ + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) + domAgent->pseudoElementDestroyed(pseudoElement); + if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents.inspectorLayerTreeAgent()) + layerTreeAgent->pseudoElementDestroyed(pseudoElement); } -void InspectorInstrumentation::didUpdateRegionLayoutImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow) +void InspectorInstrumentation::didCreateNamedFlowImpl(InstrumentingAgents& instrumentingAgents, Document* document, WebKitNamedFlow& namedFlow) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) - cssAgent->didUpdateRegionLayout(document, namedFlow); + if (!document) + return; + + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) + cssAgent->didCreateNamedFlow(*document, namedFlow); +} + +void InspectorInstrumentation::willRemoveNamedFlowImpl(InstrumentingAgents& instrumentingAgents, Document* document, WebKitNamedFlow& namedFlow) +{ + if (!document) + return; + + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) + cssAgent->willRemoveNamedFlow(*document, namedFlow); } -void InspectorInstrumentation::didChangeRegionOversetImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow) +void InspectorInstrumentation::didChangeRegionOversetImpl(InstrumentingAgents& instrumentingAgents, Document& document, WebKitNamedFlow& namedFlow) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) cssAgent->didChangeRegionOverset(document, namedFlow); } -void InspectorInstrumentation::didRegisterNamedFlowContentElementImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow, Node* contentElement, Node* nextContentElement) +void InspectorInstrumentation::didRegisterNamedFlowContentElementImpl(InstrumentingAgents& instrumentingAgents, Document& document, WebKitNamedFlow& namedFlow, Node& contentElement, Node* nextContentElement) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) cssAgent->didRegisterNamedFlowContentElement(document, namedFlow, contentElement, nextContentElement); } -void InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl(InstrumentingAgents* instrumentingAgents, Document* document, WebKitNamedFlow* namedFlow, Node* contentElement) +void InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl(InstrumentingAgents& instrumentingAgents, Document& document, WebKitNamedFlow& namedFlow, Node& contentElement) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) cssAgent->didUnregisterNamedFlowContentElement(document, namedFlow, contentElement); } -void InspectorInstrumentation::mouseDidMoveOverElementImpl(InstrumentingAgents* instrumentingAgents, const HitTestResult& result, unsigned modifierFlags) +void InspectorInstrumentation::mouseDidMoveOverElementImpl(InstrumentingAgents& instrumentingAgents, const HitTestResult& result, unsigned modifierFlags) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->mouseDidMoveOverElement(result, modifierFlags); } -void InspectorInstrumentation::didScrollImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::didScrollImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->didScroll(); } -bool InspectorInstrumentation::handleTouchEventImpl(InstrumentingAgents* instrumentingAgents, Node* node) +bool InspectorInstrumentation::handleTouchEventImpl(InstrumentingAgents& instrumentingAgents, Node& node) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) return domAgent->handleTouchEvent(node); return false; } -bool InspectorInstrumentation::handleMousePressImpl(InstrumentingAgents* instrumentingAgents) +bool InspectorInstrumentation::handleMousePressImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) return domAgent->handleMousePress(); return false; } -bool InspectorInstrumentation::forcePseudoStateImpl(InstrumentingAgents* instrumentingAgents, Element* element, CSSSelector::PseudoType pseudoState) +bool InspectorInstrumentation::forcePseudoStateImpl(InstrumentingAgents& instrumentingAgents, const Element& element, CSSSelector::PseudoClassType pseudoState) { - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) return cssAgent->forcePseudoState(element, pseudoState); return false; } -void InspectorInstrumentation::characterDataModifiedImpl(InstrumentingAgents* instrumentingAgents, CharacterData* characterData) +void InspectorInstrumentation::characterDataModifiedImpl(InstrumentingAgents& instrumentingAgents, CharacterData& characterData) { - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->characterDataModified(characterData); } -void InspectorInstrumentation::willSendXMLHttpRequestImpl(InstrumentingAgents* instrumentingAgents, const String& url) +void InspectorInstrumentation::willSendXMLHttpRequestImpl(InstrumentingAgents& instrumentingAgents, const String& url) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) domDebuggerAgent->willSendXMLHttpRequest(url); } -void InspectorInstrumentation::didScheduleResourceRequestImpl(InstrumentingAgents* instrumentingAgents, const String& url, Frame* frame) -{ - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didScheduleResourceRequest(url, frame); -} - -void InspectorInstrumentation::didInstallTimerImpl(InstrumentingAgents* instrumentingAgents, int timerId, int timeout, bool singleShot, ScriptExecutionContext* context) +void InspectorInstrumentation::didInstallTimerImpl(InstrumentingAgents& instrumentingAgents, int timerId, std::chrono::milliseconds timeout, bool singleShot, ScriptExecutionContext& context) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, setTimerEventName, true); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + didScheduleAsyncCall(instrumentingAgents, AsyncCallTypeTimer, timerId, context, singleShot); + + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didInstallTimer(timerId, timeout, singleShot, frameForScriptExecutionContext(context)); } -void InspectorInstrumentation::didRemoveTimerImpl(InstrumentingAgents* instrumentingAgents, int timerId, ScriptExecutionContext* context) +void InspectorInstrumentation::didRemoveTimerImpl(InstrumentingAgents& instrumentingAgents, int timerId, ScriptExecutionContext& context) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, clearTimerEventName, true); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) + debuggerAgent->didCancelAsyncCall(AsyncCallTypeTimer, timerId); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didRemoveTimer(timerId, frameForScriptExecutionContext(context)); } -InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InstrumentingAgents* instrumentingAgents, const String& scriptName, int scriptLine, ScriptExecutionContext* context) +InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InstrumentingAgents& instrumentingAgents, const String& scriptName, int scriptLine, ScriptExecutionContext* context) { int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { timelineAgent->willCallFunction(scriptName, scriptLine, frameForScriptExecutionContext(context)); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } -void InspectorInstrumentation::didCallFunctionImpl(const InspectorInstrumentationCookie& cookie) -{ - if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didCallFunction(); -} - -InspectorInstrumentationCookie InspectorInstrumentation::willDispatchXHRReadyStateChangeEventImpl(InstrumentingAgents* instrumentingAgents, XMLHttpRequest* request, ScriptExecutionContext* context) -{ - int timelineAgentId = 0; - InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); - if (timelineAgent && request->hasEventListeners(eventNames().readystatechangeEvent)) { - timelineAgent->willDispatchXHRReadyStateChangeEvent(request->url().string(), request->readyState(), frameForScriptExecutionContext(context)); - timelineAgentId = timelineAgent->id(); - } - return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); -} - -void InspectorInstrumentation::didDispatchXHRReadyStateChangeEventImpl(const InspectorInstrumentationCookie& cookie) +void InspectorInstrumentation::didCallFunctionImpl(const InspectorInstrumentationCookie& cookie, ScriptExecutionContext* context) { if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didDispatchXHRReadyStateChangeEvent(); + timelineAgent->didCallFunction(frameForScriptExecutionContext(context)); } -InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InstrumentingAgents* instrumentingAgents, const Event& event, bool hasEventListeners, Document* document) +InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InstrumentingAgents& instrumentingAgents, Document& document, const Event& event, bool hasEventListeners) { int timelineAgentId = 0; - InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); + InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent(); if (timelineAgent && hasEventListeners) { - timelineAgent->willDispatchEvent(event, document->frame()); + timelineAgent->willDispatchEvent(event, document.frame()); timelineAgentId = timelineAgent->id(); } +#if ENABLE(WEB_REPLAY) + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->willDispatchEvent(event, document.frame()); +#endif return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } -InspectorInstrumentationCookie InspectorInstrumentation::willHandleEventImpl(InstrumentingAgents* instrumentingAgents, Event* event) -{ - pauseOnNativeEventIfNeeded(instrumentingAgents, true, event->type(), false); - return InspectorInstrumentationCookie(instrumentingAgents, 0); -} - -void InspectorInstrumentation::didHandleEventImpl(const InspectorInstrumentationCookie& cookie) +void InspectorInstrumentation::willHandleEventImpl(InstrumentingAgents& instrumentingAgents, const Event& event) { - cancelPauseOnNativeEvent(cookie.instrumentingAgents()); + pauseOnNativeEventIfNeeded(instrumentingAgents, true, event.type(), false); } void InspectorInstrumentation::didDispatchEventImpl(const InspectorInstrumentationCookie& cookie) @@ -367,14 +397,18 @@ void InspectorInstrumentation::didDispatchEventImpl(const InspectorInstrumentati timelineAgent->didDispatchEvent(); } -InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InstrumentingAgents* instrumentingAgents, const Event& event, DOMWindow* window) +InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InstrumentingAgents& instrumentingAgents, const Event& event, DOMWindow& window) { int timelineAgentId = 0; - InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); - if (timelineAgent && window->hasEventListeners(event.type())) { - timelineAgent->willDispatchEvent(event, window ? window->frame() : nullptr); + InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent(); + if (timelineAgent && window.hasEventListeners(event.type())) { + timelineAgent->willDispatchEvent(event, window.frame()); timelineAgentId = timelineAgent->id(); } +#if ENABLE(WEB_REPLAY) + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->willDispatchEvent(event, window.frame()); +#endif return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } @@ -384,40 +418,31 @@ void InspectorInstrumentation::didDispatchEventOnWindowImpl(const InspectorInstr timelineAgent->didDispatchEvent(); } -InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScriptImpl(InstrumentingAgents* instrumentingAgents, const String& url, int lineNumber, Frame* frame) +InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScriptImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, const String& url, int lineNumber) { int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { timelineAgent->willEvaluateScript(url, lineNumber, frame); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } -void InspectorInstrumentation::didEvaluateScriptImpl(const InspectorInstrumentationCookie& cookie) +void InspectorInstrumentation::didEvaluateScriptImpl(const InspectorInstrumentationCookie& cookie, Frame& frame) { if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didEvaluateScript(); -} - -void InspectorInstrumentation::scriptsEnabledImpl(InstrumentingAgents* instrumentingAgents, bool isEnabled) -{ - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) - pageAgent->scriptsEnabled(isEnabled); + timelineAgent->didEvaluateScript(frame); } -void InspectorInstrumentation::didCreateIsolatedContextImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, JSC::ExecState* scriptState, SecurityOrigin* origin) -{ - if (PageRuntimeAgent* runtimeAgent = instrumentingAgents->pageRuntimeAgent()) - runtimeAgent->didCreateIsolatedContext(frame, scriptState, origin); -} - -InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InstrumentingAgents* instrumentingAgents, int timerId, ScriptExecutionContext* context) +InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InstrumentingAgents& instrumentingAgents, int timerId, ScriptExecutionContext& context) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, timerFiredEventName, false); + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) + debuggerAgent->willDispatchAsyncCall(AsyncCallTypeTimer, timerId); + int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { timelineAgent->willFireTimer(timerId, frameForScriptExecutionContext(context)); timelineAgentId = timelineAgent->id(); } @@ -426,29 +451,29 @@ InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(Instr void InspectorInstrumentation::didFireTimerImpl(const InspectorInstrumentationCookie& cookie) { - cancelPauseOnNativeEvent(cookie.instrumentingAgents()); - + if (InspectorDebuggerAgent* debuggerAgent = cookie.instrumentingAgents()->inspectorDebuggerAgent()) + debuggerAgent->didDispatchAsyncCall(); if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) timelineAgent->didFireTimer(); } -void InspectorInstrumentation::didInvalidateLayoutImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::didInvalidateLayoutImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didInvalidateLayout(frame); } -InspectorInstrumentationCookie InspectorInstrumentation::willLayoutImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +InspectorInstrumentationCookie InspectorInstrumentation::willLayoutImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { timelineAgent->willLayout(frame); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } -void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCookie& cookie, RenderObject* root) +void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCookie& cookie, RenderObject& root) { if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) timelineAgent->didLayout(root); @@ -457,353 +482,314 @@ void InspectorInstrumentation::didLayoutImpl(const InspectorInstrumentationCooki pageAgent->didLayout(); } -InspectorInstrumentationCookie InspectorInstrumentation::willDispatchXHRLoadEventImpl(InstrumentingAgents* instrumentingAgents, XMLHttpRequest* request, ScriptExecutionContext* context) +void InspectorInstrumentation::willCompositeImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - int timelineAgentId = 0; - InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); - if (timelineAgent && request->hasEventListeners(eventNames().loadEvent)) { - timelineAgent->willDispatchXHRLoadEvent(request->url(), frameForScriptExecutionContext(context)); - timelineAgentId = timelineAgent->id(); - } - return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->willComposite(frame); } -void InspectorInstrumentation::didDispatchXHRLoadEventImpl(const InspectorInstrumentationCookie& cookie) +void InspectorInstrumentation::didCompositeImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didDispatchXHRLoadEvent(); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->didComposite(); } -void InspectorInstrumentation::willPaintImpl(InstrumentingAgents* instrumentingAgents, RenderObject* renderer) +void InspectorInstrumentation::willPaintImpl(InstrumentingAgents& instrumentingAgents, RenderObject& renderer) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->willPaint(&renderer->frame()); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->willPaint(renderer.frame()); } -void InspectorInstrumentation::didPaintImpl(InstrumentingAgents* instrumentingAgents, RenderObject* renderer, GraphicsContext* context, const LayoutRect& rect) +void InspectorInstrumentation::didPaintImpl(InstrumentingAgents& instrumentingAgents, RenderObject& renderer, const LayoutRect& rect) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didPaint(renderer, rect); - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) - pageAgent->didPaint(context, rect); -} -void InspectorInstrumentation::willScrollLayerImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) -{ - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->willScroll(frame); -} - -void InspectorInstrumentation::didScrollLayerImpl(InstrumentingAgents* instrumentingAgents) -{ - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didScroll(); + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) + pageAgent->didPaint(renderer, rect); } -InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyleImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyleImpl(InstrumentingAgents& instrumentingAgents, Document& document) { int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { - timelineAgent->willRecalculateStyle(frame); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { + timelineAgent->willRecalculateStyle(document.frame()); timelineAgentId = timelineAgent->id(); } - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->willRecalculateStyle(); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->willRecalculateStyle(); return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); } void InspectorInstrumentation::didRecalculateStyleImpl(const InspectorInstrumentationCookie& cookie) { + if (!cookie.isValid()) + return; + + InstrumentingAgents& instrumentingAgents = *cookie.instrumentingAgents(); + if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) timelineAgent->didRecalculateStyle(); - InstrumentingAgents* instrumentingAgents = cookie.instrumentingAgents(); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didRecalculateStyle(); - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didRecalculateStyle(); + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->didRecalculateStyle(); } -void InspectorInstrumentation::didScheduleStyleRecalculationImpl(InstrumentingAgents* instrumentingAgents, Document* document) +void InspectorInstrumentation::didScheduleStyleRecalculationImpl(InstrumentingAgents& instrumentingAgents, Document& document) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didScheduleStyleRecalculation(document->frame()); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didScheduleStyleRecalculation(document); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->didScheduleStyleRecalculation(document.frame()); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didScheduleStyleRecalculation(document); } -void InspectorInstrumentation::applyEmulatedMediaImpl(InstrumentingAgents* instrumentingAgents, String* media) +void InspectorInstrumentation::applyEmulatedMediaImpl(InstrumentingAgents& instrumentingAgents, String& media) { - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->applyEmulatedMedia(media); } -void InspectorInstrumentation::willSendRequestImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse) +void InspectorInstrumentation::willSendRequestImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->willSendResourceRequest(identifier, request, loader->frame()); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->willSendRequest(identifier, loader, request, redirectResponse); + if (!loader) + return; + + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->willSendRequest(identifier, *loader, request, redirectResponse); } -void InspectorInstrumentation::continueAfterPingLoaderImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& response) +void InspectorInstrumentation::continueAfterPingLoaderImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& response) { willSendRequestImpl(instrumentingAgents, identifier, loader, request, response); } -void InspectorInstrumentation::markResourceAsCachedImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier) +void InspectorInstrumentation::markResourceAsCachedImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->markResourceAsCached(identifier); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->markResourceAsCached(identifier); } -void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InstrumentingAgents* instrumentingAgents, DocumentLoader* loader, CachedResource* cachedResource) +void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InstrumentingAgents& instrumentingAgents, DocumentLoader* loader, CachedResource* cachedResource) { - if (!instrumentingAgents->inspectorEnvironment().developerExtrasEnabled()) + if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled()) + return; + + if (!loader || !cachedResource) return; - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource); -} - -InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceDataImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, Frame* frame, int length) -{ - int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { - timelineAgent->willReceiveResourceData(identifier, frame, length); - timelineAgentId = timelineAgent->id(); - } - return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); -} - -void InspectorInstrumentation::didReceiveResourceDataImpl(const InspectorInstrumentationCookie& cookie) -{ - if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didReceiveResourceData(); -} -InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponseImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const ResourceResponse& response, Frame* frame) -{ - int timelineAgentId = 0; - InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); - if (timelineAgent) { - timelineAgent->willReceiveResourceResponse(identifier, response, frame); - timelineAgentId = timelineAgent->id(); - } - return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didLoadResourceFromMemoryCache(*loader, *cachedResource); } -void InspectorInstrumentation::didReceiveResourceResponseImpl(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response, ResourceLoader* resourceLoader) +void InspectorInstrumentation::didReceiveResourceResponseImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response, ResourceLoader* resourceLoader) { - if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didReceiveResourceResponse(); if (!loader) return; - InstrumentingAgents* instrumentingAgents = cookie.instrumentingAgents(); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveResponse(identifier, loader, response, resourceLoader); - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->didReceiveResponse(identifier, response); // This should come AFTER resource notification, front-end relies on this. -} -void InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) -{ - InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(frame, identifier, r); - InspectorInstrumentation::didReceiveResourceResponse(cookie, identifier, loader, r, nullptr); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveResponse(identifier, *loader, response, resourceLoader); + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->didReceiveResponse(identifier, response); // This should come AFTER resource notification, front-end relies on this. } -void InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) +void InspectorInstrumentation::didReceiveThreadableLoaderResponseImpl(InstrumentingAgents& instrumentingAgents, DocumentThreadableLoader& documentThreadableLoader, unsigned long identifier) { - didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveThreadableLoaderResponse(identifier, documentThreadableLoader); } -void InspectorInstrumentation::continueWithPolicyDownloadImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) +void InspectorInstrumentation::didReceiveDataImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const char* data, int dataLength, int encodedDataLength) { - didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveData(identifier, data, dataLength, encodedDataLength); } -void InspectorInstrumentation::continueWithPolicyIgnoreImpl(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) +void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, double finishTime) { - didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r); -} + if (!loader) + return; -void InspectorInstrumentation::didReceiveDataImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const char* data, int dataLength, int encodedDataLength) -{ - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveData(identifier, data, dataLength, encodedDataLength); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didFinishLoading(identifier, *loader, finishTime); } -void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, DocumentLoader* loader, double finishTime) +void InspectorInstrumentation::didFailLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceError& error) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didFinishLoadingResource(identifier, false, finishTime, loader->frame()); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didFinishLoading(identifier, loader, finishTime); -} + if (!loader) + return; -void InspectorInstrumentation::didFailLoadingImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceError& error) -{ - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didFinishLoadingResource(identifier, true, 0, loader->frame()); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didFailLoading(identifier, loader, error); - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didFailLoading(identifier, *loader, error); + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) consoleAgent->didFailLoading(identifier, error); // This should come AFTER resource notification, front-end relies on this. } -void InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClientImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, ThreadableLoaderClient* client) -{ - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->documentThreadableLoaderStartedLoadingForClient(identifier, client); -} - -void InspectorInstrumentation::willLoadXHRImpl(InstrumentingAgents* instrumentingAgents, ThreadableLoaderClient* client, const String& method, const URL& url, bool async, PassRefPtr<FormData> formData, const HTTPHeaderMap& headers, bool includeCredentials) +void InspectorInstrumentation::didFinishXHRLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, std::optional<String> decodedText, const String& url, const String& sendURL, unsigned sendLineNumber, unsigned sendColumnNumber) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->willLoadXHR(client, method, url, async, formData, headers, includeCredentials); -} - -void InspectorInstrumentation::didFailXHRLoadingImpl(InstrumentingAgents* instrumentingAgents, ThreadableLoaderClient* client) -{ - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didFailXHRLoading(client); -} - -void InspectorInstrumentation::didFinishXHRLoadingImpl(InstrumentingAgents* instrumentingAgents, ThreadableLoaderClient* client, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber, unsigned sendColumnNumber) -{ - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) consoleAgent->didFinishXHRLoading(identifier, url, sendURL, sendLineNumber, sendColumnNumber); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didFinishXHRLoading(client, identifier, sourceString); -} - -void InspectorInstrumentation::didReceiveXHRResponseImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier) -{ - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveXHRResponse(identifier); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) { + if (decodedText) + networkAgent->didFinishXHRLoading(identifier, *decodedText); + } } -void InspectorInstrumentation::willLoadXHRSynchronouslyImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::willLoadXHRSynchronouslyImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->willLoadXHRSynchronously(); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->willLoadXHRSynchronously(); } -void InspectorInstrumentation::didLoadXHRSynchronouslyImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::didLoadXHRSynchronouslyImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didLoadXHRSynchronously(); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didLoadXHRSynchronously(); } -void InspectorInstrumentation::scriptImportedImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const String& sourceString) +void InspectorInstrumentation::scriptImportedImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const String& sourceString) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->setInitialScriptContent(identifier, sourceString); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->setInitialScriptContent(identifier, sourceString); } -void InspectorInstrumentation::scriptExecutionBlockedByCSPImpl(InstrumentingAgents* instrumentingAgents, const String& directiveText) +void InspectorInstrumentation::scriptExecutionBlockedByCSPImpl(InstrumentingAgents& instrumentingAgents, const String& directiveText) { - if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) debuggerAgent->scriptExecutionBlockedByCSP(directiveText); } -void InspectorInstrumentation::didReceiveScriptResponseImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier) +void InspectorInstrumentation::didReceiveScriptResponseImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveScriptResponse(identifier); + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveScriptResponse(identifier); } -void InspectorInstrumentation::domContentLoadedEventFiredImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::domContentLoadedEventFiredImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didMarkDOMContentEvent(frame); - - if (&frame->page()->mainFrame() != frame) + if (!frame.isMainFrame()) return; - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->mainFrameDOMContentLoaded(); - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->domContentEventFired(); } -void InspectorInstrumentation::loadEventFiredImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::loadEventFiredImpl(InstrumentingAgents& instrumentingAgents, Frame* frame) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didMarkLoadEvent(frame); - - if (&frame->page()->mainFrame() != frame) + if (!frame || !frame->isMainFrame()) return; - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->loadEventFired(); } -void InspectorInstrumentation::frameDetachedFromParentImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::frameDetachedFromParentImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - if (InspectorCanvasAgent* canvasAgent = instrumentingAgents->inspectorCanvasAgent()) - canvasAgent->frameDetached(frame); - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) pageAgent->frameDetached(frame); + +#if ENABLE(WEB_REPLAY) + if (!frame.isMainFrame()) + return; + + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->frameDetached(frame); +#endif } -void InspectorInstrumentation::didCommitLoadImpl(InstrumentingAgents* instrumentingAgents, Page* page, DocumentLoader* loader) +void InspectorInstrumentation::didCommitLoadImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, DocumentLoader* loader) { - if (!instrumentingAgents->inspectorEnvironment().developerExtrasEnabled()) + if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled()) + return; + + if (!frame.page()) + return; + + if (!loader) return; - if (loader->frame()->isMainFrame()) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) + ASSERT(loader->frame() == &frame); + + if (frame.isMainFrame()) { + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) consoleAgent->reset(); - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->mainFrameNavigated(loader); - if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) - profilerAgent->resetState(); - if (InspectorHeapProfilerAgent* heapProfilerAgent = instrumentingAgents->inspectorHeapProfilerAgent()) - heapProfilerAgent->resetState(); - if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent()) + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->mainFrameNavigated(*loader); + + if (InspectorCSSAgent* cssAgent = instrumentingAgents.inspectorCSSAgent()) cssAgent->reset(); -#if ENABLE(SQL_DATABASE) - if (InspectorDatabaseAgent* databaseAgent = instrumentingAgents->inspectorDatabaseAgent()) + + if (InspectorDatabaseAgent* databaseAgent = instrumentingAgents.inspectorDatabaseAgent()) databaseAgent->clearResources(); -#endif - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) - domAgent->setDocument(page->mainFrame().document()); -#if USE(ACCELERATED_COMPOSITING) - if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents->inspectorLayerTreeAgent()) + + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) + domAgent->setDocument(frame.document()); + + if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents.inspectorLayerTreeAgent()) layerTreeAgent->reset(); -#endif + + if (PageDebuggerAgent* pageDebuggerAgent = instrumentingAgents.pageDebuggerAgent()) + pageDebuggerAgent->mainFrameNavigated(); + + if (PageHeapAgent* pageHeapAgent = instrumentingAgents.pageHeapAgent()) + pageHeapAgent->mainFrameNavigated(); } - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) - domAgent->didCommitLoad(loader->frame()->document()); - if (InspectorCanvasAgent* canvasAgent = instrumentingAgents->inspectorCanvasAgent()) - canvasAgent->frameNavigated(loader->frame()); - if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) - pageAgent->frameNavigated(loader); + + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) + domAgent->didCommitLoad(frame.document()); + + if (InspectorPageAgent* pageAgent = instrumentingAgents.inspectorPageAgent()) + pageAgent->frameNavigated(frame); + + if (frame.isMainFrame()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->mainFrameNavigated(); + } + +#if ENABLE(WEB_REPLAY) + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->frameNavigated(frame); +#endif } -void InspectorInstrumentation::frameDocumentUpdatedImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::frameDocumentUpdatedImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - if (!instrumentingAgents->inspectorEnvironment().developerExtrasEnabled()) + if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled()) return; - if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) + if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) domAgent->frameDocumentUpdated(frame); } -void InspectorInstrumentation::loaderDetachedFromFrameImpl(InstrumentingAgents* instrumentingAgents, DocumentLoader* loader) +void InspectorInstrumentation::loaderDetachedFromFrameImpl(InstrumentingAgents& instrumentingAgents, DocumentLoader& loader) { - if (InspectorPageAgent* inspectorPageAgent = instrumentingAgents->inspectorPageAgent()) + if (InspectorPageAgent* inspectorPageAgent = instrumentingAgents.inspectorPageAgent()) inspectorPageAgent->loaderDetachedFromFrame(loader); } void InspectorInstrumentation::frameStartedLoadingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { + if (frame.isMainFrame()) { + if (PageDebuggerAgent* pageDebuggerAgent = instrumentingAgents.pageDebuggerAgent()) + pageDebuggerAgent->mainFrameStartedLoading(); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.persistentInspectorTimelineAgent()) + timelineAgent->mainFrameStartedLoading(); + } + if (InspectorPageAgent* inspectorPageAgent = instrumentingAgents.inspectorPageAgent()) inspectorPageAgent->frameStartedLoading(frame); } void InspectorInstrumentation::frameStoppedLoadingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { + if (frame.isMainFrame()) { + if (PageDebuggerAgent* pageDebuggerAgent = instrumentingAgents.pageDebuggerAgent()) + pageDebuggerAgent->mainFrameStoppedLoading(); + } + if (InspectorPageAgent* inspectorPageAgent = instrumentingAgents.inspectorPageAgent()) inspectorPageAgent->frameStoppedLoading(frame); } @@ -820,261 +806,283 @@ void InspectorInstrumentation::frameClearedScheduledNavigationImpl(Instrumenting inspectorPageAgent->frameClearedScheduledNavigation(frame); } -InspectorInstrumentationCookie InspectorInstrumentation::willRunJavaScriptDialogImpl(InstrumentingAgents* instrumentingAgents, const String& message) -{ - if (InspectorPageAgent* inspectorPageAgent = instrumentingAgents->inspectorPageAgent()) - inspectorPageAgent->willRunJavaScriptDialog(message); - return InspectorInstrumentationCookie(instrumentingAgents, 0); -} - -void InspectorInstrumentation::didRunJavaScriptDialogImpl(const InspectorInstrumentationCookie& cookie) -{ - if (InspectorPageAgent* inspectorPageAgent = cookie.instrumentingAgents()->inspectorPageAgent()) - inspectorPageAgent->didRunJavaScriptDialog(); -} - -void InspectorInstrumentation::willDestroyCachedResourceImpl(CachedResource* cachedResource) +void InspectorInstrumentation::willDestroyCachedResourceImpl(CachedResource& cachedResource) { - if (!instrumentingAgentsSet) + if (!s_instrumentingAgentsSet) return; - HashSet<InstrumentingAgents*>::iterator end = instrumentingAgentsSet->end(); - for (HashSet<InstrumentingAgents*>::iterator it = instrumentingAgentsSet->begin(); it != end; ++it) { - InstrumentingAgents* instrumentingAgents = *it; - if (InspectorResourceAgent* inspectorResourceAgent = instrumentingAgents->inspectorResourceAgent()) - inspectorResourceAgent->willDestroyCachedResource(cachedResource); - } -} -InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTMLImpl(InstrumentingAgents* instrumentingAgents, unsigned startLine, Frame* frame) -{ - int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { - timelineAgent->willWriteHTML(startLine, frame); - timelineAgentId = timelineAgent->id(); + for (auto* instrumentingAgent : *s_instrumentingAgentsSet) { + if (InspectorNetworkAgent* inspectorNetworkAgent = instrumentingAgent->inspectorNetworkAgent()) + inspectorNetworkAgent->willDestroyCachedResource(cachedResource); } - return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); -} - -void InspectorInstrumentation::didWriteHTMLImpl(const InspectorInstrumentationCookie& cookie, unsigned endLine) -{ - if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) - timelineAgent->didWriteHTML(endLine); } // JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes. static bool isConsoleAssertMessage(MessageSource source, MessageType type) { - return source == ConsoleAPIMessageSource && type == AssertMessageType; + return source == MessageSource::ConsoleAPI && type == MessageType::Assert; } -// FIXME: Drop this once we no longer generate stacks outside of Inspector. -void InspectorInstrumentation::addMessageToConsoleImpl(InstrumentingAgents* instrumentingAgents, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, unsigned long requestIdentifier) +void InspectorInstrumentation::addMessageToConsoleImpl(InstrumentingAgents& instrumentingAgents, std::unique_ptr<ConsoleMessage> message) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->addMessageToConsole(source, type, level, message, callStack, requestIdentifier); + MessageSource source = message->source(); + MessageType type = message->type(); + String messageText = message->message(); + + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->addMessageToConsole(WTFMove(message)); // FIXME: This should just pass the message on to the debugger agent. JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes. - if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) { + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) { if (isConsoleAssertMessage(source, type)) - debuggerAgent->handleConsoleAssert(); + debuggerAgent->handleConsoleAssert(messageText); } } -void InspectorInstrumentation::addMessageToConsoleImpl(InstrumentingAgents* instrumentingAgents, MessageSource source, MessageType type, MessageLevel level, const String& message, JSC::ExecState* state, PassRefPtr<ScriptArguments> arguments, unsigned long requestIdentifier) +void InspectorInstrumentation::consoleCountImpl(InstrumentingAgents& instrumentingAgents, JSC::ExecState* state, Ref<ScriptArguments>&& arguments) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->addMessageToConsole(source, type, level, message, state, arguments, requestIdentifier); - // FIXME: This should just pass the message on to the debugger agent. JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes. - if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) { - if (isConsoleAssertMessage(source, type)) - debuggerAgent->handleConsoleAssert(); - } + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->count(state, WTFMove(arguments)); } -void InspectorInstrumentation::addMessageToConsoleImpl(InstrumentingAgents* instrumentingAgents, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& scriptID, unsigned lineNumber, unsigned columnNumber, JSC::ExecState* state, unsigned long requestIdentifier) +void InspectorInstrumentation::takeHeapSnapshotImpl(InstrumentingAgents& instrumentingAgents, const String& title) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->addMessageToConsole(source, type, level, message, scriptID, lineNumber, columnNumber, state, requestIdentifier); + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->takeHeapSnapshot(title); } -void InspectorInstrumentation::consoleCountImpl(InstrumentingAgents* instrumentingAgents, JSC::ExecState* state, PassRefPtr<ScriptArguments> arguments) +void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, const String& title) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->count(state, arguments); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) + timelineAgent->time(frame, title); + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->startTiming(title); } -void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, const String& title) +void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, const String& title) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->time(frame, title); - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) consoleAgent->startTiming(title); } -void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, const String& title, PassRefPtr<ScriptCallStack> stack) +void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, const String& title, Ref<ScriptCallStack>&& stack) { - if (InspectorConsoleAgent* consoleAgent = instrumentingAgents->inspectorConsoleAgent()) - consoleAgent->stopTiming(title, stack); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->stopTiming(title, WTFMove(stack)); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->timeEnd(frame, title); } -void InspectorInstrumentation::consoleTimeStampImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, PassRefPtr<ScriptArguments> arguments) +void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, const String& title, Ref<ScriptCallStack>&& stack) +{ + if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent()) + consoleAgent->stopTiming(title, WTFMove(stack)); +} + +void InspectorInstrumentation::consoleTimeStampImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, Ref<ScriptArguments>&& arguments) { - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { String message; arguments->getFirstArgumentAsString(message); timelineAgent->didTimeStamp(frame, message); } } -void InspectorInstrumentation::addStartProfilingMessageToConsoleImpl(InstrumentingAgents* instrumentingAgents, const String& title, unsigned lineNumber, unsigned columnNumber, const String& sourceURL) +void InspectorInstrumentation::startProfilingImpl(InstrumentingAgents& instrumentingAgents, JSC::ExecState* exec, const String& title) { - if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) - profilerAgent->addStartProfilingMessageToConsole(title, lineNumber, columnNumber, sourceURL); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.persistentInspectorTimelineAgent()) + timelineAgent->startFromConsole(exec, title); } -void InspectorInstrumentation::addProfileImpl(InstrumentingAgents* instrumentingAgents, RefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack) +void InspectorInstrumentation::stopProfilingImpl(InstrumentingAgents& instrumentingAgents, JSC::ExecState* exec, const String& title) { - if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) { - const ScriptCallFrame& lastCaller = callStack->at(0); - profilerAgent->addProfile(profile, lastCaller.lineNumber(), lastCaller.columnNumber(), lastCaller.sourceURL()); - } + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.persistentInspectorTimelineAgent()) + timelineAgent->stopFromConsole(exec, title); } -String InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl(InstrumentingAgents* instrumentingAgents, bool incrementProfileNumber) +void InspectorInstrumentation::didOpenDatabaseImpl(InstrumentingAgents& instrumentingAgents, RefPtr<Database>&& database, const String& domain, const String& name, const String& version) { - if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) - return profilerAgent->getCurrentUserInitiatedProfileName(incrementProfileNumber); - return ""; + if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled()) + return; + if (InspectorDatabaseAgent* dbAgent = instrumentingAgents.inspectorDatabaseAgent()) + dbAgent->didOpenDatabase(WTFMove(database), domain, name, version); } -bool InspectorInstrumentation::profilerEnabledImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::didDispatchDOMStorageEventImpl(InstrumentingAgents& instrumentingAgents, const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin) { - if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent()) - return profilerAgent->enabled(); + if (InspectorDOMStorageAgent* domStorageAgent = instrumentingAgents.inspectorDOMStorageAgent()) + domStorageAgent->didDispatchDOMStorageEvent(key, oldValue, newValue, storageType, securityOrigin); +} + +bool InspectorInstrumentation::shouldWaitForDebuggerOnStartImpl(InstrumentingAgents& instrumentingAgents) +{ + if (InspectorWorkerAgent* workerAgent = instrumentingAgents.inspectorWorkerAgent()) + return workerAgent->shouldWaitForDebuggerOnStart(); return false; } -#if ENABLE(SQL_DATABASE) -void InspectorInstrumentation::didOpenDatabaseImpl(InstrumentingAgents* instrumentingAgents, PassRefPtr<Database> database, const String& domain, const String& name, const String& version) +void InspectorInstrumentation::workerStartedImpl(InstrumentingAgents& instrumentingAgents, WorkerInspectorProxy* proxy, const URL& url) +{ + if (InspectorWorkerAgent* workerAgent = instrumentingAgents.inspectorWorkerAgent()) + workerAgent->workerStarted(proxy, url); +} + +void InspectorInstrumentation::workerTerminatedImpl(InstrumentingAgents& instrumentingAgents, WorkerInspectorProxy* proxy) +{ + if (InspectorWorkerAgent* workerAgent = instrumentingAgents.inspectorWorkerAgent()) + workerAgent->workerTerminated(proxy); +} + +#if ENABLE(WEB_SOCKETS) +void InspectorInstrumentation::didCreateWebSocketImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const URL& requestURL) { - if (!instrumentingAgents->inspectorEnvironment().developerExtrasEnabled()) + if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled()) return; - if (InspectorDatabaseAgent* dbAgent = instrumentingAgents->inspectorDatabaseAgent()) - dbAgent->didOpenDatabase(database, domain, name, version); + + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didCreateWebSocket(identifier, requestURL); +} + +void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const ResourceRequest& request) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->willSendWebSocketHandshakeRequest(identifier, request); +} + +void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const ResourceResponse& response) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveWebSocketHandshakeResponse(identifier, response); +} + +void InspectorInstrumentation::didCloseWebSocketImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didCloseWebSocket(identifier); +} + +void InspectorInstrumentation::didReceiveWebSocketFrameImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const WebSocketFrame& frame) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveWebSocketFrame(identifier, frame); +} + +void InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const String& errorMessage) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didReceiveWebSocketFrameError(identifier, errorMessage); +} + +void InspectorInstrumentation::didSendWebSocketFrameImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, const WebSocketFrame& frame) +{ + if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent()) + networkAgent->didSendWebSocketFrame(identifier, frame); } #endif -void InspectorInstrumentation::didDispatchDOMStorageEventImpl(InstrumentingAgents* instrumentingAgents, const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin, Page* page) +#if ENABLE(WEB_REPLAY) +void InspectorInstrumentation::sessionCreatedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySession>&& session) { - if (InspectorDOMStorageAgent* domStorageAgent = instrumentingAgents->inspectorDOMStorageAgent()) - domStorageAgent->didDispatchDOMStorageEvent(key, oldValue, newValue, storageType, securityOrigin, page); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->sessionCreated(WTFMove(session)); } -bool InspectorInstrumentation::shouldPauseDedicatedWorkerOnStartImpl(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::sessionLoadedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySession>&& session) { - if (InspectorWorkerAgent* workerAgent = instrumentingAgents->inspectorWorkerAgent()) - return workerAgent->shouldPauseDedicatedWorkerOnStart(); - return false; + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->sessionLoaded(WTFMove(session)); } -void InspectorInstrumentation::didStartWorkerGlobalScopeImpl(InstrumentingAgents* instrumentingAgents, WorkerGlobalScopeProxy* workerGlobalScopeProxy, const URL& url) +void InspectorInstrumentation::sessionModifiedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySession>&& session) { - if (InspectorWorkerAgent* workerAgent = instrumentingAgents->inspectorWorkerAgent()) - workerAgent->didStartWorkerGlobalScope(workerGlobalScopeProxy, url); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->sessionModified(WTFMove(session)); } -void InspectorInstrumentation::willEvaluateWorkerScript(WorkerGlobalScope* workerGlobalScope, int workerThreadStartMode) +void InspectorInstrumentation::segmentCreatedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySessionSegment>&& segment) { - if (workerThreadStartMode != PauseWorkerGlobalScopeOnStart) - return; - InstrumentingAgents* instrumentingAgents = instrumentationForWorkerGlobalScope(workerGlobalScope); - if (!instrumentingAgents) - return; - if (WorkerRuntimeAgent* runtimeAgent = instrumentingAgents->workerRuntimeAgent()) - runtimeAgent->pauseWorkerGlobalScope(workerGlobalScope); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->segmentCreated(WTFMove(segment)); } -void InspectorInstrumentation::workerGlobalScopeTerminatedImpl(InstrumentingAgents* instrumentingAgents, WorkerGlobalScopeProxy* proxy) +void InspectorInstrumentation::segmentCompletedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySessionSegment>&& segment) { - if (InspectorWorkerAgent* workerAgent = instrumentingAgents->inspectorWorkerAgent()) - workerAgent->workerGlobalScopeTerminated(proxy); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->segmentCompleted(WTFMove(segment)); } -#if ENABLE(WEB_SOCKETS) -void InspectorInstrumentation::didCreateWebSocketImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const URL& requestURL, const URL&, const String& protocol, Document* document) +void InspectorInstrumentation::segmentLoadedImpl(InstrumentingAgents& instrumentingAgents, RefPtr<ReplaySessionSegment>&& segment) { - if (!instrumentingAgents->inspectorEnvironment().developerExtrasEnabled()) - return; - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didCreateWebSocket(identifier, requestURL); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didCreateWebSocket(identifier, requestURL, protocol, document->frame()); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->segmentLoaded(WTFMove(segment)); } -void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const ResourceRequest& request, Document* document) +void InspectorInstrumentation::segmentUnloadedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->willSendWebSocketHandshakeRequest(identifier, request); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->willSendWebSocketHandshakeRequest(identifier, document->frame()); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->segmentUnloaded(); } -void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const ResourceResponse& response, Document* document) +void InspectorInstrumentation::captureStartedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didReceiveWebSocketHandshakeResponse(identifier, document->frame()); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->captureStarted(); } -void InspectorInstrumentation::didCloseWebSocketImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, Document* document) +void InspectorInstrumentation::captureStoppedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didCloseWebSocket(identifier); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) - timelineAgent->didDestroyWebSocket(identifier, document->frame()); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->captureStopped(); } -void InspectorInstrumentation::didReceiveWebSocketFrameImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const WebSocketFrame& frame) +void InspectorInstrumentation::playbackStartedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveWebSocketFrame(identifier, frame); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->playbackStarted(); } -void InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const String& errorMessage) + +void InspectorInstrumentation::playbackPausedImpl(InstrumentingAgents& instrumentingAgents, const ReplayPosition& position) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didReceiveWebSocketFrameError(identifier, errorMessage); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->playbackPaused(position); } -void InspectorInstrumentation::didSendWebSocketFrameImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const WebSocketFrame& frame) + +void InspectorInstrumentation::playbackHitPositionImpl(InstrumentingAgents& instrumentingAgents, const ReplayPosition& position) +{ + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->playbackHitPosition(position); +} + +void InspectorInstrumentation::playbackFinishedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent()) - resourceAgent->didSendWebSocketFrame(identifier, frame); + if (InspectorReplayAgent* replayAgent = instrumentingAgents.inspectorReplayAgent()) + replayAgent->playbackFinished(); } #endif -void InspectorInstrumentation::networkStateChangedImpl(InstrumentingAgents* instrumentingAgents) +#if ENABLE(RESOURCE_USAGE) +void InspectorInstrumentation::didHandleMemoryPressureImpl(InstrumentingAgents& instrumentingAgents, Critical critical) { - if (InspectorApplicationCacheAgent* applicationCacheAgent = instrumentingAgents->inspectorApplicationCacheAgent()) - applicationCacheAgent->networkStateChanged(); + if (InspectorMemoryAgent* memoryAgent = instrumentingAgents.inspectorMemoryAgent()) + memoryAgent->didHandleMemoryPressure(critical); } +#endif -void InspectorInstrumentation::updateApplicationCacheStatusImpl(InstrumentingAgents* instrumentingAgents, Frame* frame) +void InspectorInstrumentation::networkStateChangedImpl(InstrumentingAgents& instrumentingAgents) { - if (InspectorApplicationCacheAgent* applicationCacheAgent = instrumentingAgents->inspectorApplicationCacheAgent()) - applicationCacheAgent->updateApplicationCacheStatus(frame); + if (InspectorApplicationCacheAgent* applicationCacheAgent = instrumentingAgents.inspectorApplicationCacheAgent()) + applicationCacheAgent->networkStateChanged(); } -bool InspectorInstrumentation::canvasAgentEnabled(ScriptExecutionContext* scriptExecutionContext) +void InspectorInstrumentation::updateApplicationCacheStatusImpl(InstrumentingAgents& instrumentingAgents, Frame& frame) { - InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(scriptExecutionContext); - return instrumentingAgents && instrumentingAgents->inspectorCanvasAgent(); + if (auto* applicationCacheAgent = instrumentingAgents.inspectorApplicationCacheAgent()) + applicationCacheAgent->updateApplicationCacheStatus(&frame); } bool InspectorInstrumentation::consoleAgentEnabled(ScriptExecutionContext* scriptExecutionContext) { InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(scriptExecutionContext); - InspectorConsoleAgent* consoleAgent = instrumentingAgents ? instrumentingAgents->inspectorConsoleAgent() : nullptr; + InspectorConsoleAgent* consoleAgent = instrumentingAgents ? instrumentingAgents->webConsoleAgent() : nullptr; return consoleAgent && consoleAgent->enabled(); } @@ -1084,40 +1092,51 @@ bool InspectorInstrumentation::timelineAgentEnabled(ScriptExecutionContext* scri return instrumentingAgents && instrumentingAgents->inspectorTimelineAgent(); } -void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InstrumentingAgents* instrumentingAgents, bool isDOMEvent, const String& eventName, bool synchronous) +bool InspectorInstrumentation::replayAgentEnabled(ScriptExecutionContext* scriptExecutionContext) { - if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent()) - domDebuggerAgent->pauseOnNativeEventIfNeeded(isDOMEvent, eventName, synchronous); +#if ENABLE(WEB_REPLAY) + InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(scriptExecutionContext); + return instrumentingAgents && instrumentingAgents->inspectorReplayAgent(); +#else + UNUSED_PARAM(scriptExecutionContext); + return false; +#endif } -void InspectorInstrumentation::cancelPauseOnNativeEvent(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InstrumentingAgents& instrumentingAgents, bool isDOMEvent, const String& eventName, bool synchronous) { - if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) - debuggerAgent->cancelPauseOnNextStatement(); + if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent()) + domDebuggerAgent->pauseOnNativeEventIfNeeded(isDOMEvent, eventName, synchronous); } -void InspectorInstrumentation::didRequestAnimationFrameImpl(InstrumentingAgents* instrumentingAgents, int callbackId, Frame* frame) +void InspectorInstrumentation::didRequestAnimationFrameImpl(InstrumentingAgents& instrumentingAgents, int callbackId, Frame* frame) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, requestAnimationFrameEventName, true); + didScheduleAsyncCall(instrumentingAgents, AsyncCallTypeRequestAnimationFrame, callbackId, *frame->document(), true); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didRequestAnimationFrame(callbackId, frame); } -void InspectorInstrumentation::didCancelAnimationFrameImpl(InstrumentingAgents* instrumentingAgents, int callbackId, Frame* frame) +void InspectorInstrumentation::didCancelAnimationFrameImpl(InstrumentingAgents& instrumentingAgents, int callbackId, Frame* frame) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, cancelAnimationFrameEventName, true); - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) + debuggerAgent->didCancelAsyncCall(AsyncCallTypeRequestAnimationFrame, callbackId); + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) timelineAgent->didCancelAnimationFrame(callbackId, frame); } -InspectorInstrumentationCookie InspectorInstrumentation::willFireAnimationFrameImpl(InstrumentingAgents* instrumentingAgents, int callbackId, Frame* frame) +InspectorInstrumentationCookie InspectorInstrumentation::willFireAnimationFrameImpl(InstrumentingAgents& instrumentingAgents, int callbackId, Frame* frame) { pauseOnNativeEventIfNeeded(instrumentingAgents, false, animationFrameFiredEventName, false); + if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents.inspectorDebuggerAgent()) + debuggerAgent->willDispatchAsyncCall(AsyncCallTypeRequestAnimationFrame, callbackId); + int timelineAgentId = 0; - if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) { + if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) { timelineAgent->willFireAnimationFrame(callbackId, frame); timelineAgentId = timelineAgent->id(); } @@ -1126,84 +1145,58 @@ InspectorInstrumentationCookie InspectorInstrumentation::willFireAnimationFrameI void InspectorInstrumentation::didFireAnimationFrameImpl(const InspectorInstrumentationCookie& cookie) { + if (InspectorDebuggerAgent* debuggerAgent = cookie.instrumentingAgents()->inspectorDebuggerAgent()) + debuggerAgent->didDispatchAsyncCall(); if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) timelineAgent->didFireAnimationFrame(); } -void InspectorInstrumentation::registerInstrumentingAgents(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::registerInstrumentingAgents(InstrumentingAgents& instrumentingAgents) { - if (!instrumentingAgentsSet) - instrumentingAgentsSet = new HashSet<InstrumentingAgents*>(); - instrumentingAgentsSet->add(instrumentingAgents); + if (!s_instrumentingAgentsSet) + s_instrumentingAgentsSet = new HashSet<InstrumentingAgents*>(); + + s_instrumentingAgentsSet->add(&instrumentingAgents); } -void InspectorInstrumentation::unregisterInstrumentingAgents(InstrumentingAgents* instrumentingAgents) +void InspectorInstrumentation::unregisterInstrumentingAgents(InstrumentingAgents& instrumentingAgents) { - if (!instrumentingAgentsSet) + if (!s_instrumentingAgentsSet) return; - instrumentingAgentsSet->remove(instrumentingAgents); - if (instrumentingAgentsSet->isEmpty()) { - delete instrumentingAgentsSet; - instrumentingAgentsSet = nullptr; + + s_instrumentingAgentsSet->remove(&instrumentingAgents); + if (s_instrumentingAgentsSet->isEmpty()) { + delete s_instrumentingAgentsSet; + s_instrumentingAgentsSet = nullptr; } } InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(const InspectorInstrumentationCookie& cookie) { - if (!cookie.instrumentingAgents()) + if (!cookie.isValid()) return nullptr; + InspectorTimelineAgent* timelineAgent = cookie.instrumentingAgents()->inspectorTimelineAgent(); if (timelineAgent && cookie.hasMatchingTimelineAgentId(timelineAgent->id())) return timelineAgent; return nullptr; } -InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForPage(Page* page) +InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForRenderer(RenderObject& renderer) { - if (!page) - return nullptr; - return instrumentationForPage(page); + return instrumentingAgentsForFrame(renderer.frame()); } -InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForRenderer(RenderObject* renderer) +void InspectorInstrumentation::layerTreeDidChangeImpl(InstrumentingAgents& instrumentingAgents) { - return instrumentingAgentsForFrame(&renderer->frame()); -} - -InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope(WorkerGlobalScope* workerGlobalScope) -{ - if (!workerGlobalScope) - return nullptr; - return instrumentationForWorkerGlobalScope(workerGlobalScope); -} - -InstrumentingAgents* InspectorInstrumentation::instrumentingAgentsForNonDocumentContext(ScriptExecutionContext* context) -{ - if (context->isWorkerGlobalScope()) - return instrumentationForWorkerGlobalScope(static_cast<WorkerGlobalScope*>(context)); - return nullptr; -} - -#if USE(ACCELERATED_COMPOSITING) -void InspectorInstrumentation::layerTreeDidChangeImpl(InstrumentingAgents* instrumentingAgents) -{ - if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents->inspectorLayerTreeAgent()) + if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents.inspectorLayerTreeAgent()) layerTreeAgent->layerTreeDidChange(); } -void InspectorInstrumentation::renderLayerDestroyedImpl(InstrumentingAgents* instrumentingAgents, const RenderLayer* renderLayer) +void InspectorInstrumentation::renderLayerDestroyedImpl(InstrumentingAgents& instrumentingAgents, const RenderLayer& renderLayer) { - if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents->inspectorLayerTreeAgent()) + if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents.inspectorLayerTreeAgent()) layerTreeAgent->renderLayerDestroyed(renderLayer); } -void InspectorInstrumentation::pseudoElementDestroyedImpl(InstrumentingAgents* instrumentingAgents, PseudoElement* pseudoElement) -{ - if (InspectorLayerTreeAgent* layerTreeAgent = instrumentingAgents->inspectorLayerTreeAgent()) - layerTreeAgent->pseudoElementDestroyed(pseudoElement); -} -#endif - } // namespace WebCore - -#endif // !ENABLE(INSPECTOR) |