Changeset 107700 in webkit


Ignore:
Timestamp:
Feb 14, 2012 3:32:12 AM (12 years ago)
Author:
hayato@chromium.org
Message:

Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
https://bugs.webkit.org/show_bug.cgi?id=77514

Reviewed by Dimitri Glazkov.

NodeType.SHADOW_ROOT_NODE type is finally gone.

Source/WebCore:

  • bindings/js/JSNodeCustom.cpp:

(WebCore::createWrapperInline):

  • bindings/objc/DOM.mm:

(kitClass):

  • bindings/v8/custom/V8NodeCustom.cpp:

(WebCore::toV8Slow):

  • dom/ContainerNode.cpp:

(WebCore::collectTargetNodes):
(WebCore::ContainerNode::replaceChild):

  • dom/Document.cpp:

(WebCore::Document::importNode):
(WebCore::Document::childTypeAllowed):
(WebCore::Document::canReplaceChild):

  • dom/Node.cpp:

(WebCore::Node::dumpStatistics):
(WebCore::Node::isDefaultNamespace):
(WebCore::Node::lookupPrefix):
(WebCore::Node::lookupNamespaceURI):
(WebCore::appendTextContent):
(WebCore::Node::setTextContent):

  • dom/Node.h:
  • dom/Range.cpp:

(WebCore::lengthOfContentsInNode):
(WebCore::Range::processContentsBetweenOffsets):
(WebCore::Range::insertNode):
(WebCore::Range::checkNodeWOffset):
(WebCore::Range::checkNodeBA):
(WebCore::Range::selectNode):
(WebCore::Range::selectNodeContents):
(WebCore::Range::surroundContents):

  • dom/ShadowRoot.cpp:
  • dom/ShadowRoot.h:

(ShadowRoot):
(WebCore::toShadowRoot):

  • editing/FrameSelection.cpp:

(WebCore::nodeIsDetachedFromDocument):
(WebCore):
(WebCore::FrameSelection::textWillBeReplaced):

  • editing/MarkupAccumulator.cpp:

(WebCore::MarkupAccumulator::appendStartMarkup):

  • html/parser/HTMLElementStack.cpp:

(WebCore::HTMLNames::isRootNode):
(WebCore::HTMLElementStack::pushRootNode):

  • html/parser/HTMLElementStack.h:

(WebCore::isInHTMLNamespace):

  • inspector/InspectorDOMAgent.cpp:

(WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
(WebCore::InspectorDOMAgent::buildObjectForNode):

  • xml/XPathUtil.cpp:

(WebCore::XPath::isValidContextNode):

Source/WebKit/chromium:

  • src/WebPageSerializerImpl.cpp:

(WebKit::WebPageSerializerImpl::buildContentForNode):

LayoutTests:

  • fast/dom/shadow/nodetype-expected.txt:
  • fast/dom/shadow/nodetype.html:
  • resources/dump-as-markup.js:

(Markup._get):

Location:
trunk
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r107698 r107700  
     12012-02-14  Hayato Ito  <hayato@chromium.org>
     2
     3        Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
     4        https://bugs.webkit.org/show_bug.cgi?id=77514
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        NodeType.SHADOW_ROOT_NODE type is finally gone.
     9
     10        * fast/dom/shadow/nodetype-expected.txt:
     11        * fast/dom/shadow/nodetype.html:
     12        * resources/dump-as-markup.js:
     13        (Markup._get):
     14
    1152012-02-14  Nikolas Zimmermann  <nzimmermann@rim.com>
    216
  • trunk/LayoutTests/fast/dom/shadow/nodetype-expected.txt

    r107691 r107700  
    22This tests the shadow host's and shadow root's nodeType.
    33PASS keygen.nodeType is Node.ELEMENT_NODE
    4 PASS shadow.nodeType is 14
     4PASS shadow.nodeType is Node.DOCUMENT_FRAGMENT_NODE
    55PASS shadowChild is non-null.
    6 PASS shadowChild.nodeType != 14 is true
     6PASS shadowChild.nodeType != Node.DOCUMENT_FRAGMENT_NODE is true
    77PASS successfullyParsed is true
    88
  • trunk/LayoutTests/fast/dom/shadow/nodetype.html

    r107691 r107700  
    1717        var shadowChild = shadow.firstChild;
    1818        shouldBe('keygen.nodeType', 'Node.ELEMENT_NODE');
    19         shouldBe('shadow.nodeType', '14');
     19        shouldBe('shadow.nodeType', 'Node.DOCUMENT_FRAGMENT_NODE');
    2020        shouldBeNonNull('shadowChild');
    21         shouldBeTrue('shadowChild.nodeType != 14');
     21        shouldBeTrue('shadowChild.nodeType != Node.DOCUMENT_FRAGMENT_NODE');
    2222    }
    2323</script>
  • trunk/LayoutTests/resources/dump-as-markup.js

    r107691 r107700  
    216216
    217217        break;
    218     case 14: // See SHADOW_ROOT_NODE on Node::NodeType
    219         str += "<shadow:root>";
     218    case Node.DOCUMENT_FRAGMENT_NODE:
     219        if (node.nodeName == "#shadow-root")
     220          str += "<shadow:root>";
    220221    }
    221222
  • trunk/Source/WebCore/ChangeLog

    r107699 r107700  
     12012-02-14  Hayato Ito  <hayato@chromium.org>
     2
     3        Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
     4        https://bugs.webkit.org/show_bug.cgi?id=77514
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        NodeType.SHADOW_ROOT_NODE type is finally gone.
     9
     10        * bindings/js/JSNodeCustom.cpp:
     11        (WebCore::createWrapperInline):
     12        * bindings/objc/DOM.mm:
     13        (kitClass):
     14        * bindings/v8/custom/V8NodeCustom.cpp:
     15        (WebCore::toV8Slow):
     16        * dom/ContainerNode.cpp:
     17        (WebCore::collectTargetNodes):
     18        (WebCore::ContainerNode::replaceChild):
     19        * dom/Document.cpp:
     20        (WebCore::Document::importNode):
     21        (WebCore::Document::childTypeAllowed):
     22        (WebCore::Document::canReplaceChild):
     23        * dom/Node.cpp:
     24        (WebCore::Node::dumpStatistics):
     25        (WebCore::Node::isDefaultNamespace):
     26        (WebCore::Node::lookupPrefix):
     27        (WebCore::Node::lookupNamespaceURI):
     28        (WebCore::appendTextContent):
     29        (WebCore::Node::setTextContent):
     30        * dom/Node.h:
     31        * dom/Range.cpp:
     32        (WebCore::lengthOfContentsInNode):
     33        (WebCore::Range::processContentsBetweenOffsets):
     34        (WebCore::Range::insertNode):
     35        (WebCore::Range::checkNodeWOffset):
     36        (WebCore::Range::checkNodeBA):
     37        (WebCore::Range::selectNode):
     38        (WebCore::Range::selectNodeContents):
     39        (WebCore::Range::surroundContents):
     40        * dom/ShadowRoot.cpp:
     41        * dom/ShadowRoot.h:
     42        (ShadowRoot):
     43        (WebCore::toShadowRoot):
     44        * editing/FrameSelection.cpp:
     45        (WebCore::nodeIsDetachedFromDocument):
     46        (WebCore):
     47        (WebCore::FrameSelection::textWillBeReplaced):
     48        * editing/MarkupAccumulator.cpp:
     49        (WebCore::MarkupAccumulator::appendStartMarkup):
     50        * html/parser/HTMLElementStack.cpp:
     51        (WebCore::HTMLNames::isRootNode):
     52        (WebCore::HTMLElementStack::pushRootNode):
     53        * html/parser/HTMLElementStack.h:
     54        (WebCore::isInHTMLNamespace):
     55        * inspector/InspectorDOMAgent.cpp:
     56        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
     57        (WebCore::InspectorDOMAgent::buildObjectForNode):
     58        * xml/XPathUtil.cpp:
     59        (WebCore::XPath::isValidContextNode):
     60
    1612012-02-14  Andreas Kling  <awesomekling@apple.com>
    262
  • trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp

    r107691 r107700  
    257257            wrapper = CREATE_DOM_WRAPPER(exec, globalObject, DocumentFragment, node);
    258258            break;
    259         case Node::SHADOW_ROOT_NODE:
    260             wrapper = CREATE_DOM_WRAPPER(exec, globalObject, Node, node);
    261             break;
    262259        case Node::ENTITY_REFERENCE_NODE:
    263260            wrapper = CREATE_DOM_WRAPPER(exec, globalObject, EntityReference, node);
  • trunk/Source/WebCore/bindings/objc/DOM.mm

    r107691 r107700  
    328328            // See http://bugs.webkit.org/show_bug.cgi?id=8755
    329329            return nil;
    330         case WebCore::Node::SHADOW_ROOT_NODE:
    331             return [DOMNode class];
    332330    }
    333331    ASSERT_NOT_REACHED();
  • trunk/Source/WebCore/bindings/v8/custom/V8NodeCustom.cpp

    r107691 r107700  
    167167    case Node::NOTATION_NODE:
    168168        return toV8(static_cast<Notation*>(impl), forceNewObject);
    169     case Node::SHADOW_ROOT_NODE: // There's no IDL class for ShadowRoot, fall-through to default and use Node instead.
    170169    default: break; // XPATH_NAMESPACE_NODE
    171170    }
  • trunk/Source/WebCore/dom/ContainerNode.cpp

    r107691 r107700  
    7070static void collectTargetNodes(Node* node, NodeVector& nodes)
    7171{
    72     if (node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE) {
     72    if (node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE || node->isShadowRoot()) {
    7373        nodes.append(node);
    7474        return;
     
    299299    // writing, there are definitely callers who call that way).
    300300
    301     bool isFragment = newChild->nodeType() == DOCUMENT_FRAGMENT_NODE;
     301    bool isFragment = newChild->nodeType() == DOCUMENT_FRAGMENT_NODE && !newChild->isShadowRoot();
    302302
    303303    // Add the new child(ren)
  • trunk/Source/WebCore/dom/Document.cpp

    r107691 r107700  
    877877        return Attr::create(0, this, static_cast<Attr*>(importedNode)->attr()->clone());
    878878    case DOCUMENT_FRAGMENT_NODE: {
     879        if (importedNode->isShadowRoot()) {
     880            // ShadowRoot nodes should not be explicitly importable.
     881            // Either they are imported along with their host node, or created implicitly.
     882            break;
     883        }
    879884        DocumentFragment* oldFragment = static_cast<DocumentFragment*>(importedNode);
    880885        RefPtr<DocumentFragment> newFragment = createDocumentFragment();
     
    899904    case DOCUMENT_TYPE_NODE:
    900905    case XPATH_NAMESPACE_NODE:
    901     case SHADOW_ROOT_NODE:
    902         // ShadowRoot nodes should not be explicitly importable.
    903         // Either they are imported along with their host node, or created implicitly.
    904906        break;
    905907    }
     
    28572859    case TEXT_NODE:
    28582860    case XPATH_NAMESPACE_NODE:
    2859     case SHADOW_ROOT_NODE:
    28602861        return false;
    28612862    case COMMENT_NODE:
     
    29272928                numElements++;
    29282929                break;
    2929             case SHADOW_ROOT_NODE:
    2930                 ASSERT_NOT_REACHED();
    2931                 return false;
    29322930            }
    29332931        }
     
    29432941        case TEXT_NODE:
    29442942        case XPATH_NAMESPACE_NODE:
    2945         case SHADOW_ROOT_NODE:
    29462943            return false;
    29472944        case COMMENT_NODE:
  • trunk/Source/WebCore/dom/Node.cpp

    r107691 r107700  
    228228            }
    229229            case DOCUMENT_FRAGMENT_NODE: {
    230                 ++fragmentNodes;
     230                if (node->isShadowRoot())
     231                    ++shadowRootNodes;
     232                else
     233                    ++fragmentNodes;
    231234                break;
    232235            }
     
    237240            case XPATH_NAMESPACE_NODE: {
    238241                ++xpathNSNodes;
    239                 break;
    240             }
    241             case SHADOW_ROOT_NODE: {
    242                 ++shadowRootNodes;
    243242                break;
    244243            }
     
    18461845        case DOCUMENT_TYPE_NODE:
    18471846        case DOCUMENT_FRAGMENT_NODE:
    1848         case SHADOW_ROOT_NODE:
    18491847            return false;
    18501848        case ATTRIBUTE_NODE: {
     
    18801878        case DOCUMENT_FRAGMENT_NODE:
    18811879        case DOCUMENT_TYPE_NODE:
    1882         case SHADOW_ROOT_NODE:
    18831880            return String();
    18841881        case ATTRIBUTE_NODE: {
     
    19391936        case DOCUMENT_TYPE_NODE:
    19401937        case DOCUMENT_FRAGMENT_NODE:
    1941         case SHADOW_ROOT_NODE:
    19421938            return String();
    19431939        case ATTRIBUTE_NODE: {
     
    20072003    case Node::ENTITY_REFERENCE_NODE:
    20082004    case Node::DOCUMENT_FRAGMENT_NODE:
    2009     case Node::SHADOW_ROOT_NODE:
    20102005        isNullString = false;
    20112006        for (Node* child = node->firstChild(); child; child = child->nextSibling()) {
     
    20452040        case ENTITY_NODE:
    20462041        case ENTITY_REFERENCE_NODE:
    2047         case DOCUMENT_FRAGMENT_NODE:
    2048         case SHADOW_ROOT_NODE: {
     2042        case DOCUMENT_FRAGMENT_NODE: {
    20492043            ContainerNode* container = toContainerNode(this);
    20502044#if ENABLE(MUTATION_OBSERVERS)
  • trunk/Source/WebCore/dom/Node.h

    r107691 r107700  
    123123        NOTATION_NODE = 12,
    124124        XPATH_NAMESPACE_NODE = 13,
    125         SHADOW_ROOT_NODE = 14
    126125    };
    127126    enum DocumentPosition {
  • trunk/Source/WebCore/dom/Range.cpp

    r107691 r107700  
    678678    case Node::NOTATION_NODE:
    679679    case Node::XPATH_NAMESPACE_NODE:
    680     case Node::SHADOW_ROOT_NODE:
    681680        return node->childNodeCount();
    682681    }
     
    841840    case Node::NOTATION_NODE:
    842841    case Node::XPATH_NAMESPACE_NODE:
    843     case Node::SHADOW_ROOT_NODE:
    844842        // FIXME: Should we assert that some nodes never appear here?
    845843        if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
     
    998996    Node::NodeType newNodeType = newNode->nodeType();
    999997    int numNewChildren;
    1000     if (newNodeType == Node::DOCUMENT_FRAGMENT_NODE) {
     998    if (newNodeType == Node::DOCUMENT_FRAGMENT_NODE && !newNode->isShadowRoot()) {
    1001999        // check each child node, not the DocumentFragment itself
    10021000        numNewChildren = 0;
     
    10291027    case Node::NOTATION_NODE:
    10301028    case Node::DOCUMENT_NODE:
    1031     case Node::SHADOW_ROOT_NODE:
    10321029        ec = RangeException::INVALID_NODE_TYPE_ERR;
    10331030        return;
    10341031    default:
     1032        if (newNode->isShadowRoot()) {
     1033            ec = RangeException::INVALID_NODE_TYPE_ERR;
     1034            return;
     1035        }
    10351036        break;
    10361037    }
     
    12181219        case Node::ELEMENT_NODE:
    12191220        case Node::ENTITY_REFERENCE_NODE:
    1220         case Node::XPATH_NAMESPACE_NODE:
    1221         case Node::SHADOW_ROOT_NODE: {
     1221        case Node::XPATH_NAMESPACE_NODE: {
    12221222            if (!offset)
    12231223                return 0;
     
    12441244        case Node::ENTITY_NODE:
    12451245        case Node::NOTATION_NODE:
    1246         case Node::SHADOW_ROOT_NODE:
    12471246            ec = RangeException::INVALID_NODE_TYPE_ERR;
    12481247            return;
     
    12661265        case Node::DOCUMENT_NODE:
    12671266        case Node::DOCUMENT_FRAGMENT_NODE:
    1268         case Node::SHADOW_ROOT_NODE:
    12691267            break;
    12701268        case Node::CDATA_SECTION_NODE:
     
    13981396            case Node::TEXT_NODE:
    13991397            case Node::XPATH_NAMESPACE_NODE:
    1400             case Node::SHADOW_ROOT_NODE:
    14011398                break;
    14021399            case Node::DOCUMENT_TYPE_NODE:
     
    14231420        case Node::ENTITY_NODE:
    14241421        case Node::NOTATION_NODE:
    1425         case Node::SHADOW_ROOT_NODE:
    14261422            ec = RangeException::INVALID_NODE_TYPE_ERR;
    14271423            return;
     
    14641460            case Node::TEXT_NODE:
    14651461            case Node::XPATH_NAMESPACE_NODE:
    1466             case Node::SHADOW_ROOT_NODE:
    14671462                break;
    14681463            case Node::DOCUMENT_TYPE_NODE:
     
    15131508        case Node::TEXT_NODE:
    15141509        case Node::XPATH_NAMESPACE_NODE:
    1515         case Node::SHADOW_ROOT_NODE:
    15161510            break;
    15171511    }
  • trunk/Source/WebCore/dom/ShadowRoot.cpp

    r107691 r107700  
    126126}
    127127
    128 Node::NodeType ShadowRoot::nodeType() const
    129 {
    130     return SHADOW_ROOT_NODE;
    131 }
    132 
    133128PassRefPtr<Node> ShadowRoot::cloneNode(bool)
    134129{
  • trunk/Source/WebCore/dom/ShadowRoot.h

    r107691 r107700  
    8484
    8585    virtual String nodeName() const;
    86     virtual NodeType nodeType() const;
    8786    virtual PassRefPtr<Node> cloneNode(bool deep);
    8887    virtual bool childTypeAllowed(NodeType) const;
     
    114113inline ShadowRoot* toShadowRoot(Node* node)
    115114{
    116     ASSERT(!node || node->nodeType() == Node::SHADOW_ROOT_NODE);
     115    ASSERT(!node || node->isShadowRoot());
    117116    return static_cast<ShadowRoot*>(node);
    118117}
  • trunk/Source/WebCore/editing/FrameSelection.cpp

    r107691 r107700  
    426426}
    427427
     428static inline bool nodeIsDetachedFromDocument(Node* node)
     429{
     430    ASSERT(node);
     431    Node* highest = highestAncestor(node);
     432    return highest->nodeType() == Node::DOCUMENT_FRAGMENT_NODE && !highest->isShadowRoot();
     433}
     434
    428435void FrameSelection::textWillBeReplaced(CharacterData* node, unsigned offset, unsigned oldLength, unsigned newLength)
    429436{
    430437    // The fragment check is a performance optimization. See http://trac.webkit.org/changeset/30062.
    431     if (isNone() || !node || highestAncestor(node)->nodeType() == Node::DOCUMENT_FRAGMENT_NODE)
     438    if (isNone() || !node || nodeIsDetachedFromDocument(node))
    432439        return;
    433440
  • trunk/Source/WebCore/editing/MarkupAccumulator.cpp

    r107691 r107700  
    445445    case Node::NOTATION_NODE:
    446446    case Node::XPATH_NAMESPACE_NODE:
    447     case Node::SHADOW_ROOT_NODE:
    448447        ASSERT_NOT_REACHED();
    449448        break;
  • trunk/Source/WebCore/html/parser/HTMLElementStack.cpp

    r107691 r107700  
    5454{
    5555    return node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE
    56         || node->nodeType() == Node::SHADOW_ROOT_NODE
    5756        || node->hasTagName(htmlTag);
    5857}
     
    311310void HTMLElementStack::pushRootNode(PassRefPtr<ContainerNode> rootNode)
    312311{
    313     ASSERT(rootNode->nodeType() == Node::DOCUMENT_FRAGMENT_NODE || rootNode->nodeType() == Node::SHADOW_ROOT_NODE);
     312    ASSERT(rootNode->nodeType() == Node::DOCUMENT_FRAGMENT_NODE);
    314313    pushRootNodeCommon(rootNode);
    315314}
  • trunk/Source/WebCore/html/parser/HTMLElementStack.h

    r107691 r107700  
    181181    // fragments and should be considered in the HTML namespace.
    182182    return node->namespaceURI() == HTMLNames::xhtmlNamespaceURI
    183         || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE
    184         || node->nodeType() == Node::SHADOW_ROOT_NODE; // FIXME: Does this also apply to ShadowRoot?
     183        || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE; // FIXME: Does this also apply to ShadowRoot?
    185184}
    186185
  • trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp

    r107691 r107700  
    403403{
    404404    Node* node = nodeForId(nodeId);
    405     if (!node || (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE))
     405    if (!node || (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE) || node->isShadowRoot())
    406406        return;
    407407    if (m_childrenRequested.contains(nodeId))
     
    11611161        break;
    11621162    case Node::DOCUMENT_FRAGMENT_NODE:
    1163         break;
     1163        if (!node->isShadowRoot())
     1164            break;
     1165        // Fall through
    11641166    case Node::DOCUMENT_NODE:
    11651167    case Node::ELEMENT_NODE:
  • trunk/Source/WebCore/xml/XPathUtil.cpp

    r107691 r107700  
    8686        case Node::ENTITY_REFERENCE_NODE:
    8787        case Node::NOTATION_NODE:
    88         case Node::SHADOW_ROOT_NODE:
    8988            return false;
    9089        case Node::TEXT_NODE:
  • trunk/Source/WebKit/chromium/ChangeLog

    r107695 r107700  
     12012-02-14  Hayato Ito  <hayato@chromium.org>
     2
     3        Make ShadowRoot.nodeType return DOCUMENT_FRAGMENT_NODE.
     4        https://bugs.webkit.org/show_bug.cgi?id=77514
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        NodeType.SHADOW_ROOT_NODE type is finally gone.
     9
     10        * src/WebPageSerializerImpl.cpp:
     11        (WebKit::WebPageSerializerImpl::buildContentForNode):
     12
    1132012-02-14  David Reveman  <reveman@chromium.org>
    214
  • trunk/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp

    r107691 r107700  
    418418    case Node::DOCUMENT_NODE:
    419419    case Node::DOCUMENT_FRAGMENT_NODE:
    420     case Node::SHADOW_ROOT_NODE:
    421420        // Should not exist.
    422421        ASSERT_NOT_REACHED();
Note: See TracChangeset for help on using the changeset viewer.