Threaded HTML parser fails fast/loader/stateobjects/state-attribute-history-getter...
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 09:57:33 +0000 (09:57 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 09:57:33 +0000 (09:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110801

Reviewed by Adam Barth.

This causes 6 more tests to pass for the threaded parser,
an solves all of our timeout issues.

These tests which were failing were racy, we just were never
hitting the race due to using file urls.  This change fixes
the threaded parser to emulate one more of the EOF quirks from
the loader/main-thread-parser interaction.

* html/parser/HTMLDocumentParser.cpp:
(WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):

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

Source/WebCore/ChangeLog
Source/WebCore/html/parser/HTMLDocumentParser.cpp

index 60ad858..f18a424 100644 (file)
@@ -1,3 +1,21 @@
+2013-02-26  Eric Seidel  <eric@webkit.org>
+
+        Threaded HTML parser fails fast/loader/stateobjects/state-attribute-history-getter.html
+        https://bugs.webkit.org/show_bug.cgi?id=110801
+
+        Reviewed by Adam Barth.
+
+        This causes 6 more tests to pass for the threaded parser,
+        an solves all of our timeout issues.
+
+        These tests which were failing were racy, we just were never
+        hitting the race due to using file urls.  This change fixes
+        the threaded parser to emulate one more of the EOF quirks from
+        the loader/main-thread-parser interaction.
+
+        * html/parser/HTMLDocumentParser.cpp:
+        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
+
 2013-02-26  Alexander Pavlov  <apavlov@chromium.org>
 
         Web Inspector: CSSAgent.setStyleSheetText crashes on inline styles
index 3e589ed..ef670d0 100644 (file)
@@ -383,8 +383,14 @@ void HTMLDocumentParser::processParsedChunkFromBackgroundParser(PassOwnPtr<Parse
             break;
 
         if (!isParsingFragment()
-            && document()->frame() && document()->frame()->navigationScheduler()->locationChangePending())
+            && document()->frame() && document()->frame()->navigationScheduler()->locationChangePending()) {
+
+            // To match main-thread parser behavior (which never checks locationChangePending on the EOF path)
+            // we peek to see if this chunk has an EOF and process it anyway.
+            if (tokens->last().type() == HTMLToken::EndOfFile)
+                prepareToStopParsing();
             break;
+        }
 
         if (isWaitingForScripts()) {
             ASSERT(it + 1 == tokens->end()); // The </script> is assumed to be the last token of this bunch.