| 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 51cc3de3567c61ce4b52e03b47cd7801bd537838..59f9f6a2fca321a9cb3b4b55a560c1e298fce140 100644
|
| --- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
|
| @@ -60,6 +60,7 @@ namespace blink {
|
| ScriptLoader::ScriptLoader(Element* element, bool parserInserted, bool alreadyStarted)
|
| : m_element(element)
|
| , m_resource(0)
|
| + , m_originWorld(nullptr)
|
| , m_startLineNumber(WTF::OrdinalNumber::beforeFirst())
|
| , m_parserInserted(parserInserted)
|
| , m_isExternalScript(false)
|
| @@ -248,6 +249,11 @@ bool ScriptLoader::prepareScript(const TextPosition& scriptStartPosition, Legacy
|
| return false;
|
| }
|
|
|
| + // Store the origin to apply when the script is done loading, as the script could be loaded in the main world.
|
| + if (v8::Isolate::GetCurrent()->InContext()) {
|
| + m_originWorld = PassRefPtr<DOMWrapperWorld>(DOMWrapperWorld::current(v8::Isolate::GetCurrent()).originWorld());
|
| + }
|
| +
|
| if (client->hasSourceAttribute() && client->deferAttributeValue() && m_parserInserted && !client->asyncAttributeValue()) {
|
| m_willExecuteWhenDocumentFinishedParsing = true;
|
| m_willBeParserExecuted = true;
|
| @@ -421,6 +427,9 @@ bool ScriptLoader::executeScript(const ScriptSourceCode& sourceCode, double* com
|
| if (isHTMLScriptLoader(m_element))
|
| contextDocument->pushCurrentScript(toHTMLScriptElement(m_element));
|
|
|
| + // Ensure the origin world gets propagated to the script and is reset afterwards.
|
| + DOMWrapperWorld::OriginWorldScope worldScope(m_originWorld);
|
| +
|
| // Create a script from the script element node, using the script
|
| // block's source and the script block's type.
|
| // Note: This is where the script is compiled and actually executed.
|
|
|