aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py2
-rw-r--r--components/script/dom/bindings/refcounted.rs11
-rw-r--r--components/script/dom/bluetooth.rs70
-rw-r--r--components/script/dom/bluetoothdevice.rs7
-rw-r--r--components/script/dom/bluetoothpermissionresult.rs9
-rw-r--r--components/script/dom/bluetoothremotegattcharacteristic.rs38
-rw-r--r--components/script/dom/bluetoothremotegattdescriptor.rs21
-rw-r--r--components/script/dom/bluetoothremotegattserver.rs15
-rw-r--r--components/script/dom/bluetoothremotegattservice.rs15
-rw-r--r--components/script/dom/customelementregistry.rs9
-rw-r--r--components/script/dom/document.rs2
-rw-r--r--components/script/dom/element.rs24
-rw-r--r--components/script/dom/permissions.rs8
-rw-r--r--components/script/dom/promise.rs87
-rw-r--r--components/script/dom/serviceworkercontainer.rs13
-rw-r--r--components/script/dom/testbinding.rs13
-rw-r--r--components/script/dom/vr.rs6
-rw-r--r--components/script/dom/vrdisplay.rs18
-rw-r--r--components/script/dom/worklet.rs2
19 files changed, 158 insertions, 212 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 174bda2b0ca..9a98848108b 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -788,7 +788,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if !JS_WrapValue(cx, valueToResolve.handle_mut()) {
$*{exceptionCode}
}
- match Promise::Resolve(&promiseGlobal, cx, valueToResolve.handle()) {
+ match Promise::new_resolved(&promiseGlobal, cx, valueToResolve.handle()) {
Ok(value) => value,
Err(error) => {
throw_dom_exception(cx, &promiseGlobal, error);
diff --git a/components/script/dom/bindings/refcounted.rs b/components/script/dom/bindings/refcounted.rs
index 45d7d721307..0a00148d661 100644
--- a/components/script/dom/bindings/refcounted.rs
+++ b/components/script/dom/bindings/refcounted.rs
@@ -29,7 +29,6 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{DomObject, Reflector};
use dom::bindings::trace::trace_reflector;
use dom::promise::Promise;
-use js::jsapi::JSAutoCompartment;
use js::jsapi::JSTracer;
use libc;
use std::cell::RefCell;
@@ -126,10 +125,7 @@ impl TrustedPromise {
let this = self;
task!(reject_promise: move || {
debug!("Rejecting promise.");
- let this = this.root();
- let cx = this.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, this.reflector().get_jsobject().get());
- this.reject_error(cx, error);
+ this.root().reject_error(error);
})
}
@@ -142,10 +138,7 @@ impl TrustedPromise {
let this = self;
task!(resolve_promise: move || {
debug!("Resolving promise.");
- let this = this.root();
- let cx = this.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, this.reflector().get_jsobject().get());
- this.resolve_native(cx, &value);
+ this.root().resolve_native(&value);
})
}
}
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 526ebe576fc..12d363731ca 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -33,7 +33,7 @@ use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER;
use js::conversions::ConversionResult;
-use js::jsapi::{JSAutoCompartment, JSContext, JSObject};
+use js::jsapi::{JSContext, JSObject};
use js::jsval::{ObjectValue, UndefinedValue};
use std::cell::Ref;
use std::collections::HashMap;
@@ -94,23 +94,24 @@ struct BluetoothContext<T: AsyncBluetoothListener + DomObject> {
}
pub trait AsyncBluetoothListener {
- fn handle_response(&self, result: BluetoothResponse, cx: *mut JSContext, promise: &Rc<Promise>);
+ fn handle_response(&self, result: BluetoothResponse, promise: &Rc<Promise>);
}
-impl<T: AsyncBluetoothListener + DomObject> BluetoothContext<T> {
+impl<T> BluetoothContext<T>
+where
+ T: AsyncBluetoothListener + DomObject,
+{
#[allow(unrooted_must_root)]
fn response(&mut self, response: BluetoothResponseResult) {
let promise = self.promise.take().expect("bt promise is missing").root();
- let promise_cx = promise.global().get_cx();
// JSAutoCompartment needs to be manually made.
// Otherwise, Servo will crash.
- let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
match response {
- Ok(response) => self.receiver.root().handle_response(response, promise_cx, &promise),
+ Ok(response) => self.receiver.root().handle_response(response, &promise),
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-requestdevice
// Step 3 - 4.
- Err(error) => promise.reject_error(promise_cx, Error::from(error)),
+ Err(error) => promise.reject_error(Error::from(error)),
}
}
}
@@ -158,7 +159,7 @@ impl Bluetooth {
if let &Some(ref filters) = filters {
// Step 2.1.
if filters.is_empty() {
- p.reject_error(p.global().get_cx(), Type(FILTER_EMPTY_ERROR.to_owned()));
+ p.reject_error(Type(FILTER_EMPTY_ERROR.to_owned()));
return;
}
@@ -171,7 +172,7 @@ impl Bluetooth {
// Step 2.4.2.
Ok(f) => uuid_filters.push(f),
Err(e) => {
- p.reject_error(p.global().get_cx(), e);
+ p.reject_error(e);
return;
},
}
@@ -186,7 +187,7 @@ impl Bluetooth {
let uuid = match BluetoothUUID::service(opt_service.clone()) {
Ok(u) => u.to_string(),
Err(e) => {
- p.reject_error(p.global().get_cx(), e);
+ p.reject_error(e);
return;
},
};
@@ -205,7 +206,7 @@ impl Bluetooth {
// Step 4 - 5.
if let PermissionState::Denied = get_descriptor_permission_state(PermissionName::Bluetooth, None) {
- return p.reject_error(p.global().get_cx(), Error::NotFound);
+ return p.reject_error(Error::NotFound);
}
// Note: Step 3, 6 - 8 are implemented in
@@ -266,20 +267,19 @@ pub fn get_gatt_children<T, F> (
where T: AsyncBluetoothListener + DomObject + 'static,
F: FnOnce(StringOrUnsignedLong) -> Fallible<UUID> {
let p = Promise::new(&attribute.global());
- let p_cx = p.global().get_cx();
let result_uuid = if let Some(u) = uuid {
// Step 1.
let canonicalized = match uuid_canonicalizer(u) {
Ok(canonicalized_uuid) => canonicalized_uuid.to_string(),
Err(e) => {
- p.reject_error(p_cx, e);
+ p.reject_error(e);
return p;
}
};
// Step 2.
if uuid_is_blocklisted(canonicalized.as_ref(), Blocklist::All) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
Some(canonicalized)
@@ -289,7 +289,7 @@ pub fn get_gatt_children<T, F> (
// Step 3 - 4.
if !connected {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
@@ -479,7 +479,7 @@ impl BluetoothMethods for Bluetooth {
// Step 1.
if (option.filters.is_some() && option.acceptAllDevices) ||
(option.filters.is_none() && !option.acceptAllDevices) {
- p.reject_error(p.global().get_cx(), Error::Type(OPTIONS_ERROR.to_owned()));
+ p.reject_error(Error::Type(OPTIONS_ERROR.to_owned()));
return p;
}
@@ -507,14 +507,14 @@ impl BluetoothMethods for Bluetooth {
}
impl AsyncBluetoothListener for Bluetooth {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#request-bluetooth-devices
// Step 11, 13 - 14.
BluetoothResponse::RequestDevice(device) => {
let mut device_instance_map = self.device_instance_map.borrow_mut();
if let Some(existing_device) = device_instance_map.get(&device.id.clone()) {
- return promise.resolve_native(promise_cx, &**existing_device);
+ return promise.resolve_native(&**existing_device);
}
let bt_device = BluetoothDevice::new(&self.global(),
DOMString::from(device.id.clone()),
@@ -530,14 +530,14 @@ impl AsyncBluetoothListener for Bluetooth {
);
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-requestdevice
// Step 5.
- promise.resolve_native(promise_cx, &bt_device);
+ promise.resolve_native(&bt_device);
},
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability
// Step 2 - 3.
BluetoothResponse::GetAvailability(is_available) => {
- promise.resolve_native(promise_cx, &is_available);
+ promise.resolve_native(&is_available);
}
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
@@ -562,9 +562,12 @@ impl PermissionAlgorithm for Bluetooth {
}
// https://webbluetoothcg.github.io/web-bluetooth/#query-the-bluetooth-permission
- fn permission_query(cx: *mut JSContext, promise: &Rc<Promise>,
- descriptor: &BluetoothPermissionDescriptor,
- status: &BluetoothPermissionResult) {
+ fn permission_query(
+ _cx: *mut JSContext,
+ promise: &Rc<Promise>,
+ descriptor: &BluetoothPermissionDescriptor,
+ status: &BluetoothPermissionResult,
+ ) {
// Step 1: We are not using the `global` variable.
// Step 2.
@@ -573,7 +576,7 @@ impl PermissionAlgorithm for Bluetooth {
// Step 3.
if let PermissionState::Denied = status.get_state() {
status.set_devices(Vec::new());
- return promise.resolve_native(cx, status);
+ return promise.resolve_native(status);
}
// Step 4.
@@ -604,7 +607,7 @@ impl PermissionAlgorithm for Bluetooth {
for filter in filters {
match canonicalize_filter(&filter) {
Ok(f) => scan_filters.push(f),
- Err(error) => return promise.reject_error(cx, error),
+ Err(error) => return promise.reject_error(error),
}
}
@@ -620,7 +623,7 @@ impl PermissionAlgorithm for Bluetooth {
match receiver.recv().unwrap() {
Ok(true) => (),
Ok(false) => continue,
- Err(error) => return promise.reject_error(cx, Error::from(error)),
+ Err(error) => return promise.reject_error(Error::from(error)),
};
}
@@ -637,16 +640,19 @@ impl PermissionAlgorithm for Bluetooth {
// https://w3c.github.io/permissions/#dom-permissions-query
// Step 7.
- promise.resolve_native(cx, status);
+ promise.resolve_native(status);
}
// https://webbluetoothcg.github.io/web-bluetooth/#request-the-bluetooth-permission
- fn permission_request(cx: *mut JSContext, promise: &Rc<Promise>,
- descriptor: &BluetoothPermissionDescriptor,
- status: &BluetoothPermissionResult) {
+ fn permission_request(
+ _cx: *mut JSContext,
+ promise: &Rc<Promise>,
+ descriptor: &BluetoothPermissionDescriptor,
+ status: &BluetoothPermissionResult,
+ ) {
// Step 1.
if descriptor.filters.is_some() == descriptor.acceptAllDevices {
- return promise.reject_error(cx, Error::Type(OPTIONS_ERROR.to_owned()));
+ return promise.reject_error(Error::Type(OPTIONS_ERROR.to_owned()));
}
// Step 2.
diff --git a/components/script/dom/bluetoothdevice.rs b/components/script/dom/bluetoothdevice.rs
index c83befb7684..2e8e07503da 100644
--- a/components/script/dom/bluetoothdevice.rs
+++ b/components/script/dom/bluetoothdevice.rs
@@ -25,7 +25,6 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
-use js::jsapi::JSContext;
use std::cell::Cell;
use std::collections::HashMap;
use std::rc::Rc;
@@ -266,16 +265,16 @@ impl BluetoothDeviceMethods for BluetoothDevice {
}
impl AsyncBluetoothListener for BluetoothDevice {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothdevice-unwatchadvertisements
BluetoothResponse::WatchAdvertisements(_result) => {
// Step 3.1.
self.watching_advertisements.set(true);
// Step 3.2.
- promise.resolve_native(promise_cx, &());
+ promise.resolve_native(&());
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/bluetoothpermissionresult.rs b/components/script/dom/bluetoothpermissionresult.rs
index da5de4bf5b1..cc766b85477 100644
--- a/components/script/dom/bluetoothpermissionresult.rs
+++ b/components/script/dom/bluetoothpermissionresult.rs
@@ -20,7 +20,6 @@ use dom::permissionstatus::PermissionStatus;
use dom::promise::Promise;
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::JSContext;
use std::rc::Rc;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothpermissionresult
@@ -83,7 +82,7 @@ impl BluetoothPermissionResultMethods for BluetoothPermissionResult {
}
impl AsyncBluetoothListener for BluetoothPermissionResult {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#request-bluetooth-devices
// Step 3, 11, 13 - 14.
@@ -98,7 +97,7 @@ impl AsyncBluetoothListener for BluetoothPermissionResult {
// https://w3c.github.io/permissions/#dom-permissions-request
// Step 8.
- return promise.resolve_native(promise_cx, self);
+ return promise.resolve_native(self);
}
let bt_device = BluetoothDevice::new(&self.global(),
DOMString::from(device.id.clone()),
@@ -117,9 +116,9 @@ impl AsyncBluetoothListener for BluetoothPermissionResult {
// https://w3c.github.io/permissions/#dom-permissions-request
// Step 8.
- promise.resolve_native(promise_cx, self);
+ promise.resolve_native(self);
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/bluetoothremotegattcharacteristic.rs b/components/script/dom/bluetoothremotegattcharacteristic.rs
index 6eb7f253a2e..f54776d37a9 100644
--- a/components/script/dom/bluetoothremotegattcharacteristic.rs
+++ b/components/script/dom/bluetoothremotegattcharacteristic.rs
@@ -26,7 +26,6 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::JSContext;
use std::rc::Rc;
// Maximum length of an attribute value.
@@ -124,17 +123,16 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-readvalue
fn ReadValue(&self) -> Rc<Promise> {
let p = Promise::new(&self.global());
- let p_cx = p.global().get_cx();
// Step 1.
if uuid_is_blocklisted(self.uuid.as_ref(), Blocklist::Reads) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
// Step 2.
if !self.Service().Device().get_gatt().Connected() {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
@@ -142,7 +140,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
// Step 5.1.
if !self.Properties().Read() {
- p.reject_error(p_cx, NotSupported);
+ p.reject_error(NotSupported);
return p;
}
@@ -158,23 +156,22 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-writevalue
fn WriteValue(&self, value: Vec<u8>) -> Rc<Promise> {
let p = Promise::new(&self.global());
- let p_cx = p.global().get_cx();
// Step 1.
if uuid_is_blocklisted(self.uuid.as_ref(), Blocklist::Writes) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
// Step 2 - 3.
if value.len() > MAXIMUM_ATTRIBUTE_LENGTH {
- p.reject_error(p_cx, InvalidModification);
+ p.reject_error(InvalidModification);
return p;
}
// Step 4.
if !self.Service().Device().get_gatt().Connected() {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
@@ -184,7 +181,7 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
if !(self.Properties().Write() ||
self.Properties().WriteWithoutResponse() ||
self.Properties().AuthenticatedSignedWrites()) {
- p.reject_error(p_cx, NotSupported);
+ p.reject_error(NotSupported);
return p;
}
@@ -200,24 +197,23 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-startnotifications
fn StartNotifications(&self) -> Rc<Promise> {
let p = Promise::new(&self.global());
- let p_cx = p.global().get_cx();
// Step 1.
if uuid_is_blocklisted(self.uuid.as_ref(), Blocklist::Reads) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
// Step 2.
if !self.Service().Device().get_gatt().Connected() {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
// Step 5.
if !(self.Properties().Notify() ||
self.Properties().Indicate()) {
- p.reject_error(p_cx, NotSupported);
+ p.reject_error(NotSupported);
return p;
}
@@ -255,14 +251,14 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
}
impl AsyncBluetoothListener for BluetoothRemoteGATTCharacteristic {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
let device = self.Service().Device();
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren
// Step 7.
BluetoothResponse::GetDescriptors(descriptors_vec, single) => {
if single {
- promise.resolve_native(promise_cx, &device.get_or_create_descriptor(&descriptors_vec[0], &self));
+ promise.resolve_native(&device.get_or_create_descriptor(&descriptors_vec[0], &self));
return;
}
let mut descriptors = vec!();
@@ -270,7 +266,7 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTCharacteristic {
let bt_descriptor = device.get_or_create_descriptor(&descriptor, &self);
descriptors.push(bt_descriptor);
}
- promise.resolve_native(promise_cx, &descriptors);
+ promise.resolve_native(&descriptors);
},
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-readvalue
BluetoothResponse::ReadValue(result) => {
@@ -285,7 +281,7 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTCharacteristic {
self.upcast::<EventTarget>().fire_bubbling_event(atom!("characteristicvaluechanged"));
// Step 5.5.4.
- promise.resolve_native(promise_cx, &value);
+ promise.resolve_native(&value);
},
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-writevalue
BluetoothResponse::WriteValue(result) => {
@@ -296,7 +292,7 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTCharacteristic {
*self.value.borrow_mut() = Some(ByteString::new(result));
// Step 7.5.3.
- promise.resolve_native(promise_cx, &());
+ promise.resolve_native(&());
},
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-startnotifications
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-stopnotifications
@@ -306,9 +302,9 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTCharacteristic {
// (StartNotification) Step 11.
// (StopNotification) Step 5.
- promise.resolve_native(promise_cx, self);
+ promise.resolve_native(self);
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/bluetoothremotegattdescriptor.rs b/components/script/dom/bluetoothremotegattdescriptor.rs
index c9e24c499be..d05194af1d2 100644
--- a/components/script/dom/bluetoothremotegattdescriptor.rs
+++ b/components/script/dom/bluetoothremotegattdescriptor.rs
@@ -21,7 +21,6 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::JSContext;
use std::rc::Rc;
// http://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattdescriptor
@@ -89,17 +88,16 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-readvalue
fn ReadValue(&self) -> Rc<Promise> {
let p = Promise::new(&self.global());
- let p_cx = p.global().get_cx();
// Step 1.
if uuid_is_blocklisted(self.uuid.as_ref(), Blocklist::Reads) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
// Step 2.
if !self.Characteristic().Service().Device().get_gatt().Connected() {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
@@ -116,23 +114,22 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue
fn WriteValue(&self, value: Vec<u8>) -> Rc<Promise> {
let p = Promise::new(&self.global());
- let p_cx = p.global().get_cx();
// Step 1.
if uuid_is_blocklisted(self.uuid.as_ref(), Blocklist::Writes) {
- p.reject_error(p_cx, Security);
+ p.reject_error(Security);
return p;
}
// Step 2 - 3.
if value.len() > MAXIMUM_ATTRIBUTE_LENGTH {
- p.reject_error(p_cx, InvalidModification);
+ p.reject_error(InvalidModification);
return p;
}
// Step 4.
if !self.Characteristic().Service().Device().get_gatt().Connected() {
- p.reject_error(p_cx, Network);
+ p.reject_error(Network);
return p;
}
@@ -147,7 +144,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
}
impl AsyncBluetoothListener for BluetoothRemoteGATTDescriptor {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-readvalue
BluetoothResponse::ReadValue(result) => {
@@ -159,7 +156,7 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTDescriptor {
*self.value.borrow_mut() = Some(value.clone());
// Step 5.4.3.
- promise.resolve_native(promise_cx, &value);
+ promise.resolve_native(&value);
},
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue
BluetoothResponse::WriteValue(result) => {
@@ -171,9 +168,9 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTDescriptor {
// Step 7.4.3.
// TODO: Resolve promise with undefined instead of a value.
- promise.resolve_native(promise_cx, &());
+ promise.resolve_native(&());
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/bluetoothremotegattserver.rs b/components/script/dom/bluetoothremotegattserver.rs
index 4a67e03e984..65e66edecd3 100644
--- a/components/script/dom/bluetoothremotegattserver.rs
+++ b/components/script/dom/bluetoothremotegattserver.rs
@@ -17,7 +17,6 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::JSContext;
use std::cell::Cell;
use std::rc::Rc;
@@ -120,30 +119,30 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
}
impl AsyncBluetoothListener for BluetoothRemoteGATTServer {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-connect
BluetoothResponse::GATTServerConnect(connected) => {
// Step 5.2.3
if self.Device().is_represented_device_null() {
if let Err(e) = self.Device().garbage_collect_the_connection() {
- return promise.reject_error(promise_cx, Error::from(e));
+ return promise.reject_error(Error::from(e));
}
- return promise.reject_error(promise_cx, Error::Network);
+ return promise.reject_error(Error::Network);
}
// Step 5.2.4.
self.connected.set(connected);
// Step 5.2.5.
- promise.resolve_native(promise_cx, self);
+ promise.resolve_native(self);
},
// https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren
// Step 7.
BluetoothResponse::GetPrimaryServices(services_vec, single) => {
let device = self.Device();
if single {
- promise.resolve_native(promise_cx, &device.get_or_create_service(&services_vec[0], &self));
+ promise.resolve_native(&device.get_or_create_service(&services_vec[0], &self));
return;
}
let mut services = vec!();
@@ -151,9 +150,9 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTServer {
let bt_service = device.get_or_create_service(&service, &self);
services.push(bt_service);
}
- promise.resolve_native(promise_cx, &services);
+ promise.resolve_native(&services);
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/bluetoothremotegattservice.rs b/components/script/dom/bluetoothremotegattservice.rs
index d80bc89f80b..6140d83c9f5 100644
--- a/components/script/dom/bluetoothremotegattservice.rs
+++ b/components/script/dom/bluetoothremotegattservice.rs
@@ -17,7 +17,6 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom_struct::dom_struct;
-use js::jsapi::JSContext;
use std::rc::Rc;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice
@@ -128,15 +127,14 @@ impl BluetoothRemoteGATTServiceMethods for BluetoothRemoteGATTService {
}
impl AsyncBluetoothListener for BluetoothRemoteGATTService {
- fn handle_response(&self, response: BluetoothResponse, promise_cx: *mut JSContext, promise: &Rc<Promise>) {
+ fn handle_response(&self, response: BluetoothResponse, promise: &Rc<Promise>) {
let device = self.Device();
match response {
// https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren
// Step 7.
BluetoothResponse::GetCharacteristics(characteristics_vec, single) => {
if single {
- promise.resolve_native(promise_cx,
- &device.get_or_create_characteristic(&characteristics_vec[0], &self));
+ promise.resolve_native(&device.get_or_create_characteristic(&characteristics_vec[0], &self));
return;
}
let mut characteristics = vec!();
@@ -144,23 +142,22 @@ impl AsyncBluetoothListener for BluetoothRemoteGATTService {
let bt_characteristic = device.get_or_create_characteristic(&characteristic, &self);
characteristics.push(bt_characteristic);
}
- promise.resolve_native(promise_cx, &characteristics);
+ promise.resolve_native(&characteristics);
},
// https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren
// Step 7.
BluetoothResponse::GetIncludedServices(services_vec, single) => {
if single {
- return promise.resolve_native(promise_cx,
- &device.get_or_create_service(&services_vec[0], &device.get_gatt()));
+ return promise.resolve_native(&device.get_or_create_service(&services_vec[0], &device.get_gatt()));
}
let mut services = vec!();
for service in services_vec {
let bt_service = device.get_or_create_service(&service, &device.get_gatt());
services.push(bt_service);
}
- promise.resolve_native(promise_cx, &services);
+ promise.resolve_native(&services);
},
- _ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
+ _ => promise.reject_error(Error::Type("Something went wrong...".to_owned())),
}
}
}
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index de4d7753315..b4ad9365f4f 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -316,10 +316,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Step 16, 16.3
if let Some(promise) = self.when_defined.borrow_mut().remove(&name) {
- // 16.1
- let cx = promise.global().get_cx();
- // 16.2
- promise.resolve_native(cx, &UndefinedValue());
+ promise.resolve_native(&UndefinedValue());
}
Ok(())
}
@@ -346,14 +343,14 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Step 1
if !is_valid_custom_element_name(&name) {
let promise = Promise::new(global_scope);
- promise.reject_native(global_scope.get_cx(), &DOMException::new(global_scope, DOMErrorName::SyntaxError));
+ promise.reject_native(&DOMException::new(global_scope, DOMErrorName::SyntaxError));
return promise
}
// Step 2
if self.definitions.borrow().contains_key(&name) {
let promise = Promise::new(global_scope);
- promise.resolve_native(global_scope.get_cx(), &UndefinedValue());
+ promise.resolve_native(&UndefinedValue());
return promise
}
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index e50ff071f6e..c5940f02b48 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -2671,7 +2671,7 @@ impl Document {
let promise = Promise::new(global.r());
// Step 2
if self.fullscreen_element.get().is_none() {
- promise.reject_error(global.get_cx(), Error::Type(String::from("fullscreen is null")));
+ promise.reject_error(Error::Type(String::from("fullscreen is null")));
return promise
}
// TODO Step 3-6
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index cad8c87900a..0fe36814b33 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -82,7 +82,7 @@ use html5ever::serialize;
use html5ever::serialize::SerializeOpts;
use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
-use js::jsapi::{HandleValue, Heap, JSAutoCompartment};
+use js::jsapi::Heap;
use js::jsval::JSVal;
use net_traits::request::CorsSettings;
use ref_filter_map::ref_filter_map;
@@ -3057,17 +3057,13 @@ impl TaskOnce for ElementPerformFullscreenEnter {
#[allow(unrooted_must_root)]
fn run_once(self) {
let element = self.element.root();
+ let promise = self.promise.root();
let document = document_from_node(element.r());
// Step 7.1
if self.error || !element.fullscreen_element_ready_check() {
- // JSAutoCompartment needs to be manually made.
- // Otherwise, Servo will crash.
- let promise = self.promise.root();
- let promise_cx = promise.global().get_cx();
- let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
document.upcast::<EventTarget>().fire_event(atom!("fullscreenerror"));
- promise.reject_error(promise.global().get_cx(), Error::Type(String::from("fullscreen is not connected")));
+ promise.reject_error(Error::Type(String::from("fullscreen is not connected")));
return
}
@@ -3083,12 +3079,7 @@ impl TaskOnce for ElementPerformFullscreenEnter {
document.upcast::<EventTarget>().fire_event(atom!("fullscreenchange"));
// Step 7.7
- // JSAutoCompartment needs to be manually made.
- // Otherwise, Servo will crash.
- let promise = self.promise.root();
- let promise_cx = promise.global().get_cx();
- let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
- promise.resolve(promise.global().get_cx(), HandleValue::undefined());
+ promise.resolve_native(&());
}
}
@@ -3125,12 +3116,7 @@ impl TaskOnce for ElementPerformFullscreenExit {
document.upcast::<EventTarget>().fire_event(atom!("fullscreenchange"));
// Step 9.10
- let promise = self.promise.root();
- // JSAutoCompartment needs to be manually made.
- // Otherwise, Servo will crash.
- let promise_cx = promise.global().get_cx();
- let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
- promise.resolve(promise.global().get_cx(), HandleValue::undefined());
+ self.promise.root().resolve_native(&());
}
}
diff --git a/components/script/dom/permissions.rs b/components/script/dom/permissions.rs
index 3368782d06e..99908aa51e9 100644
--- a/components/script/dom/permissions.rs
+++ b/components/script/dom/permissions.rs
@@ -89,7 +89,7 @@ impl Permissions {
let root_desc = match Permissions::create_descriptor(cx, permissionDesc) {
Ok(descriptor) => descriptor,
Err(error) => {
- p.reject_error(cx, error);
+ p.reject_error(error);
return p;
},
};
@@ -103,7 +103,7 @@ impl Permissions {
let bluetooth_desc = match Bluetooth::create_descriptor(cx, permissionDesc) {
Ok(descriptor) => descriptor,
Err(error) => {
- p.reject_error(cx, error);
+ p.reject_error(error);
return p;
},
};
@@ -140,14 +140,14 @@ impl Permissions {
// (Request) Step 7. The default algorithm always resolve
// (Request) Step 8.
- p.resolve_native(cx, &status);
+ p.resolve_native(&status);
},
&Operation::Query => {
// (Query) Step 6.
Permissions::permission_query(cx, &p, &root_desc, &status);
// (Query) Step 7.
- p.resolve_native(cx, &status);
+ p.resolve_native(&status);
},
&Operation::Revoke => {
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs
index 5595e999c9d..51b7c1763af 100644
--- a/components/script/dom/promise.rs
+++ b/components/script/dom/promise.rs
@@ -11,8 +11,6 @@
//! native Promise values that refer to the same JS value yet are distinct native objects
//! (ie. address equality for the native objects is meaningless).
-use dom::bindings::callback::CallbackContainer;
-use dom::bindings::codegen::Bindings::PromiseBinding::AnyCallback;
use dom::bindings::conversions::root_from_object;
use dom::bindings::error::{Error, Fallible};
use dom::bindings::reflector::{DomObject, MutDomObject, Reflector};
@@ -21,7 +19,7 @@ use dom::globalscope::GlobalScope;
use dom::promisenativehandler::PromiseNativeHandler;
use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
-use js::jsapi::{CallOriginalPromiseResolve, CallOriginalPromiseReject, CallOriginalPromiseThen};
+use js::jsapi::{CallOriginalPromiseResolve, CallOriginalPromiseReject};
use js::jsapi::{JSAutoCompartment, CallArgs, JS_GetFunctionObject, JS_NewFunction};
use js::jsapi::{JSContext, HandleValue, HandleObject, IsPromiseObject, GetFunctionNativeReserved};
use js::jsapi::{JS_ClearPendingException, JSObject, AddRawValueRoot, RemoveRawValueRoot, PromiseState};
@@ -114,95 +112,78 @@ impl Promise {
}
#[allow(unrooted_must_root, unsafe_code)]
- pub fn Resolve(global: &GlobalScope,
- cx: *mut JSContext,
- value: HandleValue) -> Fallible<Rc<Promise>> {
+ pub unsafe fn new_resolved(
+ global: &GlobalScope,
+ cx: *mut JSContext,
+ value: HandleValue,
+ ) -> Fallible<Rc<Promise>> {
let _ac = JSAutoCompartment::new(cx, global.reflector().get_jsobject().get());
- rooted!(in(cx) let p = unsafe { CallOriginalPromiseResolve(cx, value) });
+ rooted!(in(cx) let p = CallOriginalPromiseResolve(cx, value));
assert!(!p.handle().is_null());
- unsafe {
- Ok(Promise::new_with_js_promise(p.handle(), cx))
- }
+ Ok(Promise::new_with_js_promise(p.handle(), cx))
}
#[allow(unrooted_must_root, unsafe_code)]
- pub fn Reject(global: &GlobalScope,
- cx: *mut JSContext,
- value: HandleValue) -> Fallible<Rc<Promise>> {
+ pub unsafe fn new_rejected(
+ global: &GlobalScope,
+ cx: *mut JSContext,
+ value: HandleValue,
+ ) -> Fallible<Rc<Promise>> {
let _ac = JSAutoCompartment::new(cx, global.reflector().get_jsobject().get());
- rooted!(in(cx) let p = unsafe { CallOriginalPromiseReject(cx, value) });
+ rooted!(in(cx) let p = CallOriginalPromiseReject(cx, value));
assert!(!p.handle().is_null());
- unsafe {
- Ok(Promise::new_with_js_promise(p.handle(), cx))
- }
+ Ok(Promise::new_with_js_promise(p.handle(), cx))
}
#[allow(unsafe_code)]
- pub fn resolve_native<T>(&self, cx: *mut JSContext, val: &T) where T: ToJSValConvertible {
+ pub fn resolve_native<T>(&self, val: &T) where T: ToJSValConvertible {
+ let cx = self.global().get_cx();
+ let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
val.to_jsval(cx, v.handle_mut());
+ self.resolve(cx, v.handle());
}
- self.resolve(cx, v.handle());
}
#[allow(unrooted_must_root, unsafe_code)]
- pub fn resolve(&self, cx: *mut JSContext, value: HandleValue) {
- unsafe {
- if !ResolvePromise(cx, self.promise_obj(), value) {
- JS_ClearPendingException(cx);
- }
+ pub unsafe fn resolve(&self, cx: *mut JSContext, value: HandleValue) {
+ if !ResolvePromise(cx, self.promise_obj(), value) {
+ JS_ClearPendingException(cx);
}
}
#[allow(unsafe_code)]
- pub fn reject_native<T>(&self, cx: *mut JSContext, val: &T) where T: ToJSValConvertible {
+ pub fn reject_native<T>(&self, val: &T) where T: ToJSValConvertible {
+ let cx = self.global().get_cx();
+ let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
val.to_jsval(cx, v.handle_mut());
+ self.reject(cx, v.handle());
}
- self.reject(cx, v.handle());
}
#[allow(unsafe_code)]
- pub fn reject_error(&self, cx: *mut JSContext, error: Error) {
+ pub fn reject_error(&self, error: Error) {
+ let cx = self.global().get_cx();
+ let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
error.to_jsval(cx, &self.global(), v.handle_mut());
+ self.reject(cx, v.handle());
}
- self.reject(cx, v.handle());
}
#[allow(unrooted_must_root, unsafe_code)]
- pub fn reject(&self,
- cx: *mut JSContext,
- value: HandleValue) {
- unsafe {
- if !RejectPromise(cx, self.promise_obj(), value) {
- JS_ClearPendingException(cx);
- }
- }
- }
-
- #[allow(unrooted_must_root, unsafe_code)]
- pub fn then(&self,
- cx: *mut JSContext,
- _callee: HandleObject,
- cb_resolve: AnyCallback,
- cb_reject: AnyCallback,
- result: MutableHandleObject) {
- let promise = self.promise_obj();
- rooted!(in(cx) let resolve = cb_resolve.callback());
- rooted!(in(cx) let reject = cb_reject.callback());
- unsafe {
- rooted!(in(cx) let res =
- CallOriginalPromiseThen(cx, promise, resolve.handle(), reject.handle()));
- result.set(*res);
+ pub unsafe fn reject(&self, cx: *mut JSContext, value: HandleValue) {
+ if !RejectPromise(cx, self.promise_obj(), value) {
+ JS_ClearPendingException(cx);
}
}
#[allow(unsafe_code)]
- pub fn is_settled(&self) -> bool {
+ pub fn is_fulfilled(&self) -> bool {
let state = unsafe { GetPromiseState(self.promise_obj()) };
match state {
PromiseState::Rejected | PromiseState::Fulfilled => true,
diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs
index 37e89714fe2..ed423c0a849 100644
--- a/components/script/dom/serviceworkercontainer.rs
+++ b/components/script/dom/serviceworkercontainer.rs
@@ -58,14 +58,13 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
options: &RegistrationOptions) -> Rc<Promise> {
// A: Step 1
let promise = Promise::new(&*self.global());
- let ctx = (&*self.global()).get_cx();
let USVString(ref script_url) = script_url;
let api_base_url = self.global().api_base_url();
// A: Step 3-5
let script_url = match api_base_url.join(script_url) {
Ok(url) => url,
Err(_) => {
- promise.reject_error(ctx, Error::Type("Invalid script URL".to_owned()));
+ promise.reject_error(Error::Type("Invalid script URL".to_owned()));
return promise;
}
};
@@ -73,14 +72,14 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
match script_url.scheme() {
"https" | "http" => {},
_ => {
- promise.reject_error(ctx, Error::Type("Only secure origins are allowed".to_owned()));
+ promise.reject_error(Error::Type("Only secure origins are allowed".to_owned()));
return promise;
}
}
// B: Step 3
if script_url.path().to_ascii_lowercase().contains("%2f") ||
script_url.path().to_ascii_lowercase().contains("%5c") {
- promise.reject_error(ctx, Error::Type("Script URL contains forbidden characters".to_owned()));
+ promise.reject_error(Error::Type("Script URL contains forbidden characters".to_owned()));
return promise;
}
// B: Step 4-5
@@ -90,7 +89,7 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
match api_base_url.join(inner_scope) {
Ok(url) => url,
Err(_) => {
- promise.reject_error(ctx, Error::Type("Invalid scope URL".to_owned()));
+ promise.reject_error(Error::Type("Invalid scope URL".to_owned()));
return promise;
}
}
@@ -101,14 +100,14 @@ impl ServiceWorkerContainerMethods for ServiceWorkerContainer {
match scope.scheme() {
"https" | "http" => {},
_ => {
- promise.reject_error(ctx, Error::Type("Only secure origins are allowed".to_owned()));
+ promise.reject_error(Error::Type("Only secure origins are allowed".to_owned()));
return promise;
}
}
// B: Step 7
if scope.path().to_ascii_lowercase().contains("%2f") ||
scope.path().to_ascii_lowercase().contains("%5c") {
- promise.reject_error(ctx, Error::Type("Scope URL contains forbidden characters".to_owned()));
+ promise.reject_error(Error::Type("Scope URL contains forbidden characters".to_owned()));
return promise;
}
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index 7bdb6e9910c..1a56a77a64f 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -35,7 +35,7 @@ use dom::promise::Promise;
use dom::promisenativehandler::{PromiseNativeHandler, Callback};
use dom::url::URL;
use dom_struct::dom_struct;
-use js::jsapi::{HandleObject, HandleValue, Heap, JSContext, JSObject, JSAutoCompartment};
+use js::jsapi::{HandleObject, HandleValue, Heap, JSContext, JSObject};
use js::jsapi::{JS_NewPlainObject, JS_NewUint8ClampedArray};
use js::jsval::{JSVal, NullValue};
use script_traits::MsDuration;
@@ -675,13 +675,13 @@ impl TestBindingMethods for TestBinding {
#[allow(unrooted_must_root)]
#[allow(unsafe_code)]
unsafe fn ReturnResolvedPromise(&self, cx: *mut JSContext, v: HandleValue) -> Fallible<Rc<Promise>> {
- Promise::Resolve(&self.global(), cx, v)
+ Promise::new_resolved(&self.global(), cx, v)
}
#[allow(unrooted_must_root)]
#[allow(unsafe_code)]
unsafe fn ReturnRejectedPromise(&self, cx: *mut JSContext, v: HandleValue) -> Fallible<Rc<Promise>> {
- Promise::Reject(&self.global(), cx, v)
+ Promise::new_rejected(&self.global(), cx, v)
}
#[allow(unsafe_code)]
@@ -695,7 +695,7 @@ impl TestBindingMethods for TestBinding {
}
fn PromiseRejectWithTypeError(&self, p: &Promise, s: USVString) {
- p.reject_error(self.global().get_cx(), Error::Type(s.0));
+ p.reject_error(Error::Type(s.0));
}
#[allow(unrooted_must_root)]
@@ -814,9 +814,6 @@ pub struct TestBindingCallback {
impl TestBindingCallback {
#[allow(unrooted_must_root)]
pub fn invoke(self) {
- let p = self.promise.root();
- let cx = p.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, p.reflector().get_jsobject().get());
- p.resolve_native(cx, &self.value);
+ self.promise.root().resolve_native(&self.value);
}
}
diff --git a/components/script/dom/vr.rs b/components/script/dom/vr.rs
index 60edcf41050..04c63a2f002 100644
--- a/components/script/dom/vr.rs
+++ b/components/script/dom/vr.rs
@@ -73,13 +73,13 @@ impl VRMethods for VR {
}
},
Err(e) => {
- promise.reject_native(promise.global().get_cx(), &e);
+ promise.reject_native(&e);
return promise;
}
}
} else {
// WebVR spec: The Promise MUST be rejected if WebVR is not enabled/supported.
- promise.reject_error(promise.global().get_cx(), Error::Security);
+ promise.reject_error(Error::Security);
return promise;
}
@@ -87,7 +87,7 @@ impl VRMethods for VR {
let displays: Vec<Root<VRDisplay>> = self.displays.borrow().iter()
.map(|d| Root::from_ref(&**d))
.collect();
- promise.resolve_native(promise.global().get_cx(), &displays);
+ promise.resolve_native(&displays);
promise
}
diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs
index 9c86e5a6bf3..97e126db4ed 100644
--- a/components/script/dom/vrdisplay.rs
+++ b/components/script/dom/vrdisplay.rs
@@ -284,7 +284,7 @@ impl VRDisplayMethods for VRDisplay {
// WebVR spec: If canPresent is false the promise MUST be rejected
if !self.display.borrow().capabilities.can_present {
let msg = "VRDisplay canPresent is false".to_string();
- promise.reject_native(promise.global().get_cx(), &msg);
+ promise.reject_native(&msg);
return promise;
}
@@ -294,7 +294,7 @@ impl VRDisplayMethods for VRDisplay {
// That functionality is not allowed by this revision of the spec.
if layers.len() != 1 {
let msg = "The number of layers must be 1".to_string();
- promise.reject_native(promise.global().get_cx(), &msg);
+ promise.reject_native(&msg);
return promise;
}
@@ -311,7 +311,7 @@ impl VRDisplayMethods for VRDisplay {
},
Err(msg) => {
let msg = msg.to_string();
- promise.reject_native(promise.global().get_cx(), &msg);
+ promise.reject_native(&msg);
return promise;
}
};
@@ -320,7 +320,7 @@ impl VRDisplayMethods for VRDisplay {
if self.presenting.get() {
*self.layer.borrow_mut() = layer_bounds;
self.layer_ctx.set(Some(&layer_ctx));
- promise.resolve_native(promise.global().get_cx(), &());
+ promise.resolve_native(&());
return promise;
}
@@ -335,10 +335,10 @@ impl VRDisplayMethods for VRDisplay {
*self.layer.borrow_mut() = layer_bounds;
self.layer_ctx.set(Some(&layer_ctx));
self.init_present();
- promise.resolve_native(promise.global().get_cx(), &());
+ promise.resolve_native(&());
},
Err(e) => {
- promise.reject_native(promise.global().get_cx(), &e);
+ promise.reject_native(&e);
}
}
@@ -353,7 +353,7 @@ impl VRDisplayMethods for VRDisplay {
// WebVR spec: If the VRDisplay is not presenting the promise MUST be rejected.
if !self.presenting.get() {
let msg = "VRDisplay is not presenting".to_string();
- promise.reject_native(promise.global().get_cx(), &msg);
+ promise.reject_native(&msg);
return promise;
}
@@ -366,10 +366,10 @@ impl VRDisplayMethods for VRDisplay {
match receiver.recv().unwrap() {
Ok(()) => {
self.stop_present();
- promise.resolve_native(promise.global().get_cx(), &());
+ promise.resolve_native(&());
},
Err(e) => {
- promise.reject_native(promise.global().get_cx(), &e);
+ promise.reject_native(&e);
}
}
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index 4028670b393..6049f7cf0e0 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -123,7 +123,7 @@ impl WorkletMethods for Worklet {
Err(err) => {
// Step 4.
debug!("URL {:?} parse error {:?}.", module_url.0, err);
- promise.reject_error(self.window.get_cx(), Error::Syntax);
+ promise.reject_error(Error::Syntax);
return promise;
}
};