Set DOM response members as per the spec for opaque, opaque-redirect and error responses

Signed-off-by: Bipin <peacerebel@protonmail.com>
This commit is contained in:
peacerebel 2019-10-06 01:11:31 +05:30 committed by Bipin
parent 78438113d4
commit 0f1ddc6fea
7 changed files with 38 additions and 162 deletions

View file

@ -395,6 +395,7 @@ fn serialize_without_fragment(url: &ServoUrl) -> &str {
impl Response {
pub fn set_type(&self, new_response_type: DOMResponseType) {
*self.response_type.borrow_mut() = new_response_type;
self.set_response_members_by_type(new_response_type);
}
pub fn set_headers(&self, option_hyper_headers: Option<Serde<HyperHeaders>>) {
@ -412,6 +413,33 @@ impl Response {
*self.url.borrow_mut() = Some(final_url);
}
fn set_response_members_by_type(&self, response_type: DOMResponseType) {
match response_type {
DOMResponseType::Error => {
*self.status.borrow_mut() = None;
self.set_raw_status(None);
self.set_headers(None);
*self.body.borrow_mut() = NetTraitsResponseBody::Done(vec![]);
},
DOMResponseType::Opaque => {
*self.url_list.borrow_mut() = vec![];
*self.status.borrow_mut() = None;
self.set_raw_status(None);
self.set_headers(None);
*self.body.borrow_mut() = NetTraitsResponseBody::Done(vec![]);
},
DOMResponseType::Opaqueredirect => {
*self.status.borrow_mut() = None;
self.set_raw_status(None);
self.set_headers(None);
*self.body.borrow_mut() = NetTraitsResponseBody::Done(vec![]);
},
DOMResponseType::Default => {},
DOMResponseType::Basic => {},
DOMResponseType::Cors => {},
}
}
#[allow(unrooted_must_root)]
pub fn finish(&self, body: Vec<u8>) {
*self.body.borrow_mut() = NetTraitsResponseBody::Done(body);

View file

@ -236,14 +236,16 @@ impl FetchResponseListener for FetchContext {
fill_headers_with_metadata(self.response_object.root(), m);
self.response_object.root().set_type(DOMResponseType::Cors);
},
FilteredMetadata::Opaque => self
.response_object
.root()
.set_type(DOMResponseType::Opaque),
FilteredMetadata::OpaqueRedirect => self
.response_object
.root()
.set_type(DOMResponseType::Opaqueredirect),
FilteredMetadata::Opaque => {
self.response_object
.root()
.set_type(DOMResponseType::Opaque);
},
FilteredMetadata::OpaqueRedirect => {
self.response_object
.root()
.set_type(DOMResponseType::Opaqueredirect);
},
},
},
}