Title: [107691] trunk
Revision
107691
Author
[email protected]
Date
2012-02-14 01:55:28 -0800 (Tue, 14 Feb 2012)

Log Message

Unreviewed, rolling out r107661.
http://trac.webkit.org/changeset/107661
https://bugs.webkit.org/show_bug.cgi?id=78591

crash on lion/qt bots (Requested by hayato on #webkit).

Patch by Sheriff Bot <[email protected]> on 2012-02-14

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:
(WebCore::ShadowRoot::nodeType):
(WebCore):
* dom/ShadowRoot.h:
(ShadowRoot):
(WebCore::toShadowRoot):
* editing/FrameSelection.cpp:
(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):

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (107690 => 107691)


--- trunk/LayoutTests/ChangeLog	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/LayoutTests/ChangeLog	2012-02-14 09:55:28 UTC (rev 107691)
@@ -1,3 +1,16 @@
+2012-02-14  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r107661.
+        http://trac.webkit.org/changeset/107661
+        https://bugs.webkit.org/show_bug.cgi?id=78591
+
+        crash on lion/qt bots (Requested by hayato on #webkit).
+
+        * fast/dom/shadow/nodetype-expected.txt:
+        * fast/dom/shadow/nodetype.html:
+        * resources/dump-as-markup.js:
+        (Markup._get):
+
 2012-02-14  Alexey Proskuryakov  <[email protected]>
 
         [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

Modified: trunk/LayoutTests/fast/dom/shadow/nodetype-expected.txt (107690 => 107691)


--- trunk/LayoutTests/fast/dom/shadow/nodetype-expected.txt	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/LayoutTests/fast/dom/shadow/nodetype-expected.txt	2012-02-14 09:55:28 UTC (rev 107691)
@@ -1,9 +1,9 @@
 
 This tests the shadow host's and shadow root's nodeType.
 PASS keygen.nodeType is Node.ELEMENT_NODE
-PASS shadow.nodeType is Node.DOCUMENT_FRAGMENT_NODE
+PASS shadow.nodeType is 14
 PASS shadowChild is non-null.
-PASS shadowChild.nodeType != Node.DOCUMENT_FRAGMENT_NODE is true
+PASS shadowChild.nodeType != 14 is true
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/shadow/nodetype.html (107690 => 107691)


--- trunk/LayoutTests/fast/dom/shadow/nodetype.html	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/LayoutTests/fast/dom/shadow/nodetype.html	2012-02-14 09:55:28 UTC (rev 107691)
@@ -16,9 +16,9 @@
         var shadow = internals.shadowRoot(keygen);
         var shadowChild = shadow.firstChild;
         shouldBe('keygen.nodeType', 'Node.ELEMENT_NODE');
-        shouldBe('shadow.nodeType', 'Node.DOCUMENT_FRAGMENT_NODE');
+        shouldBe('shadow.nodeType', '14');
         shouldBeNonNull('shadowChild');
-        shouldBeTrue('shadowChild.nodeType != Node.DOCUMENT_FRAGMENT_NODE');
+        shouldBeTrue('shadowChild.nodeType != 14');
     }
 </script>
 <script src=""

Modified: trunk/LayoutTests/resources/dump-as-markup.js (107690 => 107691)


--- trunk/LayoutTests/resources/dump-as-markup.js	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/LayoutTests/resources/dump-as-markup.js	2012-02-14 09:55:28 UTC (rev 107691)
@@ -215,9 +215,8 @@
                 str += Markup._indent(depth + 1) + 'this.value="' + node.value + '"';
 
         break;
-    case Node.DOCUMENT_FRAGMENT_NODE:
-        if (node.nodeName == "#shadow-root")
-          str += "<shadow:root>";
+    case 14: // See SHADOW_ROOT_NODE on Node::NodeType
+        str += "<shadow:root>";
     }
 
     for (var i = 0, len = node.childNodes.length; i < len; i++) {

Modified: trunk/Source/WebCore/ChangeLog (107690 => 107691)


--- trunk/Source/WebCore/ChangeLog	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/ChangeLog	2012-02-14 09:55:28 UTC (rev 107691)
@@ -1,3 +1,62 @@
+2012-02-14  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r107661.
+        http://trac.webkit.org/changeset/107661
+        https://bugs.webkit.org/show_bug.cgi?id=78591
+
+        crash on lion/qt bots (Requested by hayato on #webkit).
+
+        * 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:
+        (WebCore::ShadowRoot::nodeType):
+        (WebCore):
+        * dom/ShadowRoot.h:
+        (ShadowRoot):
+        (WebCore::toShadowRoot):
+        * editing/FrameSelection.cpp:
+        (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):
+
 2012-02-14  Hayato Ito  <[email protected]>
 
         Fix typo. HTMLContentSeleciton -> HTMLContentSelection.

Modified: trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp (107690 => 107691)


--- trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -254,12 +254,11 @@
             wrapper = CREATE_DOM_WRAPPER(exec, globalObject, Notation, node);
             break;
         case Node::DOCUMENT_FRAGMENT_NODE:
-            // In case of ShadowRoot, a cached ShadowRoot binding is always used and this
-            // code path never be used in current API set.
-            // Once we have such APIs, we should call CREATE_DOM_WRAPPER using ShadowRoot.
-            ASSERT(!node->isShadowRoot());
             wrapper = CREATE_DOM_WRAPPER(exec, globalObject, DocumentFragment, node);
             break;
+        case Node::SHADOW_ROOT_NODE:
+            wrapper = CREATE_DOM_WRAPPER(exec, globalObject, Node, node);
+            break;
         case Node::ENTITY_REFERENCE_NODE:
             wrapper = CREATE_DOM_WRAPPER(exec, globalObject, EntityReference, node);
             break;

Modified: trunk/Source/WebCore/bindings/objc/DOM.mm (107690 => 107691)


--- trunk/Source/WebCore/bindings/objc/DOM.mm	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/bindings/objc/DOM.mm	2012-02-14 09:55:28 UTC (rev 107691)
@@ -327,6 +327,8 @@
             // FIXME: Create an XPath objective C wrapper
             // See http://bugs.webkit.org/show_bug.cgi?id=8755
             return nil;
+        case WebCore::Node::SHADOW_ROOT_NODE:
+            return [DOMNode class];
     }
     ASSERT_NOT_REACHED();
     return nil;

Modified: trunk/Source/WebCore/bindings/v8/custom/V8NodeCustom.cpp (107690 => 107691)


--- trunk/Source/WebCore/bindings/v8/custom/V8NodeCustom.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/bindings/v8/custom/V8NodeCustom.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -163,13 +163,10 @@
     case Node::DOCUMENT_TYPE_NODE:
         return toV8(static_cast<DocumentType*>(impl), forceNewObject);
     case Node::DOCUMENT_FRAGMENT_NODE:
-        // In case of ShadowRoot, a cached ShadowRoot is always used and this
-        // code path never be used in current API set.
-        // Once we have such APIs, we should call toV8(static_cast<ShadowRoot*>..).
-        ASSERT(!impl->isShadowRoot());
         return toV8(static_cast<DocumentFragment*>(impl), forceNewObject);
     case Node::NOTATION_NODE:
         return toV8(static_cast<Notation*>(impl), forceNewObject);
+    case Node::SHADOW_ROOT_NODE: // There's no IDL class for ShadowRoot, fall-through to default and use Node instead.
     default: break; // XPATH_NAMESPACE_NODE
     }
     return V8Node::wrap(impl, forceNewObject);

Modified: trunk/Source/WebCore/dom/ContainerNode.cpp (107690 => 107691)


--- trunk/Source/WebCore/dom/ContainerNode.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/ContainerNode.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -69,7 +69,7 @@
 
 static void collectTargetNodes(Node* node, NodeVector& nodes)
 {
-    if (node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE || node->isShadowRoot()) {
+    if (node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE) {
         nodes.append(node);
         return;
     }
@@ -298,7 +298,7 @@
     // that no callers call with ref count == 0 and parent = 0 (as of this
     // writing, there are definitely callers who call that way).
 
-    bool isFragment = newChild->nodeType() == DOCUMENT_FRAGMENT_NODE && !newChild->isShadowRoot();
+    bool isFragment = newChild->nodeType() == DOCUMENT_FRAGMENT_NODE;
 
     // Add the new child(ren)
     RefPtr<Node> child = isFragment ? newChild->firstChild() : newChild;

Modified: trunk/Source/WebCore/dom/Document.cpp (107690 => 107691)


--- trunk/Source/WebCore/dom/Document.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/Document.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -876,11 +876,6 @@
     case ATTRIBUTE_NODE:
         return Attr::create(0, this, static_cast<Attr*>(importedNode)->attr()->clone());
     case DOCUMENT_FRAGMENT_NODE: {
-        if (importedNode->isShadowRoot()) {
-            // ShadowRoot nodes should not be explicitly importable.
-            // Either they are imported along with their host node, or created implicitly.
-            break;
-        }
         DocumentFragment* oldFragment = static_cast<DocumentFragment*>(importedNode);
         RefPtr<DocumentFragment> newFragment = createDocumentFragment();
         if (deep) {
@@ -903,6 +898,9 @@
     case DOCUMENT_NODE:
     case DOCUMENT_TYPE_NODE:
     case XPATH_NAMESPACE_NODE:
+    case SHADOW_ROOT_NODE:
+        // ShadowRoot nodes should not be explicitly importable.
+        // Either they are imported along with their host node, or created implicitly.
         break;
     }
     ec = NOT_SUPPORTED_ERR;
@@ -2858,6 +2856,7 @@
     case NOTATION_NODE:
     case TEXT_NODE:
     case XPATH_NAMESPACE_NODE:
+    case SHADOW_ROOT_NODE:
         return false;
     case COMMENT_NODE:
     case PROCESSING_INSTRUCTION_NODE:
@@ -2927,6 +2926,9 @@
             case ELEMENT_NODE:
                 numElements++;
                 break;
+            case SHADOW_ROOT_NODE:
+                ASSERT_NOT_REACHED();
+                return false;
             }
         }
     } else {
@@ -2940,6 +2942,7 @@
         case NOTATION_NODE:
         case TEXT_NODE:
         case XPATH_NAMESPACE_NODE:
+        case SHADOW_ROOT_NODE:
             return false;
         case COMMENT_NODE:
         case PROCESSING_INSTRUCTION_NODE:

Modified: trunk/Source/WebCore/dom/Node.cpp (107690 => 107691)


--- trunk/Source/WebCore/dom/Node.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/Node.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -227,10 +227,7 @@
                 break;
             }
             case DOCUMENT_FRAGMENT_NODE: {
-                if (node->isShadowRoot())
-                    ++shadowRootNodes;
-                else
-                    ++fragmentNodes;
+                ++fragmentNodes;
                 break;
             }
             case NOTATION_NODE: {
@@ -241,6 +238,10 @@
                 ++xpathNSNodes;
                 break;
             }
+            case SHADOW_ROOT_NODE: {
+                ++shadowRootNodes;
+                break;
+            }
         }
     }
 
