diff options
author | Nikki <nikkicubed@gmail.com> | 2016-02-23 12:38:51 -0700 |
---|---|---|
committer | Nikki <nikkicubed@gmail.com> | 2016-03-01 13:02:38 -0700 |
commit | 3f79667050cb1afe39d912900a0f365ddabd20e2 (patch) | |
tree | e0ff5225bd808a449383cce4a8ee59016a2031db /components/net/fetch/response.rs | |
parent | 872ee1953468113a6edda27badf11c2af7d9868a (diff) | |
download | servo-3f79667050cb1afe39d912900a0f365ddabd20e2.tar.gz servo-3f79667050cb1afe39d912900a0f365ddabd20e2.zip |
implementing working demonstration of calling Fetch asynchronously
Diffstat (limited to 'components/net/fetch/response.rs')
-rw-r--r-- | components/net/fetch/response.rs | 79 |
1 files changed, 5 insertions, 74 deletions
diff --git a/components/net/fetch/response.rs b/components/net/fetch/response.rs index ddb65a8e5e1..2ae12b18c4f 100644 --- a/components/net/fetch/response.rs +++ b/components/net/fetch/response.rs @@ -2,18 +2,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use hyper::header::{AccessControlExposeHeaders, Headers}; +use hyper::header::Headers; use hyper::status::StatusCode; use net_traits::response::{CacheState, HttpsState, Response, ResponseBody, ResponseType}; use std::ascii::AsciiExt; -use std::cell::RefCell; +use std::cell::{Cell, RefCell}; use std::rc::Rc; use std::sync::mpsc::Receiver; use url::Url; pub trait ResponseMethods { fn new() -> Response; - fn to_filtered(Rc<Response>, ResponseType) -> Response; } impl ResponseMethods for Response { @@ -28,77 +27,9 @@ impl ResponseMethods for Response { body: RefCell::new(ResponseBody::Empty), cache_state: CacheState::None, https_state: HttpsState::None, - internal_response: None + internal_response: None, + return_internal: Cell::new(true) } } - - /// Convert to a filtered response, of type `filter_type`. - /// Do not use with type Error or Default - fn to_filtered(old_response: Rc<Response>, filter_type: ResponseType) -> Response { - - assert!(filter_type != ResponseType::Error); - assert!(filter_type != ResponseType::Default); - - if Response::is_network_error(&old_response) { - return Response::network_error(); - } - - let old_headers = old_response.headers.clone(); - let mut response = (*old_response).clone(); - response.internal_response = Some(old_response); - response.response_type = filter_type; - - match filter_type { - - ResponseType::Default | ResponseType::Error => unreachable!(), - - ResponseType::Basic => { - let headers = old_headers.iter().filter(|header| { - match &*header.name().to_ascii_lowercase() { - "set-cookie" | "set-cookie2" => false, - _ => true - } - }).collect(); - response.headers = headers; - }, - - ResponseType::CORS => { - - let access = old_headers.get::<AccessControlExposeHeaders>(); - let allowed_headers = access.as_ref().map(|v| &v[..]).unwrap_or(&[]); - - let headers = old_headers.iter().filter(|header| { - match &*header.name().to_ascii_lowercase() { - "cache-control" | "content-language" | "content-type" | - "expires" | "last-modified" | "pragma" => true, - "set-cookie" | "set-cookie2" => false, - header => { - let result = - allowed_headers.iter().find(|h| *header == *h.to_ascii_lowercase()); - result.is_some() - } - } - }).collect(); - response.headers = headers; - }, - - ResponseType::Opaque => { - response.url_list = RefCell::new(vec![]); - response.url = None; - response.headers = Headers::new(); - response.status = None; - response.body = RefCell::new(ResponseBody::Empty); - response.cache_state = CacheState::None; - }, - - ResponseType::OpaqueRedirect => { - response.headers = Headers::new(); - response.status = None; - response.body = RefCell::new(ResponseBody::Empty); - response.cache_state = CacheState::None; - } - } - - response - } } + |