Use a match rather than unwrap() in main_fetch.

This commit is contained in:
Ms2ger 2016-03-10 14:07:41 +01:00
parent 95883dcbcf
commit 91d63d5fcf

View file

@ -138,51 +138,51 @@ fn main_fetch(request: Rc<Request>, cors_flag: bool, recursive_flag: bool) -> Re
// this step is obsoleted by fetch_async // this step is obsoleted by fetch_async
// Step 9 // Step 9
let response = if response.is_none() { let response = match response {
Some(response) => response,
None => {
let current_url = request.current_url();
let same_origin = if let Origin::Origin(ref origin) = *request.origin.borrow() {
*origin == current_url.origin()
} else {
false
};
let current_url = request.current_url(); if (same_origin && !cors_flag ) ||
let same_origin = if let Origin::Origin(ref origin) = *request.origin.borrow() { (current_url.scheme == "data" && request.same_origin_data.get()) ||
*origin == current_url.origin() current_url.scheme == "about" ||
} else { request.mode == RequestMode::Navigate {
false
};
if (same_origin && !cors_flag ) || basic_fetch(request.clone())
(current_url.scheme == "data" && request.same_origin_data.get()) ||
current_url.scheme == "about" ||
request.mode == RequestMode::Navigate {
basic_fetch(request.clone()) } else if request.mode == RequestMode::SameOrigin {
Response::network_error()
} else if request.mode == RequestMode::SameOrigin { } else if request.mode == RequestMode::NoCORS {
Response::network_error() request.response_tainting.set(ResponseTainting::Opaque);
basic_fetch(request.clone())
} else if request.mode == RequestMode::NoCORS { } else if current_url.scheme != "http" && current_url.scheme != "https" {
request.response_tainting.set(ResponseTainting::Opaque); Response::network_error()
basic_fetch(request.clone())
} else if current_url.scheme != "http" && current_url.scheme != "https" { } else if request.use_cors_preflight ||
Response::network_error() (request.unsafe_request &&
(!is_simple_method(&request.method.borrow()) ||
request.headers.borrow().iter().any(|h| !is_simple_header(&h)))) {
} else if request.use_cors_preflight || request.response_tainting.set(ResponseTainting::CORSTainting);
(request.unsafe_request && request.redirect_mode.set(RedirectMode::Error);
(!is_simple_method(&request.method.borrow()) || let response = http_fetch(request.clone(), BasicCORSCache::new(), true, true, false);
request.headers.borrow().iter().any(|h| !is_simple_header(&h)))) { if response.is_network_error() {
// TODO clear cache entries using request
}
response
request.response_tainting.set(ResponseTainting::CORSTainting); } else {
request.redirect_mode.set(RedirectMode::Error); request.response_tainting.set(ResponseTainting::CORSTainting);
let response = http_fetch(request.clone(), BasicCORSCache::new(), true, true, false); http_fetch(request.clone(), BasicCORSCache::new(), true, false, false)
if response.is_network_error() {
// TODO clear cache entries using request
} }
response
} else {
request.response_tainting.set(ResponseTainting::CORSTainting);
http_fetch(request.clone(), BasicCORSCache::new(), true, false, false)
} }
} else {
response.unwrap()
}; };
// Step 10 // Step 10