Changeset 243273 in webkit


Ignore:
Timestamp:
Mar 20, 2019 8:10:28 PM (5 years ago)
Author:
Devin Rousso
Message:

Web Inspector: DOM: lazily create the agent
https://bugs.webkit.org/show_bug.cgi?id=195589
<rdar://problem/48791742>

Reviewed by Timothy Hatcher.

No change in functionality.

  • inspector/agents/InspectorDOMAgent.h:

(WebCore::InspectorDOMAgent::DOMListener): Deleted.
(WebCore::InspectorDOMAgent::pageAgent): Deleted.

  • inspector/agents/InspectorDOMAgent.cpp:

(WebCore::InspectorDOMAgent):
(WebCore::InspectorDOMAgent::unbind):
(WebCore::InspectorDOMAgent::setSearchingForNode):
(WebCore::InspectorDOMAgent::highlightSelector):
(WebCore::InspectorDOMAgent::highlightFrame):
(WebCore::InspectorDOMAgent::buildObjectForNode):
(WebCore::InspectorDOMAgent::didModifyDOMAttr):
(WebCore::InspectorDOMAgent::didRemoveDOMAttr):
(WebCore::InspectorDOMAgent::styleAttributeInvalidated):
(WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
(WebCore::InspectorDOMAgent::setDOMListener): Deleted.

  • inspector/agents/InspectorCSSAgent.h:
  • inspector/agents/InspectorCSSAgent.cpp:

(WebCore::InspectorCSSAgent::InspectorCSSAgent):
(WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
(WebCore::InspectorCSSAgent::reset):
(WebCore::InspectorCSSAgent::enable):
(WebCore::InspectorCSSAgent::disable):
(WebCore::InspectorCSSAgent::forcePseudoState):
(WebCore::InspectorCSSAgent::collectAllStyleSheets):
(WebCore::InspectorCSSAgent::setStyleSheetText):
(WebCore::InspectorCSSAgent::setStyleText):
(WebCore::InspectorCSSAgent::setRuleSelector):
(WebCore::InspectorCSSAgent::createStyleSheet):
(WebCore::InspectorCSSAgent::addRule):
(WebCore::InspectorCSSAgent::asInspectorStyleSheet):
(WebCore::InspectorCSSAgent::elementForId):
(WebCore::InspectorCSSAgent::bindStyleSheet):
(WebCore::InspectorCSSAgent::~InspectorCSSAgent): Deleted.
(WebCore::InspectorCSSAgent::discardAgent): Deleted.
(WebCore::InspectorCSSAgent::resetNonPersistentData): Deleted.

  • inspector/InspectorStyleSheet.cpp:
  • inspector/agents/InspectorDOMDebuggerAgent.h:
  • inspector/agents/InspectorDOMDebuggerAgent.cpp:

(WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
(WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
(WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
(WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
(WebCore::InspectorDOMDebuggerAgent::willHandleEvent):

  • inspector/agents/page/PageConsoleAgent.h:
  • inspector/agents/page/PageConsoleAgent.cpp:

(WebCore::PageConsoleAgent::PageConsoleAgent):
(WebCore::PageConsoleAgent::clearMessages):

  • inspector/InspectorController.h:
  • inspector/InspectorController.cpp:

(WebCore::InspectorController::InspectorController):
(WebCore::InspectorController::createLazyAgents):
(WebCore::InspectorController::inspect):
(WebCore::InspectorController::hideHighlight):

Location:
trunk/Source/WebCore
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r243270 r243273  
     12019-03-20  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: DOM: lazily create the agent
     4        https://bugs.webkit.org/show_bug.cgi?id=195589
     5        <rdar://problem/48791742>
     6
     7        Reviewed by Timothy Hatcher.
     8
     9        No change in functionality.
     10
     11        * inspector/agents/InspectorDOMAgent.h:
     12        (WebCore::InspectorDOMAgent::DOMListener): Deleted.
     13        (WebCore::InspectorDOMAgent::pageAgent): Deleted.
     14        * inspector/agents/InspectorDOMAgent.cpp:
     15        (WebCore::InspectorDOMAgent):
     16        (WebCore::InspectorDOMAgent::unbind):
     17        (WebCore::InspectorDOMAgent::setSearchingForNode):
     18        (WebCore::InspectorDOMAgent::highlightSelector):
     19        (WebCore::InspectorDOMAgent::highlightFrame):
     20        (WebCore::InspectorDOMAgent::buildObjectForNode):
     21        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
     22        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
     23        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
     24        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
     25        (WebCore::InspectorDOMAgent::setDOMListener): Deleted.
     26
     27        * inspector/agents/InspectorCSSAgent.h:
     28        * inspector/agents/InspectorCSSAgent.cpp:
     29        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
     30        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
     31        (WebCore::InspectorCSSAgent::reset):
     32        (WebCore::InspectorCSSAgent::enable):
     33        (WebCore::InspectorCSSAgent::disable):
     34        (WebCore::InspectorCSSAgent::forcePseudoState):
     35        (WebCore::InspectorCSSAgent::collectAllStyleSheets):
     36        (WebCore::InspectorCSSAgent::setStyleSheetText):
     37        (WebCore::InspectorCSSAgent::setStyleText):
     38        (WebCore::InspectorCSSAgent::setRuleSelector):
     39        (WebCore::InspectorCSSAgent::createStyleSheet):
     40        (WebCore::InspectorCSSAgent::addRule):
     41        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
     42        (WebCore::InspectorCSSAgent::elementForId):
     43        (WebCore::InspectorCSSAgent::bindStyleSheet):
     44        (WebCore::InspectorCSSAgent::~InspectorCSSAgent): Deleted.
     45        (WebCore::InspectorCSSAgent::discardAgent): Deleted.
     46        (WebCore::InspectorCSSAgent::resetNonPersistentData): Deleted.
     47        * inspector/InspectorStyleSheet.cpp:
     48
     49        * inspector/agents/InspectorDOMDebuggerAgent.h:
     50        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
     51        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
     52        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
     53        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
     54        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
     55        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
     56
     57        * inspector/agents/page/PageConsoleAgent.h:
     58        * inspector/agents/page/PageConsoleAgent.cpp:
     59        (WebCore::PageConsoleAgent::PageConsoleAgent):
     60        (WebCore::PageConsoleAgent::clearMessages):
     61
     62        * inspector/InspectorController.h:
     63        * inspector/InspectorController.cpp:
     64        (WebCore::InspectorController::InspectorController):
     65        (WebCore::InspectorController::createLazyAgents):
     66        (WebCore::InspectorController::inspect):
     67        (WebCore::InspectorController::hideHighlight):
     68
    1692019-03-20  Youenn Fablet  <youenn@apple.com>
    270
  • trunk/Source/WebCore/inspector/InspectorController.cpp

    r243243 r243273  
    112112
    113113    auto pageAgentPtr = std::make_unique<InspectorPageAgent>(pageContext, inspectorClient, m_overlay.get());
    114     InspectorPageAgent* pageAgent = pageAgentPtr.get();
    115114    m_pageAgent = pageAgentPtr.get();
    116115    m_agents.append(WTFMove(pageAgentPtr));
    117116
    118     auto domAgentPtr = std::make_unique<InspectorDOMAgent>(pageContext, pageAgent, m_overlay.get());
    119     m_domAgent = domAgentPtr.get();
    120     m_agents.append(WTFMove(domAgentPtr));
    121 
    122     auto consoleAgent = std::make_unique<PageConsoleAgent>(pageContext, m_domAgent);
     117    auto consoleAgent = std::make_unique<PageConsoleAgent>(pageContext);
    123118    m_instrumentingAgents->setWebConsoleAgent(consoleAgent.get());
    124119    m_agents.append(WTFMove(consoleAgent));
     
    173168
    174169    m_agents.append(std::make_unique<PageNetworkAgent>(pageContext, m_pageAgent));
    175     m_agents.append(std::make_unique<InspectorCSSAgent>(pageContext, m_domAgent));
    176     m_agents.append(std::make_unique<InspectorDOMDebuggerAgent>(pageContext, m_domAgent, debuggerAgentPtr));
     170    m_agents.append(std::make_unique<InspectorCSSAgent>(pageContext));
     171    m_agents.append(std::make_unique<InspectorDOMAgent>(pageContext, m_overlay.get()));
     172    m_agents.append(std::make_unique<InspectorDOMDebuggerAgent>(pageContext, debuggerAgentPtr));
    177173    m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(pageContext, m_pageAgent));
    178174    m_agents.append(std::make_unique<InspectorLayerTreeAgent>(pageContext));
     
    386382        show();
    387383
    388     m_domAgent->inspect(node);
     384    if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent())
     385        domAgent->inspect(node);
    389386}
    390387
     
    406403void InspectorController::hideHighlight()
    407404{
    408     ErrorString unused;
    409     m_domAgent->hideHighlight(unused);
     405    if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent()) {
     406        ErrorString unused;
     407        domAgent->hideHighlight(unused);
     408    }
    410409}
    411410
  • trunk/Source/WebCore/inspector/InspectorController.h

    r242019 r243273  
    5353class GraphicsContext;
    5454class InspectorClient;
    55 class InspectorDOMAgent;
    5655class InspectorFrontendClient;
    5756class InspectorInstrumentation;
     
    138137
    139138    Inspector::InspectorAgent* m_inspectorAgent { nullptr };
    140     InspectorDOMAgent* m_domAgent { nullptr };
    141139    InspectorPageAgent* m_pageAgent { nullptr };
    142140
  • trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp

    r243163 r243273  
    4747#include "HTMLStyleElement.h"
    4848#include "InspectorCSSAgent.h"
     49#include "InspectorDOMAgent.h"
    4950#include "InspectorPageAgent.h"
    5051#include "MediaList.h"
  • trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp

    r243163 r243273  
    4444#include "HTMLHeadElement.h"
    4545#include "HTMLStyleElement.h"
     46#include "InspectorDOMAgent.h"
    4647#include "InspectorHistory.h"
    4748#include "InspectorPageAgent.h"
     
    295296}
    296297
    297 InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context, InspectorDOMAgent* domAgent)
     298InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context)
    298299    : InspectorAgentBase("CSS"_s, context)
    299300    , m_frontendDispatcher(std::make_unique<CSSFrontendDispatcher>(context.frontendRouter))
    300301    , m_backendDispatcher(CSSBackendDispatcher::create(context.backendDispatcher, this))
    301     , m_domAgent(domAgent)
    302 {
    303     m_domAgent->setDOMListener(this);
    304 }
    305 
    306 InspectorCSSAgent::~InspectorCSSAgent()
    307 {
    308     ASSERT(!m_domAgent);
    309     reset();
     302{
    310303}
    311304
     
    316309void InspectorCSSAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
    317310{
    318     resetNonPersistentData();
    319 
    320311    String unused;
    321312    disable(unused);
    322 }
    323 
    324 void InspectorCSSAgent::discardAgent()
    325 {
    326     m_domAgent->setDOMListener(nullptr);
    327     m_domAgent = nullptr;
    328313}
    329314
     
    336321    m_documentToInspectorStyleSheet.clear();
    337322    m_documentToKnownCSSStyleSheets.clear();
    338     resetNonPersistentData();
    339 }
    340 
    341 void InspectorCSSAgent::resetNonPersistentData()
    342 {
    343323    resetPseudoStates();
    344324}
     
    346326void InspectorCSSAgent::enable(ErrorString&)
    347327{
     328    if (m_instrumentingAgents.inspectorCSSAgent() == this)
     329        return;
     330
    348331    m_instrumentingAgents.setInspectorCSSAgent(this);
    349332
    350     for (auto* document : m_domAgent->documents())
    351         activeStyleSheetsUpdated(*document);
     333    if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent()) {
     334        for (auto* document : domAgent->documents())
     335            activeStyleSheetsUpdated(*document);
     336    }
    352337}
    353338
     
    355340{
    356341    m_instrumentingAgents.setInspectorCSSAgent(nullptr);
     342
     343    reset();
    357344}
    358345
     
    416403        return false;
    417404
    418     int nodeId = m_domAgent->boundNodeId(&element);
     405    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     406    if (!domAgent)
     407        return false;
     408
     409    int nodeId = domAgent->boundNodeId(&element);
    419410    if (!nodeId)
    420411        return false;
     
    575566{
    576567    Vector<CSSStyleSheet*> cssStyleSheets;
    577     for (auto* document : m_domAgent->documents())
    578         collectAllDocumentStyleSheets(*document, cssStyleSheets);
     568    if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent()) {
     569        for (auto* document : domAgent->documents())
     570            collectAllDocumentStyleSheets(*document, cssStyleSheets);
     571    }
    579572
    580573    for (auto* cssStyleSheet : cssStyleSheets)
     
    628621        return;
    629622
    630     auto result = m_domAgent->history()->perform(std::make_unique<SetStyleSheetTextAction>(inspectorStyleSheet, text));
     623    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     624    if (!domAgent) {
     625        errorString = "Missing DOM agent"_s;
     626        return;
     627    }
     628
     629    auto result = domAgent->history()->perform(std::make_unique<SetStyleSheetTextAction>(inspectorStyleSheet, text));
    631630    if (result.hasException())
    632631        errorString = InspectorDOMAgent::toErrorString(result.releaseException());
     
    642641        return;
    643642
    644     auto performResult = m_domAgent->history()->perform(std::make_unique<SetStyleTextAction>(inspectorStyleSheet, compoundId, text));
     643    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     644    if (!domAgent) {
     645        errorString = "Missing DOM agent"_s;
     646        return;
     647    }
     648
     649    auto performResult = domAgent->history()->perform(std::make_unique<SetStyleTextAction>(inspectorStyleSheet, compoundId, text));
    645650    if (performResult.hasException()) {
    646651        errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
     
    660665        return;
    661666
    662     auto performResult = m_domAgent->history()->perform(std::make_unique<SetRuleSelectorAction>(inspectorStyleSheet, compoundId, selector));
     667    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     668    if (!domAgent) {
     669        errorString = "Missing DOM agent"_s;
     670        return;
     671    }
     672
     673    auto performResult = domAgent->history()->perform(std::make_unique<SetRuleSelectorAction>(inspectorStyleSheet, compoundId, selector));
    663674    if (performResult.hasException()) {
    664675        errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
     
    671682void InspectorCSSAgent::createStyleSheet(ErrorString& errorString, const String& frameId, String* styleSheetId)
    672683{
    673     Frame* frame = m_domAgent->pageAgent()->frameForId(frameId);
     684    auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
     685    if (!pageAgent) {
     686        errorString = "Missing Page agent"_s;
     687        return;
     688    }
     689
     690    Frame* frame = pageAgent->frameForId(frameId);
    674691    if (!frame) {
    675692        errorString = "No frame for given id found"_s;
     
    741758    }
    742759
     760    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     761    if (!domAgent) {
     762        errorString = "Missing DOM agent"_s;
     763        return;
     764    }
     765
    743766    auto action = std::make_unique<AddRuleAction>(inspectorStyleSheet, selector);
    744767    auto& rawAction = *action;
    745     auto performResult = m_domAgent->history()->perform(WTFMove(action));
     768    auto performResult = domAgent->history()->perform(WTFMove(action));
    746769    if (performResult.hasException()) {
    747770        errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
     
    817840void InspectorCSSAgent::forcePseudoState(ErrorString& errorString, int nodeId, const JSON::Array& forcedPseudoClasses)
    818841{
    819     Element* element = m_domAgent->assertElement(errorString, nodeId);
     842    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     843    if (!domAgent) {
     844        errorString = "Missing DOM agent"_s;
     845        return;
     846    }
     847
     848    Element* element = domAgent->assertElement(errorString, nodeId);
    820849    if (!element)
    821850        return;
     
    843872    return m_nodeToInspectorStyleSheet.ensure(&element, [this, &element] {
    844873        String newStyleSheetId = String::number(m_lastStyleSheetId++);
    845         auto inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(m_domAgent->pageAgent(), newStyleSheetId, element, Inspector::Protocol::CSS::StyleSheetOrigin::Regular, this);
     874        auto inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(m_instrumentingAgents.inspectorPageAgent(), newStyleSheetId, element, Inspector::Protocol::CSS::StyleSheetOrigin::Regular, this);
    846875        m_idToInspectorStyleSheet.set(newStyleSheetId, inspectorStyleSheet.copyRef());
    847876        return inspectorStyleSheet;
     
    851880Element* InspectorCSSAgent::elementForId(ErrorString& errorString, int nodeId)
    852881{
    853     Node* node = m_domAgent->nodeForId(nodeId);
     882    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     883    if (!domAgent) {
     884        errorString = "Missing DOM agent"_s;
     885        return nullptr;
     886    }
     887
     888    Node* node = domAgent->nodeForId(nodeId);
    854889    if (!node) {
    855890        errorString = "No node with given id found"_s;
     
    878913        String id = String::number(m_lastStyleSheetId++);
    879914        Document* document = styleSheet->ownerDocument();
    880         inspectorStyleSheet = InspectorStyleSheet::create(m_domAgent->pageAgent(), id, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
     915        inspectorStyleSheet = InspectorStyleSheet::create(m_instrumentingAgents.inspectorPageAgent(), id, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
    881916        m_idToInspectorStyleSheet.set(id, inspectorStyleSheet);
    882917        m_cssStyleSheetToInspectorStyleSheet.set(styleSheet, inspectorStyleSheet);
  • trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.h

    r228600 r243273  
    2828#include "CSSSelector.h"
    2929#include "ContentSecurityPolicy.h"
    30 #include "InspectorDOMAgent.h"
    3130#include "InspectorStyleSheet.h"
    3231#include "InspectorWebAgentBase.h"
     
    5756class InspectorCSSAgent final
    5857    : public InspectorAgentBase
    59     , public InspectorDOMAgent::DOMListener
    6058    , public Inspector::CSSBackendDispatcherHandler
    6159    , public InspectorStyleSheet::Listener {
     
    8078    };
    8179
    82     InspectorCSSAgent(WebAgentContext&, InspectorDOMAgent*);
    83     virtual ~InspectorCSSAgent();
     80    InspectorCSSAgent(WebAgentContext&);
     81    virtual ~InspectorCSSAgent() = default;
    8482
    8583    static CSSStyleRule* asCSSStyleRule(CSSRule&);
     
    8785    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
    8886    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
    89     void discardAgent() override;
    90     void enable(ErrorString&) override;
    91     void disable(ErrorString&) override;
    9287    void reset();
    9388
     
    9893    bool forcePseudoState(const Element&, CSSSelector::PseudoClassType);
    9994
     95    // CSSBackendDispatcherHandler
     96    void enable(ErrorString&) override;
     97    void disable(ErrorString&) override;
    10098    void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&) override;
    10199    void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes) override;
     
    113111    void forcePseudoState(ErrorString&, int nodeId, const JSON::Array& forcedPseudoClasses) override;
    114112
     113    // InspectorDOMAgent hooks
     114    void didRemoveDOMNode(Node&, int nodeId);
     115    void didModifyDOMAttr(Element&);
     116
    115117private:
    116118    class StyleSheetAction;
     
    125127    typedef HashMap<int, unsigned> NodeIdToForcedPseudoState;
    126128
    127     void resetNonPersistentData();
    128129    InspectorStyleSheetForInlineStyle& asInspectorStyleSheet(StyledElement&);
    129130    Element* elementForId(ErrorString&, int nodeId);
     
    145146    RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForAttributesStyle(StyledElement&);
    146147
    147     // InspectorDOMAgent::DOMListener implementation
    148     void didRemoveDOMNode(Node&, int nodeId) override;
    149     void didModifyDOMAttr(Element&) override;
    150 
    151148    // InspectorCSSAgent::Listener implementation
    152149    void styleSheetChanged(InspectorStyleSheet*) override;
     
    156153    std::unique_ptr<Inspector::CSSFrontendDispatcher> m_frontendDispatcher;
    157154    RefPtr<Inspector::CSSBackendDispatcher> m_backendDispatcher;
    158     InspectorDOMAgent* m_domAgent { nullptr };
    159155
    160156    IdToInspectorStyleSheet m_idToInspectorStyleSheet;
  • trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp

    r243244 r243273  
    7070#include "HTMLVideoElement.h"
    7171#include "HitTestResult.h"
     72#include "InspectorCSSAgent.h"
    7273#include "InspectorClient.h"
    7374#include "InspectorController.h"
     
    278279}
    279280
    280 InspectorDOMAgent::InspectorDOMAgent(WebAgentContext& context, InspectorPageAgent* pageAgent, InspectorOverlay* overlay)
     281InspectorDOMAgent::InspectorDOMAgent(PageAgentContext& context, InspectorOverlay* overlay)
    281282    : InspectorAgentBase("DOM"_s, context)
    282283    , m_injectedScriptManager(context.injectedScriptManager)
    283284    , m_frontendDispatcher(std::make_unique<Inspector::DOMFrontendDispatcher>(context.frontendRouter))
    284285    , m_backendDispatcher(Inspector::DOMBackendDispatcher::create(context.backendDispatcher, this))
    285     , m_pageAgent(pageAgent)
     286    , m_inspectedPage(context.inspectedPage)
    286287    , m_overlay(overlay)
    287288#if ENABLE(VIDEO)
     
    303304
    304305    m_instrumentingAgents.setInspectorDOMAgent(this);
    305     m_document = m_pageAgent->mainFrame().document();
     306    m_document = m_inspectedPage.mainFrame().document();
    306307
    307308#if ENABLE(VIDEO)
     
    353354        m_revalidateStyleAttrTask->reset();
    354355    m_document = nullptr;
    355 }
    356 
    357 void InspectorDOMAgent::setDOMListener(DOMListener* listener)
    358 {
    359     m_domListener = listener;
    360356}
    361357
     
    419415
    420416    nodesMap->remove(node);
    421     if (m_domListener)
    422         m_domListener->didRemoveDOMNode(*node, id);
     417
     418    if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
     419        cssAgent->didRemoveDOMNode(*node, id);
    423420
    424421    if (m_childrenRequested.remove(id)) {
     
    11611158    m_overlay->didSetSearchingForNode(m_searchingForNode);
    11621159
    1163     if (InspectorClient* client = m_pageAgent->page().inspectorController().inspectorClient())
     1160    if (InspectorClient* client = m_inspectedPage.inspectorController().inspectorClient())
    11641161        client->elementSelectionChanged(m_searchingForNode);
    11651162}
     
    12191216
    12201217    if (frameId) {
    1221         Frame* frame = m_pageAgent->frameForId(*frameId);
     1218        auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
     1219        if (!pageAgent) {
     1220            errorString = "Missing Page agent"_s;
     1221            return;
     1222        }
     1223
     1224        Frame* frame = pageAgent->frameForId(*frameId);
    12221225        if (!frame) {
    12231226            errorString = "No frame for given id found"_s;
     
    13061309void InspectorDOMAgent::highlightFrame(ErrorString& errorString, const String& frameId, const JSON::Object* color, const JSON::Object* outlineColor)
    13071310{
    1308     Frame* frame = m_pageAgent->assertFrame(errorString, frameId);
     1311    auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
     1312    if (!pageAgent) {
     1313        errorString = "Missing Page agent"_s;
     1314        return;
     1315    }
     1316
     1317    Frame* frame = pageAgent->assertFrame(errorString, frameId);
    13091318    if (!frame)
    13101319        return;
     
    15421551    }
    15431552
     1553    auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
     1554
    15441555    if (is<Element>(*node)) {
    15451556        Element& element = downcast<Element>(*node);
     
    15471558        if (is<HTMLFrameOwnerElement>(element)) {
    15481559            HTMLFrameOwnerElement& frameOwner = downcast<HTMLFrameOwnerElement>(element);
    1549             Frame* frame = frameOwner.contentFrame();
    1550             if (frame)
    1551                 value->setFrameId(m_pageAgent->frameId(frame));
     1560            if (pageAgent) {
     1561                Frame* frame = frameOwner.contentFrame();
     1562                if (frame)
     1563                    value->setFrameId(pageAgent->frameId(frame));
     1564            }
    15521565            Document* document = frameOwner.contentDocument();
    15531566            if (document)
     
    15791592                value->setPseudoElements(WTFMove(pseudoElements));
    15801593        }
    1581 
    15821594    } else if (is<Document>(*node)) {
    15831595        Document& document = downcast<Document>(*node);
    1584         value->setFrameId(m_pageAgent->frameId(document.frame()));
     1596        if (pageAgent)
     1597            value->setFrameId(pageAgent->frameId(document.frame()));
    15851598        value->setDocumentURL(documentURLString(&document));
    15861599        value->setBaseURL(documentBaseURLString(&document));
     
    22442257
    22452258    int id = boundNodeId(&element);
    2246     // If node is not mapped yet -> ignore the event.
    22472259    if (!id)
    22482260        return;
    22492261
    2250     if (m_domListener)
    2251         m_domListener->didModifyDOMAttr(element);
     2262    if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
     2263        cssAgent->didModifyDOMAttr(element);
    22522264
    22532265    m_frontendDispatcher->attributeModified(id, name, value);
     
    22572269{
    22582270    int id = boundNodeId(&element);
    2259     // If node is not mapped yet -> ignore the event.
    22602271    if (!id)
    22612272        return;
    22622273
    2263     if (m_domListener)
    2264         m_domListener->didModifyDOMAttr(element);
     2274    if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
     2275        cssAgent->didModifyDOMAttr(element);
    22652276
    22662277    m_frontendDispatcher->attributeRemoved(id, name);
     
    22722283    for (auto& element : elements) {
    22732284        int id = boundNodeId(element);
    2274         // If node is not mapped yet -> ignore the event.
    22752285        if (!id)
    22762286            continue;
    22772287
    2278         if (m_domListener)
    2279             m_domListener->didModifyDOMAttr(*element);
     2288        if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
     2289            cssAgent->didModifyDOMAttr(*element);
     2290
    22802291        nodeIds->addItem(id);
    22812292    }
     
    22972308{
    22982309    int id = m_documentNodeToIdMap.get(&node);
    2299     // If node is not mapped yet -> ignore the event.
    23002310    if (!id)
    23012311        return;
  • trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h

    r243244 r243273  
    5252
    5353namespace WebCore {
    54    
     54
    5555class AccessibilityObject;
    5656class CharacterData;
     
    6464class InspectorHistory;
    6565class InspectorOverlay;
    66 class InspectorPageAgent;
    6766#if ENABLE(VIDEO)
    6867class HTMLMediaElement;
     
    7069class HitTestResult;
    7170class Node;
     71class Page;
    7272class PseudoElement;
    7373class RevalidateStyleAttributeTask;
     
    8282    WTF_MAKE_FAST_ALLOCATED;
    8383public:
    84     struct DOMListener {
    85         virtual ~DOMListener() = default;
    86         virtual void didRemoveDOMNode(Node&, int nodeId) = 0;
    87         virtual void didModifyDOMAttr(Element&) = 0;
    88     };
    89 
    90     InspectorDOMAgent(WebAgentContext&, InspectorPageAgent*, InspectorOverlay*);
     84    InspectorDOMAgent(PageAgentContext&, InspectorOverlay*);
    9185    virtual ~InspectorDOMAgent();
    9286
     
    176170    Node* nodeForId(int nodeId);
    177171    int boundNodeId(const Node*);
    178     void setDOMListener(DOMListener*);
    179172
    180173    static String documentURLString(Document*);
     
    202195    static Node* scriptValueAsNode(JSC::JSValue);
    203196    static JSC::JSValue nodeAsScriptValue(JSC::ExecState&, Node*);
    204 
    205     // Methods called from other agents.
    206     InspectorPageAgent* pageAgent() { return m_pageAgent; }
    207197
    208198    bool hasBreakpointForEventListener(EventTarget&, const AtomicString& eventType, EventListener&, bool capture);
     
    247237    std::unique_ptr<Inspector::DOMFrontendDispatcher> m_frontendDispatcher;
    248238    RefPtr<Inspector::DOMBackendDispatcher> m_backendDispatcher;
    249     InspectorPageAgent* m_pageAgent { nullptr };
    250 
     239    Page& m_inspectedPage;
    251240    InspectorOverlay* m_overlay { nullptr };
    252     DOMListener* m_domListener { nullptr };
    253241    NodeToIdMap m_documentNodeToIdMap;
    254242    // Owns node mappings for dangling nodes.
  • trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp

    r243192 r243273  
    6666using namespace Inspector;
    6767
    68 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent)
     68InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDebuggerAgent* debuggerAgent)
    6969    : InspectorAgentBase("DOMDebugger"_s, context)
    7070    , m_backendDispatcher(Inspector::DOMDebuggerBackendDispatcher::create(context.backendDispatcher, this))
    7171    , m_injectedScriptManager(context.injectedScriptManager)
    72     , m_domAgent(domAgent)
    7372    , m_debuggerAgent(debuggerAgent)
    7473{
     
    234233void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)
    235234{
    236     Node* node = m_domAgent->assertNode(errorString, nodeId);
     235    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     236    if (!domAgent) {
     237        errorString = "Missing DOM agent"_s;
     238        return;
     239    }
     240
     241    Node* node = domAgent->assertNode(errorString, nodeId);
    237242    if (!node)
    238243        return;
     
    252257void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)
    253258{
    254     Node* node = m_domAgent->assertNode(errorString, nodeId);
     259    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     260    if (!domAgent) {
     261        errorString = "Missing DOM agent"_s;
     262        return;
     263    }
     264
     265    Node* node = domAgent->assertNode(errorString, nodeId);
    255266    if (!node)
    256267        return;
     268
    257269    int type = domTypeForName(errorString, typeString);
    258270    if (type == -1)
     
    317329    ASSERT(hasBreakpoint(&target, breakpointType));
    318330
     331    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     332
    319333    Node* breakpointOwner = &target;
    320334    if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) {
    321         // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.
    322         // Target node may be unknown to frontend, so we need to push it first.
    323         RefPtr<Inspector::Protocol::Runtime::RemoteObject> targetNodeObject = m_domAgent->resolveNode(&target, InspectorDebuggerAgent::backtraceObjectGroup);
    324         description.setValue("targetNode", targetNodeObject);
     335        if (domAgent) {
     336            // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.
     337            // Target node may be unknown to frontend, so we need to push it first.
     338            RefPtr<Inspector::Protocol::Runtime::RemoteObject> targetNodeObject = domAgent->resolveNode(&target, InspectorDebuggerAgent::backtraceObjectGroup);
     339            description.setValue("targetNode", targetNodeObject);
     340        }
    325341
    326342        // Find breakpoint owner node.
     
    339355    }
    340356
    341     int breakpointOwnerNodeId = m_domAgent->boundNodeId(breakpointOwner);
    342     ASSERT(breakpointOwnerNodeId);
    343     description.setInteger("nodeId", breakpointOwnerNodeId);
     357    if (domAgent) {
     358        int breakpointOwnerNodeId = domAgent->boundNodeId(breakpointOwner);
     359        ASSERT(breakpointOwnerNodeId);
     360        description.setInteger("nodeId", breakpointOwnerNodeId);
     361    }
     362
    344363    description.setString("type", domTypeName(breakpointType));
    345364}
     
    384403    }
    385404
     405    auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
     406
    386407    bool shouldPause = m_debuggerAgent->pauseOnNextStatementEnabled() || m_eventBreakpoints.contains(std::make_pair(Inspector::Protocol::DOMDebugger::EventBreakpointType::Listener, event.type()));
    387408
    388     if (!shouldPause && m_domAgent)
    389         shouldPause = m_domAgent->hasBreakpointForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
     409    if (!shouldPause && domAgent)
     410        shouldPause = domAgent->hasBreakpointForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
    390411
    391412    if (!shouldPause)
     
    394415    Ref<JSON::Object> eventData = JSON::Object::create();
    395416    eventData->setString("eventName"_s, event.type());
    396     if (m_domAgent) {
    397         int eventListenerId = m_domAgent->idForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
     417    if (domAgent) {
     418        int eventListenerId = domAgent->idForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
    398419        if (eventListenerId)
    399420            eventData->setInteger("eventListenerId"_s, eventListenerId);
  • trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h

    r243161 r243273  
    4848class Event;
    4949class Frame;
    50 class InspectorDOMAgent;
    5150class Node;
    5251class RegisteredEventListener;
     
    5857    WTF_MAKE_FAST_ALLOCATED;
    5958public:
    60     InspectorDOMDebuggerAgent(WebAgentContext&, InspectorDOMAgent*, Inspector::InspectorDebuggerAgent*);
     59    InspectorDOMDebuggerAgent(WebAgentContext&, Inspector::InspectorDebuggerAgent*);
    6160    virtual ~InspectorDOMDebuggerAgent();
    6261
     
    105104    RefPtr<Inspector::DOMDebuggerBackendDispatcher> m_backendDispatcher;
    106105    Inspector::InjectedScriptManager& m_injectedScriptManager;
    107     InspectorDOMAgent* m_domAgent { nullptr };
     106
    108107    Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr };
    109108
  • trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.cpp

    r243150 r243273  
    3535#include "CommandLineAPIHost.h"
    3636#include "InspectorDOMAgent.h"
     37#include "InstrumentingAgents.h"
    3738#include "Node.h"
    3839#include "WebInjectedScriptManager.h"
    39 
    4040
    4141namespace WebCore {
     
    4343using namespace Inspector;
    4444
    45 PageConsoleAgent::PageConsoleAgent(WebAgentContext& context, InspectorDOMAgent* domAgent)
     45PageConsoleAgent::PageConsoleAgent(WebAgentContext& context)
    4646    : WebConsoleAgent(context)
    47     , m_inspectorDOMAgent(domAgent)
     47    , m_instrumentingAgents(context.instrumentingAgents)
    4848{
    4949}
     
    5151void PageConsoleAgent::clearMessages(ErrorString& errorString)
    5252{
    53     m_inspectorDOMAgent->releaseDanglingNodes();
     53    if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent())
     54        domAgent->releaseDanglingNodes();
    5455
    5556    WebConsoleAgent::clearMessages(errorString);
  • trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.h

    r243150 r243273  
    3737namespace WebCore {
    3838
    39 class InspectorDOMAgent;
    40 
    4139class PageConsoleAgent final : public WebConsoleAgent {
    4240    WTF_MAKE_NONCOPYABLE(PageConsoleAgent);
    4341    WTF_MAKE_FAST_ALLOCATED;
    4442public:
    45     PageConsoleAgent(WebAgentContext&, InspectorDOMAgent*);
     43    PageConsoleAgent(WebAgentContext&);
    4644    virtual ~PageConsoleAgent() = default;
    4745
     
    4947    void clearMessages(ErrorString&) override;
    5048
    51     InspectorDOMAgent* m_inspectorDOMAgent;
     49    InstrumentingAgents& m_instrumentingAgents;
    5250};
    5351
Note: See TracChangeset for help on using the changeset viewer.