rewrapped Rc<RefCell<Response>> into Rc<Response>

This commit is contained in:
Nikki 2016-01-06 17:03:45 -07:00
parent ba8f007b88
commit c5982872c8
3 changed files with 20 additions and 24 deletions

View file

@ -296,39 +296,37 @@ fn http_fetch(request: Rc<Request>,
authentication_fetch_flag: bool) -> Response {
// Step 1
let mut response: Option<Rc<RefCell<Response>>> = None;
let mut response: Option<Rc<Response>> = None;
// Step 2
let mut actual_response: Option<Rc<RefCell<Response>>> = None;
let mut actual_response: Option<Rc<Response>> = None;
// Step 3
if !request.skip_service_worker.get() && !request.is_service_worker_global_scope {
// TODO: Substep 1 (handle fetch unimplemented)
if let Some(ref res) = response {
let resp = res.borrow();
// Substep 2
actual_response = match resp.internal_response {
actual_response = match res.internal_response {
Some(ref internal_res) => Some(internal_res.clone()),
None => Some(res.clone())
};
// Substep 3
if (resp.response_type == ResponseType::Opaque &&
if (res.response_type == ResponseType::Opaque &&
request.mode != RequestMode::NoCORS) ||
(resp.response_type == ResponseType::OpaqueRedirect &&
(res.response_type == ResponseType::OpaqueRedirect &&
request.redirect_mode != RedirectMode::Manual) ||
resp.response_type == ResponseType::Error {
res.response_type == ResponseType::Error {
return Response::network_error();
}
}
// Substep 4
if let Some(ref res) = actual_response {
let mut resp = res.borrow_mut();
if resp.url_list.is_empty() {
resp.url_list = request.url_list.borrow().clone();
if res.url_list.borrow().is_empty() {
*res.url_list.borrow_mut() = request.url_list.borrow().clone();
}
}
@ -370,7 +368,7 @@ fn http_fetch(request: Rc<Request>,
if preflight_result.response_type == ResponseType::Error {
return Response::network_error();
}
response = Some(Rc::new(RefCell::new(preflight_result)));
response = Some(Rc::new(preflight_result));
}
}
@ -394,13 +392,13 @@ fn http_fetch(request: Rc<Request>,
return Response::network_error();
}
response = Some(Rc::new(RefCell::new(fetch_result)));
response = Some(Rc::new(fetch_result));
actual_response = response.clone();
}
// Step 5
let actual_response = Rc::try_unwrap(actual_response.unwrap()).ok().unwrap().into_inner();
let response = Rc::try_unwrap(response.unwrap()).ok().unwrap();
let actual_response = Rc::try_unwrap(actual_response.unwrap()).ok().unwrap();
let mut response = Rc::try_unwrap(response.unwrap()).ok().unwrap();
match actual_response.status.unwrap() {
@ -445,7 +443,7 @@ fn http_fetch(request: Rc<Request>,
// Step 9
RedirectMode::Manual => {
*response.borrow_mut() = actual_response.to_filtered(ResponseType::Opaque);
response = actual_response.to_filtered(ResponseType::Opaque);
}
// Step 10
@ -495,7 +493,7 @@ fn http_fetch(request: Rc<Request>,
// Step 1
// FIXME: Figure out what to do with request window objects
if cors_flag {
return response.into_inner();
return response;
}
// Step 2
@ -531,8 +529,6 @@ fn http_fetch(request: Rc<Request>,
_ => { }
}
let response = response.into_inner();
// Step 6
if authentication_fetch_flag {
// TODO: Create authentication entry for this request
@ -793,7 +789,7 @@ fn http_network_fetch(request: Rc<Request>,
};
// Step 6
response.url_list = request.url_list.borrow().clone();
*response.url_list.borrow_mut() = request.url_list.borrow().clone();
// Step 7