Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Unified Diff: third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp

Issue 2003593003: Make CustomElementsRegistry lazily initialize script state. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp
index 6163dced4530d47532ca1639222c3e9ac9f85fd2..1cbe50abf428da29f086dea6dcc97e3db4ddf1e8 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistry.cpp
@@ -24,30 +24,18 @@
namespace blink {
CustomElementsRegistry* CustomElementsRegistry::create(
- ScriptState* scriptState,
V0CustomElementRegistrationContext* v0)
{
- DCHECK(scriptState->world().isMainWorld());
CustomElementsRegistry* registry = new CustomElementsRegistry(v0);
if (v0)
v0->setV1(registry);
-
- v8::Isolate* isolate = scriptState->isolate();
- v8::Local<v8::Object> wrapper =
- toV8(registry, scriptState).As<v8::Object>();
- v8::Local<v8::String> name =
- V8HiddenValue::customElementsRegistryMap(isolate);
- v8::Local<v8::Map> map = v8::Map::New(isolate);
- bool didSetPrototype =
- V8HiddenValue::setHiddenValue(scriptState, wrapper, name, map);
- DCHECK(didSetPrototype);
-
return registry;
}
CustomElementsRegistry::CustomElementsRegistry(
const V0CustomElementRegistrationContext* v0)
- : m_v0(v0)
+ : m_state(State::ScriptNotInitialized)
+ , m_v0(v0)
{
}
@@ -170,11 +158,24 @@ bool CustomElementsRegistry::nameIsDefined(const AtomicString& name) const
return m_names.contains(name);
}
+void CustomElementsRegistry::initializeScript(ScriptState* scriptState)
+{
+ CHECK(State::ScriptNotInitialized == m_state);
+ CHECK(scriptState->world().isMainWorld());
+ v8::Local<v8::Object> wrapper = toV8(this, scriptState).As<v8::Object>();
+ v8::Isolate* isolate = scriptState->isolate();
+ v8::Local<v8::String> name =
+ V8HiddenValue::customElementsRegistryMap(isolate);
+ v8::Local<v8::Map> map = v8::Map::New(isolate);
+ V8HiddenValue::setHiddenValue(scriptState, wrapper, name, map);
+ m_state = State::ScriptInitialized;
+}
+
v8::Local<v8::Map> CustomElementsRegistry::idMap(ScriptState* scriptState)
{
- DCHECK(scriptState->world().isMainWorld());
- v8::Local<v8::Object> wrapper =
- toV8(this, scriptState).As<v8::Object>();
+ CHECK(scriptState->world().isMainWorld());
+ ensureScriptInitialized(scriptState);
+ v8::Local<v8::Object> wrapper = toV8(this, scriptState).As<v8::Object>();
v8::Local<v8::String> name = V8HiddenValue::customElementsRegistryMap(
scriptState->isolate());
return V8HiddenValue::getHiddenValue(scriptState, wrapper, name)

Powered by Google App Engine
This is Rietveld 408576698