Skip to content

Commit

Permalink
Pass InCompartment by value
Browse files Browse the repository at this point in the history
  • Loading branch information
AZWN committed Apr 24, 2019
1 parent 1b6949d commit eb73cce
Show file tree
Hide file tree
Showing 25 changed files with 50 additions and 48 deletions.
1 change: 1 addition & 0 deletions components/script/compartments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ impl AlreadyInCompartment {
}
}

#[derive(Copy, Clone)]
pub enum InCompartment<'a> {
Already(&'a AlreadyInCompartment),
Entered(&'a JSAutoCompartment),
Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/audiocontext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ impl AudioContextMethods for AudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

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

// Step 2.
Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/baseaudiocontext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ impl BaseAudioContextMethods for BaseAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// Step 2.
Expand Down Expand Up @@ -418,7 +418,7 @@ impl BaseAudioContextMethods for BaseAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let global = self.global();
let window = global.as_window();
Expand Down
6 changes: 3 additions & 3 deletions components/script/dom/bluetooth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ where
let in_compartment_proof = AlreadyInCompartment::assert(&attribute.global());
let p = Promise::new_in_current_compartment(
&attribute.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

let result_uuid = if let Some(u) = uuid {
Expand Down Expand Up @@ -539,7 +539,7 @@ impl BluetoothMethods for Bluetooth {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
// Step 1.
if (option.filters.is_some() && option.acceptAllDevices) ||
Expand All @@ -561,7 +561,7 @@ impl BluetoothMethods for Bluetooth {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
// Step 1. We did not override the method
// Step 2 - 3. in handle_response
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/bluetoothdevice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ impl BluetoothDeviceMethods for BluetoothDevice {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let sender = response_async(&p, self);
// TODO: Step 1.
Expand Down
8 changes: 4 additions & 4 deletions components/script/dom/bluetoothremotegattcharacteristic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// Step 1.
Expand Down Expand Up @@ -176,7 +176,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// Step 1.
Expand Down Expand Up @@ -231,7 +231,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

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

Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/bluetoothremotegattdescriptor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

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

// Step 1.
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/bluetoothremotegattserver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let sender = response_async(&p, self);

Expand Down
6 changes: 3 additions & 3 deletions components/script/dom/customelementregistry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment(
&global_scope,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
promise.reject_native(&DOMException::new(&global_scope, DOMErrorName::SyntaxError));
return promise;
Expand All @@ -420,7 +420,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment(
&global_scope,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
promise.resolve_native(&UndefinedValue());
return promise;
Expand All @@ -434,7 +434,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
let in_compartment_proof = AlreadyInCompartment::assert(&global_scope);
let promise = Promise::new_in_current_compartment(
&global_scope,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
map.insert(name, promise.clone());
promise
Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3135,7 +3135,7 @@ impl Document {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let mut error = false;

Expand Down Expand Up @@ -3206,7 +3206,7 @@ impl Document {
let in_compartment_proof = AlreadyInCompartment::assert(&global);
let promise = Promise::new_in_current_compartment(
&global,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
// Step 2
if self.fullscreen_element.get().is_none() {
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/htmlmediaelement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1688,7 +1688,7 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
// Step 1.
// FIXME(nox): Reject promise if not allowed to play.
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/mediadevices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ impl MediaDevicesMethods for MediaDevices {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let media = ServoMedia::get().unwrap();
let mut tracks = vec![];
Expand Down
8 changes: 4 additions & 4 deletions components/script/dom/navigationpreloadmanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment(
&*self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// 2.
Expand All @@ -74,7 +74,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment(
&*self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// 2.
Expand All @@ -100,7 +100,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment(
&*self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// 2.
Expand All @@ -126,7 +126,7 @@ impl NavigationPreloadManagerMethods for NavigationPreloadManager {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment(
&*self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
// 2.
let mut state = NavigationPreloadState::empty();
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/navigator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ impl NavigatorMethods for Navigator {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let displays = self.Xr().get_displays();
match displays {
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/offlineaudiocontext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ impl OfflineAudioContextMethods for OfflineAudioContext {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
if self.rendering_started.get() {
promise.reject_error(Error::InvalidState);
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/permissions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ impl Permissions {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
)
},
};
Expand Down
7 changes: 4 additions & 3 deletions components/script/dom/promise.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,13 @@ impl Drop for Promise {
}

impl Promise {
pub fn new(global: &GlobalScope, comp: &InCompartment) -> Rc<Promise> {
Promise::new_in_current_compartment(global, comp)
pub fn new(global: &GlobalScope) -> Rc<Promise> {
let comp = JSAutoCompartment::with_obj(&global.get_cx(), &global);
Promise::new_in_current_compartment(global, InCompartment::Entered(&comp))
}

#[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();
rooted!(in(cx) let mut obj = ptr::null_mut::<JSObject>());
unsafe {
Expand Down
10 changes: 5 additions & 5 deletions components/script/dom/rtcpeerconnection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
if candidate.sdpMid.is_none() && candidate.sdpMLineIndex.is_none() {
p.reject_error(Error::Type(format!(
Expand Down Expand Up @@ -471,7 +471,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
if self.closed.get() {
p.reject_error(Error::InvalidState);
Expand All @@ -487,7 +487,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
if self.closed.get() {
p.reject_error(Error::InvalidState);
Expand All @@ -514,7 +514,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let this = Trusted::new(self);
let desc: SessionDescription = desc.into();
Expand Down Expand Up @@ -551,7 +551,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let p = Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let this = Trusted::new(self);
let desc: SessionDescription = desc.into();
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/serviceworkercontainer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
let in_compartment_proof = AlreadyInCompartment::assert(&*self.global());
let promise = Promise::new_in_current_compartment(
&*self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
let USVString(ref script_url) = script_url;
let api_base_url = self.global().api_base_url();
Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/testbinding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1024,7 +1024,7 @@ impl TestBindingMethods for TestBinding {
let in_compartment_proof = AlreadyInCompartment::assert(&global);
let p = Promise::new_in_current_compartment(
&global,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);
p.append_native_handler(&handler);
return p;
Expand Down Expand Up @@ -1052,7 +1052,7 @@ impl TestBindingMethods for TestBinding {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
Promise::new_in_current_compartment(
&self.global(),
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
)
}

Expand Down
4 changes: 2 additions & 2 deletions components/script/dom/vrdisplay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ impl VRDisplayMethods for VRDisplay {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&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

Expand Down Expand Up @@ -414,7 +414,7 @@ impl VRDisplayMethods for VRDisplay {
let in_compartment_proof = AlreadyInCompartment::assert(&self.global());
let promise = Promise::new_in_current_compartment(
&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.
Expand Down
2 changes: 1 addition & 1 deletion components/script/dom/worklet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ impl WorkletMethods for Worklet {
let in_compartment_proof = AlreadyInCompartment::assert(&global);
let promise = Promise::new_in_current_compartment(
&global,
&InCompartment::Already(&in_compartment_proof),
InCompartment::Already(&in_compartment_proof),
);

// Step 3.
Expand Down
Loading

0 comments on commit eb73cce

Please sign in to comment.