diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index a7d73dd404e..26a5c41a26c 100755
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -63,7 +63,7 @@ use std::cell::Cell;
use std::ops::Range;
use style::attr::AttrValue;
use style::element_state::ElementState;
-use style::str::split_commas;
+use style::str::{split_commas, str_join};
const DEFAULT_SUBMIT_VALUE: &'static str = "Submit";
const DEFAULT_RESET_VALUE: &'static str = "Reset";
@@ -1195,6 +1195,24 @@ impl HTMLInputElement {
InputType::Range => {
value.set_best_representation_of_the_floating_point_number();
},
+ InputType::Email => {
+ if !self.Multiple() {
+ value.strip_newlines();
+ value.strip_leading_and_trailing_ascii_whitespace();
+ } else {
+ let sanitized = str_join(
+ split_commas(value).map(|token| {
+ let mut token = DOMString::from_string(token.to_string());
+ token.strip_newlines();
+ token.strip_leading_and_trailing_ascii_whitespace();
+ token
+ }),
+ ",",
+ );
+ value.clear();
+ value.push_str(sanitized.as_str());
+ }
+ },
_ => (),
}
}
diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/email.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/email.html.ini
index c0017e10a70..fdf37813f65 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-input-element/email.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/email.html.ini
@@ -1,17 +1,8 @@
[email.html]
type: testharness
- [value should be sanitized: strip line breaks]
- expected: FAIL
-
[Email address validity]
expected: FAIL
- [When the multiple attribute is removed, the user agent must run the value sanitization algorithm]
- expected: FAIL
-
- [run the value sanitization algorithm after setting a new value]
- expected: FAIL
-
[valid value is a set of valid email addresses separated by a single ',']
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini
index 46cbb336bee..309ca15cdda 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini
@@ -1,35 +1,23 @@
[type-change-state.html]
type: testharness
- [change state from hidden to email]
- expected: FAIL
-
[change state from hidden to datetime]
expected: FAIL
[change state from hidden to range]
expected: FAIL
- [change state from text to email]
- expected: FAIL
-
[change state from text to datetime]
expected: FAIL
[change state from text to range]
expected: FAIL
- [change state from search to email]
- expected: FAIL
-
[change state from search to datetime]
expected: FAIL
[change state from search to range]
expected: FAIL
- [change state from tel to email]
- expected: FAIL
-
[change state from tel to datetime]
expected: FAIL
@@ -48,9 +36,6 @@
[change state from email to range]
expected: FAIL
- [change state from password to email]
- expected: FAIL
-
[change state from password to datetime]
expected: FAIL
@@ -69,9 +54,6 @@
[change state from datetime to url]
expected: FAIL
- [change state from datetime to email]
- expected: FAIL
-
[change state from datetime to password]
expected: FAIL
@@ -108,57 +90,36 @@
[change state from number to range]
expected: FAIL
- [change state from range to email]
- expected: FAIL
-
[change state from range to datetime]
expected: FAIL
- [change state from checkbox to email]
- expected: FAIL
-
[change state from checkbox to range]
expected: FAIL
- [change state from radio to email]
- expected: FAIL
-
[change state from radio to datetime]
expected: FAIL
[change state from radio to range]
expected: FAIL
- [change state from submit to email]
- expected: FAIL
-
[change state from submit to datetime]
expected: FAIL
[change state from submit to range]
expected: FAIL
- [change state from image to email]
- expected: FAIL
-
[change state from image to datetime]
expected: FAIL
[change state from image to range]
expected: FAIL
- [change state from reset to email]
- expected: FAIL
-
[change state from reset to datetime]
expected: FAIL
[change state from reset to range]
expected: FAIL
- [change state from button to email]
- expected: FAIL
-
[change state from button to datetime]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini
index 7577868bb52..26f33d38074 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/valueMode.html.ini
@@ -10,11 +10,4 @@
expected: FAIL
[value IDL attribute of input type range with value attribute]
- expected: FAIL
-
- [value IDL attribute of input type email without value attribute]
- expected: FAIL
-
- [value IDL attribute of input type email with value attribute]
- expected: FAIL
-
+ expected: FAIL
\ No newline at end of file