Do not use GlobalRoot in dom::xmlhttprequest

This commit is contained in:
Anthony Ramine 2016-10-01 22:38:50 +02:00
parent 5bdc5a4c48
commit cb02d7911a

View file

@ -13,7 +13,7 @@ use dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestMetho
use dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestResponseType; use dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestResponseType;
use dom::bindings::conversions::ToJSValConvertible; use dom::bindings::conversions::ToJSValConvertible;
use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::global::{GlobalRef, GlobalRoot}; use dom::bindings::global::GlobalRef;
use dom::bindings::inheritance::Castable; use dom::bindings::inheritance::Castable;
use dom::bindings::js::{JS, MutHeapJSVal, MutNullableHeap}; use dom::bindings::js::{JS, MutHeapJSVal, MutNullableHeap};
use dom::bindings::js::{Root, RootedReference}; use dom::bindings::js::{Root, RootedReference};
@ -30,6 +30,7 @@ use dom::headers::is_forbidden_header_name;
use dom::htmlformelement::{encode_multipart_form_data, generate_boundary}; use dom::htmlformelement::{encode_multipart_form_data, generate_boundary};
use dom::progressevent::ProgressEvent; use dom::progressevent::ProgressEvent;
use dom::window::Window; use dom::window::Window;
use dom::workerglobalscope::WorkerGlobalScope;
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget; use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
use dom::xmlhttprequestupload::XMLHttpRequestUpload; use dom::xmlhttprequestupload::XMLHttpRequestUpload;
use encoding::all::UTF_8; use encoding::all::UTF_8;
@ -210,10 +211,7 @@ impl XMLHttpRequest {
} }
fn sync_in_window(&self) -> bool { fn sync_in_window(&self) -> bool {
match self.global() { self.sync.get() && self.global_scope().is::<Window>()
GlobalRoot::Window(_) if self.sync.get() => true,
_ => false
}
} }
fn initiate_async_xhr(context: Arc<Mutex<XHRContext>>, fn initiate_async_xhr(context: Arc<Mutex<XHRContext>>,
@ -308,11 +306,10 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
fn Open_(&self, method: ByteString, url: USVString, async: bool, fn Open_(&self, method: ByteString, url: USVString, async: bool,
username: Option<USVString>, password: Option<USVString>) -> ErrorResult { username: Option<USVString>, password: Option<USVString>) -> ErrorResult {
// Step 1 // Step 1
match self.global() { if let Some(window) = Root::downcast::<Window>(self.global_scope()) {
GlobalRoot::Window(ref window) => { if !window.Document().r().is_fully_active() {
if !window.Document().r().is_fully_active() { return Err(Error::InvalidState); } return Err(Error::InvalidState);
} }
_ => {}
} }
// Step 5 // Step 5
@ -575,7 +572,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// preference is enabled, we allow bypassing the CORS check. // preference is enabled, we allow bypassing the CORS check.
// This is a temporary measure until we figure out Servo privilege // This is a temporary measure until we figure out Servo privilege
// story. See https://github.com/servo/servo/issues/9582 // 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_scope()) {
let is_root_pipeline = win.parent_info().is_none(); let is_root_pipeline = win.parent_info().is_none();
is_root_pipeline && PREFS.is_mozbrowser_enabled() is_root_pipeline && PREFS.is_mozbrowser_enabled()
} else { } else {
@ -744,9 +741,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// https://xhr.spec.whatwg.org/#the-responsetype-attribute // https://xhr.spec.whatwg.org/#the-responsetype-attribute
fn SetResponseType(&self, response_type: XMLHttpRequestResponseType) -> ErrorResult { fn SetResponseType(&self, response_type: XMLHttpRequestResponseType) -> ErrorResult {
// Step 1 // Step 1
match self.global() { if self.global_scope().is::<WorkerGlobalScope>() && response_type == XMLHttpRequestResponseType::Document {
GlobalRoot::Worker(_) if response_type == XMLHttpRequestResponseType::Document => return Ok(()), return Ok(());
_ => {}
} }
match self.ready_state.get() { match self.ready_state.get() {
// Step 2 // Step 2
@ -829,7 +825,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
fn GetResponseXML(&self) -> Fallible<Option<Root<Document>>> { fn GetResponseXML(&self) -> Fallible<Option<Root<Document>>> {
// TODO(#2823): Until [Exposed] is implemented, this attribute needs to return null // TODO(#2823): Until [Exposed] is implemented, this attribute needs to return null
// explicitly in the worker scope. // explicitly in the worker scope.
if let GlobalRoot::Worker(_) = self.global() { if self.global_scope().is::<WorkerGlobalScope>() {
return Ok(None); return Ok(None);
} }