| Index: Source/core/html/parser/HTMLDocumentParser.cpp
|
| diff --git a/Source/core/html/parser/HTMLDocumentParser.cpp b/Source/core/html/parser/HTMLDocumentParser.cpp
|
| index 9f9c44dbbffa480ec5f94314793f8f0bfcdf0140..91081dd758e2809d530afcf39f9ae15de0d9841b 100644
|
| --- a/Source/core/html/parser/HTMLDocumentParser.cpp
|
| +++ b/Source/core/html/parser/HTMLDocumentParser.cpp
|
| @@ -29,6 +29,7 @@
|
| #include "core/HTMLNames.h"
|
| #include "core/css/MediaValuesCached.h"
|
| #include "core/dom/DocumentFragment.h"
|
| +#include "core/dom/DocumentLifecycleObserver.h"
|
| #include "core/dom/Element.h"
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/html/HTMLDocument.h"
|
| @@ -76,10 +77,11 @@ static HTMLTokenizer::State tokenizerStateForContextElement(Element* contextElem
|
| return HTMLTokenizer::DataState;
|
| }
|
|
|
| -class ParserDataReceiver : public blink::WebThreadedDataReceiver {
|
| +class ParserDataReceiver : public WebThreadedDataReceiver, public DocumentLifecycleObserver {
|
| public:
|
| - explicit ParserDataReceiver(WeakPtr<BackgroundHTMLParser> backgroundParser)
|
| - : m_backgroundParser(backgroundParser)
|
| + explicit ParserDataReceiver(WeakPtr<BackgroundHTMLParser> backgroundParser, Document* document)
|
| + : DocumentLifecycleObserver(document)
|
| + , m_backgroundParser(backgroundParser)
|
| {
|
| }
|
|
|
| @@ -99,6 +101,14 @@ public:
|
| return nullptr;
|
| }
|
|
|
| + virtual bool needsMainthreadDataCopy() override final { return InspectorInstrumentation::hasFrontends(); }
|
| + virtual void acceptMainthreadDataNotification(const char* data, int dataLength, int encodedDataLength) override final
|
| + {
|
| + ASSERT(!data || needsMainthreadDataCopy());
|
| + if (lifecycleContext())
|
| + lifecycleContext()->loader()->acceptDataFromThreadedReceiver(data, dataLength, encodedDataLength);
|
| + }
|
| +
|
| private:
|
| WeakPtr<BackgroundHTMLParser> m_backgroundParser;
|
| };
|
| @@ -726,10 +736,10 @@ void HTMLDocumentParser::startBackgroundParser()
|
| RefPtr<WeakReference<BackgroundHTMLParser>> reference = WeakReference<BackgroundHTMLParser>::createUnbound();
|
| m_backgroundParser = WeakPtr<BackgroundHTMLParser>(reference);
|
|
|
| - // TODO(oysteine): Disabled due to crbug.com/398076 until a full fix can be implemented.
|
| + // FIXME(oysteine): Disabled due to crbug.com/398076 until a full fix can be implemented.
|
| if (RuntimeEnabledFeatures::threadedParserDataReceiverEnabled()) {
|
| if (DocumentLoader* loader = document()->loader())
|
| - loader->attachThreadedDataReceiver(adoptPtr(new ParserDataReceiver(m_backgroundParser)));
|
| + loader->attachThreadedDataReceiver(adoptPtr(new ParserDataReceiver(m_backgroundParser, document()->contextDocument().get())));
|
| }
|
|
|
| OwnPtr<BackgroundHTMLParser::Configuration> config = adoptPtr(new BackgroundHTMLParser::Configuration);
|
|
|