Changeset 61163 in webkit


Ignore:
Timestamp:
Jun 14, 2010 5:07:14 PM (14 years ago)
Author:
abarth@webkit.org
Message:

2010-06-14 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

Add a preload scanner for the HTML5 parser
https://bugs.webkit.org/show_bug.cgi?id=40557

This patch adds a simple preload scanner for the HTML5 parser. This
preload scanner is not as awesome as the old one because it doesn't
scan CSS, but it's much simpler.

  • Android.mk:
  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
    • Build file torture.
  • html/HTML5DocumentParser.cpp: (WebCore::HTML5DocumentParser::write):
    • Call into the preload scanner when waiting for a script.
  • html/HTML5DocumentParser.h:
  • html/HTML5PreloadScanner.cpp: Copied from WebCore/html/PreloadScanner.cpp. (WebCore::HTML5PreloadScanner::HTML5PreloadScanner): (WebCore::HTML5PreloadScanner::scan):
    • A simple loop to pump the preload scanner's lexer.

(WebCore::HTML5PreloadScanner::processToken):

  • Preload interesting resources. Stolen from the old preload scanner.

(WebCore::HTML5PreloadScanner::scanningBody):

  • html/HTML5PreloadScanner.h: Copied from WebCore/html/PreloadScanner.h.
