15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google, Inc. All Rights Reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLDocumentParser_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLDocumentParser_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/dom/ParserContentPolicy.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ScriptableDocumentParser.h" 31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ResourceClient.h" 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "core/frame/UseCounter.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/BackgroundHTMLInputStream.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/CompactHTMLToken.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLInputStream.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLParserOptions.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLPreloadScanner.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLScriptRunnerHost.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLSourceTracker.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLToken.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLTokenizer.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLTreeBuilderSimulator.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/XSSAuditor.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/XSSAuditorDelegate.h" 451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/SegmentedString.h" 46591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Deque.h" 47591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h" 48591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/WeakPtr.h" 49591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/TextPosition.h" 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class BackgroundHTMLParser; 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class CompactHTMLToken; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentFragment; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLDocument; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLParserScheduler; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLScriptRunner; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLTreeBuilder; 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class HTMLResourcePreloader; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ScriptController; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ScriptSourceCode; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PumpSession; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochclass HTMLDocumentParser : public ScriptableDocumentParser, HTMLScriptRunnerHost, ResourceClient { 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 708abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) static PassRefPtr<HTMLDocumentParser> create(HTMLDocument* document, bool reportErrors) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new HTMLDocumentParser(document, reportErrors)); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~HTMLDocumentParser(); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Exposed for HTMLParserScheduler 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void resumeParsingAfterYield(); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static void parseDocumentFragment(const String&, DocumentFragment*, Element* contextElement, ParserContentPolicy = AllowScriptingContent); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTokenizer* tokenizer() const { return m_tokenizer.get(); } 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual TextPosition textPosition() const; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual OrdinalNumber lineNumber() const; 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void suspendScheduledTasks(); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void resumeScheduledTasks(); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) struct ParsedChunk { 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<CompactHTMLTokenStream> tokens; 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) PreloadRequestStream preloads; 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) XSSInfoStream xssInfos; 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTokenizer::State tokenizerState; 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLTreeBuilderSimulator::State treeBuilderState; 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLInputCheckpoint inputCheckpoint; 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) TokenPreloadScannerCheckpoint preloadScannerCheckpoint; 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void didReceiveParsedChunkFromBackgroundParser(PassOwnPtr<ParsedChunk>); 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 100a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) UseCounter* useCounter() { return UseCounter::getFrom(contextForParsingSession()); } 101a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void insert(const SegmentedString&) OVERRIDE; 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void append(PassRefPtr<StringImpl>) OVERRIDE; 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void finish() OVERRIDE; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) HTMLDocumentParser(HTMLDocument*, bool reportErrors); 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLDocumentParser(DocumentFragment*, Element* contextElement, ParserContentPolicy); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLTreeBuilder* treeBuilder() const { return m_treeBuilder.get(); } 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void forcePlaintextForTextDocument(); 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static PassRefPtr<HTMLDocumentParser> create(DocumentFragment* fragment, Element* contextElement, ParserContentPolicy parserContentPolicy) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return adoptRef(new HTMLDocumentParser(fragment, contextElement, parserContentPolicy)); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DocumentParser 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void pinToMainThread() OVERRIDE; 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void detach() OVERRIDE; 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool hasInsertionPoint() OVERRIDE; 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool processingData() const OVERRIDE; 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void prepareToStopParsing() OVERRIDE; 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void stopParsing() OVERRIDE; 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isWaitingForScripts() const OVERRIDE; 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isExecutingScript() const OVERRIDE; 1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual void executeScriptsWaitingForResources() OVERRIDE; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // HTMLScriptRunnerHost 132fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void watchForLoad(Resource*) OVERRIDE; 133fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void stopWatchingForLoad(Resource*) OVERRIDE; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual HTMLInputStream& inputStream() { return m_input; } 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool hasPreloadScanner() const { return m_preloadScanner.get() && !shouldUseThreading(); } 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void appendCurrentInputStreamToPreloadScannerAndScan() OVERRIDE; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch // ResourceClient 139fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch virtual void notifyFinished(Resource*); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void startBackgroundParser(); 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void stopBackgroundParser(); 143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void validateSpeculations(PassOwnPtr<ParsedChunk> lastChunk); 144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void discardSpeculationsAndResumeFrom(PassOwnPtr<ParsedChunk> lastChunk, PassOwnPtr<HTMLToken>, PassOwnPtr<HTMLTokenizer>); 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void processParsedChunkFromBackgroundParser(PassOwnPtr<ParsedChunk>); 146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void pumpPendingSpeculations(); 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Document* contextForParsingSession(); 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum SynchronousMode { 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AllowYield, 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ForceSynchronous, 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canTakeNextToken(SynchronousMode, PumpSession&); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pumpTokenizer(SynchronousMode); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pumpTokenizerIfPossible(SynchronousMode); 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void constructTreeFromHTMLToken(HTMLToken&); 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void constructTreeFromCompactHTMLToken(const CompactHTMLToken&); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void runScriptsForPausedTreeBuilder(); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void resumeParsingAfterScriptExecution(); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void attemptToEnd(); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void endIfDelayed(); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void attemptToRunDeferredScriptsAndEnd(); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void end(); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool shouldUseThreading() const { return m_options.useThreading && !m_isPinnedToMainThread; } 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isParsingFragment() const; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isScheduledForResume() const; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inPumpSession() const { return m_pumpSessionNestingLevel > 0; } 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldDelayEnd() const { return inPumpSession() || isWaitingForScripts() || isScheduledForResume() || isExecutingScript(); } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) HTMLToken& token() { return *m_token; } 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLParserOptions m_options; 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLInputStream m_input; 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<HTMLToken> m_token; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLTokenizer> m_tokenizer; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLScriptRunner> m_scriptRunner; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLTreeBuilder> m_treeBuilder; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLPreloadScanner> m_preloadScanner; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLPreloadScanner> m_insertionPreloadScanner; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<HTMLParserScheduler> m_parserScheduler; 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLSourceTracker m_sourceTracker; 188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) TextPosition m_textPosition; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) XSSAuditor m_xssAuditor; 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) XSSAuditorDelegate m_xssAuditorDelegate; 191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: m_lastChunkBeforeScript, m_tokenizer, m_token, and m_input should be combined into a single state object 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // so they can be set and cleared together and passed between threads together. 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<ParsedChunk> m_lastChunkBeforeScript; 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Deque<OwnPtr<ParsedChunk> > m_speculations; 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WeakPtrFactory<HTMLDocumentParser> m_weakFactory; 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WeakPtr<BackgroundHTMLParser> m_backgroundParser; 198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<HTMLResourcePreloader> m_preloader; 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool m_isPinnedToMainThread; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_endWasDelayed; 202926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool m_haveBackgroundParser; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_pumpSessionNestingLevel; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 209