2010-07-21 Adam Barth <abarth@webkit.org>
authorabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Jul 2010 12:38:21 +0000 (12:38 +0000)
committerabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Jul 2010 12:38:21 +0000 (12:38 +0000)
        Reviewed by Eric Seidel.

        The adoption agency doesn't properly attach()
        https://bugs.webkit.org/show_bug.cgi?id=42727

        The adoption agency is transliterated rather directly from the spec,
        but it misses some of the WebKit-specific machinations, such as
        attaching to the render tree.

        The algorithm, as written, is a minor layer violation.  I've added to
        the problem by calling attach() from HTMLTreeBuilder (even though
        that's the job of the HTMLConstructionSite).  We'll need to clean up
        the layering a bit at some point.

        This patch half fixes fast/forms/formmove3.html.  Hopefully I'll finish
        fixing it in the next patch.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@63814 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/html/HTMLConstructionSite.cpp
WebCore/html/HTMLTreeBuilder.cpp

index 388624b..c2526f7 100644 (file)
@@ -2,6 +2,30 @@
 
         Reviewed by Eric Seidel.
 
+        The adoption agency doesn't properly attach()
+        https://bugs.webkit.org/show_bug.cgi?id=42727
+
+        The adoption agency is transliterated rather directly from the spec,
+        but it misses some of the WebKit-specific machinations, such as
+        attaching to the render tree.
+
+        The algorithm, as written, is a minor layer violation.  I've added to
+        the problem by calling attach() from HTMLTreeBuilder (even though
+        that's the job of the HTMLConstructionSite).  We'll need to clean up
+        the layering a bit at some point.
+
+        This patch half fixes fast/forms/formmove3.html.  Hopefully I'll finish
+        fixing it in the next patch.
+
+        * html/HTMLConstructionSite.cpp:
+        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
+        * html/HTMLTreeBuilder.cpp:
+        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
+
+2010-07-21  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Eric Seidel.
+
         <input> elements with no type attribute should be foster parented
         https://bugs.webkit.org/show_bug.cgi?id=42725
 
index b85590e..13a6d36 100644 (file)
@@ -341,7 +341,7 @@ PassRefPtr<Element> HTMLConstructionSite::createHTMLElementFromSavedElement(Elem
     // FIXME: This method is wrong.  We should be using the original token.
     // Using an Element* causes us to fail examples like this:
     // <b id="1"><p><script>document.getElementById("1").id = "2"</script></p>TEXT</b>
-    // When reconstructActiveFormattingElements calls this method to open
+    // When reconstructTheActiveFormattingElements calls this method to open
     // a second <b> tag to wrap TEXT, it will have id "2", even though the HTML5
     // spec implies it should be "1".  Minefield matches the HTML5 spec here.
 
index 4bcac10..a926a8b 100644 (file)
@@ -1712,7 +1712,15 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token)
         // 9
         reparentChildren(furthestBlock->element(), newElement.get());
         // 10
-        furthestBlock->element()->parserAddChild(newElement);
+        Element* furthestBlockElement = furthestBlock->element();
+        // FIXME: All this creation / parserAddChild / attach business should
+        //        be in HTMLConstructionSite.  My guess is that steps 8--12
+        //        should all be in some HTMLConstructionSite function.
+        furthestBlockElement->parserAddChild(newElement);
+        if (furthestBlockElement->attached()) {
+            ASSERT(!newElement->attached());
+            newElement->attach();
+        }
         // 11
         m_tree.activeFormattingElements()->remove(formattingElement);
         m_tree.activeFormattingElements()->insertAt(newElement.get(), bookmark);