aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xmlhttprequest.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/xmlhttprequest.rs')
-rw-r--r--components/script/dom/xmlhttprequest.rs54
1 files changed, 11 insertions, 43 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index f757775ed44..11766cf26da 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -77,24 +77,6 @@ enum XMLHttpRequestState {
Done = 4,
}
-struct XHRProgressHandler {
- addr: TrustedXHRAddress,
- progress: XHRProgress,
-}
-
-impl XHRProgressHandler {
- fn new(addr: TrustedXHRAddress, progress: XHRProgress) -> XHRProgressHandler {
- XHRProgressHandler { addr: addr, progress: progress }
- }
-}
-
-impl Runnable for XHRProgressHandler {
- fn handler(self: Box<XHRProgressHandler>) {
- let this = *self;
- XMLHttpRequest::handle_progress(this.addr, this.progress);
- }
-}
-
#[derive(PartialEq, Clone, Copy)]
#[jstraceable]
pub struct GenerationId(u32);
@@ -122,11 +104,6 @@ impl XHRProgress {
}
}
-enum SyncOrAsync<'a> {
- Sync(JSRef<'a, XMLHttpRequest>),
- Async(TrustedXHRAddress, Box<ScriptChan+Send>)
-}
-
enum TerminateReason {
AbortedOrReopened,
TimedOut,
@@ -222,8 +199,10 @@ impl XMLHttpRequest {
let cors_request = match cors_request {
Err(_) => {
// Happens in case of cross-origin non-http URIs
- //notify_error_and_return!(Network);
- return; //XXXjdm
+ let xhr = xhr.to_temporary().root();
+ xhr.r().process_partial_response(XHRProgress::Errored(
+ xhr.r().generation_id.get(), Network));
+ return; //XXXjdm Err(Network)
}
Ok(req) => req,
};
@@ -390,25 +369,14 @@ impl XMLHttpRequest {
}
#[allow(unsafe_code)]
- fn fetch(fetch_type: &SyncOrAsync, resource_task: ResourceTask,
+ fn fetch(xhr: JSRef<XMLHttpRequest>, resource_task: ResourceTask,
mut load_data: LoadData, terminate_receiver: Receiver<TerminateReason>,
cors_request: Result<Option<CORSRequest>,()>, gen_id: GenerationId)
-> ErrorResult {
- fn notify_partial_progress(fetch_type: &SyncOrAsync, msg: XHRProgress) {
- match *fetch_type {
- SyncOrAsync::Sync(xhr) => {
- xhr.process_partial_response(msg);
- },
- SyncOrAsync::Async(ref addr, ref script_chan) => {
- script_chan.send(ScriptMsg::RunnableMsg(box XHRProgressHandler::new(addr.clone(), msg))).unwrap();
- }
- }
- }
-
macro_rules! notify_error_and_return(
($err:expr) => ({
- notify_partial_progress(fetch_type, XHRProgress::Errored(gen_id, $err));
+ xhr.process_partial_response(XHRProgress::Errored(gen_id, $err));
return Err($err)
});
);
@@ -481,7 +449,7 @@ impl XMLHttpRequest {
_ => {}
};
// XXXManishearth Clear cache entries in case of a network error
- notify_partial_progress(fetch_type, XHRProgress::HeadersReceived(gen_id,
+ xhr.process_partial_response(XHRProgress::HeadersReceived(gen_id,
response.metadata.headers.clone(), response.metadata.status.clone()));
progress_port = response.progress_port;
@@ -506,11 +474,11 @@ impl XMLHttpRequest {
progress = progress_port.recv() => match progress.unwrap() {
Payload(data) => {
buf.push_all(data.as_slice());
- notify_partial_progress(fetch_type,
- XHRProgress::Loading(gen_id, ByteString::new(buf.clone())));
+ xhr.process_partial_response(XHRProgress::Loading(
+ gen_id, ByteString::new(buf.clone())));
},
Done(Ok(())) => {
- notify_partial_progress(fetch_type, XHRProgress::Done(gen_id));
+ xhr.process_partial_response(XHRProgress::Done(gen_id));
return Ok(());
},
Done(Err(_)) => {
@@ -828,7 +796,7 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> {
let gen_id = self.generation_id.get();
if self.sync.get() {
- return XMLHttpRequest::fetch(&mut SyncOrAsync::Sync(self), resource_task, load_data,
+ return XMLHttpRequest::fetch(self, resource_task, load_data,
terminate_receiver, cors_request, gen_id);
} else {
self.fetch_time.set(time::now().to_timespec().sec);