From bcd813d961c829afca90b246fcd73a87c48c1f5f Mon Sep 17 00:00:00 2001 From: Stjepan Glavina Date: Thu, 24 Mar 2016 11:17:12 +0100 Subject: [PATCH] Fix fetching about:blank When fetching about:blank, response body should be the empty byte sequence. Spec: https://fetch.spec.whatwg.org/#concept-basic-fetch Before this change, response body would be set to `ResponseBody::Empty`, and then fetching would result in an infinite loop at step 19 in fn `main_fetch` (methods.rs). --- components/net/fetch/methods.rs | 1 + tests/unit/net/fetch.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 481da031056..976b1e0b5ee 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -294,6 +294,7 @@ fn basic_fetch(request: Rc) -> Response { response.headers.set(ContentType(Mime( TopLevel::Text, SubLevel::Html, vec![(Attr::Charset, Value::Utf8)]))); + *response.body.lock().unwrap() = ResponseBody::Done(vec![]); response }, _ => Response::network_error() diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 010d49e5732..1a6168f77d6 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -94,6 +94,20 @@ fn test_fetch_response_body_matches_const_message() { }; } +#[test] +fn test_fetch_aboutblank() { + + let url = Url::parse("about:blank").unwrap(); + let origin = Origin::Origin(url.origin()); + let mut request = Request::new(url, Some(origin), false); + request.referer = Referer::NoReferer; + let wrapped_request = Rc::new(request); + + let fetch_response = fetch(wrapped_request); + assert!(!fetch_response.is_network_error()); + assert!(*fetch_response.body.lock().unwrap() == ResponseBody::Done(vec![])); +} + #[test] fn test_fetch_response_is_basic_filtered() {