Test fixes; update for changes in spec

This commit is contained in:
Manish Goregaokar 2016-06-06 18:58:50 +05:30
parent f4e3e8e38e
commit fd6f9bd411
22 changed files with 320 additions and 269 deletions

View file

@ -213,6 +213,7 @@ impl FetchTaskTarget for IpcSender<FetchResponseMsg> {
fn process_response(&mut self, response: &Response) {
let _ = self.send(FetchResponseMsg::ProcessResponse(response.metadata()));
}
fn process_response_chunk(&mut self, chunk: Vec<u8>) {
let _ = self.send(FetchResponseMsg::ProcessResponseChunk(chunk));
}
@ -220,7 +221,8 @@ impl FetchTaskTarget for IpcSender<FetchResponseMsg> {
fn process_response_eof(&mut self, response: &Response) {
if response.is_network_error() {
// todo: finer grained errors
let _ = self.send(FetchResponseMsg::ProcessResponseEOF(Err(NetworkError::Internal("Network error".into()))));
let _ = self.send(FetchResponseMsg::ProcessResponseEOF(
Err(NetworkError::Internal("Network error".into()))));
} else {
let _ = self.send(FetchResponseMsg::ProcessResponseEOF(Ok(())));
}

View file

@ -4,7 +4,9 @@
use hyper::header::Headers;
use hyper::method::Method;
use msg::constellation_msg::ReferrerPolicy;
use std::cell::{Cell, RefCell};
use std::mem::swap;
use url::{Origin as UrlOrigin, Url};
/// An [initiator](https://fetch.spec.whatwg.org/#concept-request-initiator)
@ -125,6 +127,9 @@ pub struct RequestInit {
// this should actually be set by fetch, but fetch
// doesn't have info about the client right now
pub origin: Url,
// XXXManishearth these should be part of the client object
pub referer_url: Option<Url>,
pub referrer_policy: Option<ReferrerPolicy>,
}
/// A [Request](https://fetch.spec.whatwg.org/#requests) as defined by the Fetch spec
@ -151,8 +156,9 @@ pub struct Request {
pub origin: RefCell<Origin>,
pub omit_origin_header: Cell<bool>,
pub same_origin_data: Cell<bool>,
/// https://fetch.spec.whatwg.org/#concept-request-referrer
pub referer: RefCell<Referer>,
// TODO: referrer policy
pub referrer_policy: Cell<Option<ReferrerPolicy>>,
pub synchronous: bool,
pub mode: RequestMode,
pub use_cors_preflight: bool,
@ -191,6 +197,7 @@ impl Request {
omit_origin_header: Cell::new(false),
same_origin_data: Cell::new(false),
referer: RefCell::new(Referer::Client),
referrer_policy: Cell::new(None),
synchronous: false,
mode: RequestMode::NoCORS,
use_cors_preflight: false,
@ -220,6 +227,12 @@ impl Request {
req.credentials_mode = init.credentials_mode;
req.use_url_credentials = init.use_url_credentials;
*req.origin.borrow_mut() = Origin::Origin(init.origin.origin());
*req.referer.borrow_mut() = if let Some(url) = init.referer_url {
Referer::RefererUrl(url)
} else {
Referer::NoReferer
};
req.referrer_policy.set(init.referrer_policy);
req
}
@ -246,6 +259,7 @@ impl Request {
omit_origin_header: Cell::new(false),
same_origin_data: Cell::new(false),
referer: RefCell::new(Referer::Client),
referrer_policy: Cell::new(None),
synchronous: false,
// Step 1-2
mode: match cors_attribute_state {
@ -296,3 +310,27 @@ impl Request {
}
}
}
impl Referer {
pub fn to_url(&self) -> Option<&Url> {
match *self {
Referer::NoReferer | Referer::Client => None,
Referer::RefererUrl(ref url) => Some(url)
}
}
pub fn from_url(url: Option<Url>) -> Self {
if let Some(url) = url {
Referer::RefererUrl(url)
} else {
Referer::NoReferer
}
}
pub fn take(&mut self) -> Option<Url> {
let mut new = Referer::Client;
swap(self, &mut new);
match new {
Referer::NoReferer | Referer::Client => None,
Referer::RefererUrl(url) => Some(url)
}
}
}

View file

@ -7,11 +7,11 @@
use hyper::header::{AccessControlExposeHeaders, ContentType, Headers};
use hyper::http::RawStatus;
use hyper::status::StatusCode;
use {Metadata, NetworkError};
use std::ascii::AsciiExt;
use std::cell::{Cell, RefCell};
use std::sync::{Arc, Mutex};
use url::Url;
use {Metadata, NetworkError};
/// [Response type](https://fetch.spec.whatwg.org/#concept-response-type)
#[derive(Clone, PartialEq, Copy, Debug, Deserialize, Serialize)]