Changeset 243273 in webkit
- Timestamp:
- Mar 20, 2019 8:10:28 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r243270 r243273 1 2019-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 1 69 2019-03-20 Youenn Fablet <youenn@apple.com> 2 70 -
trunk/Source/WebCore/inspector/InspectorController.cpp
r243243 r243273 112 112 113 113 auto pageAgentPtr = std::make_unique<InspectorPageAgent>(pageContext, inspectorClient, m_overlay.get()); 114 InspectorPageAgent* pageAgent = pageAgentPtr.get();115 114 m_pageAgent = pageAgentPtr.get(); 116 115 m_agents.append(WTFMove(pageAgentPtr)); 117 116 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); 123 118 m_instrumentingAgents->setWebConsoleAgent(consoleAgent.get()); 124 119 m_agents.append(WTFMove(consoleAgent)); … … 173 168 174 169 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)); 177 173 m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(pageContext, m_pageAgent)); 178 174 m_agents.append(std::make_unique<InspectorLayerTreeAgent>(pageContext)); … … 386 382 show(); 387 383 388 m_domAgent->inspect(node); 384 if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent()) 385 domAgent->inspect(node); 389 386 } 390 387 … … 406 403 void InspectorController::hideHighlight() 407 404 { 408 ErrorString unused; 409 m_domAgent->hideHighlight(unused); 405 if (auto* domAgent = m_instrumentingAgents->inspectorDOMAgent()) { 406 ErrorString unused; 407 domAgent->hideHighlight(unused); 408 } 410 409 } 411 410 -
trunk/Source/WebCore/inspector/InspectorController.h
r242019 r243273 53 53 class GraphicsContext; 54 54 class InspectorClient; 55 class InspectorDOMAgent;56 55 class InspectorFrontendClient; 57 56 class InspectorInstrumentation; … … 138 137 139 138 Inspector::InspectorAgent* m_inspectorAgent { nullptr }; 140 InspectorDOMAgent* m_domAgent { nullptr };141 139 InspectorPageAgent* m_pageAgent { nullptr }; 142 140 -
trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp
r243163 r243273 47 47 #include "HTMLStyleElement.h" 48 48 #include "InspectorCSSAgent.h" 49 #include "InspectorDOMAgent.h" 49 50 #include "InspectorPageAgent.h" 50 51 #include "MediaList.h" -
trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp
r243163 r243273 44 44 #include "HTMLHeadElement.h" 45 45 #include "HTMLStyleElement.h" 46 #include "InspectorDOMAgent.h" 46 47 #include "InspectorHistory.h" 47 48 #include "InspectorPageAgent.h" … … 295 296 } 296 297 297 InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context , InspectorDOMAgent* domAgent)298 InspectorCSSAgent::InspectorCSSAgent(WebAgentContext& context) 298 299 : InspectorAgentBase("CSS"_s, context) 299 300 , m_frontendDispatcher(std::make_unique<CSSFrontendDispatcher>(context.frontendRouter)) 300 301 , 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 { 310 303 } 311 304 … … 316 309 void InspectorCSSAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason) 317 310 { 318 resetNonPersistentData();319 320 311 String unused; 321 312 disable(unused); 322 }323 324 void InspectorCSSAgent::discardAgent()325 {326 m_domAgent->setDOMListener(nullptr);327 m_domAgent = nullptr;328 313 } 329 314 … … 336 321 m_documentToInspectorStyleSheet.clear(); 337 322 m_documentToKnownCSSStyleSheets.clear(); 338 resetNonPersistentData();339 }340 341 void InspectorCSSAgent::resetNonPersistentData()342 {343 323 resetPseudoStates(); 344 324 } … … 346 326 void InspectorCSSAgent::enable(ErrorString&) 347 327 { 328 if (m_instrumentingAgents.inspectorCSSAgent() == this) 329 return; 330 348 331 m_instrumentingAgents.setInspectorCSSAgent(this); 349 332 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 } 352 337 } 353 338 … … 355 340 { 356 341 m_instrumentingAgents.setInspectorCSSAgent(nullptr); 342 343 reset(); 357 344 } 358 345 … … 416 403 return false; 417 404 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); 419 410 if (!nodeId) 420 411 return false; … … 575 566 { 576 567 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 } 579 572 580 573 for (auto* cssStyleSheet : cssStyleSheets) … … 628 621 return; 629 622 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)); 631 630 if (result.hasException()) 632 631 errorString = InspectorDOMAgent::toErrorString(result.releaseException()); … … 642 641 return; 643 642 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)); 645 650 if (performResult.hasException()) { 646 651 errorString = InspectorDOMAgent::toErrorString(performResult.releaseException()); … … 660 665 return; 661 666 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)); 663 674 if (performResult.hasException()) { 664 675 errorString = InspectorDOMAgent::toErrorString(performResult.releaseException()); … … 671 682 void InspectorCSSAgent::createStyleSheet(ErrorString& errorString, const String& frameId, String* styleSheetId) 672 683 { 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); 674 691 if (!frame) { 675 692 errorString = "No frame for given id found"_s; … … 741 758 } 742 759 760 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent(); 761 if (!domAgent) { 762 errorString = "Missing DOM agent"_s; 763 return; 764 } 765 743 766 auto action = std::make_unique<AddRuleAction>(inspectorStyleSheet, selector); 744 767 auto& rawAction = *action; 745 auto performResult = m_domAgent->history()->perform(WTFMove(action));768 auto performResult = domAgent->history()->perform(WTFMove(action)); 746 769 if (performResult.hasException()) { 747 770 errorString = InspectorDOMAgent::toErrorString(performResult.releaseException()); … … 817 840 void InspectorCSSAgent::forcePseudoState(ErrorString& errorString, int nodeId, const JSON::Array& forcedPseudoClasses) 818 841 { 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); 820 849 if (!element) 821 850 return; … … 843 872 return m_nodeToInspectorStyleSheet.ensure(&element, [this, &element] { 844 873 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); 846 875 m_idToInspectorStyleSheet.set(newStyleSheetId, inspectorStyleSheet.copyRef()); 847 876 return inspectorStyleSheet; … … 851 880 Element* InspectorCSSAgent::elementForId(ErrorString& errorString, int nodeId) 852 881 { 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); 854 889 if (!node) { 855 890 errorString = "No node with given id found"_s; … … 878 913 String id = String::number(m_lastStyleSheetId++); 879 914 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); 881 916 m_idToInspectorStyleSheet.set(id, inspectorStyleSheet); 882 917 m_cssStyleSheetToInspectorStyleSheet.set(styleSheet, inspectorStyleSheet); -
trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.h
r228600 r243273 28 28 #include "CSSSelector.h" 29 29 #include "ContentSecurityPolicy.h" 30 #include "InspectorDOMAgent.h"31 30 #include "InspectorStyleSheet.h" 32 31 #include "InspectorWebAgentBase.h" … … 57 56 class InspectorCSSAgent final 58 57 : public InspectorAgentBase 59 , public InspectorDOMAgent::DOMListener60 58 , public Inspector::CSSBackendDispatcherHandler 61 59 , public InspectorStyleSheet::Listener { … … 80 78 }; 81 79 82 InspectorCSSAgent(WebAgentContext& , InspectorDOMAgent*);83 virtual ~InspectorCSSAgent() ;80 InspectorCSSAgent(WebAgentContext&); 81 virtual ~InspectorCSSAgent() = default; 84 82 85 83 static CSSStyleRule* asCSSStyleRule(CSSRule&); … … 87 85 void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override; 88 86 void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override; 89 void discardAgent() override;90 void enable(ErrorString&) override;91 void disable(ErrorString&) override;92 87 void reset(); 93 88 … … 98 93 bool forcePseudoState(const Element&, CSSSelector::PseudoClassType); 99 94 95 // CSSBackendDispatcherHandler 96 void enable(ErrorString&) override; 97 void disable(ErrorString&) override; 100 98 void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&) override; 101 99 void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes) override; … … 113 111 void forcePseudoState(ErrorString&, int nodeId, const JSON::Array& forcedPseudoClasses) override; 114 112 113 // InspectorDOMAgent hooks 114 void didRemoveDOMNode(Node&, int nodeId); 115 void didModifyDOMAttr(Element&); 116 115 117 private: 116 118 class StyleSheetAction; … … 125 127 typedef HashMap<int, unsigned> NodeIdToForcedPseudoState; 126 128 127 void resetNonPersistentData();128 129 InspectorStyleSheetForInlineStyle& asInspectorStyleSheet(StyledElement&); 129 130 Element* elementForId(ErrorString&, int nodeId); … … 145 146 RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForAttributesStyle(StyledElement&); 146 147 147 // InspectorDOMAgent::DOMListener implementation148 void didRemoveDOMNode(Node&, int nodeId) override;149 void didModifyDOMAttr(Element&) override;150 151 148 // InspectorCSSAgent::Listener implementation 152 149 void styleSheetChanged(InspectorStyleSheet*) override; … … 156 153 std::unique_ptr<Inspector::CSSFrontendDispatcher> m_frontendDispatcher; 157 154 RefPtr<Inspector::CSSBackendDispatcher> m_backendDispatcher; 158 InspectorDOMAgent* m_domAgent { nullptr };159 155 160 156 IdToInspectorStyleSheet m_idToInspectorStyleSheet; -
trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
r243244 r243273 70 70 #include "HTMLVideoElement.h" 71 71 #include "HitTestResult.h" 72 #include "InspectorCSSAgent.h" 72 73 #include "InspectorClient.h" 73 74 #include "InspectorController.h" … … 278 279 } 279 280 280 InspectorDOMAgent::InspectorDOMAgent( WebAgentContext& context, InspectorPageAgent* pageAgent, InspectorOverlay* overlay)281 InspectorDOMAgent::InspectorDOMAgent(PageAgentContext& context, InspectorOverlay* overlay) 281 282 : InspectorAgentBase("DOM"_s, context) 282 283 , m_injectedScriptManager(context.injectedScriptManager) 283 284 , m_frontendDispatcher(std::make_unique<Inspector::DOMFrontendDispatcher>(context.frontendRouter)) 284 285 , m_backendDispatcher(Inspector::DOMBackendDispatcher::create(context.backendDispatcher, this)) 285 , m_ pageAgent(pageAgent)286 , m_inspectedPage(context.inspectedPage) 286 287 , m_overlay(overlay) 287 288 #if ENABLE(VIDEO) … … 303 304 304 305 m_instrumentingAgents.setInspectorDOMAgent(this); 305 m_document = m_ pageAgent->mainFrame().document();306 m_document = m_inspectedPage.mainFrame().document(); 306 307 307 308 #if ENABLE(VIDEO) … … 353 354 m_revalidateStyleAttrTask->reset(); 354 355 m_document = nullptr; 355 }356 357 void InspectorDOMAgent::setDOMListener(DOMListener* listener)358 {359 m_domListener = listener;360 356 } 361 357 … … 419 415 420 416 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); 423 420 424 421 if (m_childrenRequested.remove(id)) { … … 1161 1158 m_overlay->didSetSearchingForNode(m_searchingForNode); 1162 1159 1163 if (InspectorClient* client = m_ pageAgent->page().inspectorController().inspectorClient())1160 if (InspectorClient* client = m_inspectedPage.inspectorController().inspectorClient()) 1164 1161 client->elementSelectionChanged(m_searchingForNode); 1165 1162 } … … 1219 1216 1220 1217 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); 1222 1225 if (!frame) { 1223 1226 errorString = "No frame for given id found"_s; … … 1306 1309 void InspectorDOMAgent::highlightFrame(ErrorString& errorString, const String& frameId, const JSON::Object* color, const JSON::Object* outlineColor) 1307 1310 { 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); 1309 1318 if (!frame) 1310 1319 return; … … 1542 1551 } 1543 1552 1553 auto* pageAgent = m_instrumentingAgents.inspectorPageAgent(); 1554 1544 1555 if (is<Element>(*node)) { 1545 1556 Element& element = downcast<Element>(*node); … … 1547 1558 if (is<HTMLFrameOwnerElement>(element)) { 1548 1559 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 } 1552 1565 Document* document = frameOwner.contentDocument(); 1553 1566 if (document) … … 1579 1592 value->setPseudoElements(WTFMove(pseudoElements)); 1580 1593 } 1581 1582 1594 } else if (is<Document>(*node)) { 1583 1595 Document& document = downcast<Document>(*node); 1584 value->setFrameId(m_pageAgent->frameId(document.frame())); 1596 if (pageAgent) 1597 value->setFrameId(pageAgent->frameId(document.frame())); 1585 1598 value->setDocumentURL(documentURLString(&document)); 1586 1599 value->setBaseURL(documentBaseURLString(&document)); … … 2244 2257 2245 2258 int id = boundNodeId(&element); 2246 // If node is not mapped yet -> ignore the event.2247 2259 if (!id) 2248 2260 return; 2249 2261 2250 if ( m_domListener)2251 m_domListener->didModifyDOMAttr(element);2262 if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent()) 2263 cssAgent->didModifyDOMAttr(element); 2252 2264 2253 2265 m_frontendDispatcher->attributeModified(id, name, value); … … 2257 2269 { 2258 2270 int id = boundNodeId(&element); 2259 // If node is not mapped yet -> ignore the event.2260 2271 if (!id) 2261 2272 return; 2262 2273 2263 if ( m_domListener)2264 m_domListener->didModifyDOMAttr(element);2274 if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent()) 2275 cssAgent->didModifyDOMAttr(element); 2265 2276 2266 2277 m_frontendDispatcher->attributeRemoved(id, name); … … 2272 2283 for (auto& element : elements) { 2273 2284 int id = boundNodeId(element); 2274 // If node is not mapped yet -> ignore the event.2275 2285 if (!id) 2276 2286 continue; 2277 2287 2278 if (m_domListener) 2279 m_domListener->didModifyDOMAttr(*element); 2288 if (auto* cssAgent = m_instrumentingAgents.inspectorCSSAgent()) 2289 cssAgent->didModifyDOMAttr(*element); 2290 2280 2291 nodeIds->addItem(id); 2281 2292 } … … 2297 2308 { 2298 2309 int id = m_documentNodeToIdMap.get(&node); 2299 // If node is not mapped yet -> ignore the event.2300 2310 if (!id) 2301 2311 return; -
trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h
r243244 r243273 52 52 53 53 namespace WebCore { 54 54 55 55 class AccessibilityObject; 56 56 class CharacterData; … … 64 64 class InspectorHistory; 65 65 class InspectorOverlay; 66 class InspectorPageAgent;67 66 #if ENABLE(VIDEO) 68 67 class HTMLMediaElement; … … 70 69 class HitTestResult; 71 70 class Node; 71 class Page; 72 72 class PseudoElement; 73 73 class RevalidateStyleAttributeTask; … … 82 82 WTF_MAKE_FAST_ALLOCATED; 83 83 public: 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*); 91 85 virtual ~InspectorDOMAgent(); 92 86 … … 176 170 Node* nodeForId(int nodeId); 177 171 int boundNodeId(const Node*); 178 void setDOMListener(DOMListener*);179 172 180 173 static String documentURLString(Document*); … … 202 195 static Node* scriptValueAsNode(JSC::JSValue); 203 196 static JSC::JSValue nodeAsScriptValue(JSC::ExecState&, Node*); 204 205 // Methods called from other agents.206 InspectorPageAgent* pageAgent() { return m_pageAgent; }207 197 208 198 bool hasBreakpointForEventListener(EventTarget&, const AtomicString& eventType, EventListener&, bool capture); … … 247 237 std::unique_ptr<Inspector::DOMFrontendDispatcher> m_frontendDispatcher; 248 238 RefPtr<Inspector::DOMBackendDispatcher> m_backendDispatcher; 249 InspectorPageAgent* m_pageAgent { nullptr }; 250 239 Page& m_inspectedPage; 251 240 InspectorOverlay* m_overlay { nullptr }; 252 DOMListener* m_domListener { nullptr };253 241 NodeToIdMap m_documentNodeToIdMap; 254 242 // Owns node mappings for dangling nodes. -
trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp
r243192 r243273 66 66 using namespace Inspector; 67 67 68 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorD OMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent)68 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDebuggerAgent* debuggerAgent) 69 69 : InspectorAgentBase("DOMDebugger"_s, context) 70 70 , m_backendDispatcher(Inspector::DOMDebuggerBackendDispatcher::create(context.backendDispatcher, this)) 71 71 , m_injectedScriptManager(context.injectedScriptManager) 72 , m_domAgent(domAgent)73 72 , m_debuggerAgent(debuggerAgent) 74 73 { … … 234 233 void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString) 235 234 { 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); 237 242 if (!node) 238 243 return; … … 252 257 void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString) 253 258 { 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); 255 266 if (!node) 256 267 return; 268 257 269 int type = domTypeForName(errorString, typeString); 258 270 if (type == -1) … … 317 329 ASSERT(hasBreakpoint(&target, breakpointType)); 318 330 331 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent(); 332 319 333 Node* breakpointOwner = ⌖ 320 334 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 } 325 341 326 342 // Find breakpoint owner node. … … 339 355 } 340 356 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 344 363 description.setString("type", domTypeName(breakpointType)); 345 364 } … … 384 403 } 385 404 405 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent(); 406 386 407 bool shouldPause = m_debuggerAgent->pauseOnNextStatementEnabled() || m_eventBreakpoints.contains(std::make_pair(Inspector::Protocol::DOMDebugger::EventBreakpointType::Listener, event.type())); 387 408 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()); 390 411 391 412 if (!shouldPause) … … 394 415 Ref<JSON::Object> eventData = JSON::Object::create(); 395 416 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()); 398 419 if (eventListenerId) 399 420 eventData->setInteger("eventListenerId"_s, eventListenerId); -
trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h
r243161 r243273 48 48 class Event; 49 49 class Frame; 50 class InspectorDOMAgent;51 50 class Node; 52 51 class RegisteredEventListener; … … 58 57 WTF_MAKE_FAST_ALLOCATED; 59 58 public: 60 InspectorDOMDebuggerAgent(WebAgentContext&, Inspector DOMAgent*, Inspector::InspectorDebuggerAgent*);59 InspectorDOMDebuggerAgent(WebAgentContext&, Inspector::InspectorDebuggerAgent*); 61 60 virtual ~InspectorDOMDebuggerAgent(); 62 61 … … 105 104 RefPtr<Inspector::DOMDebuggerBackendDispatcher> m_backendDispatcher; 106 105 Inspector::InjectedScriptManager& m_injectedScriptManager; 107 InspectorDOMAgent* m_domAgent { nullptr }; 106 108 107 Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr }; 109 108 -
trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.cpp
r243150 r243273 35 35 #include "CommandLineAPIHost.h" 36 36 #include "InspectorDOMAgent.h" 37 #include "InstrumentingAgents.h" 37 38 #include "Node.h" 38 39 #include "WebInjectedScriptManager.h" 39 40 40 41 41 namespace WebCore { … … 43 43 using namespace Inspector; 44 44 45 PageConsoleAgent::PageConsoleAgent(WebAgentContext& context , InspectorDOMAgent* domAgent)45 PageConsoleAgent::PageConsoleAgent(WebAgentContext& context) 46 46 : WebConsoleAgent(context) 47 , m_ins pectorDOMAgent(domAgent)47 , m_instrumentingAgents(context.instrumentingAgents) 48 48 { 49 49 } … … 51 51 void PageConsoleAgent::clearMessages(ErrorString& errorString) 52 52 { 53 m_inspectorDOMAgent->releaseDanglingNodes(); 53 if (auto* domAgent = m_instrumentingAgents.inspectorDOMAgent()) 54 domAgent->releaseDanglingNodes(); 54 55 55 56 WebConsoleAgent::clearMessages(errorString); -
trunk/Source/WebCore/inspector/agents/page/PageConsoleAgent.h
r243150 r243273 37 37 namespace WebCore { 38 38 39 class InspectorDOMAgent;40 41 39 class PageConsoleAgent final : public WebConsoleAgent { 42 40 WTF_MAKE_NONCOPYABLE(PageConsoleAgent); 43 41 WTF_MAKE_FAST_ALLOCATED; 44 42 public: 45 PageConsoleAgent(WebAgentContext& , InspectorDOMAgent*);43 PageConsoleAgent(WebAgentContext&); 46 44 virtual ~PageConsoleAgent() = default; 47 45 … … 49 47 void clearMessages(ErrorString&) override; 50 48 51 Ins pectorDOMAgent* m_inspectorDOMAgent;49 InstrumentingAgents& m_instrumentingAgents; 52 50 }; 53 51
Note: See TracChangeset
for help on using the changeset viewer.