Chromium Code Reviews| Index: Source/core/dom/Document.cpp |
| diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
| index 63cb1e518c441db49e3ef02308e29485cf4d1bf2..449dab76957d721cd8d514cdc75ea4f188da85fa 100644 |
| --- a/Source/core/dom/Document.cpp |
| +++ b/Source/core/dom/Document.cpp |
| @@ -508,6 +508,7 @@ Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC |
| , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsTimerFired) |
| , m_hasViewportUnits(false) |
| , m_styleRecalcElementCounter(0) |
| + , m_backgroundParsingPolicy(AllowAsynchronousParsing) |
| { |
| if (m_frame) { |
| ASSERT(m_frame->page()); |
| @@ -1233,11 +1234,6 @@ KURL Document::baseURI() const |
| void Document::setContent(const String& content) |
| { |
| open(); |
| - // FIXME: This should probably use insert(), but that's (intentionally) |
| - // not implemented for the XML parser as it's normally synonymous with |
| - // document.write(). append() will end up yielding, but close() will |
| - // pump the tokenizer syncrhonously and finish the parse. |
| - m_parser->pinToMainThread(); |
|
kbalazs
2014/12/05 23:37:57
Note that this called XMLDocumentParser::pinToMain
|
| m_parser->append(content.impl()); |
| close(); |
| } |
| @@ -2288,7 +2284,7 @@ PassRefPtrWillBeRawPtr<DocumentParser> Document::createParser() |
| { |
| if (isHTMLDocument()) { |
| bool reportErrors = InspectorInstrumentation::collectingHTMLParseErrors(page()); |
| - return HTMLDocumentParser::create(toHTMLDocument(*this), reportErrors); |
| + return HTMLDocumentParser::create(toHTMLDocument(*this), reportErrors, m_backgroundParsingPolicy); |
| } |
| // FIXME: this should probably pass the frame instead |
| return XMLDocumentParser::create(*this, view()); |
| @@ -2335,6 +2331,8 @@ void Document::open(Document* ownerDocument, ExceptionState& exceptionState) |
| m_frame->loader().stopAllLoaders(); |
| } |
| + forceSynchronousParsing(); |
|
kbalazs
2014/12/05 23:37:57
This is in open() (not obvious from the context).
|
| + |
| removeAllEventListenersRecursively(); |
| implicitOpen(); |
| if (ScriptableDocumentParser* parser = scriptableDocumentParser()) |
| @@ -2346,6 +2344,12 @@ void Document::open(Document* ownerDocument, ExceptionState& exceptionState) |
| m_loadEventProgress = LoadEventNotRun; |
| } |
| +void Document::forceSynchronousParsing() |
| +{ |
| + ASSERT(!m_parser); |
| + m_backgroundParsingPolicy = ForceSynchronousParsing; |
| +} |
| + |
| void Document::detachParser() |
| { |
| if (!m_parser) |