⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 244267 in webkit


Ignore:
Timestamp:
Apr 15, 2019, 10:26:39 AM (7 years ago)
Author:
Devin Rousso
Message:

Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
https://bugs.webkit.org/show_bug.cgi?id=196887
<rdar://problem/49870627>

Reviewed by Timothy Hatcher.

Source/WebCore:

Test: inspector/dom/event-listener-add-remove.html

inspector/dom/event-listener-inspected-node.html

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

(WebCore::InspectorDOMAgent::getEventListenersForNode):
(WebCore::InspectorDOMAgent::setInspectedNode):
(WebCore::InspectorDOMAgent::didAddEventListener):
(WebCore::InspectorDOMAgent::willRemoveEventListener):

Source/WebInspectorUI:

  • UserInterface/Models/DOMNode.js:

(WI.DOMNode.prototype.getEventListeners):

LayoutTests:

  • inspector/dom/event-listener-inspected-node.html: Added.
  • inspector/dom/event-listener-inspected-node-expected.txt: Added.
  • inspector/dom/event-listener-add-remove.html:
  • inspector/dom/event-listener-add-remove-expected.txt:
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r244263 r244267  
     12019-04-15  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
     4        https://bugs.webkit.org/show_bug.cgi?id=196887
     5        <rdar://problem/49870627>
     6
     7        Reviewed by Timothy Hatcher.
     8
     9        * inspector/dom/event-listener-inspected-node.html: Added.
     10        * inspector/dom/event-listener-inspected-node-expected.txt: Added.
     11
     12        * inspector/dom/event-listener-add-remove.html:
     13        * inspector/dom/event-listener-add-remove-expected.txt:
     14
    1152019-04-15  Shawn Roberts  <sroberts@apple.com>
    216
  • trunk/LayoutTests/inspector/dom/event-listener-add-remove-expected.txt

    r222002 r244267  
    11Testing events for adding and removing event listeners.
    22
     3Changing inspected node to #document...
    34
    45== Running test suite: DOM.eventListeners
  • trunk/LayoutTests/inspector/dom/event-listener-add-remove.html

    r243244 r244267  
    210210                        addAttribute("onload", 2);
    211211                    });
    212                 } else if (eventCount === 2)
     212                } else if (eventCount === 2) {
    213213                    InspectorTest.log("Attribute event listener replaced.");
    214                 else if (eventCount === 3) {
     214
    215215                    logListeners(1).then(() => {
    216216                        InspectorTest.log("");
     
    218218                        removeAttribute("onload");
    219219                    });
    220                 } else if (eventCount === 4)
     220                } else if (eventCount === 3)
    221221                    logListeners(0).then(resolve, reject);
    222222                else
     
    228228    });
    229229
    230     WI.domManager.requestDocument((documentNode) => {
     230    WI.domManager.requestDocument(async (documentNode) => {
    231231        node = documentNode;
     232
     233        InspectorTest.assert(node !== WI.domManager.inspectedNode);
     234        InspectorTest.log("Changing inspected node to #document...");
     235        await Promise.all([
     236            WI.domManager.awaitEvent(WI.DOMManager.Event.InspectedNodeChanged),
     237            WI.domManager.setInspectedNode(node),
     238        ]);
     239        InspectorTest.assert(node === WI.domManager.inspectedNode);
    232240
    233241        suite.runTestCasesAndFinish();
  • trunk/Source/WebCore/ChangeLog

    r244259 r244267  
     12019-04-15  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
     4        https://bugs.webkit.org/show_bug.cgi?id=196887
     5        <rdar://problem/49870627>
     6
     7        Reviewed by Timothy Hatcher.
     8
     9        Test: inspector/dom/event-listener-add-remove.html
     10              inspector/dom/event-listener-inspected-node.html
     11
     12        * inspector/agents/InspectorDOMAgent.h:
     13        * inspector/agents/InspectorDOMAgent.cpp:
     14        (WebCore::InspectorDOMAgent::getEventListenersForNode):
     15        (WebCore::InspectorDOMAgent::setInspectedNode):
     16        (WebCore::InspectorDOMAgent::didAddEventListener):
     17        (WebCore::InspectorDOMAgent::willRemoveEventListener):
     18
    1192019-04-15  Antoine Quint  <graouts@apple.com>
    220
  • trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp

    r243273 r244267  
    953953        }
    954954    }
     955
     956    if (m_inspectedNode == node)
     957        m_suppressEventListenerChangedEvent = false;
    955958}
    956959
     
    13991402    }
    14001403
     1404    m_inspectedNode = node;
     1405
    14011406    if (CommandLineAPIHost* commandLineAPIHost = static_cast<WebInjectedScriptManager&>(m_injectedScriptManager).commandLineAPIHost())
    14021407        commandLineAPIHost->addInspectedObject(std::make_unique<InspectableNode>(node));
     1408
     1409    m_suppressEventListenerChangedEvent = false;
    14031410}
    14041411
     
    23892396        return;
    23902397
    2391     int nodeId = boundNodeId(&downcast<Node>(target));
     2398    auto& node = downcast<Node>(target);
     2399    if (!node.contains(m_inspectedNode.get()))
     2400        return;
     2401
     2402    int nodeId = boundNodeId(&node);
    23922403    if (!nodeId)
    23932404        return;
    23942405
     2406    if (m_suppressEventListenerChangedEvent)
     2407        return;
     2408
     2409    m_suppressEventListenerChangedEvent = true;
     2410
    23952411    m_frontendDispatcher->didAddEventListener(nodeId);
    23962412}
     
    24002416    if (!is<Node>(target))
    24012417        return;
     2418
    24022419    auto& node = downcast<Node>(target);
     2420    if (!node.contains(m_inspectedNode.get()))
     2421        return;
    24032422
    24042423    int nodeId = boundNodeId(&node);
     
    24202439        return entry.value.matches(target, eventType, listener, capture);
    24212440    });
     2441
     2442    if (m_suppressEventListenerChangedEvent)
     2443        return;
     2444
     2445    m_suppressEventListenerChangedEvent = true;
    24222446
    24232447    m_frontendDispatcher->willRemoveEventListener(nodeId);
  • trunk/Source/WebCore/inspector/agents/InspectorDOMAgent.h

    r243273 r244267  
    252252    RefPtr<Node> m_nodeToFocus;
    253253    RefPtr<Node> m_mousedOverNode;
     254    RefPtr<Node> m_inspectedNode;
    254255    std::unique_ptr<HighlightConfig> m_inspectModeHighlightConfig;
    255256    std::unique_ptr<InspectorHistory> m_history;
     
    257258    bool m_searchingForNode { false };
    258259    bool m_suppressAttributeModifiedEvent { false };
     260    bool m_suppressEventListenerChangedEvent { false };
    259261    bool m_documentRequested { false };
    260262
  • trunk/Source/WebInspectorUI/ChangeLog

    r244266 r244267  
     12019-04-15  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
     4        https://bugs.webkit.org/show_bug.cgi?id=196887
     5        <rdar://problem/49870627>
     6
     7        Reviewed by Timothy Hatcher.
     8
     9        * UserInterface/Models/DOMNode.js:
     10        (WI.DOMNode.prototype.getEventListeners):
     11
    1122019-04-15  Devin Rousso  <drousso@apple.com>
    213
  • trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js

    r243152 r244267  
    588588    getEventListeners(callback)
    589589    {
     590        console.assert(WI.domManager.inspectedNode === this);
    590591        DOMAgent.getEventListenersForNode(this.id, callback);
    591592    }
Note: See TracChangeset for help on using the changeset viewer.