diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc | 110 |
1 files changed, 70 insertions, 40 deletions
diff --git a/chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc b/chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc index 0ed5ed957f3..db2db818149 100644 --- a/chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc +++ b/chromium/third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.cc @@ -5,12 +5,17 @@ #include "third_party/blink/renderer/bindings/core/v8/script_custom_element_definition.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_adopted_callback.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_attribute_changed_callback.h" #include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_constructor.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_disabled_state_changed_callback.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_form_associated_callback.h" #include "third_party/blink/renderer/bindings/core/v8/v8_custom_element_registry.h" #include "third_party/blink/renderer/bindings/core/v8/v8_element.h" #include "third_party/blink/renderer/bindings/core/v8/v8_function.h" #include "third_party/blink/renderer/bindings/core/v8/v8_script_runner.h" #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_void_function.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/events/error_event.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" @@ -74,15 +79,23 @@ ScriptCustomElementDefinition* ScriptCustomElementDefinition::Create( const CustomElementDescriptor& descriptor, CustomElementDefinition::Id id, V8CustomElementConstructor* constructor, - V8Function* connected_callback, - V8Function* disconnected_callback, - V8Function* adopted_callback, - V8Function* attribute_changed_callback, - HashSet<AtomicString>&& observed_attributes) { - ScriptCustomElementDefinition* definition = new ScriptCustomElementDefinition( - script_state, descriptor, constructor, connected_callback, - disconnected_callback, adopted_callback, attribute_changed_callback, - std::move(observed_attributes)); + V8VoidFunction* connected_callback, + V8VoidFunction* disconnected_callback, + V8CustomElementAdoptedCallback* adopted_callback, + V8CustomElementAttributeChangedCallback* attribute_changed_callback, + V8CustomElementFormAssociatedCallback* form_associated_callback, + V8CustomElementDisabledStateChangedCallback* + disabled_state_changed_callback, + HashSet<AtomicString>&& observed_attributes, + const Vector<String>& disabled_features, + FormAssociationFlag form_association_flag) { + ScriptCustomElementDefinition* definition = + MakeGarbageCollected<ScriptCustomElementDefinition>( + script_state, descriptor, constructor, connected_callback, + disconnected_callback, adopted_callback, attribute_changed_callback, + form_associated_callback, disabled_state_changed_callback, + std::move(observed_attributes), disabled_features, + form_association_flag); // Tag the JavaScript constructor object with its ID. v8::Local<v8::Value> id_value = @@ -100,18 +113,28 @@ ScriptCustomElementDefinition::ScriptCustomElementDefinition( ScriptState* script_state, const CustomElementDescriptor& descriptor, V8CustomElementConstructor* constructor, - V8Function* connected_callback, - V8Function* disconnected_callback, - V8Function* adopted_callback, - V8Function* attribute_changed_callback, - HashSet<AtomicString>&& observed_attributes) - : CustomElementDefinition(descriptor, std::move(observed_attributes)), + V8VoidFunction* connected_callback, + V8VoidFunction* disconnected_callback, + V8CustomElementAdoptedCallback* adopted_callback, + V8CustomElementAttributeChangedCallback* attribute_changed_callback, + V8CustomElementFormAssociatedCallback* form_associated_callback, + V8CustomElementDisabledStateChangedCallback* + disabled_state_changed_callback, + HashSet<AtomicString>&& observed_attributes, + const Vector<String>& disabled_features, + FormAssociationFlag form_association_flag) + : CustomElementDefinition(descriptor, + std::move(observed_attributes), + disabled_features, + form_association_flag), script_state_(script_state), constructor_(constructor), connected_callback_(connected_callback), disconnected_callback_(disconnected_callback), adopted_callback_(adopted_callback), - attribute_changed_callback_(attribute_changed_callback) {} + attribute_changed_callback_(attribute_changed_callback), + form_associated_callback_(form_associated_callback), + disabled_state_changed_callback_(disabled_state_changed_callback) {} void ScriptCustomElementDefinition::Trace(Visitor* visitor) { visitor->Trace(script_state_); @@ -120,6 +143,8 @@ void ScriptCustomElementDefinition::Trace(Visitor* visitor) { visitor->Trace(disconnected_callback_); visitor->Trace(adopted_callback_); visitor->Trace(attribute_changed_callback_); + visitor->Trace(form_associated_callback_); + visitor->Trace(disabled_state_changed_callback_); CustomElementDefinition::Trace(visitor); } @@ -260,19 +285,26 @@ bool ScriptCustomElementDefinition::HasAdoptedCallback() const { return adopted_callback_; } +bool ScriptCustomElementDefinition::HasFormAssociatedCallback() const { + return form_associated_callback_; +} + +bool ScriptCustomElementDefinition::HasDisabledStateChangedCallback() const { + return disabled_state_changed_callback_; +} + void ScriptCustomElementDefinition::RunConnectedCallback(Element* element) { if (!connected_callback_) return; - connected_callback_->InvokeAndReportException(element, Vector<ScriptValue>()); + connected_callback_->InvokeAndReportException(element); } void ScriptCustomElementDefinition::RunDisconnectedCallback(Element* element) { if (!disconnected_callback_) return; - disconnected_callback_->InvokeAndReportException(element, - Vector<ScriptValue>()); + disconnected_callback_->InvokeAndReportException(element); } void ScriptCustomElementDefinition::RunAdoptedCallback(Element* element, @@ -281,15 +313,7 @@ void ScriptCustomElementDefinition::RunAdoptedCallback(Element* element, if (!adopted_callback_) return; - ScriptState* script_state = adopted_callback_->CallbackRelevantScriptState(); - if (!script_state->ContextIsValid()) - return; - ScriptState::Scope scope(script_state); - Vector<ScriptValue> args({ - ScriptValue(script_state, ToV8(old_owner, script_state)), - ScriptValue(script_state, ToV8(new_owner, script_state)), - }); - adopted_callback_->InvokeAndReportException(element, args); + adopted_callback_->InvokeAndReportException(element, old_owner, new_owner); } void ScriptCustomElementDefinition::RunAttributeChangedCallback( @@ -300,19 +324,25 @@ void ScriptCustomElementDefinition::RunAttributeChangedCallback( if (!attribute_changed_callback_) return; - v8::Isolate* isolate = attribute_changed_callback_->GetIsolate(); - ScriptState* script_state = - attribute_changed_callback_->CallbackRelevantScriptState(); - if (!script_state->ContextIsValid()) + attribute_changed_callback_->InvokeAndReportException( + element, name.LocalName(), old_value, new_value, name.NamespaceURI()); +} + +void ScriptCustomElementDefinition::RunFormAssociatedCallback( + Element* element, + HTMLFormElement* nullable_form) { + if (!form_associated_callback_) + return; + form_associated_callback_->InvokeAndReportException(element, nullable_form); +} + +void ScriptCustomElementDefinition::RunDisabledStateChangedCallback( + Element* element, + bool is_disabled) { + if (!disabled_state_changed_callback_) return; - ScriptState::Scope scope(script_state); - Vector<ScriptValue> args({ - ScriptValue(script_state, V8String(isolate, name.LocalName())), - ScriptValue(script_state, V8StringOrNull(isolate, old_value)), - ScriptValue(script_state, V8StringOrNull(isolate, new_value)), - ScriptValue(script_state, V8StringOrNull(isolate, name.NamespaceURI())), - }); - attribute_changed_callback_->InvokeAndReportException(element, args); + disabled_state_changed_callback_->InvokeAndReportException(element, + is_disabled); } } // namespace blink |