2010-07-06 Eric Seidel <eric@webkit.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 7 Jul 2010 05:05:28 +0000 (05:05 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 7 Jul 2010 05:05:28 +0000 (05:05 +0000)
        Reviewed by Adam Barth.

        Fix <nobr><nobr> case in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41735

        * html5lib/runner-expected-html5.txt:
2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix <nobr><nobr> case in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41735

        We were both not handling <nobr> correctly, as well as
        never hitting the <nobr> case because our formatting
        elements check was overzealous.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

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

LayoutTests/ChangeLog
LayoutTests/html5lib/resources/webkit01.dat
LayoutTests/html5lib/runner-expected-html5.txt
LayoutTests/html5lib/runner-expected.txt
LayoutTests/html5lib/webkit-resumer-expected.txt
WebCore/ChangeLog
WebCore/html/HTMLTreeBuilder.cpp

index 2379968..e8d6249 100644 (file)
@@ -1,3 +1,12 @@
+2010-07-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Adam Barth.
+
+        Fix <nobr><nobr> case in HTMLTreeBuilder
+        https://bugs.webkit.org/show_bug.cgi?id=41735
+
+        * html5lib/runner-expected-html5.txt:
+
 2010-07-06  Kent Tamura  <tkent@chromium.org>
 
         Unreviewed, test expectation update.
index 5a05ee7..29c1d54 100644 (file)
@@ -393,3 +393,18 @@ console.log("FOO<span>BAR</span>BAZ");
 |     <dd>
 |       <li>
 |       <li>
+
+#data
+<div><b></div><div><nobr>a<nobr>
+#errors
+#document
+| <html>
+|   <head>
+|   <body>
+|     <div>
+|       <b>
+|     <div>
+|       <b>
+|         <nobr>
+|           "a"
+|         <nobr>
index 492bce3..fde9bc6 100644 (file)
@@ -366,8 +366,6 @@ resources/tests3.dat:
 16
 17
 18
-20
-21
 22
 
 Test 16 of 23 in resources/tests3.dat failed. Input:
@@ -429,44 +427,6 @@ Expected:
 |       "
 foo"
 
-Test 20 of 23 in resources/tests3.dat failed. Input:
-<!doctype html><nobr><nobr><nobr>
-Got:
-| <!DOCTYPE html>
-| <html>
-|   <head>
-|   <body>
-|     <nobr>
-|       <nobr>
-|         <nobr>
-Expected:
-| <!DOCTYPE html>
-| <html>
-|   <head>
-|   <body>
-|     <nobr>
-|     <nobr>
-|     <nobr>
-
-Test 21 of 23 in resources/tests3.dat failed. Input:
-<!doctype html><nobr><nobr></nobr><nobr>
-Got:
-| <!DOCTYPE html>
-| <html>
-|   <head>
-|   <body>
-|     <nobr>
-|       <nobr>
-|       <nobr>
-Expected:
-| <!DOCTYPE html>
-| <html>
-|   <head>
-|   <body>
-|     <nobr>
-|     <nobr>
-|     <nobr>
-
 Test 22 of 23 in resources/tests3.dat failed. Input:
 <!doctype html><html><body><p><table></table></body></html>
 Got:
index 43c63d7..7a88e2f 100644 (file)
@@ -4697,8 +4697,9 @@ resources/webkit01.dat:
 29
 30
 31
+33
 
-Test 15 of 32 in resources/webkit01.dat failed. Input:
+Test 15 of 33 in resources/webkit01.dat failed. Input:
 <p>Test</p<p>Test2</p>
 Got:
 | <html>
@@ -4714,7 +4715,7 @@ Expected:
 |     <p>
 |       "TestTest2"
 
-Test 17 of 32 in resources/webkit01.dat failed. Input:
+Test 17 of 33 in resources/webkit01.dat failed. Input:
 <A>test< /A>
 Got:
 | <html>
@@ -4730,7 +4731,7 @@ Expected:
 |     <a>
 |       "test< /A>"
 
-Test 20 of 32 in resources/webkit01.dat failed. Input:
+Test 20 of 33 in resources/webkit01.dat failed. Input:
 <body></br foo="bar"></body>
 Got:
 | <html>
@@ -4744,7 +4745,7 @@ Expected:
 |   <body>
 |     <br>
 
-Test 22 of 32 in resources/webkit01.dat failed. Input:
+Test 22 of 33 in resources/webkit01.dat failed. Input:
 <body></body></br foo="bar">
 Got:
 | <html>
@@ -4758,7 +4759,7 @@ Expected:
 |   <body>
 |     <br>
 
-Test 24 of 32 in resources/webkit01.dat failed. Input:
+Test 24 of 33 in resources/webkit01.dat failed. Input:
 <html><body></body></html><!-- Hi there -->
 Got:
 | <html>
@@ -4771,7 +4772,7 @@ Expected:
 |   <body>
 | <!--  Hi there  -->
 
-Test 26 of 32 in resources/webkit01.dat failed. Input:
+Test 26 of 33 in resources/webkit01.dat failed. Input:
 <html><body></body></html>x<!-- Hi there --></html><!-- Again -->
 Got:
 | <html>
@@ -4788,7 +4789,7 @@ Expected:
 |     <!--  Hi there  -->
 | <!--  Again  -->
 
-Test 27 of 32 in resources/webkit01.dat failed. Input:
+Test 27 of 33 in resources/webkit01.dat failed. Input:
 <html><body></body></html>x<!-- Hi there --></body></html><!-- Again -->
 Got:
 | <html>
@@ -4805,7 +4806,7 @@ Expected:
 |     <!--  Hi there  -->
 | <!--  Again  -->
 
-Test 28 of 32 in resources/webkit01.dat failed. Input:
+Test 28 of 33 in resources/webkit01.dat failed. Input:
 <html><body><ruby><div><rp>xx</rp></div></ruby></body></html>
 Got:
 | <html>
@@ -4824,7 +4825,7 @@ Expected:
 |       <rp>
 |         "xx"
 
-Test 29 of 32 in resources/webkit01.dat failed. Input:
+Test 29 of 33 in resources/webkit01.dat failed. Input:
 <html><body><ruby><div><rt>xx</rt></div></ruby></body></html>
 Got:
 | <html>
@@ -4843,7 +4844,7 @@ Expected:
 |       <rt>
 |         "xx"
 
-Test 30 of 32 in resources/webkit01.dat failed. Input:
+Test 30 of 33 in resources/webkit01.dat failed. Input:
 <html><frameset><!--1--><noframes>A</noframes><!--2--></frameset><!--3--><noframes>B</noframes><!--4--></html><!--5--><noframes>C</noframes><!--6-->
 Got:
 | <html>
@@ -4873,7 +4874,7 @@ Expected:
 | <!-- 5 -->
 | <!-- 6 -->
 
-Test 31 of 32 in resources/webkit01.dat failed. Input:
+Test 31 of 33 in resources/webkit01.dat failed. Input:
 <select><option>A<select><option>B<select><option>C<select><option>D<select><option>E<select><option>F<select><option>G<select>
 Got:
 | <html>
@@ -4916,6 +4917,31 @@ Expected:
 |       <select>
 |         <option>
 |           "G"
+
+Test 33 of 33 in resources/webkit01.dat failed. Input:
+<div><b></div><div><nobr>a<nobr>
+Got:
+| <html>
+|   <head>
+|   <body>
+|     <div>
+|       <b>
+|     <b>
+|       <div>
+|         <nobr>
+|           "a"
+|         <nobr>
+Expected:
+| <html>
+|   <head>
+|   <body>
+|     <div>
+|       <b>
+|     <div>
+|       <b>
+|         <nobr>
+|           "a"
+|         <nobr>
 resources/doctype01.dat: PASS
 
 resources/scriptdata01.dat: PASS
index 7bacf70..6ea9b3b 100644 (file)
@@ -813,3 +813,34 @@ resources/webkit01.dat:
 1362.124
 1363.125
 1364.126
+1392.1
+1393.2
+1394.3
+1395.4
+1396.5
+1397.6
+1398.7
+1399.8
+1400.9
+1401.10
+1402.11
+1403.12
+1404.13
+1405.14
+1406.15
+1407.16
+1408.17
+1409.18
+1410.19
+1411.20
+1412.21
+1413.22
+1414.23
+1415.24
+1416.25
+1417.26
+1418.27
+1419.28
+1420.29
+1421.30
+1422.31
index 452d05b..9730c7c 100644 (file)
@@ -1,3 +1,17 @@
+2010-07-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Adam Barth.
+
+        Fix <nobr><nobr> case in HTMLTreeBuilder
+        https://bugs.webkit.org/show_bug.cgi?id=41735
+
+        We were both not handling <nobr> correctly, as well as
+        never hitting the <nobr> case because our formatting
+        elements check was overzealous.
+
+        * html/HTMLTreeBuilder.cpp:
+        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
+
 2010-07-06  Adam Barth  <abarth@webkit.org>
 
         Reviewed by Eric Seidel.
index 0e9831b..fd3ec3a 100644 (file)
@@ -184,7 +184,7 @@ bool isScopingTag(const AtomicString& tagName)
         || isTableCellContextTag(tagName);
 }
 
