diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs index 9b4697c4829..5a8ffaf0df6 100644 --- a/components/script/dom/htmlbuttonelement.rs +++ b/components/script/dom/htmlbuttonelement.rs @@ -27,7 +27,6 @@ use string_cache::Atom; use util::str::DOMString; #[derive(JSTraceable, PartialEq, Copy, Clone)] -#[allow(dead_code)] #[derive(HeapSizeOf)] enum ButtonType { Submit, @@ -50,7 +49,6 @@ impl HTMLButtonElement { htmlelement: HTMLElement::new_inherited_with_state(IN_ENABLED_STATE, localName, prefix, document), - //TODO: implement button_type in attribute_mutated button_type: Cell::new(ButtonType::Submit) } } @@ -162,6 +160,22 @@ impl VirtualMethods for HTMLButtonElement { } } }, + &atom!("type") => { + match mutation { + AttributeMutation::Set(_) => { + let value = match &**attr.value() { + "reset" => ButtonType::Reset, + "button" => ButtonType::Button, + "menu" => ButtonType::Menu, + _ => ButtonType::Submit, + }; + self.button_type.set(value); + } + AttributeMutation::Removed => { + self.button_type.set(ButtonType::Submit); + } + } + } _ => {}, } } diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs index ec639d6f6b5..eb60a2c5798 100644 --- a/components/script/dom/macros.rs +++ b/components/script/dom/macros.rs @@ -330,6 +330,7 @@ macro_rules! global_event_handlers( event_handler!(keyup, GetOnkeyup, SetOnkeyup); event_handler!(input, GetOninput, SetOninput); event_handler!(change, GetOnchange, SetOnchange); + event_handler!(reset, GetOnreset, SetOnreset); event_handler!(submit, GetOnsubmit, SetOnsubmit); ) ); diff --git a/components/script/dom/webidls/EventHandler.webidl b/components/script/dom/webidls/EventHandler.webidl index 81547d03eb3..24382756aec 100644 --- a/components/script/dom/webidls/EventHandler.webidl +++ b/components/script/dom/webidls/EventHandler.webidl @@ -31,6 +31,7 @@ interface GlobalEventHandlers { attribute EventHandler onkeypress; attribute EventHandler onkeyup; attribute EventHandler onchange; + attribute EventHandler onreset; attribute EventHandler onsubmit; }; diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index cea11350d0d..ed64e6f5035 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -186,9 +186,6 @@ [Document interface: attribute onratechange] expected: FAIL - [Document interface: attribute onreset] - expected: FAIL - [Document interface: attribute onresize] expected: FAIL @@ -1764,9 +1761,6 @@ [HTMLElement interface: attribute onratechange] expected: FAIL - [HTMLElement interface: attribute onreset] - expected: FAIL - [HTMLElement interface: attribute onresize] expected: FAIL @@ -2001,9 +1995,6 @@ [HTMLElement interface: document.createElement("noscript") must inherit property "onratechange" with the proper type (79)] expected: FAIL - [HTMLElement interface: document.createElement("noscript") must inherit property "onreset" with the proper type (80)] - expected: FAIL - [HTMLElement interface: document.createElement("noscript") must inherit property "onresize" with the proper type (81)] expected: FAIL @@ -9117,9 +9108,6 @@ [Document interface: document.implementation.createDocument(null, "", null) must inherit property "onratechange" with the proper type (141)] expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "onreset" with the proper type (142)] - expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "onresize" with the proper type (143)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini index 989d296a711..f12b662a07c 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-button-element/button-events.html.ini @@ -1,12 +1,6 @@ [button-events.html] type: testharness - expected: CRASH - [The submit event must be fired when click a button in submit status] - expected: TIMEOUT - - [The reset event must be fired when click a button in reset status] - expected: TIMEOUT - + expected: TIMEOUT [The show event must be fired when click a button in menu status] expected: TIMEOUT