Object bounding box wrong for some paths
[WebKit-https.git] / Source / WebCore / bindings / js / JSHTMLSelectElementCustom.cpp
index a4928b1..c74aed3 100644 (file)
 #include "config.h"
 #include "JSHTMLSelectElementCustom.h"
 
+#include "CustomElementReactionQueue.h"
 #include "ExceptionCode.h"
 #include "HTMLNames.h"
 #include "HTMLOptionElement.h"
 #include "HTMLSelectElement.h"
 #include "JSHTMLOptionElement.h"
+#include "JSHTMLSelectElement.h"
 
 namespace WebCore {
 
 using namespace JSC;
 using namespace HTMLNames;
 
-JSValue JSHTMLSelectElement::remove(ExecState* exec)
+void selectElementIndexSetter(JSC::ExecState& state, HTMLSelectElement& element, unsigned index, JSC::JSValue value)
 {
-    HTMLSelectElement& select = *impl();
+    VM& vm = state.vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
 
-    // The remove function can take either an option object or the index of an option.
-    if (HTMLOptionElement* option = toHTMLOptionElement(exec->argument(0)))
-        select.remove(option);
-    else
-        select.remove(exec->argument(0).toInt32(exec));
+    auto* option = convert<IDLNullable<IDLInterface<HTMLOptionElement>>>(state, value);
+    RETURN_IF_EXCEPTION(throwScope, void());
 
-    return jsUndefined();
+    propagateException(state, throwScope, element.setItem(index, option));
 }
 
-void selectIndexSetter(HTMLSelectElement* select, JSC::ExecState* exec, unsigned index, JSC::JSValue value)
+void JSHTMLSelectElement::indexSetter(JSC::ExecState* state, unsigned index, JSC::JSValue value)
 {
-    if (value.isUndefinedOrNull())
-        select->remove(index);
-    else {
-        ExceptionCode ec = 0;
-        HTMLOptionElement* option = toHTMLOptionElement(value);
-        if (!option)
-            ec = TYPE_MISMATCH_ERR;
-        else
-            select->setOption(index, option, ec);
-        setDOMException(exec, ec);
-    }
-}
-
-void JSHTMLSelectElement::indexSetter(JSC::ExecState* exec, unsigned index, JSC::JSValue value)
-{
-    selectIndexSetter(impl(), exec, index, value);
+    CustomElementReactionStack customElementReactionStack;
+    selectElementIndexSetter(*state, wrapped(), index, value);
 }
 
 }