aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/fetch/headers.rs30
-rw-r--r--components/net_traits/fetch/headers.rs9
-rw-r--r--components/script/dom/headers.rs13
3 files changed, 26 insertions, 26 deletions
diff --git a/components/net/fetch/headers.rs b/components/net/fetch/headers.rs
index 8a31d68738b..e88fe641866 100644
--- a/components/net/fetch/headers.rs
+++ b/components/net/fetch/headers.rs
@@ -26,49 +26,53 @@ fn get_header_value_as_list(name: &str, headers: &HeaderMap) -> Option<Vec<Strin
return c != '\u{0022}' && c != '\u{002C}';
}
+ // https://fetch.spec.whatwg.org/#header-value-get-decode-and-split
// Step 1
let initial_value = get_value_from_header_list(name, headers);
if let Some(input) = initial_value {
- // Step 4
- let mut position = input.chars().peekable();
+ // Step 1
+ let input = input.into_iter().map(|u| char::from(u)).collect::<String>();
- // Step 5
+ // Step 2
+ let mut position = s.chars().peekable();
+
+ // Step 3
let mut values: Vec<String> = vec![];
- // Step 6
+ // Step 4
let mut value = String::new();
- // Step 7
+ // Step 5
while position.peek().is_some() {
- // Step 7.1
+ // Step 5.1
value += &*collect_sequence(&mut position, char_is_not_quote_or_comma);
- // Step 7.2
+ // Step 5.2
if let Some(&ch) = position.peek() {
if ch == '\u{0022}' {
- // Step 7.2.1.1
+ // Step 5.2.1.1
value += &*collect_http_quoted_string(&mut position, false);
- // Step 7.2.1.2
+ // Step 5.2.1.2
if position.peek().is_some() {
continue;
}
} else {
// ch == '\u{002C}'
- // Step 7.2.2.2
+ // Step 5.2.2.2
position.next();
}
}
- // Step 7.3
+ // Step 5.3
value = value.trim_matches(HTTP_TAB_OR_SPACE).to_string();
- // Step 7.4
+ // Step 5.4
values.push(value);
- // Step 7.5
+ // Step 5.5
value = String::new();
}
diff --git a/components/net_traits/fetch/headers.rs b/components/net_traits/fetch/headers.rs
index 4b293b13c18..ae95066bcf5 100644
--- a/components/net_traits/fetch/headers.rs
+++ b/components/net_traits/fetch/headers.rs
@@ -5,11 +5,8 @@
use headers::HeaderMap;
/// <https://fetch.spec.whatwg.org/#concept-header-list-get>
-pub fn get_value_from_header_list(name: &str, headers: &HeaderMap) -> Option<String> {
- let values = headers
- .get_all(name)
- .iter()
- .map(|val| val.to_str().unwrap());
+pub fn get_value_from_header_list(name: &str, headers: &HeaderMap) -> Option<Vec<u8>> {
+ let values = headers.get_all(name).iter().map(|val| val.as_bytes());
// Step 1
if values.size_hint() == (0, Some(0)) {
@@ -17,5 +14,5 @@ pub fn get_value_from_header_list(name: &str, headers: &HeaderMap) -> Option<Str
}
// Step 2
- return Some(values.collect::<Vec<&str>>().join(", "));
+ return Some(values.collect::<Vec<&[u8]>>().join(&[0x2C, 0x20][..]));
}
diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs
index a71a816c620..de81bd7dc4c 100644
--- a/components/script/dom/headers.rs
+++ b/components/script/dom/headers.rs
@@ -85,13 +85,12 @@ impl HeadersMethods for Headers {
// Step 3
if self.guard.get() == Guard::RequestNoCors {
- let tmp_value = if let Some(value) =
+ let tmp_value = if let Some(mut value) =
get_value_from_header_list(&valid_name, &self.header_list.borrow())
{
- let mut l = value.as_bytes().to_vec();
- l.extend(b", ");
- l.extend(valid_value.clone());
- l
+ value.extend(b", ");
+ value.extend(valid_value.clone());
+ value
} else {
valid_value.clone()
};
@@ -158,7 +157,7 @@ impl HeadersMethods for Headers {
let valid_name = validate_name(name)?;
Ok(
get_value_from_header_list(&valid_name, &self.header_list.borrow())
- .map(|v| ByteString::new(v.as_bytes().to_vec())),
+ .map(|v| ByteString::new(v)),
)
}
@@ -302,7 +301,7 @@ impl Headers {
header_vec.push((name.to_owned(), value.as_bytes().to_vec()));
}
} else if let Some(value) = get_value_from_header_list(name, &borrowed_header_list) {
- header_vec.push((name.to_owned(), value.as_bytes().to_vec()));
+ header_vec.push((name.to_owned(), value));
}
}