-bool isNonAnchorFormattingTag(const AtomicString& tagName)
+bool isNonAnchorNonNobrFormattingTag(const AtomicString& tagName)
 {
     return tagName == bTag
         || tagName == bigTag
@@ -192,7 +192,6 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName)
         || tagName == emTag
         || tagName == fontTag
         || tagName == iTag
-        || tagName == nobrTag
         || tagName == sTag
         || tagName == smallTag
         || tagName == strikeTag
@@ -201,6 +200,12 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName)
         || tagName == uTag;
 }
 
+bool isNonAnchorFormattingTag(const AtomicString& tagName)
+{
+    return tagName == nobrTag
+        || isNonAnchorNonNobrFormattingTag(tagName);
+}
+
 bool requiresRedirectToFosterParent(Element* element)
 {
     return element->hasTagName(tableTag)
@@ -651,14 +656,18 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token)
         m_tree.insertFormattingElement(token);
         return;
     }
-    if (isNonAnchorFormattingTag(token.name())) {
+    if (isNonAnchorNonNobrFormattingTag(token.name())) {
         m_tree.reconstructTheActiveFormattingElements();
         m_tree.insertFormattingElement(token);
         return;
     }
     if (token.name() == nobrTag) {
         m_tree.reconstructTheActiveFormattingElements();
-        notImplemented();
+        if (m_tree.openElements()->inScope(nobrTag)) {
+            parseError(token);
+            processFakeEndTag(nobrTag);
+            m_tree.reconstructTheActiveFormattingElements();
+        }
         m_tree.insertFormattingElement(token);
         return;
     }