From c1e1695f66d4778b374926d443826936c18a58f0 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 10:08:16 +0100 Subject: [PATCH 1/2] Pass the URL to Response::new(). --- components/net/fetch/methods.rs | 18 +++++------------- components/net_traits/response.rs | 4 ++-- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index eba6481f236..72d7e5c1e2a 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -409,9 +409,7 @@ fn basic_fetch(request: Rc, match url.scheme() { "about" if url.path() == "blank" => { - let mut response = Response::new(); - // https://github.com/whatwg/fetch/issues/312 - response.url = Some(url); + let mut response = Response::new(url); response.headers.set(ContentType(mime!(Text / Html; Charset = Utf8))); *response.body.lock().unwrap() = ResponseBody::Done(vec![]); response @@ -425,9 +423,7 @@ fn basic_fetch(request: Rc, if *request.method.borrow() == Method::Get { match decode(&url) { Ok((mime, bytes)) => { - let mut response = Response::new(); - // https://github.com/whatwg/fetch/issues/312 - response.url = Some(url.clone()); + let mut response = Response::new(url); *response.body.lock().unwrap() = ResponseBody::Done(bytes); response.headers.set(ContentType(mime)); response @@ -449,9 +445,7 @@ fn basic_fetch(request: Rc, let _ = file.read_to_end(&mut bytes); let mime = guess_mime_type(file_path); - let mut response = Response::new(); - // https://github.com/whatwg/fetch/issues/312 - response.url = Some(url.clone()); + let mut response = Response::new(url); *response.body.lock().unwrap() = ResponseBody::Done(bytes); response.headers.set(ContentType(mime)); response @@ -475,8 +469,7 @@ fn basic_fetch(request: Rc, match load_blob_sync(url.clone(), context.filemanager.clone()) { Ok((headers, bytes)) => { - let mut response = Response::new(); - response.url = Some(url.clone()); + let mut response = Response::new(url); response.headers = headers; *response.body.lock().unwrap() = ResponseBody::Done(bytes); response @@ -1028,8 +1021,7 @@ fn http_network_fetch(request: Rc, } }; - let mut response = Response::new(); - response.url = Some(url.clone()); + let mut response = Response::new(url.clone()); response.status = Some(res.response.status); response.raw_status = Some((res.response.status_raw().0, res.response.status_raw().1.as_bytes().to_vec())); diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs index 92eee0e4669..e9509779f61 100644 --- a/components/net_traits/response.rs +++ b/components/net_traits/response.rs @@ -100,11 +100,11 @@ pub struct Response { } impl Response { - pub fn new() -> Response { + pub fn new(url: Url) -> Response { Response { response_type: ResponseType::Default, termination_reason: None, - url: None, + url: Some(url), url_list: RefCell::new(Vec::new()), status: Some(StatusCode::Ok), raw_status: Some((200, b"OK".to_vec())), From 15b55c32318ec7225f58d56a9eda641c877fe1e4 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 7 Nov 2016 10:17:29 +0100 Subject: [PATCH 2/2] Make Response::url private. --- components/net/fetch/methods.rs | 2 +- components/net_traits/response.rs | 6 +++++- tests/unit/net/fetch.rs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 72d7e5c1e2a..84d4956b92c 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -687,7 +687,7 @@ fn http_redirect_fetch(request: Rc, Some(&Location(ref location)) => location.clone(), _ => return Response::network_error(NetworkError::Internal("Location header parsing failure".into())) }; - let response_url = response.actual_response().url.as_ref().unwrap(); + let response_url = response.actual_response().url().unwrap(); let location_url = response_url.join(&*location); let location_url = match location_url { Ok(url) => url, diff --git a/components/net_traits/response.rs b/components/net_traits/response.rs index e9509779f61..62d1b5bfcd0 100644 --- a/components/net_traits/response.rs +++ b/components/net_traits/response.rs @@ -79,7 +79,7 @@ pub enum ResponseMsg { pub struct Response { pub response_type: ResponseType, pub termination_reason: Option, - pub url: Option, + url: Option, pub url_list: RefCell>, /// `None` can be considered a StatusCode of `0`. #[ignore_heap_size_of = "Defined in hyper"] @@ -136,6 +136,10 @@ impl Response { } } + pub fn url(&self) -> Option<&Url> { + self.url.as_ref() + } + pub fn is_network_error(&self) -> bool { match self.response_type { ResponseType::Error(..) => true, diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 6bef297cbbb..45dffcaa3a0 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -383,8 +383,8 @@ fn test_fetch_response_is_opaque_filtered() { assert!(!fetch_response.is_network_error()); assert_eq!(fetch_response.response_type, ResponseType::Opaque); + assert!(fetch_response.url().is_none()); assert!(fetch_response.url_list.into_inner().len() == 0); - assert!(fetch_response.url.is_none()); // this also asserts that status message is "the empty byte sequence" assert!(fetch_response.status.is_none()); assert_eq!(fetch_response.headers, Headers::new());