| Index: third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| index 50498e1534f96ceec3bf953f249a08a64a8a168c..03c0cbd36f4a7092db7ad623438abc26bc307c5a 100644
|
| --- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| @@ -66,19 +66,36 @@ ScriptLoader::ScriptLoader(Element* element,
|
| bool createdDuringDocumentWrite)
|
| : m_element(element),
|
| m_startLineNumber(WTF::OrdinalNumber::beforeFirst()),
|
| - m_parserInserted(parserInserted),
|
| - m_isExternalScript(false),
|
| - m_alreadyStarted(alreadyStarted),
|
| m_haveFiredLoad(false),
|
| m_willBeParserExecuted(false),
|
| - m_readyToBeParserExecuted(false),
|
| m_willExecuteWhenDocumentFinishedParsing(false),
|
| - m_forceAsync(!parserInserted),
|
| m_createdDuringDocumentWrite(createdDuringDocumentWrite),
|
| m_asyncExecType(ScriptRunner::None),
|
| m_documentWriteIntervention(
|
| DocumentWriteIntervention::DocumentWriteInterventionNone) {
|
| DCHECK(m_element);
|
| +
|
| + // https://html.spec.whatwg.org/#already-started
|
| + // "The cloning steps for script elements must set the "already started"
|
| + // flag on the copy if it is set on the element being cloned."
|
| + // TODO(hiroshige): Cloning is implemented together with
|
| + // {HTML,SVG}ScriptElement::cloneElementWithoutAttributesAndChildren().
|
| + // Clean up these later.
|
| + if (alreadyStarted)
|
| + m_alreadyStarted = true;
|
| +
|
| + if (parserInserted) {
|
| + // https://html.spec.whatwg.org/#parser-inserted
|
| + // "It is set by the HTML parser and the XML parser
|
| + // on script elements they insert"
|
| + m_parserInserted = true;
|
| +
|
| + // https://html.spec.whatwg.org/#non-blocking
|
| + // "It is unset by the HTML parser and the XML parser
|
| + // on script elements they insert."
|
| + m_nonBlocking = false;
|
| + }
|
| +
|
| if (parserInserted && element->document().scriptableDocumentParser() &&
|
| !element->document().isInDocumentWrite())
|
| m_startLineNumber =
|
| @@ -118,7 +135,11 @@ void ScriptLoader::handleSourceAttribute(const String& sourceUrl) {
|
| }
|
|
|
| void ScriptLoader::handleAsyncAttribute() {
|
| - m_forceAsync = false;
|
| + // https://html.spec.whatwg.org/#non-blocking
|
| + // "In addition, whenever a script element whose "non-blocking" flag is set
|
| + // has an async content attribute added, the element's "non-blocking" flag
|
| + // must be unset."
|
| + m_nonBlocking = false;
|
| }
|
|
|
| void ScriptLoader::detach() {
|
| @@ -216,7 +237,7 @@ bool ScriptLoader::prepareScript(const TextPosition& scriptStartPosition,
|
| }
|
|
|
| if (wasParserInserted && !client->asyncAttributeValue())
|
| - m_forceAsync = true;
|
| + m_nonBlocking = true;
|
|
|
| // FIXME: HTML5 spec says we should check that all children are either
|
| // comments or empty text nodes.
|
| @@ -231,7 +252,7 @@ bool ScriptLoader::prepareScript(const TextPosition& scriptStartPosition,
|
|
|
| if (wasParserInserted) {
|
| m_parserInserted = true;
|
| - m_forceAsync = false;
|
| + m_nonBlocking = false;
|
| }
|
|
|
| m_alreadyStarted = true;
|
| @@ -287,7 +308,7 @@ bool ScriptLoader::prepareScript(const TextPosition& scriptStartPosition,
|
| m_willBeParserExecuted = true;
|
| m_readyToBeParserExecuted = true;
|
| } else if (client->hasSourceAttribute() && !client->asyncAttributeValue() &&
|
| - !m_forceAsync) {
|
| + !m_nonBlocking) {
|
| m_pendingScript = PendingScript::create(m_element, m_resource.get());
|
| m_asyncExecType = ScriptRunner::InOrder;
|
| contextDocument->scriptRunner()->queueScriptForExecution(this,
|
|
|