diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 090aa8553bf..26a30d07599 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -634,8 +634,7 @@ impl HTMLFormElement {
// {}
//}
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) => {
- // Unimplemented
- {}
+ child.downcast::().unwrap().reset();
}
NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement)) => {
child.downcast::().unwrap().reset();
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 34c9187b644..03d10e117f4 100644
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -84,6 +84,16 @@ impl HTMLSelectElement {
HTMLSelectElementBinding::Wrap)
}
+ // https://html.spec.whatwg.org/multipage/#the-select-element:concept-form-reset-control
+ pub fn reset(&self) {
+ let node = self.upcast::();
+ for opt in node.traverse_preorder().filter_map(Root::downcast::) {
+ opt.set_selectedness(opt.DefaultSelected());
+ opt.set_dirtiness(false);
+ }
+ self.ask_for_reset();
+ }
+
// https://html.spec.whatwg.org/multipage/#ask-for-a-reset
pub fn ask_for_reset(&self) {
if self.Multiple() {