| Index: third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinitionBuilder.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinitionBuilder.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinitionBuilder.cpp
|
| index 39da9922a20331c868b3889186b2f20796ec9a0a..3a4d686dc4ef14b2ab0168d66e18eb396a6650ae 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinitionBuilder.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinitionBuilder.cpp
|
| @@ -15,16 +15,26 @@
|
|
|
| namespace blink {
|
|
|
| +ScriptCustomElementDefinitionBuilder* ScriptCustomElementDefinitionBuilder
|
| + ::s_stack = nullptr;
|
| +
|
| ScriptCustomElementDefinitionBuilder::ScriptCustomElementDefinitionBuilder(
|
| ScriptState* scriptState,
|
| CustomElementsRegistry* registry,
|
| const ScriptValue& constructor,
|
| ExceptionState& exceptionState)
|
| - : m_scriptState(scriptState)
|
| + : m_prev(s_stack)
|
| + , m_scriptState(scriptState)
|
| , m_registry(registry)
|
| , m_constructorValue(constructor.v8Value())
|
| , m_exceptionState(exceptionState)
|
| {
|
| + s_stack = this;
|
| +}
|
| +
|
| +ScriptCustomElementDefinitionBuilder::~ScriptCustomElementDefinitionBuilder()
|
| +{
|
| + s_stack = m_prev;
|
| }
|
|
|
| bool ScriptCustomElementDefinitionBuilder::checkConstructorIntrinsics()
|
| @@ -57,6 +67,17 @@ bool ScriptCustomElementDefinitionBuilder::checkConstructorNotRegistered()
|
| "this constructor has already been used with this registry");
|
| return false;
|
| }
|
| + for (auto builder = m_prev; builder; builder = builder->m_prev) {
|
| + CHECK(!builder->m_constructor.IsEmpty());
|
| + if (m_registry != builder->m_registry
|
| + || m_constructor != builder->m_constructor) {
|
| + continue;
|
| + }
|
| + m_exceptionState.throwDOMException(
|
| + NotSupportedError,
|
| + "this constructor is already being defined in this registry");
|
| + return false;
|
| + }
|
| return true;
|
| }
|
|
|
|
|