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

Changeset 196833 in webkit


Ignore:
Timestamp:
Feb 19, 2016, 1:49:34 PM (11 years ago)
Author:
Antti Koivisto
Message:

ComposedTreeIterator traverses normal children for elements with empty shadow root
​https://bugs.webkit.org/show_bug.cgi?id=154464

Reviewed by Ryosuke Niwa.

Source/WebCore:

Test: fast/shadow-dom/composed-tree-basic.html

  • dom/ComposedTreeIterator.cpp:

(WebCore::ComposedTreeIterator::initializeContextStack):
(WebCore::ComposedTreeIterator::traverseShadowRoot):

If the shadow root is empty continue by skipping the real children.

(WebCore::ComposedTreeIterator::traverseNextInShadowTree):
(WebCore::composedTreeAsText):
(WebCore::ComposedTreeIterator::pushContext): Deleted.

  • dom/ComposedTreeIterator.h:

(WebCore::ComposedTreeIterator::context):
(WebCore::ComposedTreeIterator::current):
(WebCore::ComposedTreeIterator::traverseNext):
(WebCore::composedTreeChildren):

  • testing/Internals.cpp:

(WebCore::Internals::composedTreeAsText):

Testing support.

  • testing/Internals.h:
  • testing/Internals.idl:

LayoutTests:

  • fast/shadow-dom/composed-tree-basic-expected.txt: Added.
  • fast/shadow-dom/composed-tree-basic.html: Added.
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r196824 r196833  
     12016-02-19  Antti Koivisto  <antti@apple.com>
     2
     3        ComposedTreeIterator traverses normal children for elements with empty shadow root
     4        https://bugs.webkit.org/show_bug.cgi?id=154464
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        * fast/shadow-dom/composed-tree-basic-expected.txt: Added.
     9        * fast/shadow-dom/composed-tree-basic.html: Added.
     10
    1112016-02-19  Nan Wang  <n_wang@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r196831 r196833  
     12016-02-19  Antti Koivisto  <antti@apple.com>
     2
     3        ComposedTreeIterator traverses normal children for elements with empty shadow root
     4        https://bugs.webkit.org/show_bug.cgi?id=154464
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Test: fast/shadow-dom/composed-tree-basic.html
     9
     10        * dom/ComposedTreeIterator.cpp:
     11        (WebCore::ComposedTreeIterator::initializeContextStack):
     12        (WebCore::ComposedTreeIterator::traverseShadowRoot):
     13
     14            If the shadow root is empty continue by skipping the real children.
     15
     16        (WebCore::ComposedTreeIterator::traverseNextInShadowTree):
     17        (WebCore::composedTreeAsText):
     18        (WebCore::ComposedTreeIterator::pushContext): Deleted.
     19        * dom/ComposedTreeIterator.h:
     20        (WebCore::ComposedTreeIterator::context):
     21        (WebCore::ComposedTreeIterator::current):
     22        (WebCore::ComposedTreeIterator::traverseNext):
     23        (WebCore::composedTreeChildren):
     24        * testing/Internals.cpp:
     25        (WebCore::Internals::composedTreeAsText):
     26
     27            Testing support.
     28
     29        * testing/Internals.h:
     30        * testing/Internals.idl:
     31
    1322016-02-19  Jer Noble  <jer.noble@apple.com>
    233
  • trunk/Source/WebCore/dom/ComposedTreeIterator.cpp

    r196281 r196833  
    2828
    2929#include "HTMLSlotElement.h"
     30#include "TextStream.h"
    3031
    3132namespace WebCore {
    … …  
    106107}
    107108
    108 bool ComposedTreeIterator::pushContext(ShadowRoot& shadowRoot)
     109void ComposedTreeIterator::traverseShadowRoot(ShadowRoot& shadowRoot)
    109110{
    110111    Context shadowContext(shadowRoot);
    111     if (!shadowContext.iterator)
    112         return false;
     112    if (!shadowContext.iterator) {
     113        // Empty shadow root.
     114        traverseNextSkippingChildren();
     115        return;
     116    }
     117
    113118    m_contextStack.append(WTFMove(shadowContext));
    114     return true;
    115119}
    116120
    … …  
    181185#endif
    182186
    183 }
     187String composedTreeAsText(ContainerNode& root)
     188{
     189    TextStream stream;
     190    auto descendants = composedTreeDescendants(root);
     191    for (auto it = descendants.begin(), end = descendants.end(); it != end; ++it) {
     192        writeIndent(stream, it.depth());
     193
     194        if (is<Text>(*it)) {
     195            stream << "#text\n";
     196            continue;
     197        }
     198        auto& element = downcast<Element>(*it);
     199        stream << element.localName();
     200        if (element.shadowRoot())
     201            stream << " (shadow root)";
     202        stream << "\n";
     203    }
     204    return stream.release();
     205}
     206
     207}
  • trunk/Source/WebCore/dom/ComposedTreeIterator.h

    r196422 r196833  
    5959    void traverseNextInShadowTree();
    6060    void traverseNextLeavingContext();
    61     bool pushContext(ShadowRoot&);
     61    void traverseShadowRoot(ShadowRoot&);
    6262#if ENABLE(SHADOW_DOM) || ENABLE(DETAILS_ELEMENT)
    6363    bool advanceInSlot(int direction);
    … …  
    9393{
    9494    if (auto* shadowRoot = context().iterator->shadowRoot()) {
    95         if (pushContext(*shadowRoot))
    96             return *this;
     95        traverseShadowRoot(*shadowRoot);
     96        return *this;
    9797    }
    9898
    … …  
    201201}
    202202
    203 }
    204 
    205 #endif
     203WEBCORE_EXPORT String composedTreeAsText(ContainerNode& root);
     204
     205}
     206
     207#endif
  • trunk/Source/WebCore/testing/Internals.cpp

    r196722 r196833  
    4040#include "ClientRect.h"
    4141#include "ClientRectList.h"
     42#include "ComposedTreeIterator.h"
    4243#include "Cursor.h"
    4344#include "DOMPath.h"
    … …  
    34883489}
    34893490
    3490 }
     3491String Internals::composedTreeAsText(Node* node)
     3492{
     3493    if (!is<ContainerNode>(node))
     3494        return "";
     3495    return WebCore::composedTreeAsText(downcast<ContainerNode>(*node));
     3496}
     3497
     3498}
  • trunk/Source/WebCore/testing/Internals.h

    r196706 r196833  
    472472#endif
    473473
     474    String composedTreeAsText(Node*);
     475
    474476private:
    475477    explicit Internals(Document*);
  • trunk/Source/WebCore/testing/Internals.idl

    r196706 r196833  
    440440
    441441    [RaisesException] void setCanShowModalDialogOverride(boolean allow);
    442 };
     442
     443    DOMString composedTreeAsText(Node parent);
     444};
Note: See TracChangeset for help on using the changeset viewer.