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/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