Add value sanitization algorithm for input[type="email"]

Handle "Multiple" attribute for email value sanitization

Fix code formatting

Tests for email value sanitization should pass

Make failing wpt tests pass

Change new_value => sanitized
This commit is contained in:
ffwff 2019-05-29 08:21:49 +07:00
parent 84ec1316c9
commit 3508140929
4 changed files with 20 additions and 57 deletions

View file

@ -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());
}
},
_ => (),
}
}

View file

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

View file

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

View file

@ -11,10 +11,3 @@
[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