aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xmlhttprequest.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-10-07 07:52:09 -0500
committerGitHub <noreply@github.com>2016-10-07 07:52:09 -0500
commita6e4b5bb86ad707a0863acff87344ca4239cfd2c (patch)
treec820d9f2420c44cdfe29de97f1a710e7dc354bb7 /components/script/dom/xmlhttprequest.rs
parente23959a7618e8e7b7ca20300a2afeb1ac77712f3 (diff)
parentd8e92bb271a9f9dd87bf77e38cd820d01f2f0ae4 (diff)
downloadservo-a6e4b5bb86ad707a0863acff87344ca4239cfd2c.tar.gz
servo-a6e4b5bb86ad707a0863acff87344ca4239cfd2c.zip
Auto merge of #13596 - nox:inline, r=Ms2ger
Get rid of dom::bindings::global Globals in that PR are now represented by the fake IDL interface `GlobalScope`. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13596) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/xmlhttprequest.rs')
-rw-r--r--components/script/dom/xmlhttprequest.rs72
1 files changed, 32 insertions, 40 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index caebbddd09e..cd2cd37c476 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -13,7 +13,6 @@ use dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestMetho
use dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestResponseType;
use dom::bindings::conversions::ToJSValConvertible;
use dom::bindings::error::{Error, ErrorResult, Fallible};
-use dom::bindings::global::{GlobalRef, GlobalRoot};
use dom::bindings::inheritance::Castable;
use dom::bindings::js::{JS, MutHeapJSVal, MutNullableHeap};
use dom::bindings::js::{Root, RootedReference};
@@ -25,9 +24,12 @@ use dom::document::{Document, IsHTMLDocument};
use dom::document::DocumentSource;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
+use dom::globalscope::GlobalScope;
use dom::headers::is_forbidden_header_name;
use dom::htmlformelement::{encode_multipart_form_data, generate_boundary};
use dom::progressevent::ProgressEvent;
+use dom::window::Window;
+use dom::workerglobalscope::WorkerGlobalScope;
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
use dom::xmlhttprequestupload::XMLHttpRequestUpload;
use encoding::all::UTF_8;
@@ -153,9 +155,9 @@ pub struct XMLHttpRequest {
}
impl XMLHttpRequest {
- fn new_inherited(global: GlobalRef) -> XMLHttpRequest {
+ fn new_inherited(global: &GlobalScope) -> XMLHttpRequest {
//TODO - update this when referrer policy implemented for workers
- let (referrer_url, referrer_policy) = if let GlobalRef::Window(window) = global {
+ let (referrer_url, referrer_policy) = if let Some(window) = global.downcast::<Window>() {
let document = window.Document();
(Some(document.url().clone()), document.get_referrer_policy())
} else {
@@ -196,22 +198,19 @@ impl XMLHttpRequest {
referrer_policy: referrer_policy,
}
}
- pub fn new(global: GlobalRef) -> Root<XMLHttpRequest> {
+ pub fn new(global: &GlobalScope) -> Root<XMLHttpRequest> {
reflect_dom_object(box XMLHttpRequest::new_inherited(global),
global,
XMLHttpRequestBinding::Wrap)
}
// https://xhr.spec.whatwg.org/#constructors
- pub fn Constructor(global: GlobalRef) -> Fallible<Root<XMLHttpRequest>> {
+ pub fn Constructor(global: &GlobalScope) -> Fallible<Root<XMLHttpRequest>> {
Ok(XMLHttpRequest::new(global))
}
fn sync_in_window(&self) -> bool {
- match self.global() {
- GlobalRoot::Window(_) if self.sync.get() => true,
- _ => false
- }
+ self.sync.get() && self.global().is::<Window>()
}
fn initiate_async_xhr(context: Arc<Mutex<XHRContext>>,
@@ -283,8 +282,7 @@ impl LoadOrigin for XMLHttpRequest {
}
fn pipeline_id(&self) -> Option<PipelineId> {
- let global = self.global();
- Some(global.r().pipeline_id())
+ Some(self.global().pipeline_id())
}
}
@@ -307,11 +305,10 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
fn Open_(&self, method: ByteString, url: USVString, async: bool,
username: Option<USVString>, password: Option<USVString>) -> ErrorResult {
// Step 1
- match self.global() {
- GlobalRoot::Window(ref window) => {
- if !window.Document().r().is_fully_active() { return Err(Error::InvalidState); }
+ if let Some(window) = Root::downcast::<Window>(self.global()) {
+ if !window.Document().r().is_fully_active() {
+ return Err(Error::InvalidState);
}
- _ => {}
}
// Step 5
@@ -342,7 +339,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
}
// Step 2
- let base = self.global().r().api_base_url();
+ let base = self.global().api_base_url();
// Step 6
let mut parsed_url = match base.join(&url.0) {
Ok(parsed) => parsed,
@@ -574,7 +571,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// preference is enabled, we allow bypassing the CORS check.
// This is a temporary measure until we figure out Servo privilege
// story. See https://github.com/servo/servo/issues/9582
- if let GlobalRoot::Window(win) = self.global() {
+ if let Some(win) = Root::downcast::<Window>(self.global()) {
let is_root_pipeline = win.parent_info().is_none();
is_root_pipeline && PREFS.is_mozbrowser_enabled()
} else {
@@ -597,7 +594,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
use_cors_preflight: has_handlers,
credentials_mode: credentials_mode,
use_url_credentials: use_url_credentials,
- origin: self.global().r().get_url(),
+ origin: self.global().get_url(),
referrer_url: self.referrer_url.clone(),
referrer_policy: self.referrer_policy.clone(),
pipeline_id: self.pipeline_id(),
@@ -652,7 +649,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
self.fetch_time.set(time::now().to_timespec().sec);
- let rv = self.fetch(request, self.global().r());
+ let rv = self.fetch(request, &self.global());
// Step 10
if self.sync.get() {
return rv;
@@ -743,9 +740,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// https://xhr.spec.whatwg.org/#the-responsetype-attribute
fn SetResponseType(&self, response_type: XMLHttpRequestResponseType) -> ErrorResult {
// Step 1
- match self.global() {
- GlobalRoot::Worker(_) if response_type == XMLHttpRequestResponseType::Document => return Ok(()),
- _ => {}
+ if self.global().is::<WorkerGlobalScope>() && response_type == XMLHttpRequestResponseType::Document {
+ return Ok(());
}
match self.ready_state.get() {
// Step 2
@@ -828,7 +824,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
fn GetResponseXML(&self) -> Fallible<Option<Root<Document>>> {
// TODO(#2823): Until [Exposed] is implemented, this attribute needs to return null
// explicitly in the worker scope.
- if let GlobalRoot::Worker(_) = self.global() {
+ if self.global().is::<WorkerGlobalScope>() {
return Ok(None);
}
@@ -859,8 +855,7 @@ impl XMLHttpRequest {
fn change_ready_state(&self, rs: XMLHttpRequestState) {
assert!(self.ready_state.get() != rs);
self.ready_state.set(rs);
- let global = self.global();
- let event = Event::new(global.r(),
+ let event = Event::new(&self.global(),
atom!("readystatechange"),
EventBubbles::DoesNotBubble,
EventCancelable::Cancelable);
@@ -975,9 +970,8 @@ impl XMLHttpRequest {
if self.ready_state.get() == XMLHttpRequestState::HeadersReceived {
self.ready_state.set(XMLHttpRequestState::Loading);
}
- let global = self.global();
let event = Event::new(
- global.r(),
+ &self.global(),
atom!("readystatechange"),
EventBubbles::DoesNotBubble,
EventCancelable::Cancelable);
@@ -1049,8 +1043,7 @@ impl XMLHttpRequest {
}
fn dispatch_progress_event(&self, upload: bool, type_: Atom, loaded: u64, total: Option<u64>) {
- let global = self.global();
- let progressevent = ProgressEvent::new(global.r(),
+ let progressevent = ProgressEvent::new(&self.global(),
type_,
EventBubbles::DoesNotBubble,
EventCancelable::NotCancelable,
@@ -1083,15 +1076,14 @@ impl XMLHttpRequest {
xhr: Trusted::new(self),
generation_id: self.generation_id.get(),
});
- let global = self.global();
let duration = Length::new(duration_ms as u64);
- *self.timeout_cancel.borrow_mut() = Some(global.r().schedule_callback(callback, duration));
+ *self.timeout_cancel.borrow_mut() =
+ Some(self.global().schedule_callback(callback, duration));
}
fn cancel_timeout(&self) {
if let Some(handle) = self.timeout_cancel.borrow_mut().take() {
- let global = self.global();
- global.r().unschedule_callback(handle);
+ self.global().unschedule_callback(handle);
}
}
@@ -1118,7 +1110,7 @@ impl XMLHttpRequest {
// Step 3, 4
let bytes = self.response.borrow().to_vec();
- let blob = Blob::new(self.global().r(), BlobImpl::new_from_bytes(bytes), mime);
+ let blob = Blob::new(&self.global(), BlobImpl::new_from_bytes(bytes), mime);
self.response_blob.set(Some(blob.r()));
blob
}
@@ -1204,18 +1196,19 @@ impl XMLHttpRequest {
fn document_text_html(&self) -> Root<Document>{
let charset = self.final_charset().unwrap_or(UTF_8);
let wr = self.global();
- let wr = wr.r();
let decoded = charset.decode(&self.response.borrow(), DecoderTrap::Replace).unwrap();
let document = self.new_doc(IsHTMLDocument::HTMLDocument);
// TODO: Disable scripting while parsing
- parse_html(document.r(), DOMString::from(decoded), wr.get_url(), ParseContext::Owner(Some(wr.pipeline_id())));
+ parse_html(document.r(),
+ DOMString::from(decoded),
+ wr.get_url(),
+ ParseContext::Owner(Some(wr.pipeline_id())));
document
}
fn handle_xml(&self) -> Root<Document> {
let charset = self.final_charset().unwrap_or(UTF_8);
let wr = self.global();
- let wr = wr.r();
let decoded = charset.decode(&self.response.borrow(), DecoderTrap::Replace).unwrap();
let document = self.new_doc(IsHTMLDocument::NonHTMLDocument);
// TODO: Disable scripting while parsing
@@ -1228,12 +1221,11 @@ impl XMLHttpRequest {
fn new_doc(&self, is_html_document: IsHTMLDocument) -> Root<Document> {
let wr = self.global();
- let wr = wr.r();
let win = wr.as_window();
let doc = win.Document();
let doc = doc.r();
let docloader = DocumentLoader::new(&*doc.loader());
- let base = self.global().r().get_url();
+ let base = wr.get_url();
let parsed_url = match base.join(&self.ResponseURL().0) {
Ok(parsed) => Some(parsed),
Err(_) => None // Step 7
@@ -1292,7 +1284,7 @@ impl XMLHttpRequest {
fn fetch(&self,
init: RequestInit,
- global: GlobalRef) -> ErrorResult {
+ global: &GlobalScope) -> ErrorResult {
let xhr = Trusted::new(self);
let context = Arc::new(Mutex::new(XHRContext {