diff options
Diffstat (limited to 'components/script/dom')
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; } }; |