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.rs68
1 files changed, 39 insertions, 29 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 5fb6ec6c34e..b8a60187cb4 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -57,6 +57,7 @@ use std::cell::{Cell, RefCell};
use std::default::Default;
use std::sync::mpsc::channel;
use std::sync::{Arc, Mutex};
+use string_cache::Atom;
use time;
use timers::{ScheduledCallback, TimerHandle};
use url::{Url, UrlParser};
@@ -253,7 +254,7 @@ impl XMLHttpRequest {
}
fn data_available(&mut self, payload: Vec<u8>) {
- self.buf.borrow_mut().push_all(&payload);
+ self.buf.borrow_mut().extend_from_slice(&payload);
self.xhr.root().process_data_available(self.gen_id, self.buf.borrow().clone());
}
@@ -403,8 +404,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
Some(raw) => {
debug!("SetRequestHeader: old value = {:?}", raw[0]);
let mut buf = raw[0].clone();
- buf.push_all(b", ");
- buf.push_all(&value);
+ buf.extend_from_slice(b", ");
+ buf.extend_from_slice(&value);
debug!("SetRequestHeader: new value = {:?}", buf);
value = ByteString::new(buf);
},
@@ -505,12 +506,12 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// If one of the event handlers below aborts the fetch by calling
// abort or open we will need the current generation id to detect it.
let gen_id = self.generation_id.get();
- self.dispatch_response_progress_event("loadstart".to_owned());
+ self.dispatch_response_progress_event(atom!("loadstart"));
if self.generation_id.get() != gen_id {
return Ok(());
}
if !self.upload_complete.get() {
- self.dispatch_upload_progress_event("loadstart".to_owned(), Some(0));
+ self.dispatch_upload_progress_event(atom!("loadstart"), Some(0));
if self.generation_id.get() != gen_id {
return Ok(());
}
@@ -530,8 +531,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
fn join_raw(a: &str, b: &str) -> Vec<u8> {
let len = a.len() + b.len();
let mut vec = Vec::with_capacity(len);
- vec.push_all(a.as_bytes());
- vec.push_all(b.as_bytes());
+ vec.extend_from_slice(a.as_bytes());
+ vec.extend_from_slice(b.as_bytes());
vec
}
@@ -577,12 +578,20 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
let mut buf = String::new();
buf.push_str(&referer_url.scheme);
buf.push_str("://");
- referer_url.serialize_host().map(|ref h| buf.push_str(h));
- referer_url.port().as_ref().map(|&p| {
+
+ if let Some(ref h) = referer_url.serialize_host() {
+ buf.push_str(h);
+ }
+
+ if let Some(ref p) = referer_url.port().as_ref() {
buf.push_str(":");
buf.push_str(&p.to_string());
- });
- referer_url.serialize_path().map(|ref h| buf.push_str(h));
+ }
+
+ if let Some(ref h) = referer_url.serialize_path() {
+ buf.push_str(h);
+ }
+
self.request_headers.borrow_mut().set_raw("Referer".to_owned(), vec![buf.into_bytes()]);
},
Ok(Some(ref req)) => self.insert_trusted_header("origin".to_owned(),
@@ -775,11 +784,12 @@ pub type TrustedXHRAddress = Trusted<XMLHttpRequest>;
impl XMLHttpRequest {
fn change_ready_state(&self, rs: XMLHttpRequestState) {
+ use string_cache::Atom;
assert!(self.ready_state.get() != rs);
self.ready_state.set(rs);
let global = self.global.root();
let event = Event::new(global.r(),
- DOMString::from("readystatechange"),
+ atom!("readystatechange"),
EventBubbles::DoesNotBubble,
EventCancelable::Cancelable);
event.fire(self.upcast());
@@ -855,11 +865,11 @@ impl XMLHttpRequest {
self.upload_complete.set(true);
// Substeps 2-4
if !self.sync.get() {
- self.dispatch_upload_progress_event("progress".to_owned(), None);
+ self.dispatch_upload_progress_event(atom!("progress"), None);
return_if_fetch_was_terminated!();
- self.dispatch_upload_progress_event("load".to_owned(), None);
+ self.dispatch_upload_progress_event(atom!("load"), None);
return_if_fetch_was_terminated!();
- self.dispatch_upload_progress_event("loadend".to_owned(), None);
+ self.dispatch_upload_progress_event(atom!("loadend"), None);
return_if_fetch_was_terminated!();
}
// Part of step 13, send() (processing response)
@@ -887,7 +897,7 @@ impl XMLHttpRequest {
self.change_ready_state(XMLHttpRequestState::Loading);
return_if_fetch_was_terminated!();
}
- self.dispatch_response_progress_event("progress".to_owned());
+ self.dispatch_response_progress_event(atom!("progress"));
}
},
XHRProgress::Done(_) => {
@@ -905,11 +915,11 @@ impl XMLHttpRequest {
self.change_ready_state(XMLHttpRequestState::Done);
return_if_fetch_was_terminated!();
// Subsubsteps 10-12
- self.dispatch_response_progress_event("progress".to_owned());
+ self.dispatch_response_progress_event(atom!("progress"));
return_if_fetch_was_terminated!();
- self.dispatch_response_progress_event("load".to_owned());
+ self.dispatch_response_progress_event(atom!("load"));
return_if_fetch_was_terminated!();
- self.dispatch_response_progress_event("loadend".to_owned());
+ self.dispatch_response_progress_event(atom!("loadend"));
},
XHRProgress::Errored(_, e) => {
self.cancel_timeout();
@@ -929,18 +939,18 @@ impl XMLHttpRequest {
let upload_complete = &self.upload_complete;
if !upload_complete.get() {
upload_complete.set(true);
- self.dispatch_upload_progress_event("progress".to_owned(), None);
+ self.dispatch_upload_progress_event(atom!("progress"), None);
return_if_fetch_was_terminated!();
- self.dispatch_upload_progress_event(errormsg.to_owned(), None);
+ self.dispatch_upload_progress_event(Atom::from(errormsg), None);
return_if_fetch_was_terminated!();
- self.dispatch_upload_progress_event("loadend".to_owned(), None);
+ self.dispatch_upload_progress_event(atom!("loadend"), None);
return_if_fetch_was_terminated!();
}
- self.dispatch_response_progress_event("progress".to_owned());
+ self.dispatch_response_progress_event(atom!("progress"));
return_if_fetch_was_terminated!();
- self.dispatch_response_progress_event(errormsg.to_owned());
+ self.dispatch_response_progress_event(Atom::from(errormsg));
return_if_fetch_was_terminated!();
- self.dispatch_response_progress_event("loadend".to_owned());
+ self.dispatch_response_progress_event(atom!("loadend"));
}
}
}
@@ -957,10 +967,10 @@ impl XMLHttpRequest {
self.request_headers.borrow_mut().set_raw(name, vec![value.into_bytes()]);
}
- fn dispatch_progress_event(&self, upload: bool, type_: String, loaded: u64, total: Option<u64>) {
+ fn dispatch_progress_event(&self, upload: bool, type_: Atom, loaded: u64, total: Option<u64>) {
let global = self.global.root();
let progressevent = ProgressEvent::new(global.r(),
- DOMString::from(type_),
+ type_,
EventBubbles::DoesNotBubble,
EventCancelable::NotCancelable,
total.is_some(), loaded,
@@ -973,14 +983,14 @@ impl XMLHttpRequest {
progressevent.upcast::<Event>().fire(target);
}
- fn dispatch_upload_progress_event(&self, type_: String, partial_load: Option<u64>) {
+ fn dispatch_upload_progress_event(&self, type_: Atom, partial_load: Option<u64>) {
// If partial_load is None, loading has completed and we can just use the value from the request body
let total = self.request_body_len.get() as u64;
self.dispatch_progress_event(true, type_, partial_load.unwrap_or(total), Some(total));
}
- fn dispatch_response_progress_event(&self, type_: String) {
+ fn dispatch_response_progress_event(&self, type_: Atom) {
let len = self.response.borrow().len() as u64;
let total = self.response_headers.borrow().get::<ContentLength>().map(|x| { **x as u64 });
self.dispatch_progress_event(false, type_, len, total);