diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 5f1d17bd010..64ca63d2e37 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -249,7 +249,16 @@ impl HttpResponse for WrappedHttpResponse { pub trait HttpRequestFactory { type R: HttpRequest; - fn create(&self, url: Url, method: Method) -> Result; + fn create(&self, _url: Url, _method: Method) -> Result { + panic!() + } + fn create_with_headers(&self, url: Url, method: Method, headers: Headers) -> Result { + let mut result = self.create(url, method); + if let Ok(ref mut req) = result { + *req.headers_mut() = headers; + } + result + } } pub struct NetworkHttpRequestFactory { @@ -636,8 +645,8 @@ pub fn obtain_response(request_factory: &HttpRequestFactory, // a ConnectionAborted error. this loop tries again with a new // connection. loop { - let mut req = try!(request_factory.create(connection_url.clone(), method.clone())); - *req.headers_mut() = request_headers.clone(); + let mut req = try!(request_factory.create_with_headers(connection_url.clone(), method.clone(), + request_headers.clone())); if cancel_listener.is_cancelled() { return Err(LoadError::Cancelled(connection_url.clone(), "load cancelled".to_owned()));