Diff
Modified: trunk/Source/WebCore/ChangeLog (243272 => 243273)
--- trunk/Source/WebCore/ChangeLog 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/ChangeLog 2019-03-21 03:10:28 UTC (rev 243273)
@@ -1,3 +1,71 @@
+2019-03-20 Devin Rousso <[email protected]>
+
+ 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):
+
2019-03-20 Youenn Fablet <[email protected]>
Include WAL and SHM file size in IDB database size computation
Modified: trunk/Source/WebCore/inspector/InspectorController.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/InspectorController.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/InspectorController.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -111,15 +111,10 @@
m_agents.append(WTFMove(inspectorAgentPtr));
auto pageAgentPtr = std::make_unique<InspectorPageAgent>(pageContext, inspectorClient, m_overlay.get());
- InspectorPageAgent* pageAgent = pageAgentPtr.get();
m_pageAgent = pageAgentPtr.get();
m_agents.append(WTFMove(pageAgentPtr));
- auto domAgentPtr = std::make_unique<InspectorDOMAgent>(pageContext, pageAgent, m_overlay.get());
- m_domAgent = domAgentPtr.get();
- m_agents.append(WTFMove(domAgentPtr));
-
- auto consoleAgent = std::make_unique<PageConsoleAgent>(pageContext, m_domAgent);
+ auto consoleAgent = std::make_unique<PageConsoleAgent>(pageContext);
m_instrumentingAgents->setWebConsoleAgent(consoleAgent.get());
m_agents.append(WTFMove(consoleAgent));
@@ -172,8 +167,9 @@
m_agents.append(WTFMove(debuggerAgent));
m_agents.append(std::make_unique<PageNetworkAgent>(pageContext, m_pageAgent));
- m_agents.append(std::make_unique<InspectorCSSAgent>(pageContext, m_domAgent));
- m_agents.append(std::make_unique<InspectorDOMDebuggerAgent>(pageContext, m_domAgent, debuggerAgentPtr));
+ m_agents.append(std::make_unique<InspectorCSSAgent>(pageContext));
+ m_agents.append(std::make_unique<InspectorDOMAgent>(pageContext, m_overlay.get()));
+ m_agents.append(std::make_unique<InspectorDOMDebuggerAgent>(pageContext, debuggerAgentPtr));
m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(pageContext, m_pageAgent));
m_agents.append(std::make_unique<InspectorLayerTreeAgent>(pageContext));
m_agents.append(std::make_unique<InspectorWorkerAgent>(pageContext));
@@ -385,7 +381,8 @@
if (!hasRemoteFrontend())
show();
- m_domAgent->inspect(node);
+ if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent())
+ domAgent->inspect(node);
}
bool InspectorController::enabled() const
@@ -405,8 +402,10 @@
void InspectorController::hideHighlight()
{
- ErrorString unused;
- m_domAgent->hideHighlight(unused);
+ if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent()) {
+ ErrorString unused;
+ domAgent->hideHighlight(unused);
+ }
}
Node* InspectorController::highlightedNode() const
Modified: trunk/Source/WebCore/inspector/InspectorController.h (243272 => 243273)
--- trunk/Source/WebCore/inspector/InspectorController.h 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/InspectorController.h 2019-03-21 03:10:28 UTC (rev 243273)
@@ -52,7 +52,6 @@
class Frame;
class GraphicsContext;
class InspectorClient;
-class InspectorDOMAgent;
class InspectorFrontendClient;
class InspectorInstrumentation;
class InspectorPageAgent;
@@ -137,7 +136,6 @@
InspectorFrontendClient* m_inspectorFrontendClient { nullptr };
Inspector::InspectorAgent* m_inspectorAgent { nullptr };
- InspectorDOMAgent* m_domAgent { nullptr };
InspectorPageAgent* m_pageAgent { nullptr };
bool m_isUnderTest { false };
Modified: trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -46,6 +46,7 @@
#include "HTMLParserIdioms.h"
#include "HTMLStyleElement.h"
#include "InspectorCSSAgent.h"
+#include "InspectorDOMAgent.h"
#include "InspectorPageAgent.h"
#include "MediaList.h"
#include "Node.h"
Modified: trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -43,6 +43,7 @@
#include "Frame.h"
#include "HTMLHeadElement.h"
#include "HTMLStyleElement.h"
+#include "InspectorDOMAgent.h"
#include "InspectorHistory.h"
#include "InspectorPageAgent.h"
#include "InstrumentingAgents.h"
@@ -294,21 +295,13 @@
return downcast<CSSStyleRule>(&rule);
}
-InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context, InspectorDOMAgent* domAgent)
+InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context)
: InspectorAgentBase("CSS"_s, context)
, m_frontendDispatcher(std::make_unique<CSSFrontendDispatcher>(context.frontendRouter))
, m_backendDispatcher(CSSBackendDispatcher::create(context.backendDispatcher, this))
- , m_domAgent(domAgent)
{
- m_domAgent->setDOMListener(this);
}
-InspectorCSSAgent::~InspectorCSSAgent()
-{
- ASSERT(!m_domAgent);
- reset();
-}
-
void InspectorCSSAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*)
{
}
@@ -315,18 +308,10 @@
void InspectorCSSAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
{
- resetNonPersistentData();
-
String unused;
disable(unused);
}
-void InspectorCSSAgent::discardAgent()
-{
- m_domAgent->setDOMListener(nullptr);
- m_domAgent = nullptr;
-}
-
void InspectorCSSAgent::reset()
{
// FIXME: Should we be resetting on main frame navigations?
@@ -335,25 +320,27 @@
m_nodeToInspectorStyleSheet.clear();
m_documentToInspectorStyleSheet.clear();
m_documentToKnownCSSStyleSheets.clear();
- resetNonPersistentData();
-}
-
-void InspectorCSSAgent::resetNonPersistentData()
-{
resetPseudoStates();
}
void InspectorCSSAgent::enable(ErrorString&)
{
+ if (m_instrumentingAgents.inspectorCSSAgent() == this)
+ return;
+
m_instrumentingAgents.setInspectorCSSAgent(this);
- for (auto* document : m_domAgent->documents())
- activeStyleSheetsUpdated(*document);
+ if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent()) {
+ for (auto* document : domAgent->documents())
+ activeStyleSheetsUpdated(*document);
+ }
}
void InspectorCSSAgent::disable(ErrorString&)
{
m_instrumentingAgents.setInspectorCSSAgent(nullptr);
+
+ reset();
}
void InspectorCSSAgent::documentDetached(Document& document)
@@ -415,7 +402,11 @@
if (m_nodeIdToForcedPseudoState.isEmpty())
return false;
- int nodeId = m_domAgent->boundNodeId(&element);
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent)
+ return false;
+
+ int nodeId = domAgent->boundNodeId(&element);
if (!nodeId)
return false;
@@ -574,8 +565,10 @@
void InspectorCSSAgent::collectAllStyleSheets(Vector<InspectorStyleSheet*>& result)
{
Vector<CSSStyleSheet*> cssStyleSheets;
- for (auto* document : m_domAgent->documents())
- collectAllDocumentStyleSheets(*document, cssStyleSheets);
+ if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent()) {
+ for (auto* document : domAgent->documents())
+ collectAllDocumentStyleSheets(*document, cssStyleSheets);
+ }
for (auto* cssStyleSheet : cssStyleSheets)
result.append(bindStyleSheet(cssStyleSheet));
@@ -627,7 +620,13 @@
if (!inspectorStyleSheet)
return;
- auto result = m_domAgent->history()->perform(std::make_unique<SetStyleSheetTextAction>(inspectorStyleSheet, text));
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ auto result = domAgent->history()->perform(std::make_unique<SetStyleSheetTextAction>(inspectorStyleSheet, text));
if (result.hasException())
errorString = InspectorDOMAgent::toErrorString(result.releaseException());
}
@@ -641,7 +640,13 @@
if (!inspectorStyleSheet)
return;
- auto performResult = m_domAgent->history()->perform(std::make_unique<SetStyleTextAction>(inspectorStyleSheet, compoundId, text));
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ auto performResult = domAgent->history()->perform(std::make_unique<SetStyleTextAction>(inspectorStyleSheet, compoundId, text));
if (performResult.hasException()) {
errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
return;
@@ -659,7 +664,13 @@
if (!inspectorStyleSheet)
return;
- auto performResult = m_domAgent->history()->perform(std::make_unique<SetRuleSelectorAction>(inspectorStyleSheet, compoundId, selector));
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ auto performResult = domAgent->history()->perform(std::make_unique<SetRuleSelectorAction>(inspectorStyleSheet, compoundId, selector));
if (performResult.hasException()) {
errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
return;
@@ -670,7 +681,13 @@
void InspectorCSSAgent::createStyleSheet(ErrorString& errorString, const String& frameId, String* styleSheetId)
{
- Frame* frame = m_domAgent->pageAgent()->frameForId(frameId);
+ auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
+ if (!pageAgent) {
+ errorString = "Missing Page agent"_s;
+ return;
+ }
+
+ Frame* frame = pageAgent->frameForId(frameId);
if (!frame) {
errorString = "No frame for given id found"_s;
return;
@@ -740,9 +757,15 @@
return;
}
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
auto action = "" selector);
auto& rawAction = *action;
- auto performResult = m_domAgent->history()->perform(WTFMove(action));
+ auto performResult = domAgent->history()->perform(WTFMove(action));
if (performResult.hasException()) {
errorString = InspectorDOMAgent::toErrorString(performResult.releaseException());
return;
@@ -816,7 +839,13 @@
void InspectorCSSAgent::forcePseudoState(ErrorString& errorString, int nodeId, const JSON::Array& forcedPseudoClasses)
{
- Element* element = m_domAgent->assertElement(errorString, nodeId);
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ Element* element = domAgent->assertElement(errorString, nodeId);
if (!element)
return;
@@ -842,7 +871,7 @@
{
return m_nodeToInspectorStyleSheet.ensure(&element, [this, &element] {
String newStyleSheetId = String::number(m_lastStyleSheetId++);
- auto inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(m_domAgent->pageAgent(), newStyleSheetId, element, Inspector::Protocol::CSS::StyleSheetOrigin::Regular, this);
+ auto inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(m_instrumentingAgents.inspectorPageAgent(), newStyleSheetId, element, Inspector::Protocol::CSS::StyleSheetOrigin::Regular, this);
m_idToInspectorStyleSheet.set(newStyleSheetId, inspectorStyleSheet.copyRef());
return inspectorStyleSheet;
}).iterator->value;
@@ -850,7 +879,13 @@
Element* InspectorCSSAgent::elementForId(ErrorString& errorString, int nodeId)
{
- Node* node = m_domAgent->nodeForId(nodeId);
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return nullptr;
+ }
+
+ Node* node = domAgent->nodeForId(nodeId);
if (!node) {
errorString = "No node with given id found"_s;
return nullptr;
@@ -877,7 +912,7 @@
if (!inspectorStyleSheet) {
String id = String::number(m_lastStyleSheetId++);
Document* document = styleSheet->ownerDocument();
- inspectorStyleSheet = InspectorStyleSheet::create(m_domAgent->pageAgent(), id, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
+ inspectorStyleSheet = InspectorStyleSheet::create(m_instrumentingAgents.inspectorPageAgent(), id, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
m_idToInspectorStyleSheet.set(id, inspectorStyleSheet);
m_cssStyleSheetToInspectorStyleSheet.set(styleSheet, inspectorStyleSheet);
if (m_creatingViaInspectorStyleSheet) {
Modified: trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.h (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.h 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.h 2019-03-21 03:10:28 UTC (rev 243273)
@@ -27,7 +27,6 @@
#include "CSSSelector.h"
#include "ContentSecurityPolicy.h"
-#include "InspectorDOMAgent.h"
#include "InspectorStyleSheet.h"
#include "InspectorWebAgentBase.h"
#include "SecurityContext.h"
@@ -56,7 +55,6 @@
class InspectorCSSAgent final
: public InspectorAgentBase
- , public InspectorDOMAgent::DOMListener
, public Inspector::CSSBackendDispatcherHandler
, public InspectorStyleSheet::Listener {
WTF_MAKE_NONCOPYABLE(InspectorCSSAgent);
@@ -79,16 +77,13 @@
ContentSecurityPolicy* m_contentSecurityPolicy;
};
- InspectorCSSAgent(WebAgentContext&, InspectorDOMAgent*);
- virtual ~InspectorCSSAgent();
+ InspectorCSSAgent(WebAgentContext&);
+ virtual ~InspectorCSSAgent() = default;
static CSSStyleRule* asCSSStyleRule(CSSRule&);
void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
- void discardAgent() override;
- void enable(ErrorString&) override;
- void disable(ErrorString&) override;
void reset();
// InspectorInstrumentation
@@ -97,6 +92,9 @@
void activeStyleSheetsUpdated(Document&);
bool forcePseudoState(const Element&, CSSSelector::PseudoClassType);
+ // CSSBackendDispatcherHandler
+ void enable(ErrorString&) override;
+ void disable(ErrorString&) override;
void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&) override;
void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes) override;
void getMatchedStylesForNode(ErrorString&, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::RuleMatch>>& matchedCSSRules, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::PseudoIdMatches>>&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::InheritedStyleEntry>>& inheritedEntries) override;
@@ -112,6 +110,10 @@
void getSupportedSystemFontFamilyNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& result) override;
void forcePseudoState(ErrorString&, int nodeId, const JSON::Array& forcedPseudoClasses) override;
+ // InspectorDOMAgent hooks
+ void didRemoveDOMNode(Node&, int nodeId);
+ void didModifyDOMAttr(Element&);
+
private:
class StyleSheetAction;
class SetStyleSheetTextAction;
@@ -124,7 +126,6 @@
typedef HashMap<RefPtr<Document>, Vector<RefPtr<InspectorStyleSheet>>> DocumentToViaInspectorStyleSheet; // "via inspector" stylesheets
typedef HashMap<int, unsigned> NodeIdToForcedPseudoState;
- void resetNonPersistentData();
InspectorStyleSheetForInlineStyle& asInspectorStyleSheet(StyledElement&);
Element* elementForId(ErrorString&, int nodeId);
@@ -144,10 +145,6 @@
RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::RuleMatch>> buildArrayForMatchedRuleList(const Vector<RefPtr<StyleRule>>&, StyleResolver&, Element&, PseudoId);
RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForAttributesStyle(StyledElement&);
- // InspectorDOMAgent::DOMListener implementation
- void didRemoveDOMNode(Node&, int nodeId) override;
- void didModifyDOMAttr(Element&) override;
-
// InspectorCSSAgent::Listener implementation
void styleSheetChanged(InspectorStyleSheet*) override;
@@ -155,7 +152,6 @@
std::unique_ptr<Inspector::CSSFrontendDispatcher> m_frontendDispatcher;
RefPtr<Inspector::CSSBackendDispatcher> m_backendDispatcher;
- InspectorDOMAgent* m_domAgent { nullptr };
IdToInspectorStyleSheet m_idToInspectorStyleSheet;
CSSStyleSheetToInspectorStyleSheet m_cssStyleSheetToInspectorStyleSheet;
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -69,6 +69,7 @@
#include "HTMLTemplateElement.h"
#include "HTMLVideoElement.h"
#include "HitTestResult.h"
+#include "InspectorCSSAgent.h"
#include "InspectorClient.h"
#include "InspectorController.h"
#include "InspectorHistory.h"
@@ -277,12 +278,12 @@
return DOMException::name(exception.code());
}
-InspectorDOMAgent::InspectorDOMAgent(WebAgentContext& context, InspectorPageAgent* pageAgent, InspectorOverlay* overlay)
+InspectorDOMAgent::InspectorDOMAgent(PageAgentContext& context, InspectorOverlay* overlay)
: InspectorAgentBase("DOM"_s, context)
, m_injectedScriptManager(context.injectedScriptManager)
, m_frontendDispatcher(std::make_unique<Inspector::DOMFrontendDispatcher>(context.frontendRouter))
, m_backendDispatcher(Inspector::DOMBackendDispatcher::create(context.backendDispatcher, this))
- , m_pageAgent(pageAgent)
+ , m_inspectedPage(context.inspectedPage)
, m_overlay(overlay)
#if ENABLE(VIDEO)
, m_mediaMetricsTimer(*this, &InspectorDOMAgent::mediaMetricsTimerFired)
@@ -302,7 +303,7 @@
m_domEditor = std::make_unique<DOMEditor>(*m_history);
m_instrumentingAgents.setInspectorDOMAgent(this);
- m_document = m_pageAgent->mainFrame().document();
+ m_document = m_inspectedPage.mainFrame().document();
#if ENABLE(VIDEO)
if (m_document)
@@ -354,11 +355,6 @@
m_document = nullptr;
}
-void InspectorDOMAgent::setDOMListener(DOMListener* listener)
-{
- m_domListener = listener;
-}
-
void InspectorDOMAgent::setDocument(Document* document)
{
if (document == m_document.get())
@@ -418,9 +414,10 @@
}
nodesMap->remove(node);
- if (m_domListener)
- m_domListener->didRemoveDOMNode(*node, id);
+ if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
+ cssAgent->didRemoveDOMNode(*node, id);
+
if (m_childrenRequested.remove(id)) {
// FIXME: Would be better to do this iteratively rather than recursively.
for (Node* child = innerFirstChild(node); child; child = innerNextSibling(child))
@@ -1160,7 +1157,7 @@
m_overlay->didSetSearchingForNode(m_searchingForNode);
- if (InspectorClient* client = m_pageAgent->page().inspectorController().inspectorClient())
+ if (InspectorClient* client = m_inspectedPage.inspectorController().inspectorClient())
client->elementSelectionChanged(m_searchingForNode);
}
@@ -1218,7 +1215,13 @@
RefPtr<Document> document;
if (frameId) {
- Frame* frame = m_pageAgent->frameForId(*frameId);
+ auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
+ if (!pageAgent) {
+ errorString = "Missing Page agent"_s;
+ return;
+ }
+
+ Frame* frame = pageAgent->frameForId(*frameId);
if (!frame) {
errorString = "No frame for given id found"_s;
return;
@@ -1305,7 +1308,13 @@
void InspectorDOMAgent::highlightFrame(ErrorString& errorString, const String& frameId, const JSON::Object* color, const JSON::Object* outlineColor)
{
- Frame* frame = m_pageAgent->assertFrame(errorString, frameId);
+ auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
+ if (!pageAgent) {
+ errorString = "Missing Page agent"_s;
+ return;
+ }
+
+ Frame* frame = pageAgent->assertFrame(errorString, frameId);
if (!frame)
return;
@@ -1541,14 +1550,18 @@
value->setChildren(WTFMove(children));
}
+ auto* pageAgent = m_instrumentingAgents.inspectorPageAgent();
+
if (is<Element>(*node)) {
Element& element = downcast<Element>(*node);
value->setAttributes(buildArrayForElementAttributes(&element));
if (is<HTMLFrameOwnerElement>(element)) {
HTMLFrameOwnerElement& frameOwner = downcast<HTMLFrameOwnerElement>(element);
- Frame* frame = frameOwner.contentFrame();
- if (frame)
- value->setFrameId(m_pageAgent->frameId(frame));
+ if (pageAgent) {
+ Frame* frame = frameOwner.contentFrame();
+ if (frame)
+ value->setFrameId(pageAgent->frameId(frame));
+ }
Document* document = frameOwner.contentDocument();
if (document)
value->setContentDocument(buildObjectForNode(document, 0, nodesMap));
@@ -1578,10 +1591,10 @@
if (auto pseudoElements = buildArrayForPseudoElements(element, nodesMap))
value->setPseudoElements(WTFMove(pseudoElements));
}
-
} else if (is<Document>(*node)) {
Document& document = downcast<Document>(*node);
- value->setFrameId(m_pageAgent->frameId(document.frame()));
+ if (pageAgent)
+ value->setFrameId(pageAgent->frameId(document.frame()));
value->setDocumentURL(documentURLString(&document));
value->setBaseURL(documentBaseURLString(&document));
value->setXmlVersion(document.xmlVersion());
@@ -2243,12 +2256,11 @@
return;
int id = boundNodeId(&element);
- // If node is not mapped yet -> ignore the event.
if (!id)
return;
- if (m_domListener)
- m_domListener->didModifyDOMAttr(element);
+ if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
+ cssAgent->didModifyDOMAttr(element);
m_frontendDispatcher->attributeModified(id, name, value);
}
@@ -2256,12 +2268,11 @@
void InspectorDOMAgent::didRemoveDOMAttr(Element& element, const AtomicString& name)
{
int id = boundNodeId(&element);
- // If node is not mapped yet -> ignore the event.
if (!id)
return;
- if (m_domListener)
- m_domListener->didModifyDOMAttr(element);
+ if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
+ cssAgent->didModifyDOMAttr(element);
m_frontendDispatcher->attributeRemoved(id, name);
}
@@ -2271,12 +2282,12 @@
auto nodeIds = JSON::ArrayOf<int>::create();
for (auto& element : elements) {
int id = boundNodeId(element);
- // If node is not mapped yet -> ignore the event.
if (!id)
continue;
- if (m_domListener)
- m_domListener->didModifyDOMAttr(*element);
+ if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent())
+ cssAgent->didModifyDOMAttr(*element);
+
nodeIds->addItem(id);
}
m_frontendDispatcher->inlineStyleInvalidated(WTFMove(nodeIds));
@@ -2296,7 +2307,6 @@
void InspectorDOMAgent::didInvalidateStyleAttr(Node& node)
{
int id = m_documentNodeToIdMap.get(&node);
- // If node is not mapped yet -> ignore the event.
if (!id)
return;
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h 2019-03-21 03:10:28 UTC (rev 243273)
@@ -51,7 +51,7 @@
}
namespace WebCore {
-
+
class AccessibilityObject;
class CharacterData;
class DOMEditor;
@@ -63,12 +63,12 @@
class Frame;
class InspectorHistory;
class InspectorOverlay;
-class InspectorPageAgent;
#if ENABLE(VIDEO)
class HTMLMediaElement;
#endif
class HitTestResult;
class Node;
+class Page;
class PseudoElement;
class RevalidateStyleAttributeTask;
class ShadowRoot;
@@ -81,13 +81,7 @@
WTF_MAKE_NONCOPYABLE(InspectorDOMAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
- struct DOMListener {
- virtual ~DOMListener() = default;
- virtual void didRemoveDOMNode(Node&, int nodeId) = 0;
- virtual void didModifyDOMAttr(Element&) = 0;
- };
-
- InspectorDOMAgent(WebAgentContext&, InspectorPageAgent*, InspectorOverlay*);
+ InspectorDOMAgent(PageAgentContext&, InspectorOverlay*);
virtual ~InspectorDOMAgent();
static String toErrorString(ExceptionCode);
@@ -175,7 +169,6 @@
int pushNodeToFrontend(ErrorString&, int documentNodeId, Node*);
Node* nodeForId(int nodeId);
int boundNodeId(const Node*);
- void setDOMListener(DOMListener*);
static String documentURLString(Document*);
@@ -202,9 +195,6 @@
static Node* scriptValueAsNode(JSC::JSValue);
static JSC::JSValue nodeAsScriptValue(JSC::ExecState&, Node*);
- // Methods called from other agents.
- InspectorPageAgent* pageAgent() { return m_pageAgent; }
-
bool hasBreakpointForEventListener(EventTarget&, const AtomicString& eventType, EventListener&, bool capture);
int idForEventListener(EventTarget&, const AtomicString& eventType, EventListener&, bool capture);
@@ -246,10 +236,8 @@
Inspector::InjectedScriptManager& m_injectedScriptManager;
std::unique_ptr<Inspector::DOMFrontendDispatcher> m_frontendDispatcher;
RefPtr<Inspector::DOMBackendDispatcher> m_backendDispatcher;
- InspectorPageAgent* m_pageAgent { nullptr };
-
+ Page& m_inspectedPage;
InspectorOverlay* m_overlay { nullptr };
- DOMListener* m_domListener { nullptr };
NodeToIdMap m_documentNodeToIdMap;
// Owns node mappings for dangling nodes.
Vector<std::unique_ptr<NodeToIdMap>> m_danglingNodeToIdMaps;
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -65,11 +65,10 @@
using namespace Inspector;
-InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent)
+InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDebuggerAgent* debuggerAgent)
: InspectorAgentBase("DOMDebugger"_s, context)
, m_backendDispatcher(Inspector::DOMDebuggerBackendDispatcher::create(context.backendDispatcher, this))
, m_injectedScriptManager(context.injectedScriptManager)
- , m_domAgent(domAgent)
, m_debuggerAgent(debuggerAgent)
{
m_debuggerAgent->addListener(*this);
@@ -233,7 +232,13 @@
void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)
{
- Node* node = m_domAgent->assertNode(errorString, nodeId);
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ Node* node = domAgent->assertNode(errorString, nodeId);
if (!node)
return;
@@ -251,9 +256,16 @@
void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)
{
- Node* node = m_domAgent->assertNode(errorString, nodeId);
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+ if (!domAgent) {
+ errorString = "Missing DOM agent"_s;
+ return;
+ }
+
+ Node* node = domAgent->assertNode(errorString, nodeId);
if (!node)
return;
+
int type = domTypeForName(errorString, typeString);
if (type == -1)
return;
@@ -316,12 +328,16 @@
{
ASSERT(hasBreakpoint(&target, breakpointType));
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+
Node* breakpointOwner = ⌖
if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) {
- // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.
- // Target node may be unknown to frontend, so we need to push it first.
- RefPtr<Inspector::Protocol::Runtime::RemoteObject> targetNodeObject = m_domAgent->resolveNode(&target, InspectorDebuggerAgent::backtraceObjectGroup);
- description.setValue("targetNode", targetNodeObject);
+ if (domAgent) {
+ // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.
+ // Target node may be unknown to frontend, so we need to push it first.
+ RefPtr<Inspector::Protocol::Runtime::RemoteObject> targetNodeObject = domAgent->resolveNode(&target, InspectorDebuggerAgent::backtraceObjectGroup);
+ description.setValue("targetNode", targetNodeObject);
+ }
// Find breakpoint owner node.
if (!insertion)
@@ -338,9 +354,12 @@
description.setBoolean("insertion", insertion);
}
- int breakpointOwnerNodeId = m_domAgent->boundNodeId(breakpointOwner);
- ASSERT(breakpointOwnerNodeId);
- description.setInteger("nodeId", breakpointOwnerNodeId);
+ if (domAgent) {
+ int breakpointOwnerNodeId = domAgent->boundNodeId(breakpointOwner);
+ ASSERT(breakpointOwnerNodeId);
+ description.setInteger("nodeId", breakpointOwnerNodeId);
+ }
+
description.setString("type", domTypeName(breakpointType));
}
@@ -383,10 +402,12 @@
injectedScript.setEventValue(toJS(state, deprecatedGlobalObjectForPrototype(state), event));
}
+ auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();
+
bool shouldPause = m_debuggerAgent->pauseOnNextStatementEnabled() || m_eventBreakpoints.contains(std::make_pair(Inspector::Protocol::DOMDebugger::EventBreakpointType::Listener, event.type()));
- if (!shouldPause && m_domAgent)
- shouldPause = m_domAgent->hasBreakpointForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
+ if (!shouldPause && domAgent)
+ shouldPause = domAgent->hasBreakpointForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
if (!shouldPause)
return;
@@ -393,8 +414,8 @@
Ref<JSON::Object> eventData = JSON::Object::create();
eventData->setString("eventName"_s, event.type());
- if (m_domAgent) {
- int eventListenerId = m_domAgent->idForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
+ if (domAgent) {
+ int eventListenerId = domAgent->idForEventListener(*event.currentTarget(), event.type(), registeredEventListener.callback(), registeredEventListener.useCapture());
if (eventListenerId)
eventData->setInteger("eventListenerId"_s, eventListenerId);
}
Modified: trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h 2019-03-21 03:10:28 UTC (rev 243273)
@@ -47,7 +47,6 @@
class Element;
class Event;
class Frame;
-class InspectorDOMAgent;
class Node;
class RegisteredEventListener;
@@ -57,7 +56,7 @@
WTF_MAKE_NONCOPYABLE(InspectorDOMDebuggerAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
- InspectorDOMDebuggerAgent(WebAgentContext&, InspectorDOMAgent*, Inspector::InspectorDebuggerAgent*);
+ InspectorDOMDebuggerAgent(WebAgentContext&, Inspector::InspectorDebuggerAgent*);
virtual ~InspectorDOMDebuggerAgent();
// DOMDebugger API
@@ -104,7 +103,7 @@
RefPtr<Inspector::DOMDebuggerBackendDispatcher> m_backendDispatcher;
Inspector::InjectedScriptManager& m_injectedScriptManager;
- InspectorDOMAgent* m_domAgent { nullptr };
+
Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr };
HashMap<Node*, uint32_t> m_domBreakpoints;
Modified: trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.cpp (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.cpp 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.cpp 2019-03-21 03:10:28 UTC (rev 243273)
@@ -34,23 +34,24 @@
#include "CommandLineAPIHost.h"
#include "InspectorDOMAgent.h"
+#include "InstrumentingAgents.h"
#include "Node.h"
#include "WebInjectedScriptManager.h"
-
namespace WebCore {
using namespace Inspector;
-PageConsoleAgent::PageConsoleAgent(WebAgentContext& context, InspectorDOMAgent* domAgent)
+PageConsoleAgent::PageConsoleAgent(WebAgentContext& context)
: WebConsoleAgent(context)
- , m_inspectorDOMAgent(domAgent)
+ , m_instrumentingAgents(context.instrumentingAgents)
{
}
void PageConsoleAgent::clearMessages(ErrorString& errorString)
{
- m_inspectorDOMAgent->releaseDanglingNodes();
+ if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent())
+ domAgent->releaseDanglingNodes();
WebConsoleAgent::clearMessages(errorString);
}
Modified: trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.h (243272 => 243273)
--- trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.h 2019-03-21 02:27:35 UTC (rev 243272)
+++ trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.h 2019-03-21 03:10:28 UTC (rev 243273)
@@ -36,19 +36,17 @@
namespace WebCore {
-class InspectorDOMAgent;
-
class PageConsoleAgent final : public WebConsoleAgent {
WTF_MAKE_NONCOPYABLE(PageConsoleAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
- PageConsoleAgent(WebAgentContext&, InspectorDOMAgent*);
+ PageConsoleAgent(WebAgentContext&);
virtual ~PageConsoleAgent() = default;
private:
void clearMessages(ErrorString&) override;
- InspectorDOMAgent* m_inspectorDOMAgent;
+ InstrumentingAgents& m_instrumentingAgents;
};
} // namespace WebCore