mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Auto merge of #12998 - jeenalee:iterable-headers, r=jdm
Implement iterable for headers <!-- Please describe your changes on the following line: --> These patches make Headers iterable based on #12819. The expected wpt results are updated as well. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [x] There are tests for these changes OR - [ ] These changes do not require tests because web platform tests for Headers already exist. Expected test results are updated with this PR. <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12998) <!-- Reviewable:end -->
This commit is contained in:
commit
5b46a59194
4 changed files with 39 additions and 18 deletions
|
@ -5,9 +5,11 @@
|
|||
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::error::{Error, ErrorResult, Fallible};
|
||||
use dom::bindings::global::GlobalRef;
|
||||
use dom::bindings::iterable::Iterable;
|
||||
use dom::bindings::js::Root;
|
||||
use dom::bindings::reflector::{Reflector, reflect_dom_object};
|
||||
use dom::bindings::str::{ByteString, is_token};
|
||||
|
@ -45,7 +47,7 @@ impl Headers {
|
|||
}
|
||||
|
||||
pub fn new(global: GlobalRef) -> Root<Headers> {
|
||||
reflect_dom_object(box Headers::new_inherited(), global, HeadersBinding::Wrap)
|
||||
reflect_dom_object(box Headers::new_inherited(), global, HeadersWrap)
|
||||
}
|
||||
|
||||
// https://fetch.spec.whatwg.org/#dom-headers
|
||||
|
@ -223,6 +225,41 @@ impl Headers {
|
|||
pub fn extract_mime_type(&self) -> Vec<u8> {
|
||||
self.header_list.borrow().get_raw("content-type").map_or(vec![], |v| v[0].clone())
|
||||
}
|
||||
|
||||
pub fn sort_header_list(&self) -> Vec<(String, String)> {
|
||||
let borrowed_header_list = self.header_list.borrow();
|
||||
let headers_iter = borrowed_header_list.iter();
|
||||
let mut header_vec = vec![];
|
||||
for header in headers_iter {
|
||||
let name = header.name().to_string();
|
||||
let value = header.value_string();
|
||||
let name_value = (name, value);
|
||||
header_vec.push(name_value);
|
||||
}
|
||||
header_vec.sort();
|
||||
header_vec
|
||||
}
|
||||
}
|
||||
|
||||
impl Iterable for Headers {
|
||||
type Key = ByteString;
|
||||
type Value = ByteString;
|
||||
|
||||
fn get_iterable_length(&self) -> u32 {
|
||||
self.header_list.borrow().iter().count() as u32
|
||||
}
|
||||
|
||||
fn get_value_at_index(&self, n: u32) -> ByteString {
|
||||
let sorted_header_vec = self.sort_header_list();
|
||||
let value = sorted_header_vec[n as usize].1.clone();
|
||||
ByteString::new(value.into_bytes().to_vec())
|
||||
}
|
||||
|
||||
fn get_key_at_index(&self, n: u32) -> ByteString {
|
||||
let sorted_header_vec = self.sort_header_list();
|
||||
let key = sorted_header_vec[n as usize].0.clone();
|
||||
ByteString::new(key.into_bytes().to_vec())
|
||||
}
|
||||
}
|
||||
|
||||
fn is_cors_safelisted_request_content_type(value: &[u8]) -> bool {
|
||||
|
|
|
@ -20,5 +20,5 @@ interface Headers {
|
|||
boolean has(ByteString name);
|
||||
[Throws]
|
||||
void set(ByteString name, ByteString value);
|
||||
// iterable<ByteString, ByteString>; // TODO see issue #12628
|
||||
iterable<ByteString, ByteString>;
|
||||
};
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[headers-errors.html]
|
||||
type: testharness
|
||||
[Headers forEach loop should stop if callback is throwing exception]
|
||||
expected: FAIL
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
[headers-structure.html]
|
||||
type: testharness
|
||||
[Headers has entries method]
|
||||
expected: FAIL
|
||||
|
||||
[Headers has keys method]
|
||||
expected: FAIL
|
||||
|
||||
[Headers has values method]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue