aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/fetch/response.rs
diff options
context:
space:
mode:
authorNikki <nikkicubed@gmail.com>2016-02-23 12:38:51 -0700
committerNikki <nikkicubed@gmail.com>2016-03-01 13:02:38 -0700
commit3f79667050cb1afe39d912900a0f365ddabd20e2 (patch)
treee0ff5225bd808a449383cce4a8ee59016a2031db /components/net/fetch/response.rs
parent872ee1953468113a6edda27badf11c2af7d9868a (diff)
downloadservo-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.rs79
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
- }
}
+