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

Changeset 144057 in webkit


Ignore:
Timestamp:
Feb 26, 2013, 7:57:50 AM (14 years ago)
Author:
Antoine Quint
Message:

Web Inspector: Cannot deep expand an element that has previously been partially expanded
https://bugs.webkit.org/show_bug.cgi?id=110424

In the case where the children from the provided node have already been pushed, traverse children at the depth provided until we find children that have not been pushed yet.

Reviewed by Pavel Feldman.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r144055 r144057  
     12013-02-25  Antoine Quint  <graouts@apple.com>
     2
     3        Web Inspector: Cannot deep expand an element that has previously been partially expanded
     4        https://bugs.webkit.org/show_bug.cgi?id=110424
     5
     6        Update existing test for InspectorDOMAgent::requestChildNodes to cover the case
     7        where we want to request children for a node that already has had children pushed
     8        but may not have pushed children at the depth requested.
     9
     10        Reviewed by Pavel Feldman.
     11
     12        * inspector-protocol/dom-request-child-nodes-depth-expected.txt:
     13        * inspector-protocol/dom-request-child-nodes-depth.html:
     14
    1152013-02-26  Martin Robinson  <mrobinson@igalia.com>
    216
  • trunk/LayoutTests/inspector-protocol/dom-request-child-nodes-depth-expected.txt

    r139429 r144057  
    1010PASS: First child has no .children property
    1111
    12 === Get all children of div#depth-1 ===
     12=== Get children of div#depth-1 three levels deep ===
     13
     14PASS: div#depth-1 has nodes 3 levels deep
     15
     16=== Get all children of body ===
    1317
    1418PASS: div#depth-1 has nodes 9 levels deep
  • trunk/LayoutTests/inspector-protocol/dom-request-child-nodes-depth.html

    r139429 r144057  
    66function test()
    77{
    8 
     8    var firstDiv;
    99    var eventsCount = 0;
    1010
     
    1818            gotImmediateChildren(messageObject);
    1919        else if (eventsCount === 2)
     20            gotAdditionalChildren(messageObject);
     21        else if (eventsCount === 3)
    2022            gotAllChildren(messageObject);
     23        else
     24            InspectorTest.log(JSON.stringify(messageObject, null, "    "));
    2125    };
    2226   
     
    4448    function gotImmediateChildren(messageObject)
    4549    {
    46         var firstChild = messageObject.params.nodes[0];
    47         assert("First child is a div", firstChild.localName, "div");
    48         assert("First child is div#depth-1", firstChild.attributes[1], "depth-1");
    49         assert("First child has one child", firstChild.childNodeCount, 1);
    50         assert("First child has no .children property", firstChild.children, undefined);
     50        firstDiv = messageObject.params.nodes[0];
     51        assert("First child is a div", firstDiv.localName, "div");
     52        assert("First child is div#depth-1", firstDiv.attributes[1], "depth-1");
     53        assert("First child has one child", firstDiv.childNodeCount, 1);
     54        assert("First child has no .children property", firstDiv.children, undefined);
    5155
    5256        step({
    53             name: "Get all children of div#depth-1",
     57            name: "Get children of div#depth-1 three levels deep",
    5458            command: "DOM.requestChildNodes",
    55             parameters: {"nodeId": firstChild.nodeId, "depth": -1}
     59            parameters: {"nodeId": firstDiv.nodeId, "depth": 3}
     60        });
     61    };
     62
     63    function gotAdditionalChildren(messageObject)
     64    {
     65        var depth = 1;
     66        var firstChild = messageObject.params.nodes[0];
     67        var node = firstChild;
     68        while (node && node.children) {
     69            depth++;
     70            node = node.children[0];
     71        }
     72
     73        assert("div#depth-1 has nodes 3 levels deep", depth, 3);
     74
     75        step({
     76            name: "Get all children of body",
     77            command: "DOM.requestChildNodes",
     78            parameters: {"nodeId": firstDiv.nodeId, "depth": -1}
    5679        });
    5780    };
     
    6790        }
    6891
    69         assert("div#depth-1 has nodes 9 levels deep", depth, 9);
     92        // We have requested nodes 3-level deep so far, so
     93        // we should have gotten an additional 6 levels of depth.
     94        assert("div#depth-1 has nodes 9 levels deep", depth, 6);
    7095
    7196        step({
    7297            name: "Pass an invalid depth",
    7398            command: "DOM.requestChildNodes",
    74             parameters: {"nodeId": firstChild.nodeId, "depth": 0},
     99            parameters: {"nodeId": firstDiv.nodeId, "depth": 0},
    75100            callback: finishTest
    76101        });
     
    79104    function finishTest()
    80105    {
    81         assert("Expected number of setChildNodes events", eventsCount, 2);
     106        assert("Expected number of setChildNodes events", eventsCount, 3);
    82107       
    83108        InspectorTest.completeTest();
  • trunk/Source/WebCore/ChangeLog

    r144053 r144057  
     12013-02-26  Antoine Quint  <graouts@apple.com>
     2
     3        Web Inspector: Cannot deep expand an element that has previously been partially expanded
     4        https://bugs.webkit.org/show_bug.cgi?id=110424
     5
     6        In the case where the children from the provided node have already been pushed, traverse
     7        children at the depth provided until we find children that have not been pushed yet.
     8
     9        Reviewed by Pavel Feldman.
     10
     11        * inspector/InspectorDOMAgent.cpp:
     12        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
     13
    1142013-02-26  Andrey Kosyakov  <caseq@chromium.org>
    215
  • trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp

    r143574 r144057  
    444444    if (!node || (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE))
    445445        return;
    446     if (m_childrenRequested.contains(nodeId))
    447         return;
    448446
    449447    NodeToIdMap* nodeMap = m_idToNodesMap.get(nodeId);
     448
     449    if (m_childrenRequested.contains(nodeId)) {
     450        if (depth <= 1)
     451            return;
     452
     453        depth--;
     454
     455        for (node = innerFirstChild(node); node; node = innerNextSibling(node)) {
     456            int childNodeId = nodeMap->get(node);
     457            ASSERT(childNodeId);
     458            pushChildNodesToFrontend(childNodeId, depth);
     459        }
     460
     461        return;
     462    }
     463
    450464    RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = buildArrayForContainerChildren(node, depth, nodeMap);
    451465    m_frontend->setChildNodes(nodeId, children.release());
Note: See TracChangeset for help on using the changeset viewer.