Location:
trunk/WebCore
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/Android.mk

    r61120 r61163  
    252252        html/HTML5Lexer.cpp \
    253253        html/HTML5DocumentParser.cpp \
     254        html/HTML5PreloadScanner.cpp \
     255        html/HTML5ScriptRunner.cpp \
    254256        html/HTML5TreeBuilder.cpp \
    255         html/HTML5ScriptRunner.cpp \
    256257        html/HTMLAllCollection.cpp \
    257258        html/HTMLCollection.cpp \
  • trunk/WebCore/CMakeLists.txt

    r61149 r61163  
    905905    html/HTML5Lexer.cpp
    906906    html/HTML5DocumentParser.cpp
     907    html/HTML5PreloadScanner.cpp
     908    html/HTML5ScriptRunner.cpp
    907909    html/HTML5TreeBuilder.cpp
    908     html/HTML5ScriptRunner.cpp
    909910    html/HTMLAllCollection.cpp
    910911    html/HTMLAnchorElement.cpp
  • trunk/WebCore/ChangeLog

    r61161 r61163  
     12010-06-14  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Add a preload scanner for the HTML5 parser
     6        https://bugs.webkit.org/show_bug.cgi?id=40557
     7
     8        This patch adds a simple preload scanner for the HTML5 parser.  This
     9        preload scanner is not as awesome as the old one because it doesn't
     10        scan CSS, but it's much simpler.
     11
     12        * Android.mk:
     13        * CMakeLists.txt:
     14        * GNUmakefile.am:
     15        * WebCore.gypi:
     16        * WebCore.pro:
     17        * WebCore.vcproj/WebCore.vcproj:
     18        * WebCore.xcodeproj/project.pbxproj:
     19            - Build file torture.
     20        * html/HTML5DocumentParser.cpp:
     21        (WebCore::HTML5DocumentParser::write):
     22            - Call into the preload scanner when waiting for a script.
     23        * html/HTML5DocumentParser.h:
     24        * html/HTML5PreloadScanner.cpp: Copied from WebCore/html/PreloadScanner.cpp.
     25        (WebCore::HTML5PreloadScanner::HTML5PreloadScanner):
     26        (WebCore::HTML5PreloadScanner::scan):
     27            - A simple loop to pump the preload scanner's lexer.
     28        (WebCore::HTML5PreloadScanner::processToken):
     29            - Preload interesting resources.  Stolen from the old preload
     30              scanner.
     31        (WebCore::HTML5PreloadScanner::scanningBody):
     32        * html/HTML5PreloadScanner.h: Copied from WebCore/html/PreloadScanner.h.
     33
    1342010-06-14  Adam Barth  <abarth@webkit.org>
    235
  • trunk/WebCore/GNUmakefile.am

    r61149 r61163  
    10901090        WebCore/html/HTML5DocumentParser.cpp \
    10911091        WebCore/html/HTML5DocumentParser.h \
    1092         WebCore/html/HTML5TreeBuilder.cpp \
    1093         WebCore/html/HTML5TreeBuilder.h \
     1092        WebCore/html/HTML5PreloadScanner.cpp \
     1093        WebCore/html/HTML5PreloadScanner.h \
    10941094        WebCore/html/HTML5ScriptRunner.cpp \
    10951095        WebCore/html/HTML5ScriptRunner.h \
    10961096        WebCore/html/HTML5ScriptRunnerHost.h \
     1097        WebCore/html/HTML5TreeBuilder.cpp \
     1098        WebCore/html/HTML5TreeBuilder.h \
    10971099        WebCore/html/HTMLAllCollection.cpp \
    10981100        WebCore/html/HTMLAllCollection.h \
  • trunk/WebCore/WebCore.gypi

    r61149 r61163  
    14731473            'html/HTML5DocumentParser.cpp',
    14741474            'html/HTML5DocumentParser.h',
     1475            'html/HTML5PreloadScanner.cpp',
     1476            'html/HTML5PreloadScanner.h',
     1477            'html/HTML5ScriptRunner.cpp',
     1478            'html/HTML5ScriptRunner.h',
    14751479            'html/HTML5TreeBuilder.cpp',
    14761480            'html/HTML5TreeBuilder.h',
    1477             'html/HTML5ScriptRunner.cpp',
    1478             'html/HTML5ScriptRunner.h',
    14791481            'html/HTMLAllCollection.cpp',
    14801482            'html/HTMLAllCollection.h',
  • trunk/WebCore/WebCore.pro

    r61149 r61163  
    614614    html/HTML5Lexer.cpp \
    615615    html/HTML5DocumentParser.cpp \
     616    html/HTML5PreloadScanner.cpp \
     617    html/HTML5ScriptRunner.cpp \
    616618    html/HTML5TreeBuilder.cpp \
    617     html/HTML5ScriptRunner.cpp \
    618619    html/HTMLAllCollection.cpp \
    619620    html/HTMLAnchorElement.cpp \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r61149 r61163  
    3333433334                        </File>
    3333533335                        <File
     33336                                RelativePath="..\html\HTML5PreloadScanner.cpp"
     33337                                >
     33338                        </File>
     33339                        <File
     33340                                RelativePath="..\html\HTML5PreloadScanner.h"
     33341                                >
     33342                        </File>
     33343                        <File
    3333633344                                RelativePath="..\html\HTML5ScriptRunner.cpp"
    3333733345                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r61158 r61163  
    25472547                97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97DD4D840FDF4D6D00ECF9A4 /* XSSAuditor.cpp */; };
    25482548                97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DD4D850FDF4D6E00ECF9A4 /* XSSAuditor.h */; };
     2549                97E7936511C6030900E649BC /* HTML5PreloadScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97E7936311C6030900E649BC /* HTML5PreloadScanner.cpp */; };
     2550                97E7936611C6030900E649BC /* HTML5PreloadScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E7936411C6030900E649BC /* HTML5PreloadScanner.h */; };
    25492551                97E8B35611A23CE200169409 /* HTML5Lexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97E8B35411A23CE200169409 /* HTML5Lexer.cpp */; };
    25502552                97E8B35711A23CE200169409 /* HTML5Lexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8B35511A23CE200169409 /* HTML5Lexer.h */; };
     
    81228124                97DD4D840FDF4D6D00ECF9A4 /* XSSAuditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XSSAuditor.cpp; sourceTree = "<group>"; };
    81238125                97DD4D850FDF4D6E00ECF9A4 /* XSSAuditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XSSAuditor.h; sourceTree = "<group>"; };
     8126                97E7936311C6030900E649BC /* HTML5PreloadScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTML5PreloadScanner.cpp; sourceTree = "<group>"; };
     8127                97E7936411C6030900E649BC /* HTML5PreloadScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTML5PreloadScanner.h; sourceTree = "<group>"; };
    81248128                97E8B35411A23CE200169409 /* HTML5Lexer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTML5Lexer.cpp; sourceTree = "<group>"; };
    81258129                97E8B35511A23CE200169409 /* HTML5Lexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTML5Lexer.h; sourceTree = "<group>"; };
     
    1341513419                                97E8B35411A23CE200169409 /* HTML5Lexer.cpp */,
    1341613420                                97E8B35511A23CE200169409 /* HTML5Lexer.h */,
     13421                                97E7936311C6030900E649BC /* HTML5PreloadScanner.cpp */,
     13422                                97E7936411C6030900E649BC /* HTML5PreloadScanner.h */,
    1341713423                                A83B3AEE11ADEFF500458809 /* HTML5ScriptRunner.cpp */,
    1341813424                                A83B3AEF11ADEFF500458809 /* HTML5ScriptRunner.h */,
     
    1939919405                                97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
    1940019406                                CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */,
     19407                                97E7936611C6030900E649BC /* HTML5PreloadScanner.h in Headers */,
    1940119408                                B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */,
    1940219409                                B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */,
     
    2170021707                                E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
    2170121708                                97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
     21709                                97E7936511C6030900E649BC /* HTML5PreloadScanner.cpp in Sources */,
    2170221710                                BC275B7911C5D1C300C9206C /* JSWebKitPointCustom.cpp in Sources */,
    2170321711                                BC275B7D11C5D23500C9206C /* JSWebKitCSSMatrixCustom.cpp in Sources */,
  • trunk/WebCore/html/HTML5DocumentParser.cpp

    r61107 r61163  
    3030#include "Frame.h"
    3131#include "HTML5Lexer.h"
     32#include "HTML5PreloadScanner.h"
    3233#include "HTML5ScriptRunner.h"
    3334#include "HTML5TreeBuilder.h"
     
    124125        m_treeConstructor->setPaused(!shouldContinueParsing);
    125126        if (!shouldContinueParsing)
    126             return;
     127            break;
     128    }
     129
     130    if (isWaitingForScripts()) {
     131        ASSERT(m_lexer->state() == HTML5Lexer::DataState);
     132        if (!m_preloadScanner) {
     133            m_preloadScanner.set(new HTML5PreloadScanner(m_document));
     134            m_preloadScanner->appendToEnd(m_input.current());
     135        }
     136        m_preloadScanner->scan();
    127137    }
    128138
     
    158168    if (appendData) {
    159169        m_input.appendToEnd(source);
     170        if (m_preloadScanner)
     171            m_preloadScanner->appendToEnd(source);
     172
    160173        if (m_writeNestingLevel > 1) {
    161174            // We've gotten data off the network in a nested call to write().
     
    236249    ASSERT(!m_scriptRunner->inScriptExecution());
    237250    ASSERT(!m_treeConstructor->isPaused());
     251
    238252    pumpLexerIfPossible();
    239253
  • trunk/WebCore/html/HTML5DocumentParser.h

    r61107 r61163  
    4141class HTML5ScriptRunner;
    4242class HTML5TreeBuilder;
     43class HTML5PreloadScanner;
    4344class ScriptController;
    4445class ScriptSourceCode;
     
    184185    OwnPtr<HTML5ScriptRunner> m_scriptRunner;
    185186    OwnPtr<HTML5TreeBuilder> m_treeConstructor;
     187    OwnPtr<HTML5PreloadScanner> m_preloadScanner;
    186188    bool m_endWasDelayed;
    187189    int m_writeNestingLevel;
Note: See TracChangeset for help on using the changeset viewer.