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 c48775ff2481038bef93b02e86053b5c34bb2afb..56abb8278fdaacf415a93effbf7a01f2dc43b483 100644 |
--- a/third_party/WebKit/Source/core/dom/Modulator.cpp |
+++ b/third_party/WebKit/Source/core/dom/Modulator.cpp |
@@ -6,6 +6,10 @@ |
#include "bindings/core/v8/ScriptState.h" |
#include "bindings/core/v8/V8Binding.h" |
+#include "bindings/core/v8/V8PerContextData.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/ModulatorImpl.h" |
+#include "core/frame/LocalFrame.h" |
namespace blink { |
@@ -16,10 +20,20 @@ const char kPerContextDataKey[] = "Modulator"; |
Modulator* Modulator::From(ScriptState* script_state) { |
if (!script_state) |
return nullptr; |
+ |
V8PerContextData* per_context_data = script_state->PerContextData(); |
if (!per_context_data) |
return nullptr; |
- return static_cast<Modulator*>(per_context_data->GetData(kPerContextDataKey)); |
+ |
+ Modulator* modulator = |
+ static_cast<Modulator*>(per_context_data->GetData(kPerContextDataKey)); |
+ if (!modulator) { |
+ if (Document* document = ToDocument(ExecutionContext::From(script_state))) { |
+ modulator = ModulatorImpl::Create(script_state, *document); |
+ Modulator::SetModulator(script_state, modulator); |
+ } |
+ } |
+ return modulator; |
} |
Modulator::~Modulator() {} |