@@ -1844,6 +1845,7 @@
         case NOTATION_NODE:
         case DOCUMENT_TYPE_NODE:
         case DOCUMENT_FRAGMENT_NODE:
+        case SHADOW_ROOT_NODE:
             return false;
         case ATTRIBUTE_NODE: {
             const Attr* attr = static_cast<const Attr*>(this);
@@ -1877,6 +1879,7 @@
         case NOTATION_NODE:
         case DOCUMENT_FRAGMENT_NODE:
         case DOCUMENT_TYPE_NODE:
+        case SHADOW_ROOT_NODE:
             return String();
         case ATTRIBUTE_NODE: {
             const Attr *attr = static_cast<const Attr *>(this);
@@ -1935,6 +1938,7 @@
         case NOTATION_NODE:
         case DOCUMENT_TYPE_NODE:
         case DOCUMENT_FRAGMENT_NODE:
+        case SHADOW_ROOT_NODE:
             return String();
         case ATTRIBUTE_NODE: {
             const Attr *attr = static_cast<const Attr *>(this);
@@ -2002,6 +2006,7 @@
     case Node::ENTITY_NODE:
     case Node::ENTITY_REFERENCE_NODE:
     case Node::DOCUMENT_FRAGMENT_NODE:
+    case Node::SHADOW_ROOT_NODE:
         isNullString = false;
         for (Node* child = node->firstChild(); child; child = child->nextSibling()) {
             if (child->nodeType() == Node::COMMENT_NODE || child->nodeType() == Node::PROCESSING_INSTRUCTION_NODE)
@@ -2039,7 +2044,8 @@
         case ATTRIBUTE_NODE:
         case ENTITY_NODE:
         case ENTITY_REFERENCE_NODE:
-        case DOCUMENT_FRAGMENT_NODE: {
+        case DOCUMENT_FRAGMENT_NODE:
+        case SHADOW_ROOT_NODE: {
             ContainerNode* container = toContainerNode(this);
 #if ENABLE(MUTATION_OBSERVERS)
             ChildListMutationScope mutation(this);

Modified: trunk/Source/WebCore/dom/Node.h (107690 => 107691)


--- trunk/Source/WebCore/dom/Node.h	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/Node.h	2012-02-14 09:55:28 UTC (rev 107691)
@@ -122,6 +122,7 @@
         DOCUMENT_FRAGMENT_NODE = 11,
         NOTATION_NODE = 12,
         XPATH_NAMESPACE_NODE = 13,
+        SHADOW_ROOT_NODE = 14
     };
     enum DocumentPosition {
         DOCUMENT_POSITION_EQUIVALENT = 0x00,

Modified: trunk/Source/WebCore/dom/Range.cpp (107690 => 107691)


--- trunk/Source/WebCore/dom/Range.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/Range.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -677,6 +677,7 @@
     case Node::DOCUMENT_FRAGMENT_NODE:
     case Node::NOTATION_NODE:
     case Node::XPATH_NAMESPACE_NODE:
+    case Node::SHADOW_ROOT_NODE:
         return node->childNodeCount();
     }
     ASSERT_NOT_REACHED();
@@ -839,6 +840,7 @@
     case Node::DOCUMENT_FRAGMENT_NODE:
     case Node::NOTATION_NODE:
     case Node::XPATH_NAMESPACE_NODE:
+    case Node::SHADOW_ROOT_NODE:
         // FIXME: Should we assert that some nodes never appear here?
         if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) {
             if (fragment)
@@ -995,7 +997,7 @@
 
     Node::NodeType newNodeType = newNode->nodeType();
     int numNewChildren;
-    if (newNodeType == Node::DOCUMENT_FRAGMENT_NODE && !newNode->isShadowRoot()) {
+    if (newNodeType == Node::DOCUMENT_FRAGMENT_NODE) {
         // check each child node, not the DocumentFragment itself
         numNewChildren = 0;
         for (Node* c = newNode->firstChild(); c; c = c->nextSibling()) {
@@ -1026,13 +1028,10 @@
     case Node::ENTITY_NODE:
     case Node::NOTATION_NODE:
     case Node::DOCUMENT_NODE:
+    case Node::SHADOW_ROOT_NODE:
         ec = RangeException::INVALID_NODE_TYPE_ERR;
         return;
     default:
-        if (newNode->isShadowRoot()) {
-            ec = RangeException::INVALID_NODE_TYPE_ERR;
-            return;
-        }
         break;
     }
 
@@ -1218,7 +1217,8 @@
         case Node::DOCUMENT_NODE:
         case Node::ELEMENT_NODE:
         case Node::ENTITY_REFERENCE_NODE:
-        case Node::XPATH_NAMESPACE_NODE: {
+        case Node::XPATH_NAMESPACE_NODE:
+        case Node::SHADOW_ROOT_NODE: {
             if (!offset)
                 return 0;
             Node* childBefore = n->childNode(offset - 1);
@@ -1243,6 +1243,7 @@
         case Node::DOCUMENT_NODE:
         case Node::ENTITY_NODE:
         case Node::NOTATION_NODE:
+        case Node::SHADOW_ROOT_NODE:
             ec = RangeException::INVALID_NODE_TYPE_ERR;
             return;
         case Node::CDATA_SECTION_NODE:
@@ -1264,6 +1265,7 @@
         case Node::ATTRIBUTE_NODE:
         case Node::DOCUMENT_NODE:
         case Node::DOCUMENT_FRAGMENT_NODE:
+        case Node::SHADOW_ROOT_NODE:
             break;
         case Node::CDATA_SECTION_NODE:
         case Node::COMMENT_NODE:
@@ -1395,6 +1397,7 @@
             case Node::PROCESSING_INSTRUCTION_NODE:
             case Node::TEXT_NODE:
             case Node::XPATH_NAMESPACE_NODE:
+            case Node::SHADOW_ROOT_NODE:
                 break;
             case Node::DOCUMENT_TYPE_NODE:
             case Node::ENTITY_NODE:
@@ -1419,6 +1422,7 @@
         case Node::DOCUMENT_NODE:
         case Node::ENTITY_NODE:
         case Node::NOTATION_NODE:
+        case Node::SHADOW_ROOT_NODE:
             ec = RangeException::INVALID_NODE_TYPE_ERR;
             return;
     }
@@ -1459,6 +1463,7 @@
             case Node::PROCESSING_INSTRUCTION_NODE:
             case Node::TEXT_NODE:
             case Node::XPATH_NAMESPACE_NODE:
+            case Node::SHADOW_ROOT_NODE:
                 break;
             case Node::DOCUMENT_TYPE_NODE:
             case Node::ENTITY_NODE:
@@ -1507,6 +1512,7 @@
         case Node::PROCESSING_INSTRUCTION_NODE:
         case Node::TEXT_NODE:
         case Node::XPATH_NAMESPACE_NODE:
+        case Node::SHADOW_ROOT_NODE:
             break;
     }
 

Modified: trunk/Source/WebCore/dom/ShadowRoot.cpp (107690 => 107691)


--- trunk/Source/WebCore/dom/ShadowRoot.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/ShadowRoot.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -125,6 +125,11 @@
     return "#shadow-root";
 }
 
+Node::NodeType ShadowRoot::nodeType() const
+{
+    return SHADOW_ROOT_NODE;
+}
+
 PassRefPtr<Node> ShadowRoot::cloneNode(bool)
 {
     // ShadowRoot should not be arbitrarily cloned.

Modified: trunk/Source/WebCore/dom/ShadowRoot.h (107690 => 107691)


--- trunk/Source/WebCore/dom/ShadowRoot.h	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/dom/ShadowRoot.h	2012-02-14 09:55:28 UTC (rev 107691)
@@ -83,6 +83,7 @@
     virtual ~ShadowRoot();
 
     virtual String nodeName() const;
+    virtual NodeType nodeType() const;
     virtual PassRefPtr<Node> cloneNode(bool deep);
     virtual bool childTypeAllowed(NodeType) const;
 
@@ -112,7 +113,7 @@
 
 inline ShadowRoot* toShadowRoot(Node* node)
 {
-    ASSERT(!node || node->isShadowRoot());
+    ASSERT(!node || node->nodeType() == Node::SHADOW_ROOT_NODE);
     return static_cast<ShadowRoot*>(node);
 }
 

Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (107690 => 107691)


--- trunk/Source/WebCore/editing/FrameSelection.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -425,17 +425,10 @@
         position.moveToOffset(positionOffset - oldLength + newLength);
 }
 
-static inline bool nodeIsDetachedFromDocument(Node* node)
-{
-    ASSERT(node);
-    Node* highest = highestAncestor(node);
-    return highest->nodeType() == Node::DOCUMENT_FRAGMENT_NODE && !highest->isShadowRoot();
-}
-
 void FrameSelection::textWillBeReplaced(CharacterData* node, unsigned offset, unsigned oldLength, unsigned newLength)
 {
     // The fragment check is a performance optimization. See http://trac.webkit.org/changeset/30062.
-    if (isNone() || !node || nodeIsDetachedFromDocument(node))
+    if (isNone() || !node || highestAncestor(node)->nodeType() == Node::DOCUMENT_FRAGMENT_NODE)
         return;
 
     Position base = m_selection.base();

Modified: trunk/Source/WebCore/editing/MarkupAccumulator.cpp (107690 => 107691)


--- trunk/Source/WebCore/editing/MarkupAccumulator.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/editing/MarkupAccumulator.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -444,6 +444,7 @@
     case Node::ENTITY_REFERENCE_NODE:
     case Node::NOTATION_NODE:
     case Node::XPATH_NAMESPACE_NODE:
+    case Node::SHADOW_ROOT_NODE:
         ASSERT_NOT_REACHED();
         break;
     }

Modified: trunk/Source/WebCore/html/parser/HTMLElementStack.cpp (107690 => 107691)


--- trunk/Source/WebCore/html/parser/HTMLElementStack.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/html/parser/HTMLElementStack.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -53,6 +53,7 @@
 inline bool isRootNode(ContainerNode* node)
 {
     return node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE
+        || node->nodeType() == Node::SHADOW_ROOT_NODE
         || node->hasTagName(htmlTag);
 }
 
@@ -309,7 +310,7 @@
     
 void HTMLElementStack::pushRootNode(PassRefPtr<ContainerNode> rootNode)
 {
-    ASSERT(rootNode->nodeType() == Node::DOCUMENT_FRAGMENT_NODE);
+    ASSERT(rootNode->nodeType() == Node::DOCUMENT_FRAGMENT_NODE || rootNode->nodeType() == Node::SHADOW_ROOT_NODE);
     pushRootNodeCommon(rootNode);
 }
 

Modified: trunk/Source/WebCore/html/parser/HTMLElementStack.h (107690 => 107691)


--- trunk/Source/WebCore/html/parser/HTMLElementStack.h	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/html/parser/HTMLElementStack.h	2012-02-14 09:55:28 UTC (rev 107691)
@@ -180,7 +180,8 @@
     // A DocumentFragment takes the place of the document element when parsing
     // fragments and should be considered in the HTML namespace.
     return node->namespaceURI() == HTMLNames::xhtmlNamespaceURI
-        || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE; // FIXME: Does this also apply to ShadowRoot?
+        || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE
+        || node->nodeType() == Node::SHADOW_ROOT_NODE; // FIXME: Does this also apply to ShadowRoot?
 }
 
 

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp (107690 => 107691)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -402,7 +402,7 @@
 void InspectorDOMAgent::pushChildNodesToFrontend(int nodeId)
 {
     Node* node = nodeForId(nodeId);
-    if (!node || (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE) || node->isShadowRoot())
+    if (!node || (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE))
         return;
     if (m_childrenRequested.contains(nodeId))
         return;
@@ -1160,9 +1160,7 @@
         localName = node->localName();
         break;
     case Node::DOCUMENT_FRAGMENT_NODE:
-        if (!node->isShadowRoot())
-            break;
-        // Fall through
+        break;
     case Node::DOCUMENT_NODE:
     case Node::ELEMENT_NODE:
     default:

Modified: trunk/Source/WebCore/xml/XPathUtil.cpp (107690 => 107691)


--- trunk/Source/WebCore/xml/XPathUtil.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebCore/xml/XPathUtil.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -85,6 +85,7 @@
         case Node::ENTITY_NODE:
         case Node::ENTITY_REFERENCE_NODE:
         case Node::NOTATION_NODE:
+        case Node::SHADOW_ROOT_NODE:
             return false;
         case Node::TEXT_NODE:
             return !(node->parentNode() && node->parentNode()->isAttributeNode());

Modified: trunk/Source/WebKit/chromium/ChangeLog (107690 => 107691)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-02-14 09:55:28 UTC (rev 107691)
@@ -1,3 +1,14 @@
+2012-02-14  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r107661.
+        http://trac.webkit.org/changeset/107661
+        https://bugs.webkit.org/show_bug.cgi?id=78591
+
+        crash on lion/qt bots (Requested by hayato on #webkit).
+
+        * src/WebPageSerializerImpl.cpp:
+        (WebKit::WebPageSerializerImpl::buildContentForNode):
+
 2012-02-14  Yuzhu Shen  <[email protected]>
 
         [chromium] Pepper plugins don't receive mouse movement information in

Modified: trunk/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp (107690 => 107691)


--- trunk/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp	2012-02-14 09:52:47 UTC (rev 107690)
+++ trunk/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp	2012-02-14 09:55:28 UTC (rev 107691)
@@ -417,6 +417,7 @@
     case Node::ATTRIBUTE_NODE:
     case Node::DOCUMENT_NODE:
     case Node::DOCUMENT_FRAGMENT_NODE:
+    case Node::SHADOW_ROOT_NODE:
         // Should not exist.
         ASSERT_NOT_REACHED();
         break;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to