mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
parent
a14bb68c3f
commit
829259fb79
41 changed files with 227 additions and 112 deletions
|
@ -10,6 +10,7 @@ use dom::bindings::codegen::InheritTypes::{EventCast, EventTargetCast, XMLHttpRe
|
|||
use dom::bindings::conversions::ToJSValConvertible;
|
||||
use dom::bindings::error::{Error, ErrorResult, Fallible, InvalidState, InvalidAccess};
|
||||
use dom::bindings::error::{Network, Syntax, Security, Abort, Timeout};
|
||||
use dom::bindings::global::{GlobalField, GlobalRef};
|
||||
use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootedRootable};
|
||||
use dom::bindings::str::ByteString;
|
||||
use dom::bindings::trace::{Traceable, Untraceable};
|
||||
|
@ -19,7 +20,6 @@ use dom::event::Event;
|
|||
use dom::eventtarget::{EventTarget, EventTargetHelpers, XMLHttpRequestTargetTypeId};
|
||||
use dom::progressevent::ProgressEvent;
|
||||
use dom::urlsearchparams::URLSearchParamsHelpers;
|
||||
use dom::window::Window;
|
||||
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
|
||||
use dom::xmlhttprequestupload::XMLHttpRequestUpload;
|
||||
|
||||
|
@ -121,7 +121,7 @@ pub struct XMLHttpRequest {
|
|||
upload_events: Traceable<Cell<bool>>,
|
||||
send_flag: Traceable<Cell<bool>>,
|
||||
|
||||
global: JS<Window>,
|
||||
global: GlobalField,
|
||||
pinned_count: Traceable<Cell<uint>>,
|
||||
timer: Untraceable<RefCell<Timer>>,
|
||||
fetch_time: Traceable<Cell<i64>>,
|
||||
|
@ -130,7 +130,7 @@ pub struct XMLHttpRequest {
|
|||
}
|
||||
|
||||
impl XMLHttpRequest {
|
||||
pub fn new_inherited(global: &JSRef<Window>) -> XMLHttpRequest {
|
||||
pub fn new_inherited(global: &GlobalRef) -> XMLHttpRequest {
|
||||
let xhr = XMLHttpRequest {
|
||||
eventtarget: XMLHttpRequestEventTarget::new_inherited(XMLHttpRequestTypeId),
|
||||
ready_state: Traceable::new(Cell::new(Unsent)),
|
||||
|
@ -155,7 +155,7 @@ impl XMLHttpRequest {
|
|||
upload_complete: Traceable::new(Cell::new(false)),
|
||||
upload_events: Traceable::new(Cell::new(false)),
|
||||
|
||||
global: JS::from_rooted(global),
|
||||
global: GlobalField::from_rooted(global),
|
||||
pinned_count: Traceable::new(Cell::new(0)),
|
||||
timer: Untraceable::new(RefCell::new(Timer::new().unwrap())),
|
||||
fetch_time: Traceable::new(Cell::new(0)),
|
||||
|
@ -164,12 +164,12 @@ impl XMLHttpRequest {
|
|||
};
|
||||
xhr
|
||||
}
|
||||
pub fn new(global: &JSRef<Window>) -> Temporary<XMLHttpRequest> {
|
||||
pub fn new(global: &GlobalRef) -> Temporary<XMLHttpRequest> {
|
||||
reflect_dom_object(box XMLHttpRequest::new_inherited(global),
|
||||
global,
|
||||
XMLHttpRequestBinding::Wrap)
|
||||
}
|
||||
pub fn Constructor(global: &JSRef<Window>) -> Fallible<Temporary<XMLHttpRequest>> {
|
||||
pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<XMLHttpRequest>> {
|
||||
Ok(XMLHttpRequest::new(global))
|
||||
}
|
||||
|
||||
|
@ -293,7 +293,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
|||
Method::from_str_or_new(s.as_slice())
|
||||
});
|
||||
// Step 2
|
||||
let base: Option<Url> = Some(self.global.root().get_url());
|
||||
let base: Option<Url> = Some(self.global.root().root_ref().get_url());
|
||||
match maybe_method {
|
||||
// Step 4
|
||||
Some(Connect) | Some(Trace) => Err(Security),
|
||||
|
@ -486,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
|||
}
|
||||
|
||||
let global = self.global.root();
|
||||
let resource_task = global.deref().page().resource_task.deref().clone();
|
||||
let resource_task = global.root_ref().page().resource_task.deref().clone();
|
||||
let mut load_data = LoadData::new(self.request_url.deref().borrow().clone());
|
||||
load_data.data = extracted;
|
||||
|
||||
|
@ -516,7 +516,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
|||
}
|
||||
|
||||
// XXXManishearth this is to be replaced with Origin for CORS (with no path)
|
||||
let referer_url = self.global.root().get_url();
|
||||
let referer_url = self.global.root().root_ref().get_url();
|
||||
let mut buf = String::new();
|
||||
buf.push_str(referer_url.scheme.as_slice());
|
||||
buf.push_str("://".as_slice());
|
||||
|
@ -537,7 +537,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
|
|||
} else {
|
||||
let builder = TaskBuilder::new().named("XHRTask");
|
||||
self.fetch_time.deref().set(time::now().to_timespec().sec);
|
||||
let script_chan = global.deref().script_chan.clone();
|
||||
let script_chan = global.root_ref().script_chan().clone();
|
||||
builder.spawn(proc() {
|
||||
let _ = XMLHttpRequest::fetch(&mut Async(addr.unwrap(), script_chan), resource_task, load_data, terminate_receiver);
|
||||
});
|
||||
|
@ -692,7 +692,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
|
|||
// Creates a trusted address to the object, and roots it. Always pair this with a release()
|
||||
unsafe fn to_trusted(&self) -> TrustedXHRAddress {
|
||||
if self.pinned_count.deref().get() == 0 {
|
||||
JS_AddObjectRoot(self.global.root().get_cx(), self.reflector().rootable());
|
||||
JS_AddObjectRoot(self.global.root().root_ref().get_cx(), self.reflector().rootable());
|
||||
}
|
||||
let pinned_count = self.pinned_count.deref().get();
|
||||
self.pinned_count.deref().set(pinned_count + 1);
|
||||
|
@ -711,7 +711,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
|
|||
self.pinned_count.deref().set(pinned_count - 1);
|
||||
if self.pinned_count.deref().get() == 0 {
|
||||
unsafe {
|
||||
JS_RemoveObjectRoot(self.global.root().get_cx(), self.reflector().rootable());
|
||||
JS_RemoveObjectRoot(self.global.root().root_ref().get_cx(), self.reflector().rootable());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -720,7 +720,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
|
|||
assert!(self.ready_state.deref().get() != rs)
|
||||
self.ready_state.deref().set(rs);
|
||||
let global = self.global.root();
|
||||
let event = Event::new(&*global,
|
||||
let event = Event::new(&global.root_ref(),
|
||||
"readystatechange".to_string(),
|
||||
false, true).root();
|
||||
let target: &JSRef<EventTarget> = EventTargetCast::from_ref(self);
|
||||
|
@ -842,7 +842,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
|
|||
fn dispatch_progress_event(&self, upload: bool, type_: DOMString, loaded: u64, total: Option<u64>) {
|
||||
let global = self.global.root();
|
||||
let upload_target = &*self.upload.root();
|
||||
let progressevent = ProgressEvent::new(&*global,
|
||||
let progressevent = ProgressEvent::new(&global.root_ref(),
|
||||
type_, false, false,
|
||||
total.is_some(), loaded,
|
||||
total.unwrap_or(0)).root();
|
||||
|
@ -880,7 +880,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
|
|||
}
|
||||
self.timeout_pinned.deref().set(true);
|
||||
let global = self.global.root();
|
||||
let script_chan = global.deref().script_chan.clone();
|
||||
let script_chan = global.root_ref().script_chan().clone();
|
||||
let terminate_sender = (*self.terminate_sender.deref().borrow()).clone();
|
||||
spawn_named("XHR:Timer", proc () {
|
||||
match oneshot.recv_opt() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue