aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/fetch/methods.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-04-02 12:50:02 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-04-03 12:47:28 +0200
commit7b16021a896d972273f206d502b56fd70139e43b (patch)
tree309fed5b48f4c4b04a2e546493baaf05d9db55df /components/net/fetch/methods.rs
parent28f1f669bc4c62b1a1a43212c0ad9cdb3d2bf9f2 (diff)
downloadservo-7b16021a896d972273f206d502b56fd70139e43b.tar.gz
servo-7b16021a896d972273f206d502b56fd70139e43b.zip
Make Response::url_list be a bare Vec<ServoUrl>
Diffstat (limited to 'components/net/fetch/methods.rs')
-rw-r--r--components/net/fetch/methods.rs24
1 files changed, 14 insertions, 10 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs
index 680e229e5c0..55d1c0ecd48 100644
--- a/components/net/fetch/methods.rs
+++ b/components/net/fetch/methods.rs
@@ -252,7 +252,7 @@ pub fn main_fetch(request: &mut Request,
// Step 14.
// We don't need to check whether response is a network error,
// given its type would not be `Default` in this case.
- let response = if response.response_type == ResponseType::Default {
+ let mut response = if response.response_type == ResponseType::Default {
let response_type = match request.response_tainting {
ResponseTainting::Basic => ResponseType::Basic,
ResponseTainting::CorsTainting => ResponseType::Cors,
@@ -264,18 +264,22 @@ pub fn main_fetch(request: &mut Request,
};
let internal_error = {
+ // Tests for steps 17 and 18, before step 15 for borrowing concerns.
+ let response_is_network_error = response.is_network_error();
+ let should_replace_with_nosniff_error =
+ !response_is_network_error && should_be_blocked_due_to_nosniff(request.type_, &response.headers);
+
// Step 15.
- let network_error_response;
- let internal_response = if let Some(error) = response.get_network_error() {
- network_error_response = Response::network_error(error.clone());
- &network_error_response
+ let mut network_error_response = response.get_network_error().cloned().map(Response::network_error);
+ let internal_response = if let Some(error_response) = network_error_response.as_mut() {
+ error_response
} else {
- response.actual_response()
+ response.actual_response_mut()
};
// Step 16.
- if internal_response.url_list.borrow().is_empty() {
- *internal_response.url_list.borrow_mut() = request.url_list.clone();
+ if internal_response.url_list.is_empty() {
+ internal_response.url_list = request.url_list.clone();
}
// Step 17.
@@ -284,7 +288,7 @@ pub fn main_fetch(request: &mut Request,
// TODO: handle blocking due to MIME type.
let blocked_error_response;
let internal_response =
- if !response.is_network_error() && should_be_blocked_due_to_nosniff(request.type_, &response.headers) {
+ if should_replace_with_nosniff_error {
// Defer rebinding result
blocked_error_response = Response::network_error(NetworkError::Internal("Blocked by nosniff".into()));
&blocked_error_response
@@ -295,7 +299,7 @@ pub fn main_fetch(request: &mut Request,
// Step 18.
// We check `internal_response` since we did not mutate `response`
// in the previous step.
- let not_network_error = !response.is_network_error() && !internal_response.is_network_error();
+ let not_network_error = !response_is_network_error && !internal_response.is_network_error();
if not_network_error && (is_null_body_status(&internal_response.status) ||
match request.method {
Method::Head | Method::Connect => true,