Pass InCompartment by value

This commit is contained in:
Aron Zwaan 2019-04-24 22:33:16 +02:00
parent 1b6949d4cf
commit e2e6e2ac94
26 changed files with 52 additions and 50 deletions

View file

@ -54,7 +54,7 @@ pub fn consume_body<T: BodyOperations + DomObject>(object: &T, body_type: BodyTy
let in_compartment_proof = AlreadyInCompartment::assert(&object.global()); let in_compartment_proof = AlreadyInCompartment::assert(&object.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&object.global(), &object.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1 // Step 1

View file

@ -17,6 +17,7 @@ impl AlreadyInCompartment {
} }
} }
#[derive(Clone, Copy)]
pub enum InCompartment<'a> { pub enum InCompartment<'a> {
Already(&'a AlreadyInCompartment), Already(&'a AlreadyInCompartment),
Entered(&'a JSAutoCompartment), Entered(&'a JSAutoCompartment),

View file

@ -113,7 +113,7 @@ impl AudioContextMethods for AudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 2. // Step 2.
@ -178,7 +178,7 @@ impl AudioContextMethods for AudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 2. // Step 2.

View file

@ -277,7 +277,7 @@ impl BaseAudioContextMethods for BaseAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 2. // Step 2.
@ -418,7 +418,7 @@ impl BaseAudioContextMethods for BaseAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let global = self.global(); let global = self.global();
let window = global.as_window(); let window = global.as_window();

View file

@ -295,7 +295,7 @@ where
let in_compartment_proof = AlreadyInCompartment::assert(&attribute.global()); let in_compartment_proof = AlreadyInCompartment::assert(&attribute.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&attribute.global(), &attribute.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let result_uuid = if let Some(u) = uuid { let result_uuid = if let Some(u) = uuid {
@ -539,7 +539,7 @@ impl BluetoothMethods for Bluetooth {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
if (option.filters.is_some() && option.acceptAllDevices) || if (option.filters.is_some() && option.acceptAllDevices) ||
@ -561,7 +561,7 @@ impl BluetoothMethods for Bluetooth {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. We did not override the method // Step 1. We did not override the method
// Step 2 - 3. in handle_response // Step 2 - 3. in handle_response

View file

@ -282,7 +282,7 @@ impl BluetoothDeviceMethods for BluetoothDevice {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let sender = response_async(&p, self); let sender = response_async(&p, self);
// TODO: Step 1. // TODO: Step 1.

View file

@ -139,7 +139,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
@ -176,7 +176,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
@ -231,7 +231,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
@ -272,7 +272,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let sender = response_async(&p, self); let sender = response_async(&p, self);

View file

@ -98,7 +98,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
@ -134,7 +134,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.

View file

@ -76,7 +76,7 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let sender = response_async(&p, self); let sender = response_async(&p, self);

View file

@ -409,7 +409,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope); let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&global_scope, &global_scope,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
promise.reject_native(&DOMException::new(&global_scope, DOMErrorName::SyntaxError)); promise.reject_native(&DOMException::new(&global_scope, DOMErrorName::SyntaxError));
return promise; return promise;
@ -420,7 +420,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope); let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&global_scope, &global_scope,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
promise.resolve_native(&UndefinedValue()); promise.resolve_native(&UndefinedValue());
return promise; return promise;
@ -434,7 +434,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope); let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&global_scope, &global_scope,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
map.insert(name, promise.clone()); map.insert(name, promise.clone());
promise promise

View file

@ -3135,7 +3135,7 @@ impl Document {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let mut error = false; let mut error = false;
@ -3206,7 +3206,7 @@ impl Document {
let in_compartment_proof = AlreadyInCompartment::assert(&global); let in_compartment_proof = AlreadyInCompartment::assert(&global);
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&global, &global,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 2 // Step 2
if self.fullscreen_element.get().is_none() { if self.fullscreen_element.get().is_none() {

View file

@ -1688,7 +1688,7 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 1. // Step 1.
// FIXME(nox): Reject promise if not allowed to play. // FIXME(nox): Reject promise if not allowed to play.

View file

@ -48,7 +48,7 @@ impl MediaDevicesMethods for MediaDevices {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let media = ServoMedia::get().unwrap(); let media = ServoMedia::get().unwrap();
let mut tracks = vec![]; let mut tracks = vec![];

View file

@ -48,7 +48,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&*self.global(), &*self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// 2. // 2.
@ -74,7 +74,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&*self.global(), &*self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// 2. // 2.
@ -100,7 +100,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&*self.global(), &*self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// 2. // 2.
@ -126,7 +126,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&*self.global(), &*self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// 2. // 2.
let mut state = NavigationPreloadState::empty(); let mut state = NavigationPreloadState::empty();

View file

@ -155,7 +155,7 @@ impl NavigatorMethods for Navigator {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let displays = self.Xr().get_displays(); let displays = self.Xr().get_displays();
match displays { match displays {

View file

@ -118,7 +118,7 @@ impl OfflineAudioContextMethods for OfflineAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if self.rendering_started.get() { if self.rendering_started.get() {
promise.reject_error(Error::InvalidState); promise.reject_error(Error::InvalidState);

View file

@ -102,7 +102,7 @@ impl Permissions {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
Promise::new_in_current_compartment( Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
) )
}, },
}; };

View file

@ -11,7 +11,7 @@
//! native Promise values that refer to the same JS value yet are distinct native objects //! native Promise values that refer to the same JS value yet are distinct native objects
//! (ie. address equality for the native objects is meaningless). //! (ie. address equality for the native objects is meaningless).
use crate::compartments::InCompartment; use crate::compartments::{AlreadyInCompartment, InCompartment};
use crate::dom::bindings::conversions::root_from_object; use crate::dom::bindings::conversions::root_from_object;
use crate::dom::bindings::error::{Error, Fallible}; use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector}; use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector};
@ -80,12 +80,13 @@ impl Drop for Promise {
} }
impl Promise { impl Promise {
pub fn new(global: &GlobalScope, comp: &InCompartment) -> Rc<Promise> { pub fn new(global: &GlobalScope) -> Rc<Promise> {
Promise::new_in_current_compartment(global, comp) let comp = AlreadyInCompartment::assert(&global);
Promise::new_in_current_compartment(global, InCompartment::Already(&comp))
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
pub fn new_in_current_compartment(global: &GlobalScope, _comp: &InCompartment) -> Rc<Promise> { pub fn new_in_current_compartment(global: &GlobalScope, _comp: InCompartment) -> Rc<Promise> {
let cx = global.get_cx(); let cx = global.get_cx();
rooted!(in(cx) let mut obj = ptr::null_mut::<JSObject>()); rooted!(in(cx) let mut obj = ptr::null_mut::<JSObject>());
unsafe { unsafe {

View file

@ -432,7 +432,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if candidate.sdpMid.is_none() && candidate.sdpMLineIndex.is_none() { if candidate.sdpMid.is_none() && candidate.sdpMLineIndex.is_none() {
p.reject_error(Error::Type(format!( p.reject_error(Error::Type(format!(
@ -471,7 +471,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if self.closed.get() { if self.closed.get() {
p.reject_error(Error::InvalidState); p.reject_error(Error::InvalidState);
@ -487,7 +487,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if self.closed.get() { if self.closed.get() {
p.reject_error(Error::InvalidState); p.reject_error(Error::InvalidState);
@ -514,7 +514,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let this = Trusted::new(self); let this = Trusted::new(self);
let desc: SessionDescription = desc.into(); let desc: SessionDescription = desc.into();
@ -551,7 +551,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let this = Trusted::new(self); let this = Trusted::new(self);
let desc: SessionDescription = desc.into(); let desc: SessionDescription = desc.into();

View file

@ -60,7 +60,7 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&*self.global(), &*self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
let USVString(ref script_url) = script_url; let USVString(ref script_url) = script_url;
let api_base_url = self.global().api_base_url(); let api_base_url = self.global().api_base_url();

View file

@ -1024,7 +1024,7 @@ impl TestBindingMethods for TestBinding {
let in_compartment_proof = AlreadyInCompartment::assert(&global); let in_compartment_proof = AlreadyInCompartment::assert(&global);
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&global, &global,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
p.append_native_handler(&handler); p.append_native_handler(&handler);
return p; return p;
@ -1052,7 +1052,7 @@ impl TestBindingMethods for TestBinding {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
Promise::new_in_current_compartment( Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
) )
} }

View file

@ -346,7 +346,7 @@ impl VRDisplayMethods for VRDisplay {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// TODO: WebVR spec: this method must be called in response to a user gesture // TODO: WebVR spec: this method must be called in response to a user gesture
@ -414,7 +414,7 @@ impl VRDisplayMethods for VRDisplay {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// WebVR spec: If the VRDisplay is not presenting the promise MUST be rejected. // WebVR spec: If the VRDisplay is not presenting the promise MUST be rejected.

View file

@ -117,7 +117,7 @@ impl WorkletMethods for Worklet {
let in_compartment_proof = AlreadyInCompartment::assert(&global); let in_compartment_proof = AlreadyInCompartment::assert(&global);
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&global, &global,
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// Step 3. // Step 3.

View file

@ -89,7 +89,7 @@ impl XRMethods for XR {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if mode == XRSessionMode::Immersive_vr { if mode == XRSessionMode::Immersive_vr {
promise.resolve_native(&()); promise.resolve_native(&());
@ -106,7 +106,7 @@ impl XRMethods for XR {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment( let promise = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
if options.mode != XRSessionMode::Immersive_vr { if options.mode != XRSessionMode::Immersive_vr {
promise.reject_error(Error::NotSupported); promise.reject_error(Error::NotSupported);

View file

@ -94,7 +94,7 @@ impl XRSessionMethods for XRSession {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
self.display.queue_renderstate(init, p.clone()); self.display.queue_renderstate(init, p.clone());
p p
@ -120,7 +120,7 @@ impl XRSessionMethods for XRSession {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global()); let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment( let p = Promise::new_in_current_compartment(
&self.global(), &self.global(),
&InCompartment::Already(&in_compartment_proof), InCompartment::Already(&in_compartment_proof),
); );
// https://immersive-web.github.io/webxr/#create-a-reference-space // https://immersive-web.github.io/webxr/#create-a-reference-space

View file

@ -139,7 +139,7 @@ pub fn Fetch(
// Step 1 // Step 1
let aic = AlreadyInCompartment::assert(global); let aic = AlreadyInCompartment::assert(global);
let promise = Promise::new_in_current_compartment(global, &InCompartment::Already(&aic)); let promise = Promise::new_in_current_compartment(global, InCompartment::Already(&aic));
let response = Response::new(global); let response = Response::new(global);
// Step 2 // Step 2