Index: third_party/WebKit/Source/core/dom/Modulator.cpp |
diff --git a/third_party/WebKit/Source/core/dom/Modulator.cpp b/third_party/WebKit/Source/core/dom/Modulator.cpp |
index 58dc787c332ea5a7bdb1d2c39b56bb9e0439f74f..5ed9a482bed9c53893aec63d711ce7255cf369e2 100644 |
--- a/third_party/WebKit/Source/core/dom/Modulator.cpp |
+++ b/third_party/WebKit/Source/core/dom/Modulator.cpp |
@@ -5,19 +5,42 @@ |
#include "core/dom/Modulator.h" |
#include "bindings/core/v8/ScriptState.h" |
+#include "bindings/core/v8/V8PerContextData.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/ModulatorImpl.h" |
+#include "core/frame/LocalFrame.h" |
namespace blink { |
+Modulator::~Modulator() {} |
+ |
Modulator* Modulator::from(LocalFrame* frame) { |
ScriptState* scriptState = ScriptState::forMainWorld(frame); |
if (!scriptState) |
return nullptr; |
- // TODO(kouhei): setModulator in V8PerContextData when we land ModulatorImpl. |
- return scriptState->perContextData()->modulator(); |
+ Modulator* modulator = scriptState->perContextData()->modulator(); |
+ if (!modulator) { |
+ if (Document* document = frame->document()) { |
+ ScriptState* scriptState = ScriptState::forMainWorld(frame); |
+ modulator = ModulatorImpl::create(scriptState, *document); |
+ scriptState->perContextData()->setModulator(modulator); |
+ } |
+ } |
+ return modulator; |
} |
-KURL Modulator::resolveModuleSpecifier(const String& moduleRequest, |
+KURL Modulator::resolveModuleSpecifier(const String& moduleRequest0, |
const KURL& baseURL) { |
+ String moduleRequest = moduleRequest0.isolatedCopy(); |
+ if (!moduleRequest.endsWith(".js") && !moduleRequest.endsWith(".glsl")) { |
+ moduleRequest.append('.'); |
+ moduleRequest.append('j'); |
+ moduleRequest.append('s'); |
+ } |
+ if (moduleRequest.endsWith(".glsl")) { |
+ moduleRequest = |
+ KURL(KURL(), "data:text/javascript, export default 'glslsrc';"); |
+ } |
// Step 1. Apply the URL parser to specifier. If the result is not failure, |
// return the result. |
KURL url(KURL(), moduleRequest); |