diff options
author | Bastien Orivel <eijebong@bananium.fr> | 2020-05-06 02:20:41 +0200 |
---|---|---|
committer | Bastien Orivel <eijebong@bananium.fr> | 2020-05-30 12:46:51 +0200 |
commit | c4273d86f2a9c3fce378fcd810971e8cf8cae984 (patch) | |
tree | 8a583937d10b308e73b4a624a1bc22c379655765 /components/script/dom/request.rs | |
parent | 1a6193703134512b8d09b54a85bf58b3df82a372 (diff) | |
download | servo-c4273d86f2a9c3fce378fcd810971e8cf8cae984.tar.gz servo-c4273d86f2a9c3fce378fcd810971e8cf8cae984.zip |
Fix the webidl for Headers
Make the HeadersInit type match the spec.
Fixes #26441
Diffstat (limited to 'components/script/dom/request.rs')
-rw-r--r-- | components/script/dom/request.rs | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 7ae8c07663a..387b7174791 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -311,27 +311,17 @@ impl Request { r.headers.or_init(|| Headers::for_request(&r.global())); // Step 32 - but spec says this should only be when non-empty init? - // Step 32.1 - let mut headers_copy = r.Headers(); - - // Step 32.2 - if let Some(possible_header) = init.headers.as_ref() { - match possible_header { - &HeadersInit::Headers(ref init_headers) => { - headers_copy = DomRoot::from_ref(&*init_headers); - }, - &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { - headers_copy.fill(Some(HeadersInit::ByteStringSequenceSequence( - init_sequence.clone(), - )))?; + let headers_copy = init + .headers + .as_ref() + .map(|possible_header| match possible_header { + HeadersInit::ByteStringSequenceSequence(init_sequence) => { + HeadersInit::ByteStringSequenceSequence(init_sequence.clone()) }, - &HeadersInit::ByteStringByteStringRecord(ref init_map) => { - headers_copy.fill(Some(HeadersInit::ByteStringByteStringRecord( - init_map.clone(), - )))?; + HeadersInit::ByteStringByteStringRecord(init_map) => { + HeadersInit::ByteStringByteStringRecord(init_map.clone()) }, - } - } + }); // Step 32.3 // We cannot empty `r.Headers().header_list` because @@ -357,21 +347,17 @@ impl Request { } // Step 32.5 - match init.headers { + match headers_copy { None => { // This is equivalent to the specification's concept of // "associated headers list". If an init headers is not given, // but an input with headers is given, set request's // headers as the input's Headers. if let RequestInfo::Request(ref input_request) = input { - r.Headers() - .fill(Some(HeadersInit::Headers(input_request.Headers())))?; + r.Headers().copy_from_headers(input_request.Headers())?; } }, - Some(HeadersInit::Headers(_)) => { - r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))? - }, - _ => {}, + Some(headers_copy) => r.Headers().fill(Some(headers_copy))?, } // Step 32.5-6 depending on how we got here @@ -493,9 +479,7 @@ impl Request { *r_clone.request.borrow_mut() = req.clone(); r_clone.body_used.set(body_used); *r_clone.mime_type.borrow_mut() = mime_type; - r_clone - .Headers() - .fill(Some(HeadersInit::Headers(r.Headers())))?; + r_clone.Headers().copy_from_headers(r.Headers())?; r_clone.Headers().set_guard(headers_guard); Ok(r_clone) } @@ -895,7 +879,6 @@ impl Into<RequestRedirect> for NetTraitsRequestRedirect { impl Clone for HeadersInit { fn clone(&self) -> HeadersInit { match self { - &HeadersInit::Headers(ref h) => HeadersInit::Headers(h.clone()), &HeadersInit::ByteStringSequenceSequence(ref b) => { HeadersInit::ByteStringSequenceSequence(b.clone()) }, |