2010-08-04 Adam Barth <abarth@webkit.org>
authorabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Aug 2010 00:34:36 +0000 (00:34 +0000)
committerabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Aug 2010 00:34:36 +0000 (00:34 +0000)
        Reviewed by Eric Seidel.

        Pick up spec change w.r.t. replacement character and <frameset>
        https://bugs.webkit.org/show_bug.cgi?id=43073

        * html5lib/runner-expected-html5.txt:
2010-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pick up spec change w.r.t. replacement character and <frameset>
        https://bugs.webkit.org/show_bug.cgi?id=43073

        Apparently this fixes parsing for some home router configuration pages.

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

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

LayoutTests/ChangeLog
LayoutTests/html5lib/runner-expected-html5.txt
WebCore/ChangeLog
WebCore/html/HTMLTreeBuilder.cpp

index b89a73e..f62c25d 100644 (file)
@@ -1,3 +1,12 @@
+2010-08-04  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        Pick up spec change w.r.t. replacement character and <frameset>
+        https://bugs.webkit.org/show_bug.cgi?id=43073
+
+        * html5lib/runner-expected-html5.txt:
+
 2010-08-04  Andrew Wilson  <atwilson@chromium.org>
 
         Unreviewed change to Chromium test expectations to mark hyphenate-locale.html as failing.
index 3a5442b..232fcf3 100644 (file)
@@ -162,10 +162,6 @@ resources/tests18.dat: PASS
 
 resources/tests19.dat:
 63
-77
-78
-80
-81
 101
 102
 
@@ -190,56 +186,6 @@ Expected:
 |   <body>
 |     <keygen>
 
-Test 77 of 102 in resources/tests19.dat failed. Input:
-<html>�<frameset></frameset>
-Got:
-| <html>
-|   <head>
-|   <body>
-|     "�"
-Expected:
-| <html>
-|   <head>
-|   <frameset>
-
-Test 78 of 102 in resources/tests19.dat failed. Input:
-<html> � <frameset></frameset>
-Got:
-| <html>
-|   <head>
-|   <body>
-|     "� "
-Expected:
-| <html>
-|   <head>
-|   <frameset>
-
-Test 80 of 102 in resources/tests19.dat failed. Input:
-<html>��<frameset></frameset>
-Got:
-| <html>
-|   <head>
-|   <body>
-|     "��"
-Expected:
-| <html>
-|   <head>
-|   <frameset>
-
-Test 81 of 102 in resources/tests19.dat failed. Input:
-<html>�
- <frameset></frameset>
-Got:
-| <html>
-|   <head>
-|   <body>
-|     "�
- "
-Expected:
-| <html>
-|   <head>
-|   <frameset>
-
 Test 101 of 102 in resources/tests19.dat failed. Input:
 <!doctype html><figcaption><article></figcaption>a
 Got:
index 365662c..7c64743 100644 (file)
@@ -1,3 +1,15 @@
+2010-08-04  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        Pick up spec change w.r.t. replacement character and <frameset>
+        https://bugs.webkit.org/show_bug.cgi?id=43073
+
+        Apparently this fixes parsing for some home router configuration pages.
+
+        * html/HTMLTreeBuilder.cpp:
+        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
+
 2010-08-04  Gavin Barraclough  <barraclough@apple.com>
 
         Reviewed by Sam Weinig.
index ec15f9f..75858e7 100644 (file)
@@ -61,20 +61,37 @@ static const int uninitializedLineNumberValue = -1;
 
 namespace {
 
-inline bool isTreeBuilderWhitepace(UChar cc)
+inline bool isTreeBuilderWhitepace(UChar c)
 {
-    return cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ';
+    // FIXME: Consider branch permutations.
+    return c == '\t' || c == '\x0A' || c == '\x0C' || c == '\x0D' || c == ' ';
 }
 
-inline bool hasNonWhitespace(const String& string)
+inline bool isTreeBuilderWhitepaceOrReplacementCharacter(UChar c)
+{
+    return isTreeBuilderWhitepace(c) || c == 0xFFFD;
+}
+
+template<bool isSpecialCharacter(UChar c)>
+inline bool isAllSpecialCharacters(const String& string)
 {
     const UChar* characters = string.characters();
     const unsigned length = string.length();
     for (unsigned i = 0; i < length; ++i) {
-        if (!isTreeBuilderWhitepace(characters[i]))
-            return true;
+        if (!isSpecialCharacter(characters[i]))
+            return false;
     }
-    return false;
+    return true;
+}
+
+inline bool isAllWhitespace(const String& string)
+{
+    return isAllSpecialCharacters<isTreeBuilderWhitepace>(string);
+}
+
+inline bool isAllWhitespaceOrReplacementCharacters(const String& string)
+{
+    return isAllSpecialCharacters<isTreeBuilderWhitepaceOrReplacementCharacter>(string);
 }
 
 bool shouldUseLegacyTreeBuilder(Document* document)
@@ -2491,7 +2508,7 @@ ReprocessBuffer:
         m_tree.reconstructTheActiveFormattingElements();
         String characters = buffer.takeRemaining();
         m_tree.insertTextNode(characters);
-        if (m_framesetOk && hasNonWhitespace(characters))
+        if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))
             m_framesetOk = false;
         break;
     }
@@ -2565,7 +2582,7 @@ ReprocessBuffer:
         ASSERT(insertionMode() == InForeignContentMode);
         String characters = buffer.takeRemaining();
         m_tree.insertTextNode(characters);
-        if (m_framesetOk && hasNonWhitespace(characters))
+        if (m_framesetOk && !isAllWhitespace(characters))
             m_framesetOk = false;
         break;
     }
@@ -2709,7 +2726,7 @@ void HTMLTreeBuilder::defaultForAfterHead()
 void HTMLTreeBuilder::defaultForInTableText()
 {
     String characters = String::adopt(m_pendingTableCharacters);
-    if (hasNonWhitespace(characters)) {
+    if (!isAllWhitespace(characters)) {
         // FIXME: parse error
         HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree);
         m_tree.reconstructTheActiveFormattingElements();