diff options
Diffstat (limited to 'components/script/dom/request.rs')
-rw-r--r-- | components/script/dom/request.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index ebfe0abf49e..fa665679c0d 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -36,7 +36,6 @@ use net_traits::request::Request as NetTraitsRequest; use net_traits::request::RequestMode as NetTraitsRequestMode; use net_traits::request::Type as NetTraitsRequestType; use std::cell::{Cell, Ref}; -use std::mem; use std::rc::Rc; use url::Url; @@ -47,6 +46,8 @@ pub struct Request { body_used: Cell<bool>, headers: MutNullableHeap<JS<Headers>>, mime_type: DOMRefCell<Vec<u8>>, + #[ignore_heap_size_of = "Rc"] + body_promise: DOMRefCell<Option<(Rc<Promise>, BodyType)>>, } impl Request { @@ -62,6 +63,7 @@ impl Request { body_used: Cell::new(false), headers: Default::default(), mime_type: DOMRefCell::new("".to_string().into_bytes()), + body_promise: DOMRefCell::new(None), } } @@ -662,20 +664,20 @@ impl BodyOperations for Request { self.BodyUsed() } + fn set_body_promise(&self, p: &Rc<Promise>, body_type: BodyType) { + assert!(self.body_promise.borrow().is_none()); + self.body_used.set(true); + *self.body_promise.borrow_mut() = Some((p.clone(), body_type)); + } + fn is_locked(&self) -> bool { self.locked() } fn take_body(&self) -> Option<Vec<u8>> { - let ref mut net_traits_req = *self.request.borrow_mut(); - let body: Option<Vec<u8>> = mem::replace(&mut *net_traits_req.body.borrow_mut(), None); - match body { - Some(_) => { - self.body_used.set(true); - body - }, - _ => None, - } + let request = self.request.borrow_mut(); + let body = request.body.borrow_mut().take(); + Some(body.unwrap_or(vec![])) } fn get_mime_type(&self) -> Ref<Vec<u8>> { |