diff --git a/components/script/dom/bindings/mozmap.rs b/components/script/dom/bindings/mozmap.rs index 557ba0662a09..d44114cd0578 100644 --- a/components/script/dom/bindings/mozmap.rs +++ b/components/script/dom/bindings/mozmap.rs @@ -23,6 +23,7 @@ use std::collections::HashMap; use std::ops::Deref; /// The `MozMap` (open-ended dictionary) type. +#[derive(Clone)] pub struct MozMap { map: HashMap, } diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs index b977110955cd..4b8321216548 100644 --- a/components/script/dom/headers.rs +++ b/components/script/dom/headers.rs @@ -3,10 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::cell::DOMRefCell; -use dom::bindings::codegen::Bindings::HeadersBinding; -use dom::bindings::codegen::Bindings::HeadersBinding::HeadersMethods; -use dom::bindings::codegen::Bindings::HeadersBinding::HeadersWrap; -use dom::bindings::codegen::UnionTypes::HeadersOrByteStringSequenceSequence; +use dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods, HeadersWrap}; use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::global::GlobalRef; use dom::bindings::iterable::Iterable; @@ -51,7 +48,7 @@ impl Headers { } // https://fetch.spec.whatwg.org/#dom-headers - pub fn Constructor(global: GlobalRef, init: Option) + pub fn Constructor(global: GlobalRef, init: Option) -> Fallible> { let dom_headers_new = Headers::new(global); try!(dom_headers_new.fill(init)); @@ -169,10 +166,10 @@ impl HeadersMethods for Headers { impl Headers { // https://fetch.spec.whatwg.org/#concept-headers-fill - pub fn fill(&self, filler: Option) -> ErrorResult { + pub fn fill(&self, filler: Option) -> ErrorResult { match filler { // Step 1 - Some(HeadersOrByteStringSequenceSequence::Headers(h)) => { + Some(HeadersInit::Headers(h)) => { for header in h.header_list.borrow().iter() { try!(self.Append( ByteString::new(Vec::from(header.name())), @@ -182,7 +179,7 @@ impl Headers { Ok(()) }, // Step 2 - Some(HeadersOrByteStringSequenceSequence::ByteStringSequenceSequence(v)) => { + Some(HeadersInit::ByteStringSequenceSequence(v)) => { for mut seq in v { if seq.len() == 2 { let val = seq.pop().unwrap(); @@ -196,7 +193,14 @@ impl Headers { } Ok(()) }, - // Step 3 TODO constructor for when init is an open-ended dictionary + Some(HeadersInit::ByteStringMozMap(m)) => { + for (key, value) in m.iter() { + let key_vec = key.as_ref().to_string().into(); + let headers_key = ByteString::new(key_vec); + try!(self.Append(headers_key, value.clone())); + } + Ok(()) + }, None => Ok(()), } } diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index e8eb62c3f051..149c61c96ee7 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::cell::DOMRefCell; +use dom::bindings::codegen::Bindings::HeadersBinding::HeadersInit; use dom::bindings::codegen::Bindings::RequestBinding; use dom::bindings::codegen::Bindings::RequestBinding::ReferrerPolicy; use dom::bindings::codegen::Bindings::RequestBinding::RequestCache; @@ -14,7 +15,6 @@ use dom::bindings::codegen::Bindings::RequestBinding::RequestMethods; use dom::bindings::codegen::Bindings::RequestBinding::RequestMode; use dom::bindings::codegen::Bindings::RequestBinding::RequestRedirect; use dom::bindings::codegen::Bindings::RequestBinding::RequestType; -use dom::bindings::codegen::UnionTypes::HeadersOrByteStringSequenceSequence; use dom::bindings::error::{Error, Fallible}; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, MutNullableHeap, Root}; @@ -312,7 +312,7 @@ impl Request { // Step 28 if let Some(possible_header) = init.headers.as_ref() { - if let &HeadersOrByteStringSequenceSequence::Headers(ref init_headers) = possible_header { + if let &HeadersInit::Headers(ref init_headers) = possible_header { headers_copy = init_headers.clone(); } } @@ -337,7 +337,7 @@ impl Request { } // Step 31 - try!(r.Headers().fill(Some(HeadersOrByteStringSequenceSequence::Headers(headers_copy)))); + try!(r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))); // Step 32 let input_body = if let RequestInfo::Request(ref input_request) = input { @@ -796,13 +796,15 @@ impl Into for NetTraitsRequestRedirect { } } -impl Clone for HeadersOrByteStringSequenceSequence { - fn clone(&self) -> HeadersOrByteStringSequenceSequence { +impl Clone for HeadersInit { + fn clone(&self) -> HeadersInit { match self { - &HeadersOrByteStringSequenceSequence::Headers(ref h) => - HeadersOrByteStringSequenceSequence::Headers(h.clone()), - &HeadersOrByteStringSequenceSequence::ByteStringSequenceSequence(ref b) => - HeadersOrByteStringSequenceSequence::ByteStringSequenceSequence(b.clone()), + &HeadersInit::Headers(ref h) => + HeadersInit::Headers(h.clone()), + &HeadersInit::ByteStringSequenceSequence(ref b) => + HeadersInit::ByteStringSequenceSequence(b.clone()), + &HeadersInit::ByteStringMozMap(ref m) => + HeadersInit::ByteStringMozMap(m.clone()), } } } diff --git a/components/script/dom/webidls/Headers.webidl b/components/script/dom/webidls/Headers.webidl index ee3d4b2fe941..5ae08ad2bd7e 100644 --- a/components/script/dom/webidls/Headers.webidl +++ b/components/script/dom/webidls/Headers.webidl @@ -4,8 +4,7 @@ // https://fetch.spec.whatwg.org/#headers-class -// TODO support OpenEndedDictionary -typedef (Headers or sequence>) HeadersInit; +typedef (Headers or sequence> or MozMap) HeadersInit; [Constructor(optional HeadersInit init), Exposed=(Window,Worker)] diff --git a/tests/wpt/metadata/fetch/api/headers/headers-basic.html.ini b/tests/wpt/metadata/fetch/api/headers/headers-basic.html.ini deleted file mode 100644 index 69a663ec45f0..000000000000 --- a/tests/wpt/metadata/fetch/api/headers/headers-basic.html.ini +++ /dev/null @@ -1,35 +0,0 @@ -[headers-basic.html] - type: testharness - [Create headers from empty object] - expected: FAIL - - [Create headers with OpenEndedDictionary] - expected: FAIL - - [Create headers with existing headers] - expected: FAIL - - [Check has method] - expected: FAIL - - [Check delete method] - expected: FAIL - - [Check get method] - expected: FAIL - - [Check keys method] - expected: FAIL - - [Check values method] - expected: FAIL - - [Check entries method] - expected: FAIL - - [Check Symbol.iterator method] - expected: FAIL - - [Check forEach method] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/headers/headers-casing.html.ini b/tests/wpt/metadata/fetch/api/headers/headers-casing.html.ini deleted file mode 100644 index 12f926380bfd..000000000000 --- a/tests/wpt/metadata/fetch/api/headers/headers-casing.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[headers-casing.html] - type: testharness - [Create headers, names use characters with different case] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/headers/headers-normalize.html.ini b/tests/wpt/metadata/fetch/api/headers/headers-normalize.html.ini deleted file mode 100644 index 4c333d521940..000000000000 --- a/tests/wpt/metadata/fetch/api/headers/headers-normalize.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[headers-normalize.html] - type: testharness - [Create headers with not normalized values] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/api/request/request-clone.sub.html.ini b/tests/wpt/metadata/fetch/api/request/request-clone.sub.html.ini index 82cde19ce374..eb2b589fa57a 100644 --- a/tests/wpt/metadata/fetch/api/request/request-clone.sub.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-clone.sub.html.ini @@ -1,3 +1,8 @@ [request-clone.sub.html] type: testharness - expected: ERROR + [Check cloning a request] + expected: FAIL + + [Check cloning a request copies the headers] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-init-002.html.ini b/tests/wpt/metadata/fetch/api/request/request-init-002.html.ini index d07ae0c1f494..903c3bbdba31 100644 --- a/tests/wpt/metadata/fetch/api/request/request-init-002.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-init-002.html.ini @@ -1,8 +1,5 @@ [request-init-002.html] type: testharness - [Initialize Request with headers values] - expected: FAIL - [Initialize Request's body with undefined] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/request/request-init-003.sub.html.ini b/tests/wpt/metadata/fetch/api/request/request-init-003.sub.html.ini index 83baaaab7f12..e5e3d9856c64 100644 --- a/tests/wpt/metadata/fetch/api/request/request-init-003.sub.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-init-003.sub.html.ini @@ -1,3 +1,14 @@ [request-init-003.sub.html] type: testharness - expected: ERROR + [Check request values when initialized from Request] + expected: FAIL + + [Check request values when initialized from Request and init values] + expected: FAIL + + [Check request values when initialized from url string] + expected: FAIL + + [Check request values when initialized from url and init values] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/request/request-structure.html.ini b/tests/wpt/metadata/fetch/api/request/request-structure.html.ini index 9d40c13ac0c1..31e9c7b713da 100644 --- a/tests/wpt/metadata/fetch/api/request/request-structure.html.ini +++ b/tests/wpt/metadata/fetch/api/request/request-structure.html.ini @@ -15,9 +15,6 @@ [Request has text method] expected: FAIL - [Check headers attribute] - expected: FAIL - [Check referrer attribute] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/response/response-clone.html.ini b/tests/wpt/metadata/fetch/api/response/response-clone.html.ini index a570446c57cd..0f02dd1b75f6 100644 --- a/tests/wpt/metadata/fetch/api/response/response-clone.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-clone.html.ini @@ -1,3 +1,20 @@ [response-clone.html] type: testharness - expected: ERROR + [Check Response's clone has the expected attribute values] + expected: FAIL + + [Check orginal response's body after cloning] + expected: FAIL + + [Check cloned response's body] + expected: FAIL + + [Cannot clone a disturbed response] + expected: FAIL + + [Cloned responses should provide the same data] + expected: FAIL + + [Cancelling stream should not affect cloned one] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini b/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini index 099bb515005f..6fbd45bbb998 100644 --- a/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini +++ b/tests/wpt/metadata/fetch/api/response/response-init-002.html.ini @@ -1,8 +1,5 @@ [response-init-002.html] type: testharness - [Initialize Response with headers values] - expected: FAIL - [Initialize Response's body with application/octet-binary] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index c5979e47e4d5..85354ada30b6 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -10664,3 +10664,4 @@ [Navigator interface: window.navigator must inherit property "hardwareConcurrency" with the proper type (22)] expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/context/methods.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/context/methods.html.ini index ab02f21b3bdf..6cec6740f90a 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/context/methods.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/context/methods.html.ini @@ -301,3 +301,4 @@ [WebGL test #49: Property either does not exist or is not a function: validateProgram] expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-enable-enum-test.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-enable-enum-test.html.ini index 0bcdb50b83fd..977499e3cfe9 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-enable-enum-test.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-enable-enum-test.html.ini @@ -8,3 +8,4 @@ [WebGL test #85: getError expected: NO_ERROR. Was INVALID_ENUM : there should be no errors] expected: FAIL +