mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-11 05:32:59 +00:00
LibWeb: Use correct IDL for HTTPFormElement's method attribute
Removed the custom getter and updated the idl so that the attribute is Reflected and Enumerated.
This commit is contained in:
parent
ebe89a3207
commit
6892482755
Notes:
github-actions[bot]
2024-10-21 21:42:12 +00:00
Author: https://github.com/samu698
Commit: 6892482755
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1884
Reviewed-by: https://github.com/ADKaster ✅
Reviewed-by: https://github.com/BodilessSleeper
Reviewed-by: https://github.com/stelar7
Reviewed-by: https://github.com/tcl3
5 changed files with 83 additions and 19 deletions
51
Tests/LibWeb/Text/expected/form-method-attribute.txt
Normal file
51
Tests/LibWeb/Text/expected/form-method-attribute.txt
Normal file
|
@ -0,0 +1,51 @@
|
|||
form: unset
|
||||
form.getAttribute('method') == 'null'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', '')
|
||||
form.getAttribute('method') == ''
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'undefined')
|
||||
form.getAttribute('method') == 'undefined'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'null')
|
||||
form.getAttribute('method') == 'null'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'get')
|
||||
form.getAttribute('method') == 'get'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'post')
|
||||
form.getAttribute('method') == 'post'
|
||||
form.method == 'post'
|
||||
|
||||
form.setAttribute('method', 'dialog')
|
||||
form.getAttribute('method') == 'dialog'
|
||||
form.method == 'dialog'
|
||||
|
||||
form.setAttribute('method', 'GeT')
|
||||
form.getAttribute('method') == 'GeT'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'POST')
|
||||
form.getAttribute('method') == 'POST'
|
||||
form.method == 'post'
|
||||
|
||||
form.setAttribute('method', 'DIAlog')
|
||||
form.getAttribute('method') == 'DIAlog'
|
||||
form.method == 'dialog'
|
||||
|
||||
form.setAttribute('method', 'foo')
|
||||
form.getAttribute('method') == 'foo'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', 'xpost')
|
||||
form.getAttribute('method') == 'xpost'
|
||||
form.method == 'get'
|
||||
|
||||
form.setAttribute('method', '5%')
|
||||
form.getAttribute('method') == '5%'
|
||||
form.method == 'get'
|
23
Tests/LibWeb/Text/input/form-method-attribute.html
Normal file
23
Tests/LibWeb/Text/input/form-method-attribute.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
<script src="./include.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
const form = document.createElement('form');
|
||||
const values = [
|
||||
'', undefined, null,
|
||||
'get', 'post', 'dialog',
|
||||
'GeT', 'POST', 'DIAlog',
|
||||
'foo', 'xpost', '5%'
|
||||
];
|
||||
|
||||
println('form: unset');
|
||||
println(`form.getAttribute('method') == '${form.getAttribute('method')}'`);
|
||||
println(`form.method == '${form.method}'`);
|
||||
for (value of values) {
|
||||
form.setAttribute('method', value);
|
||||
println('');
|
||||
println(`form.setAttribute('method', '${value}')`);
|
||||
println(`form.getAttribute('method') == '${form.getAttribute('method')}'`);
|
||||
println(`form.method == '${form.method}'`);
|
||||
}
|
||||
});
|
||||
</script>
|
|
@ -565,23 +565,6 @@ Vector<JS::NonnullGCPtr<DOM::Element>> HTMLFormElement::get_submittable_elements
|
|||
return submittable_elements;
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-fs-method
|
||||
StringView HTMLFormElement::method() const
|
||||
{
|
||||
// The method and enctype IDL attributes must reflect the respective content attributes of the same name, limited to only known values.
|
||||
// FIXME: This should probably be `Reflect` in the IDL.
|
||||
auto method_state = method_state_from_form_element(*this);
|
||||
switch (method_state) {
|
||||
case MethodAttributeState::GET:
|
||||
return "get"sv;
|
||||
case MethodAttributeState::POST:
|
||||
return "post"sv;
|
||||
case MethodAttributeState::Dialog:
|
||||
return "dialog"sv;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/forms.html#dom-form-rellist
|
||||
JS::NonnullGCPtr<DOM::DOMTokenList> HTMLFormElement::rel_list()
|
||||
{
|
||||
|
|
|
@ -88,7 +88,6 @@ public:
|
|||
bool constructing_entry_list() const { return m_constructing_entry_list; }
|
||||
void set_constructing_entry_list(bool value) { m_constructing_entry_list = value; }
|
||||
|
||||
StringView method() const;
|
||||
WebIDL::ExceptionOr<void> set_method(String const&);
|
||||
|
||||
JS::NonnullGCPtr<DOM::DOMTokenList> rel_list();
|
||||
|
|
|
@ -16,6 +16,14 @@ enum EnctypeAttribute {
|
|||
"text/plain"
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fs-method
|
||||
[MissingValueDefault=get, InvalidValueDefault=get]
|
||||
enum MethodAttribute {
|
||||
"get",
|
||||
"post",
|
||||
"dialog"
|
||||
};
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#selectionmode
|
||||
enum SelectionMode {
|
||||
"select",
|
||||
|
@ -35,7 +43,7 @@ interface HTMLFormElement : HTMLElement {
|
|||
[CEReactions, Enumerated=Autocomplete, Reflect] attribute DOMString autocomplete;
|
||||
[CEReactions, Enumerated=EnctypeAttribute, Reflect] attribute DOMString enctype;
|
||||
[CEReactions, Enumerated=EnctypeAttribute, Reflect=enctype] attribute DOMString encoding;
|
||||
[CEReactions] attribute DOMString method;
|
||||
[CEReactions, Enumerated=MethodAttribute, Reflect] attribute DOMString method;
|
||||
[CEReactions, Reflect] attribute DOMString name;
|
||||
[CEReactions, Reflect=novalidate] attribute boolean noValidate;
|
||||
[CEReactions, Reflect] attribute DOMString target;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue