aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarmeladema <xademax@gmail.com>2019-07-22 22:14:11 +0100
committermarmeladema <xademax@gmail.com>2019-07-24 09:53:10 +0100
commit88cacfb0098e20be70c27bfde6b74cd3290f1fe4 (patch)
tree95d7cd9ffad7eaff05114946a1e12f8e49d55fab
parent2c5d0a6ebc39ad263e2bbe623e357a11b4cec5aa (diff)
downloadservo-88cacfb0098e20be70c27bfde6b74cd3290f1fe4.tar.gz
servo-88cacfb0098e20be70c27bfde6b74cd3290f1fe4.zip
Modify *::get_cx methods to return a safe JSContext instead of a raw one
-rw-r--r--components/script/body.rs32
-rw-r--r--components/script/compartments.rs4
-rw-r--r--components/script/devtools.rs10
-rw-r--r--components/script/dom/audiobuffer.rs14
-rw-r--r--components/script/dom/bindings/callback.rs4
-rw-r--r--components/script/dom/bindings/htmlconstructor.rs14
-rw-r--r--components/script/dom/bindings/reflector.rs12
-rw-r--r--components/script/dom/bindings/structuredclone.rs2
-rw-r--r--components/script/dom/create.rs6
-rw-r--r--components/script/dom/customelementregistry.rs82
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs4
-rw-r--r--components/script/dom/dissimilaroriginwindow.rs2
-rw-r--r--components/script/dom/documentorshadowroot.rs4
-rw-r--r--components/script/dom/eventsource.rs4
-rw-r--r--components/script/dom/eventtarget.rs37
-rw-r--r--components/script/dom/filereader.rs2
-rw-r--r--components/script/dom/gamepad.rs6
-rw-r--r--components/script/dom/globalscope.rs18
-rw-r--r--components/script/dom/history.rs2
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rw-r--r--components/script/dom/imagedata.rs10
-rw-r--r--components/script/dom/paintworkletglobalscope.rs51
-rw-r--r--components/script/dom/promise.rs36
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs4
-rw-r--r--components/script/dom/userscripts.rs2
-rw-r--r--components/script/dom/vreyeparameters.rs4
-rw-r--r--components/script/dom/vrframedata.rs4
-rw-r--r--components/script/dom/vrpose.rs90
-rw-r--r--components/script/dom/vrstageparameters.rs6
-rw-r--r--components/script/dom/websocket.rs14
-rw-r--r--components/script/dom/window.rs38
-rw-r--r--components/script/dom/windowproxy.rs18
-rw-r--r--components/script/dom/worker.rs4
-rw-r--r--components/script/dom/workerglobalscope.rs19
-rw-r--r--components/script/dom/workletglobalscope.rs6
-rw-r--r--components/script/dom/xrrigidtransform.rs3
-rw-r--r--components/script/dom/xrview.rs3
-rw-r--r--components/script/dom/xrviewerpose.rs6
-rw-r--r--components/script/dom/xrwebgllayer.rs2
-rw-r--r--components/script/script_runtime.rs9
-rw-r--r--components/script/script_thread.rs21
-rw-r--r--components/script/timers.rs2
-rw-r--r--components/script/webdriver_handlers.rs14
43 files changed, 306 insertions, 321 deletions
diff --git a/components/script/body.rs b/components/script/body.rs
index 1e18bc565a6..728315bf1fa 100644
--- a/components/script/body.rs
+++ b/components/script/body.rs
@@ -13,8 +13,8 @@ use crate::dom::blob::{Blob, BlobImpl};
use crate::dom::formdata::FormData;
use crate::dom::globalscope::GlobalScope;
use crate::dom::promise::Promise;
+use crate::script_runtime::JSContext;
use js::jsapi::Heap;
-use js::jsapi::JSContext;
use js::jsapi::JSObject;
use js::jsapi::JS_ClearPendingException;
use js::jsapi::Value as JSValue;
@@ -122,7 +122,7 @@ fn run_package_data_algorithm<T: BodyOperations + DomObject>(
BodyType::Json => run_json_data_algorithm(cx, bytes),
BodyType::Blob => run_blob_data_algorithm(&global, bytes, mime),
BodyType::FormData => run_form_data_algorithm(&global, bytes, mime),
- BodyType::ArrayBuffer => unsafe { run_array_buffer_data_algorithm(cx, bytes) },
+ BodyType::ArrayBuffer => run_array_buffer_data_algorithm(cx, bytes),
}
}
@@ -133,20 +133,20 @@ fn run_text_data_algorithm(bytes: Vec<u8>) -> Fallible<FetchedData> {
}
#[allow(unsafe_code)]
-fn run_json_data_algorithm(cx: *mut JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> {
+fn run_json_data_algorithm(cx: JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> {
let json_text = String::from_utf8_lossy(&bytes);
let json_text: Vec<u16> = json_text.encode_utf16().collect();
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
unsafe {
if !JS_ParseJSON(
- cx,
+ *cx,
json_text.as_ptr(),
json_text.len() as u32,
rval.handle_mut(),
) {
- rooted!(in(cx) let mut exception = UndefinedValue());
- assert!(JS_GetPendingException(cx, exception.handle_mut()));
- JS_ClearPendingException(cx);
+ rooted!(in(*cx) let mut exception = UndefinedValue());
+ assert!(JS_GetPendingException(*cx, exception.handle_mut()));
+ JS_ClearPendingException(*cx);
return Ok(FetchedData::JSException(RootedTraceableBox::from_box(
Heap::boxed(exception.get()),
)));
@@ -200,13 +200,15 @@ fn run_form_data_algorithm(
}
#[allow(unsafe_code)]
-unsafe fn run_array_buffer_data_algorithm(
- cx: *mut JSContext,
- bytes: Vec<u8>,
-) -> Fallible<FetchedData> {
- rooted!(in(cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
- let arraybuffer =
- ArrayBuffer::create(cx, CreateWith::Slice(&bytes), array_buffer_ptr.handle_mut());
+fn run_array_buffer_data_algorithm(cx: JSContext, bytes: Vec<u8>) -> Fallible<FetchedData> {
+ rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
+ let arraybuffer = unsafe {
+ ArrayBuffer::create(
+ *cx,
+ CreateWith::Slice(&bytes),
+ array_buffer_ptr.handle_mut(),
+ )
+ };
if arraybuffer.is_err() {
return Err(Error::JSFailed);
}
diff --git a/components/script/compartments.rs b/components/script/compartments.rs
index cb8c973e70e..c26e72ccd1a 100644
--- a/components/script/compartments.rs
+++ b/components/script/compartments.rs
@@ -12,7 +12,7 @@ impl AlreadyInCompartment {
#![allow(unsafe_code)]
pub fn assert(global: &GlobalScope) -> AlreadyInCompartment {
unsafe {
- assert!(!GetCurrentRealmOrNull(global.get_cx()).is_null());
+ assert!(!GetCurrentRealmOrNull(*global.get_cx()).is_null());
}
AlreadyInCompartment(())
}
@@ -43,7 +43,7 @@ impl<'a> InCompartment<'a> {
pub fn enter_realm(object: &impl DomObject) -> JSAutoRealm {
JSAutoRealm::new(
- object.global().get_cx(),
+ *object.global().get_cx(),
object.reflector().get_jsobject().get(),
)
}
diff --git a/components/script/devtools.rs b/components/script/devtools.rs
index 5a0e1c9090c..7ae02dd3e1f 100644
--- a/components/script/devtools.rs
+++ b/components/script/devtools.rs
@@ -36,7 +36,7 @@ pub fn handle_evaluate_js(global: &GlobalScope, eval: String, reply: IpcSender<E
let result = unsafe {
let cx = global.get_cx();
let _ac = enter_realm(global);
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
global.evaluate_js_on_global_with_result(&eval, rval.handle_mut());
if rval.is_undefined() {
@@ -45,20 +45,20 @@ pub fn handle_evaluate_js(global: &GlobalScope, eval: String, reply: IpcSender<E
EvaluateJSReply::BooleanValue(rval.to_boolean())
} else if rval.is_double() || rval.is_int32() {
EvaluateJSReply::NumberValue(
- match FromJSValConvertible::from_jsval(cx, rval.handle(), ()) {
+ match FromJSValConvertible::from_jsval(*cx, rval.handle(), ()) {
Ok(ConversionResult::Success(v)) => v,
_ => unreachable!(),
},
)
} else if rval.is_string() {
- EvaluateJSReply::StringValue(String::from(jsstring_to_str(cx, rval.to_string())))
+ EvaluateJSReply::StringValue(String::from(jsstring_to_str(*cx, rval.to_string())))
} else if rval.is_null() {
EvaluateJSReply::NullValue
} else {
assert!(rval.is_object());
- rooted!(in(cx) let obj = rval.to_object());
- let class_name = CStr::from_ptr(ObjectClassName(cx, obj.handle()));
+ rooted!(in(*cx) let obj = rval.to_object());
+ let class_name = CStr::from_ptr(ObjectClassName(*cx, obj.handle()));
let class_name = str::from_utf8(class_name.to_bytes()).unwrap();
EvaluateJSReply::ActorValue {
diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs
index a5b8dfbc8c8..4b113a200fe 100644
--- a/components/script/dom/audiobuffer.rs
+++ b/components/script/dom/audiobuffer.rs
@@ -173,15 +173,15 @@ impl AudioBuffer {
// Step 2.
let channel_data = unsafe {
- typedarray!(in(cx) let array: Float32Array = channel.get());
+ typedarray!(in(*cx) let array: Float32Array = channel.get());
if let Ok(array) = array {
let data = array.to_vec();
let mut is_shared = false;
- rooted!(in (cx) let view_buffer =
- JS_GetArrayBufferViewBuffer(cx, channel.handle(), &mut is_shared));
+ rooted!(in (*cx) let view_buffer =
+ JS_GetArrayBufferViewBuffer(*cx, channel.handle(), &mut is_shared));
// This buffer is always created unshared
debug_assert!(!is_shared);
- let _ = DetachArrayBuffer(cx, view_buffer.handle());
+ let _ = DetachArrayBuffer(*cx, view_buffer.handle());
data
} else {
return None;
@@ -272,7 +272,7 @@ impl AudioBufferMethods for AudioBuffer {
// We either copy form js_channels or shared_channels.
let js_channel = self.js_channels.borrow()[channel_number].get();
if !js_channel.is_null() {
- typedarray!(in(cx) let array: Float32Array = js_channel);
+ typedarray!(in(*cx) let array: Float32Array = js_channel);
if let Ok(array) = array {
let data = unsafe { array.as_slice() };
dest.extend_from_slice(&data[offset..offset + bytes_to_copy]);
@@ -307,7 +307,7 @@ impl AudioBufferMethods for AudioBuffer {
}
let cx = self.global().get_cx();
- if unsafe { !self.restore_js_channel_data(cx) } {
+ if unsafe { !self.restore_js_channel_data(*cx) } {
return Err(Error::JSFailed);
}
@@ -317,7 +317,7 @@ impl AudioBufferMethods for AudioBuffer {
return Err(Error::IndexSize);
}
- typedarray!(in(cx) let js_channel: Float32Array = js_channel);
+ typedarray!(in(*cx) let js_channel: Float32Array = js_channel);
if let Ok(mut js_channel) = js_channel {
let bytes_to_copy = min(self.length - start_in_channel, source.len() as u32) as usize;
let js_channel_data = unsafe { js_channel.as_mut_slice() };
diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs
index 77f6880e35a..03b8f326f55 100644
--- a/components/script/dom/bindings/callback.rs
+++ b/components/script/dom/bindings/callback.rs
@@ -255,8 +255,8 @@ impl CallSetup {
let ais = callback.incumbent().map(AutoIncumbentScript::new);
CallSetup {
exception_global: global,
- cx: cx,
- old_realm: unsafe { EnterRealm(cx, callback.callback()) },
+ cx: *cx,
+ old_realm: unsafe { EnterRealm(*cx, callback.callback()) },
handling: handling,
entry_script: Some(aes),
incumbent_script: ais,
diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs
index f976a09ee91..6faa4f6211c 100644
--- a/components/script/dom/bindings/htmlconstructor.rs
+++ b/components/script/dom/bindings/htmlconstructor.rs
@@ -100,7 +100,7 @@ where
// Step 2 is checked in the generated caller code
// Step 3
- rooted!(in(window.get_cx()) let new_target = call_args.new_target().to_object());
+ rooted!(in(*window.get_cx()) let new_target = call_args.new_target().to_object());
let definition = match registry.lookup_definition_by_constructor(new_target.handle()) {
Some(definition) => definition,
None => {
@@ -110,15 +110,15 @@ where
},
};
- rooted!(in(window.get_cx()) let callee = UnwrapObjectStatic(call_args.callee()));
+ rooted!(in(*window.get_cx()) let callee = UnwrapObjectStatic(call_args.callee()));
if callee.is_null() {
return Err(Error::Security);
}
{
- let _ac = JSAutoRealm::new(window.get_cx(), callee.get());
- rooted!(in(window.get_cx()) let mut constructor = ptr::null_mut::<JSObject>());
- rooted!(in(window.get_cx()) let global_object = CurrentGlobalOrNull(window.get_cx()));
+ let _ac = JSAutoRealm::new(*window.get_cx(), callee.get());
+ rooted!(in(*window.get_cx()) let mut constructor = ptr::null_mut::<JSObject>());
+ rooted!(in(*window.get_cx()) let global_object = CurrentGlobalOrNull(*window.get_cx()));
if definition.is_autonomous() {
// Step 4
@@ -126,7 +126,7 @@ where
// Retrieve the constructor object for HTMLElement
HTMLElementBinding::GetConstructorObject(
- SafeJSContext::from_ptr(window.get_cx()),
+ window.get_cx(),
global_object.handle(),
constructor.handle_mut(),
);
@@ -134,7 +134,7 @@ where
// Step 5
get_constructor_object_from_local_name(
definition.local_name.clone(),
- window.get_cx(),
+ *window.get_cx(),
global_object.handle(),
constructor.handle_mut(),
);
diff --git a/components/script/dom/bindings/reflector.rs b/components/script/dom/bindings/reflector.rs
index a66ff114226..dc13fca77b0 100644
--- a/components/script/dom/bindings/reflector.rs
+++ b/components/script/dom/bindings/reflector.rs
@@ -7,7 +7,7 @@
use crate::dom::bindings::conversions::DerivedFrom;
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
-use crate::script_runtime::JSContext as SafeJSContext;
+use crate::script_runtime::JSContext;
use js::jsapi::{Heap, JSObject};
use js::rust::HandleObject;
use std::default::Default;
@@ -17,20 +17,14 @@ use std::default::Default;
pub fn reflect_dom_object<T, U>(
obj: Box<T>,
global: &U,
- wrap_fn: unsafe fn(SafeJSContext, &GlobalScope, Box<T>) -> DomRoot<T>,
+ wrap_fn: unsafe fn(JSContext, &GlobalScope, Box<T>) -> DomRoot<T>,
) -> DomRoot<T>
where
T: DomObject,
U: DerivedFrom<GlobalScope>,
{
let global_scope = global.upcast();
- unsafe {
- wrap_fn(
- SafeJSContext::from_ptr(global_scope.get_cx()),
- global_scope,
- obj,
- )
- }
+ unsafe { wrap_fn(global_scope.get_cx(), global_scope, obj) }
}
/// A struct to store a reference to the reflector of a DOM object.
diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs
index 167b375dbc7..f35a4af7210 100644
--- a/components/script/dom/bindings/structuredclone.rs
+++ b/components/script/dom/bindings/structuredclone.rs
@@ -321,7 +321,7 @@ impl StructuredCloneData {
WriteBytesToJSStructuredCloneData(data as *const u8, nbytes, scdata);
assert!(JS_ReadStructuredClone(
- cx,
+ *cx,
scdata,
JS_STRUCTURED_CLONE_VERSION,
StructuredCloneScope::DifferentProcess,
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 5ca05d2f713..18c9504a245 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -157,9 +157,9 @@ fn create_html_element(
// Step 6.1.1
unsafe {
let _ac =
- JSAutoRealm::new(cx, global.reflector().get_jsobject().get());
- throw_dom_exception(cx, &global, error);
- report_pending_exception(cx, true);
+ JSAutoRealm::new(*cx, global.reflector().get_jsobject().get());
+ throw_dom_exception(*cx, &global, error);
+ report_pending_exception(*cx, true);
}
// Step 6.1.2
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 6b2f8992c0a..2603768ed83 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -145,7 +145,7 @@ impl CustomElementRegistry {
unsafe {
// Step 10.1
if !JS_GetProperty(
- global_scope.get_cx(),
+ *global_scope.get_cx(),
constructor,
b"prototype\0".as_ptr() as *const _,
prototype,
@@ -171,10 +171,14 @@ impl CustomElementRegistry {
// Step 4
Ok(LifecycleCallbacks {
- connected_callback: get_callback(cx, prototype, b"connectedCallback\0")?,
- disconnected_callback: get_callback(cx, prototype, b"disconnectedCallback\0")?,
- adopted_callback: get_callback(cx, prototype, b"adoptedCallback\0")?,
- attribute_changed_callback: get_callback(cx, prototype, b"attributeChangedCallback\0")?,
+ connected_callback: get_callback(*cx, prototype, b"connectedCallback\0")?,
+ disconnected_callback: get_callback(*cx, prototype, b"disconnectedCallback\0")?,
+ adopted_callback: get_callback(*cx, prototype, b"adoptedCallback\0")?,
+ attribute_changed_callback: get_callback(
+ *cx,
+ prototype,
+ b"attributeChangedCallback\0",
+ )?,
})
}
@@ -183,10 +187,10 @@ impl CustomElementRegistry {
#[allow(unsafe_code)]
fn get_observed_attributes(&self, constructor: HandleObject) -> Fallible<Vec<DOMString>> {
let cx = self.window.get_cx();
- rooted!(in(cx) let mut observed_attributes = UndefinedValue());
+ rooted!(in(*cx) let mut observed_attributes = UndefinedValue());
if unsafe {
!JS_GetProperty(
- cx,
+ *cx,
constructor,
b"observedAttributes\0".as_ptr() as *const _,
observed_attributes.handle_mut(),
@@ -201,7 +205,7 @@ impl CustomElementRegistry {
let conversion = unsafe {
FromJSValConvertible::from_jsval(
- cx,
+ *cx,
observed_attributes.handle(),
StringificationBehavior::Default,
)
@@ -258,12 +262,12 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
options: &ElementDefinitionOptions,
) -> ErrorResult {
let cx = self.window.get_cx();
- rooted!(in(cx) let constructor = constructor_.callback());
+ rooted!(in(*cx) let constructor = constructor_.callback());
let name = LocalName::from(&*name);
// Step 1
// We must unwrap the constructor as all wrappers are constructable if they are callable.
- rooted!(in(cx) let unwrapped_constructor = unsafe { UnwrapObjectStatic(constructor.get()) });
+ rooted!(in(*cx) let unwrapped_constructor = unsafe { UnwrapObjectStatic(constructor.get()) });
if unwrapped_constructor.is_null() {
// We do not have permission to access the unwrapped constructor.
@@ -326,9 +330,9 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
self.element_definition_is_running.set(true);
// Steps 10.1 - 10.2
- rooted!(in(cx) let mut prototype = UndefinedValue());
+ rooted!(in(*cx) let mut prototype = UndefinedValue());
{
- let _ac = JSAutoRealm::new(cx, constructor.get());
+ let _ac = JSAutoRealm::new(*cx, constructor.get());
if let Err(error) = self.check_prototype(constructor.handle(), prototype.handle_mut()) {
self.element_definition_is_running.set(false);
return Err(error);
@@ -336,9 +340,9 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
};
// Steps 10.3 - 10.4
- rooted!(in(cx) let proto_object = prototype.to_object());
+ rooted!(in(*cx) let proto_object = prototype.to_object());
let callbacks = {
- let _ac = JSAutoRealm::new(cx, proto_object.get());
+ let _ac = JSAutoRealm::new(*cx, proto_object.get());
match unsafe { self.get_callbacks(proto_object.handle()) } {
Ok(callbacks) => callbacks,
Err(error) => {
@@ -350,7 +354,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Step 10.5 - 10.6
let observed_attributes = if callbacks.attribute_changed_callback.is_some() {
- let _ac = JSAutoRealm::new(cx, constructor.get());
+ let _ac = JSAutoRealm::new(*cx, constructor.get());
match self.get_observed_attributes(constructor.handle()) {
Ok(attributes) => attributes,
Err(error) => {
@@ -523,20 +527,20 @@ impl CustomElementDefinition {
let window = document.window();
let cx = window.get_cx();
// Step 2
- rooted!(in(cx) let constructor = ObjectValue(self.constructor.callback()));
- rooted!(in(cx) let mut element = ptr::null_mut::<JSObject>());
+ rooted!(in(*cx) let constructor = ObjectValue(self.constructor.callback()));
+ rooted!(in(*cx) let mut element = ptr::null_mut::<JSObject>());
{
// Go into the constructor's compartment
- let _ac = JSAutoRealm::new(cx, self.constructor.callback());
+ let _ac = JSAutoRealm::new(*cx, self.constructor.callback());
let args = HandleValueArray::new();
- if unsafe { !Construct1(cx, constructor.handle(), &args, element.handle_mut()) } {
+ if unsafe { !Construct1(*cx, constructor.handle(), &args, element.handle_mut()) } {
return Err(Error::JSFailed);
}
}
- rooted!(in(cx) let element_val = ObjectValue(element.get()));
+ rooted!(in(*cx) let element_val = ObjectValue(element.get()));
let element: DomRoot<Element> =
- match unsafe { DomRoot::from_jsval(cx, element_val.handle(), ()) } {
+ match unsafe { DomRoot::from_jsval(*cx, element_val.handle(), ()) } {
Ok(ConversionResult::Success(element)) => element,
Ok(ConversionResult::Failure(..)) => {
return Err(Error::Type(
@@ -627,8 +631,8 @@ pub fn upgrade_element(definition: Rc<CustomElementDefinition>, element: &Elemen
let global = GlobalScope::current().expect("No current global");
let cx = global.get_cx();
unsafe {
- throw_dom_exception(cx, &global, error);
- report_pending_exception(cx, true);
+ throw_dom_exception(*cx, &global, error);
+ report_pending_exception(*cx, true);
}
return;
}
@@ -649,20 +653,20 @@ fn run_upgrade_constructor(
) -> ErrorResult {
let window = window_from_node(element);
let cx = window.get_cx();
- rooted!(in(cx) let constructor_val = ObjectValue(constructor.callback()));
- rooted!(in(cx) let mut element_val = UndefinedValue());
+ rooted!(in(*cx) let constructor_val = ObjectValue(constructor.callback()));
+ rooted!(in(*cx) let mut element_val = UndefinedValue());
unsafe {
- element.to_jsval(cx, element_val.handle_mut());
+ element.to_jsval(*cx, element_val.handle_mut());
}
- rooted!(in(cx) let mut construct_result = ptr::null_mut::<JSObject>());
+ rooted!(in(*cx) let mut construct_result = ptr::null_mut::<JSObject>());
{
// Go into the constructor's compartment
- let _ac = JSAutoRealm::new(cx, constructor.callback());
+ let _ac = JSAutoRealm::new(*cx, constructor.callback());
let args = HandleValueArray::new();
// Step 7.1
if unsafe {
!Construct1(
- cx,
+ *cx,
constructor_val.handle(),
&args,
construct_result.handle_mut(),
@@ -672,10 +676,10 @@ fn run_upgrade_constructor(
}
// Step 7.2
let mut same = false;
- rooted!(in(cx) let construct_result_val = ObjectValue(construct_result.get()));
+ rooted!(in(*cx) let construct_result_val = ObjectValue(construct_result.get()));
if unsafe {
!SameValue(
- cx,
+ *cx,
construct_result_val.handle(),
element_val.handle(),
&mut same,
@@ -863,30 +867,30 @@ impl CustomElementReactionStack {
let cx = element.global().get_cx();
let local_name = DOMString::from(&*local_name);
- rooted!(in(cx) let mut name_value = UndefinedValue());
+ rooted!(in(*cx) let mut name_value = UndefinedValue());
unsafe {
- local_name.to_jsval(cx, name_value.handle_mut());
+ local_name.to_jsval(*cx, name_value.handle_mut());
}
- rooted!(in(cx) let mut old_value = NullValue());
+ rooted!(in(*cx) let mut old_value = NullValue());
if let Some(old_val) = old_val {
unsafe {
- old_val.to_jsval(cx, old_value.handle_mut());
+ old_val.to_jsval(*cx, old_value.handle_mut());
}
}
- rooted!(in(cx) let mut value = NullValue());
+ rooted!(in(*cx) let mut value = NullValue());
if let Some(val) = val {
unsafe {
- val.to_jsval(cx, value.handle_mut());
+ val.to_jsval(*cx, value.handle_mut());
}
}
- rooted!(in(cx) let mut namespace_value = NullValue());
+ rooted!(in(*cx) let mut namespace_value = NullValue());
if namespace != ns!() {
let namespace = DOMString::from(&*namespace);
unsafe {
- namespace.to_jsval(cx, namespace_value.handle_mut());
+ namespace.to_jsval(*cx, namespace_value.handle_mut());
}
}
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 2c6042333a6..a3adde75498 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -405,7 +405,7 @@ impl DedicatedWorkerGlobalScope {
unsafe {
// Handle interrupt requests
- JS_AddInterruptCallback(scope.get_cx(), Some(interrupt_callback));
+ JS_AddInterruptCallback(*scope.get_cx(), Some(interrupt_callback));
}
if scope.is_closing() {
@@ -466,7 +466,7 @@ impl DedicatedWorkerGlobalScope {
let scope = self.upcast::<WorkerGlobalScope>();
let target = self.upcast();
let _ac = enter_realm(self);
- rooted!(in(scope.get_cx()) let mut message = UndefinedValue());
+ rooted!(in(*scope.get_cx()) let mut message = UndefinedValue());
data.read(scope.upcast(), message.handle_mut());
MessageEvent::dispatch_jsval(target, scope.upcast(), message.handle(), None, None);
},
diff --git a/components/script/dom/dissimilaroriginwindow.rs b/components/script/dom/dissimilaroriginwindow.rs
index 8724516acec..8f7eda58100 100644
--- a/components/script/dom/dissimilaroriginwindow.rs
+++ b/components/script/dom/dissimilaroriginwindow.rs
@@ -68,7 +68,7 @@ impl DissimilarOriginWindow {
window_proxy: Dom::from_ref(window_proxy),
location: Default::default(),
});
- unsafe { DissimilarOriginWindowBinding::Wrap(JSContext::from_ptr(cx), win) }
+ unsafe { DissimilarOriginWindowBinding::Wrap(cx, win) }
}
pub fn window_proxy(&self) -> DomRoot<WindowProxy> {
diff --git a/components/script/dom/documentorshadowroot.rs b/components/script/dom/documentorshadowroot.rs
index 9b57dd32bf6..594801584c8 100644
--- a/components/script/dom/documentorshadowroot.rs
+++ b/components/script/dom/documentorshadowroot.rs
@@ -131,7 +131,7 @@ impl DocumentOrShadowRoot {
.first()
{
Some(address) => {
- let js_runtime = unsafe { JS_GetRuntime(self.window.get_cx()) };
+ let js_runtime = unsafe { JS_GetRuntime(*self.window.get_cx()) };
let node = unsafe { node::from_untrusted_node_address(js_runtime, *address) };
let parent_node = node.GetParentNode().unwrap();
let element_ref = node
@@ -167,7 +167,7 @@ impl DocumentOrShadowRoot {
return vec![];
}
- let js_runtime = unsafe { JS_GetRuntime(self.window.get_cx()) };
+ let js_runtime = unsafe { JS_GetRuntime(*self.window.get_cx()) };
// Step 1 and Step 3
let nodes = self.nodes_from_point(point, NodesFromPointQueryType::All);
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index 64c88496a46..02283a3c190 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -223,10 +223,10 @@ impl EventSourceContext {
// Steps 4-5
let event = {
let _ac = enter_realm(&*event_source);
- rooted!(in(event_source.global().get_cx()) let mut data = UndefinedValue());
+ rooted!(in(*event_source.global().get_cx()) let mut data = UndefinedValue());
unsafe {
self.data
- .to_jsval(event_source.global().get_cx(), data.handle_mut())
+ .to_jsval(*event_source.global().get_cx(), data.handle_mut())
};
MessageEvent::new(
&*event_source.global(),
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 144f918b8d6..12cf7d0253b 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -33,7 +33,6 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::node::document_from_node;
use crate::dom::virtualmethods::VirtualMethods;
use crate::dom::window::Window;
-use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use fnv::FnvHasher;
use js::jsapi::{JSAutoRealm, JSFunction, JS_GetFunctionObject, SourceText};
@@ -151,7 +150,6 @@ pub enum CompiledEventListener {
}
impl CompiledEventListener {
- #[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#the-event-handler-processing-algorithm
pub fn call_or_handle_event<T: DomObject>(
&self,
@@ -169,7 +167,7 @@ impl CompiledEventListener {
CommonEventHandler::ErrorEventHandler(ref handler) => {
if let Some(event) = event.downcast::<ErrorEvent>() {
let cx = object.global().get_cx();
- rooted!(in(cx) let error = unsafe { event.Error(JSContext::from_ptr(cx)) });
+ rooted!(in(*cx) let error = event.Error(cx));
let return_value = handler.Call_(
object,
EventOrString::String(event.Message()),
@@ -181,7 +179,7 @@ impl CompiledEventListener {
);
// Step 4
if let Ok(return_value) = return_value {
- rooted!(in(cx) let return_value = return_value);
+ rooted!(in(*cx) let return_value = return_value);
if return_value.handle().is_boolean() &&
return_value.handle().to_boolean() == true
{
@@ -226,7 +224,7 @@ impl CompiledEventListener {
CommonEventHandler::EventHandler(ref handler) => {
if let Ok(value) = handler.Call_(object, event, exception_handle) {
let cx = object.global().get_cx();
- rooted!(in(cx) let value = value);
+ rooted!(in(*cx) let value = value);
let value = value.handle();
//Step 4
@@ -503,16 +501,16 @@ impl EventTarget {
};
let cx = window.get_cx();
- let options = CompileOptionsWrapper::new(cx, url_serialized.as_ptr(), handler.line as u32);
+ let options = CompileOptionsWrapper::new(*cx, url_serialized.as_ptr(), handler.line as u32);
// TODO step 1.10.1-3 (document, form owner, element in scope chain)
- let scopechain = AutoObjectVectorWrapper::new(cx);
+ let scopechain = AutoObjectVectorWrapper::new(*cx);
let _ac = enter_realm(&*window);
- rooted!(in(cx) let mut handler = ptr::null_mut::<JSFunction>());
+ rooted!(in(*cx) let mut handler = ptr::null_mut::<JSFunction>());
let rv = unsafe {
CompileFunction(
- cx,
+ *cx,
scopechain.ptr,
options.ptr,
name.as_ptr(),
@@ -530,9 +528,9 @@ impl EventTarget {
if !rv || handler.get().is_null() {
// Step 1.8.2
unsafe {
- let _ac = JSAutoRealm::new(cx, self.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(*cx, self.reflector().get_jsobject().get());
// FIXME(#13152): dispatch error event.
- report_pending_exception(cx, false);
+ report_pending_exception(*cx, false);
}
// Step 1.8.1 / 1.8.3
return None;
@@ -544,16 +542,16 @@ impl EventTarget {
// Step 1.14
if is_error {
Some(CommonEventHandler::ErrorEventHandler(unsafe {
- OnErrorEventHandlerNonNull::new(JSContext::from_ptr(cx), funobj)
+ OnErrorEventHandlerNonNull::new(cx, funobj)
}))
} else {
if ty == &atom!("beforeunload") {
Some(CommonEventHandler::BeforeUnloadEventHandler(unsafe {
- OnBeforeUnloadEventHandlerNonNull::new(JSContext::from_ptr(cx), funobj)
+ OnBeforeUnloadEventHandlerNonNull::new(cx, funobj)
}))
} else {
Some(CommonEventHandler::EventHandler(unsafe {
- EventHandlerNonNull::new(JSContext::from_ptr(cx), funobj)
+ EventHandlerNonNull::new(cx, funobj)
}))
}
}
@@ -568,7 +566,7 @@ impl EventTarget {
let event_listener = listener.map(|listener| {
InlineEventListener::Compiled(CommonEventHandler::EventHandler(unsafe {
- EventHandlerNonNull::new(JSContext::from_ptr(cx), listener.callback())
+ EventHandlerNonNull::new(cx, listener.callback())
}))
});
self.set_inline_event_listener(Atom::from(ty), event_listener);
@@ -583,7 +581,7 @@ impl EventTarget {
let event_listener = listener.map(|listener| {
InlineEventListener::Compiled(CommonEventHandler::ErrorEventHandler(unsafe {
- OnErrorEventHandlerNonNull::new(JSContext::from_ptr(cx), listener.callback())
+ OnErrorEventHandlerNonNull::new(cx, listener.callback())
}))
});
self.set_inline_event_listener(Atom::from(ty), event_listener);
@@ -601,7 +599,7 @@ impl EventTarget {
let event_listener = listener.map(|listener| {
InlineEventListener::Compiled(CommonEventHandler::BeforeUnloadEventHandler(unsafe {
- OnBeforeUnloadEventHandlerNonNull::new(JSContext::from_ptr(cx), listener.callback())
+ OnBeforeUnloadEventHandlerNonNull::new(cx, listener.callback())
}))
});
self.set_inline_event_listener(Atom::from(ty), event_listener);
@@ -613,10 +611,7 @@ impl EventTarget {
let listener = self.get_inline_event_listener(&Atom::from(ty));
unsafe {
listener.map(|listener| {
- CallbackContainer::new(
- JSContext::from_ptr(cx),
- listener.parent().callback_holder().get(),
- )
+ CallbackContainer::new(cx, listener.parent().callback_holder().get())
})
}
}
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 0e158dedbab..fdba0e0aa75 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -266,7 +266,7 @@ impl FileReader {
let _ac = enter_realm(&*fr);
FileReader::perform_readasarraybuffer(
&fr.result,
- fr.global().get_cx(),
+ *fr.global().get_cx(),
data,
&blob_contents,
)
diff --git a/components/script/dom/gamepad.rs b/components/script/dom/gamepad.rs
index 08160bfd3ad..60a73a691fd 100644
--- a/components/script/dom/gamepad.rs
+++ b/components/script/dom/gamepad.rs
@@ -99,9 +99,9 @@ impl Gamepad {
);
let cx = global.get_cx();
- rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>());
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
unsafe {
- let _ = Float64Array::create(cx, CreateWith::Slice(&state.axes), array.handle_mut());
+ let _ = Float64Array::create(*cx, CreateWith::Slice(&state.axes), array.handle_mut());
}
gamepad.axes.set(array.get());
@@ -173,7 +173,7 @@ impl Gamepad {
self.timestamp.set(state.timestamp);
unsafe {
let cx = self.global().get_cx();
- typedarray!(in(cx) let axes: Float64Array = self.axes.get());
+ typedarray!(in(*cx) let axes: Float64Array = self.axes.get());
if let Ok(mut array) = axes {
array.update(&state.axes);
}
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index 385939000bc..ddf7dfc61cc 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -26,7 +26,7 @@ use crate::dom::window::Window;
use crate::dom::workerglobalscope::WorkerGlobalScope;
use crate::dom::workletglobalscope::WorkletGlobalScope;
use crate::microtask::{Microtask, MicrotaskQueue};
-use crate::script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
+use crate::script_runtime::{CommonScriptMsg, JSContext as SafeJSContext, ScriptChan, ScriptPort};
use crate::script_thread::{MainThreadScriptChan, ScriptThread};
use crate::task::TaskCanceller;
use crate::task_source::dom_manipulation::DOMManipulationTaskSource;
@@ -311,8 +311,8 @@ impl GlobalScope {
}
#[allow(unsafe_code)]
- pub fn get_cx(&self) -> *mut JSContext {
- Runtime::get()
+ pub fn get_cx(&self) -> SafeJSContext {
+ unsafe { SafeJSContext::from_ptr(Runtime::get()) }
}
pub fn crypto(&self) -> DomRoot<Crypto> {
@@ -571,14 +571,14 @@ impl GlobalScope {
let globalhandle = self.reflector().get_jsobject();
let filename = CString::new(filename).unwrap();
- let _ac = JSAutoRealm::new(cx, globalhandle.get());
+ let _ac = JSAutoRealm::new(*cx, globalhandle.get());
let _aes = AutoEntryScript::new(self);
- let options = CompileOptionsWrapper::new(cx, filename.as_ptr(), line_number);
+ let options = CompileOptionsWrapper::new(*cx, filename.as_ptr(), line_number);
debug!("evaluating Dom string");
let result = unsafe {
EvaluateUtf8(
- cx,
+ *cx,
options.ptr,
code.as_ptr() as *const _,
code.len() as libc::size_t,
@@ -588,7 +588,7 @@ impl GlobalScope {
if !result {
debug!("error evaluating Dom string");
- unsafe { report_pending_exception(cx, true) };
+ unsafe { report_pending_exception(*cx, true) };
}
maybe_resume_unwind();
@@ -681,7 +681,7 @@ impl GlobalScope {
pub fn perform_a_microtask_checkpoint(&self) {
unsafe {
self.microtask_queue.checkpoint(
- self.get_cx(),
+ *self.get_cx(),
|_| Some(DomRoot::from_ref(self)),
vec![DomRoot::from_ref(self)],
);
@@ -692,7 +692,7 @@ impl GlobalScope {
#[allow(unsafe_code)]
pub fn enqueue_microtask(&self, job: Microtask) {
unsafe {
- self.microtask_queue.enqueue(job, self.get_cx());
+ self.microtask_queue.enqueue(job, *self.get_cx());
}
}
diff --git a/components/script/dom/history.rs b/components/script/dom/history.rs
index 4bbcba64bad..583c58a00f1 100644
--- a/components/script/dom/history.rs
+++ b/components/script/dom/history.rs
@@ -117,7 +117,7 @@ impl History {
match serialized_data {
Some(serialized_data) => {
let global_scope = self.window.upcast::<GlobalScope>();
- rooted!(in(global_scope.get_cx()) let mut state = UndefinedValue());
+ rooted!(in(*global_scope.get_cx()) let mut state = UndefinedValue());
StructuredCloneData::Vector(serialized_data)
.read(&global_scope, state.handle_mut());
self.state.set(state.get());
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 4325add0212..1af49a42f79 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -654,7 +654,7 @@ impl HTMLScriptElement {
} else {
self.line_number as u32
};
- rooted!(in(window.get_cx()) let mut rval = UndefinedValue());
+ rooted!(in(*window.get_cx()) let mut rval = UndefinedValue());
let global = window.upcast::<GlobalScope>();
global.evaluate_script_on_global_with_result(
&script.text,
diff --git a/components/script/dom/imagedata.rs b/components/script/dom/imagedata.rs
index 8546f73e5cf..52851fdce36 100644
--- a/components/script/dom/imagedata.rs
+++ b/components/script/dom/imagedata.rs
@@ -41,7 +41,7 @@ impl ImageData {
let len = width * height * 4;
unsafe {
let cx = global.get_cx();
- rooted!(in (cx) let mut js_object = ptr::null_mut::<JSObject>());
+ rooted!(in (*cx) let mut js_object = ptr::null_mut::<JSObject>());
let data = match data {
Some(ref mut d) => {
d.resize(len as usize, 0);
@@ -49,7 +49,7 @@ impl ImageData {
},
None => CreateWith::Length(len),
};
- Uint8ClampedArray::create(cx, data, js_object.handle_mut()).unwrap();
+ Uint8ClampedArray::create(*cx, data, js_object.handle_mut()).unwrap();
Self::new_with_jsobject(global, width, Some(height), Some(js_object.get()))
}
}
@@ -70,7 +70,7 @@ impl ImageData {
// checking jsobject type and verifying (height * width * 4 == jsobject.byte_len())
if let Some(jsobject) = opt_jsobject {
let cx = global.get_cx();
- typedarray!(in(cx) let array_res: Uint8ClampedArray = jsobject);
+ typedarray!(in(*cx) let array_res: Uint8ClampedArray = jsobject);
let array = array_res.map_err(|_| {
Error::Type("Argument to Image data is not an Uint8ClampedArray".to_owned())
})?;
@@ -110,8 +110,8 @@ impl ImageData {
} else {
let len = width * height * 4;
let cx = global.get_cx();
- rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>());
- Uint8ClampedArray::create(cx, CreateWith::Length(len), array.handle_mut()).unwrap();
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
+ Uint8ClampedArray::create(*cx, CreateWith::Length(len), array.handle_mut()).unwrap();
(*imagedata).data.set(array.get());
}
diff --git a/components/script/dom/paintworkletglobalscope.rs b/components/script/dom/paintworkletglobalscope.rs
index 296ad4998eb..bc04ab63440 100644
--- a/components/script/dom/paintworkletglobalscope.rs
+++ b/components/script/dom/paintworkletglobalscope.rs
@@ -253,12 +253,12 @@ impl PaintWorkletGlobalScope {
);
let cx = self.worklet_global.get_cx();
- let _ac = JSAutoRealm::new(cx, self.worklet_global.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(*cx, self.worklet_global.reflector().get_jsobject().get());
// TODO: Steps 1-2.1.
// Step 2.2-5.1.
- rooted!(in(cx) let mut class_constructor = UndefinedValue());
- rooted!(in(cx) let mut paint_function = UndefinedValue());
+ rooted!(in(*cx) let mut class_constructor = UndefinedValue());
+ rooted!(in(*cx) let mut paint_function = UndefinedValue());
let rendering_context = match self.paint_definitions.borrow().get(name) {
None => {
// Step 2.2.
@@ -282,21 +282,21 @@ impl PaintWorkletGlobalScope {
// prepopulate the paint instance in `RegisterPaint`, to avoid calling it in
// the primary worklet thread.
// https://github.com/servo/servo/issues/17377
- rooted!(in(cx) let mut paint_instance = UndefinedValue());
+ rooted!(in(*cx) let mut paint_instance = UndefinedValue());
match self.paint_class_instances.borrow_mut().entry(name.clone()) {
Entry::Occupied(entry) => paint_instance.set(entry.get().get()),
Entry::Vacant(entry) => {
// Step 5.2-5.3
let args = HandleValueArray::new();
- rooted!(in(cx) let mut result = null_mut::<JSObject>());
+ rooted!(in(*cx) let mut result = null_mut::<JSObject>());
unsafe {
- Construct1(cx, class_constructor.handle(), &args, result.handle_mut());
+ Construct1(*cx, class_constructor.handle(), &args, result.handle_mut());
}
paint_instance.set(ObjectValue(result.get()));
- if unsafe { JS_IsExceptionPending(cx) } {
+ if unsafe { JS_IsExceptionPending(*cx) } {
debug!("Paint constructor threw an exception {}.", name);
unsafe {
- JS_ClearPendingException(cx);
+ JS_ClearPendingException(*cx);
}
self.paint_definitions
.borrow_mut()
@@ -333,7 +333,7 @@ impl PaintWorkletGlobalScope {
.collect();
let arguments_value_array =
unsafe { HandleValueArray::from_rooted_slice(&*arguments_value_vec) };
- rooted!(in(cx) let argument_object = unsafe { JS_NewArrayObject(cx, &arguments_value_array) });
+ rooted!(in(*cx) let argument_object = unsafe { JS_NewArrayObject(*cx, &arguments_value_array) });
let args_slice = [
ObjectValue(rendering_context.reflector().get_jsobject().get()),
@@ -343,10 +343,10 @@ impl PaintWorkletGlobalScope {
];
let args = unsafe { HandleValueArray::from_rooted_slice(&args_slice) };
- rooted!(in(cx) let mut result = UndefinedValue());
+ rooted!(in(*cx) let mut result = UndefinedValue());
unsafe {
Call(
- cx,
+ *cx,
paint_instance.handle(),
paint_function.handle(),
&args,
@@ -356,10 +356,10 @@ impl PaintWorkletGlobalScope {
let missing_image_urls = rendering_context.take_missing_image_urls();
// Step 13.
- if unsafe { JS_IsExceptionPending(cx) } {
+ if unsafe { JS_IsExceptionPending(*cx) } {
debug!("Paint function threw an exception {}.", name);
unsafe {
- JS_ClearPendingException(cx);
+ JS_ClearPendingException(*cx);
}
return self.invalid_image(size_in_dpx, missing_image_urls);
}
@@ -518,8 +518,8 @@ impl PaintWorkletGlobalScopeMethods for PaintWorkletGlobalScope {
fn RegisterPaint(&self, name: DOMString, paint_ctor: Rc<VoidFunction>) -> Fallible<()> {
let name = Atom::from(name);
let cx = self.worklet_global.get_cx();
- rooted!(in(cx) let paint_obj = paint_ctor.callback_holder().get());
- rooted!(in(cx) let paint_val = ObjectValue(paint_obj.get()));
+ rooted!(in(*cx) let paint_obj = paint_ctor.callback_holder().get());
+ rooted!(in(*cx) let paint_val = ObjectValue(paint_obj.get()));
debug!("Registering paint image name {}.", name);
@@ -535,20 +535,20 @@ impl PaintWorkletGlobalScopeMethods for PaintWorkletGlobalScope {
// Step 4-6.
let mut property_names: Vec<String> =
- unsafe { get_property(cx, paint_obj.handle(), "inputProperties", ()) }?
+ unsafe { get_property(*cx, paint_obj.handle(), "inputProperties", ()) }?
.unwrap_or_default();
let properties = property_names.drain(..).map(Atom::from).collect();
// Step 7-9.
let input_arguments: Vec<String> =
- unsafe { get_property(cx, paint_obj.handle(), "inputArguments", ()) }?
+ unsafe { get_property(*cx, paint_obj.handle(), "inputArguments", ()) }?
.unwrap_or_default();
// TODO: Steps 10-11.
// Steps 12-13.
let alpha: bool =
- unsafe { get_property(cx, paint_obj.handle(), "alpha", ()) }?.unwrap_or(true);
+ unsafe { get_property(*cx, paint_obj.handle(), "alpha", ()) }?.unwrap_or(true);
// Step 14
if unsafe { !IsConstructor(paint_obj.get()) } {
@@ -556,19 +556,24 @@ impl PaintWorkletGlobalScopeMethods for PaintWorkletGlobalScope {
}
// Steps 15-16
- rooted!(in(cx) let mut prototype = UndefinedValue());
+ rooted!(in(*cx) let mut prototype = UndefinedValue());
unsafe {
- get_property_jsval(cx, paint_obj.handle(), "prototype", prototype.handle_mut())?;
+ get_property_jsval(*cx, paint_obj.handle(), "prototype", prototype.handle_mut())?;
}
if !prototype.is_object() {
return Err(Error::Type(String::from("Prototype is not an object.")));
}
- rooted!(in(cx) let prototype = prototype.to_object());
+ rooted!(in(*cx) let prototype = prototype.to_object());
// Steps 17-18
- rooted!(in(cx) let mut paint_function = UndefinedValue());
+ rooted!(in(*cx) let mut paint_function = UndefinedValue());
unsafe {
- get_property_jsval(cx, prototype.handle(), "paint", paint_function.handle_mut())?;
+ get_property_jsval(
+ *cx,
+ prototype.handle(),
+ "paint",
+ paint_function.handle_mut(),
+ )?;
}
if !paint_function.is_object() || unsafe { !IsCallable(paint_function.to_object()) } {
return Err(Error::Type(String::from("Paint function is not callable.")));
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs
index fc1e39406f0..4dd6f53e711 100644
--- a/components/script/dom/promise.rs
+++ b/components/script/dom/promise.rs
@@ -89,17 +89,17 @@ impl Promise {
#[allow(unsafe_code)]
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>());
+ rooted!(in(*cx) let mut obj = ptr::null_mut::<JSObject>());
unsafe {
- Promise::create_js_promise(cx, HandleObject::null(), obj.handle_mut());
- Promise::new_with_js_promise(obj.handle(), cx)
+ Promise::create_js_promise(*cx, HandleObject::null(), obj.handle_mut());
+ Promise::new_with_js_promise(obj.handle(), *cx)
}
}
#[allow(unsafe_code)]
pub fn duplicate(&self) -> Rc<Promise> {
let cx = self.global().get_cx();
- unsafe { Promise::new_with_js_promise(self.reflector().get_jsobject(), cx) }
+ unsafe { Promise::new_with_js_promise(self.reflector().get_jsobject(), *cx) }
}
#[allow(unsafe_code, unrooted_must_root)]
@@ -166,10 +166,10 @@ impl Promise {
{
let cx = self.global().get_cx();
let _ac = enter_realm(&*self);
- rooted!(in(cx) let mut v = UndefinedValue());
+ rooted!(in(*cx) let mut v = UndefinedValue());
unsafe {
- val.to_jsval(cx, v.handle_mut());
- self.resolve(cx, v.handle());
+ val.to_jsval(*cx, v.handle_mut());
+ self.resolve(*cx, v.handle());
}
}
@@ -187,10 +187,10 @@ impl Promise {
{
let cx = self.global().get_cx();
let _ac = enter_realm(&*self);
- rooted!(in(cx) let mut v = UndefinedValue());
+ rooted!(in(*cx) let mut v = UndefinedValue());
unsafe {
- val.to_jsval(cx, v.handle_mut());
- self.reject(cx, v.handle());
+ val.to_jsval(*cx, v.handle_mut());
+ self.reject(*cx, v.handle());
}
}
@@ -198,10 +198,10 @@ impl Promise {
pub fn reject_error(&self, error: Error) {
let cx = self.global().get_cx();
let _ac = enter_realm(&*self);
- rooted!(in(cx) let mut v = UndefinedValue());
+ rooted!(in(*cx) let mut v = UndefinedValue());
unsafe {
- error.to_jsval(cx, &self.global(), v.handle_mut());
- self.reject(cx, v.handle());
+ error.to_jsval(*cx, &self.global(), v.handle_mut());
+ self.reject(*cx, v.handle());
}
}
@@ -233,19 +233,19 @@ impl Promise {
#[allow(unsafe_code)]
pub fn append_native_handler(&self, handler: &PromiseNativeHandler) {
let cx = self.global().get_cx();
- rooted!(in(cx) let resolve_func =
- create_native_handler_function(cx,
+ rooted!(in(*cx) let resolve_func =
+ create_native_handler_function(*cx,
handler.reflector().get_jsobject(),
NativeHandlerTask::Resolve));
- rooted!(in(cx) let reject_func =
- create_native_handler_function(cx,
+ rooted!(in(*cx) let reject_func =
+ create_native_handler_function(*cx,
handler.reflector().get_jsobject(),
NativeHandlerTask::Reject));
unsafe {
let ok = AddPromiseReactions(
- cx,
+ *cx,
self.promise_obj(),
resolve_func.handle(),
reject_func.handle(),
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index b88d4d054e1..5af7f07ab0f 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -337,7 +337,7 @@ impl ServiceWorkerGlobalScope {
unsafe {
// Handle interrupt requests
- JS_AddInterruptCallback(scope.get_cx(), Some(interrupt_callback));
+ JS_AddInterruptCallback(*scope.get_cx(), Some(interrupt_callback));
}
scope.execute_script(DOMString::from(source));
@@ -413,7 +413,7 @@ impl ServiceWorkerGlobalScope {
let scope = self.upcast::<WorkerGlobalScope>();
let target = self.upcast();
let _ac = enter_realm(&*scope);
- rooted!(in(scope.get_cx()) let mut message = UndefinedValue());
+ rooted!(in(*scope.get_cx()) let mut message = UndefinedValue());
data.read(scope.upcast(), message.handle_mut());
ExtendableMessageEvent::dispatch_jsval(target, scope.upcast(), message.handle());
},
diff --git a/components/script/dom/userscripts.rs b/components/script/dom/userscripts.rs
index af7c2b6d3f1..4e9cc59d27f 100644
--- a/components/script/dom/userscripts.rs
+++ b/components/script/dom/userscripts.rs
@@ -22,7 +22,7 @@ pub fn load_script(head: &HTMLHeadElement) {
doc.add_delayed_task(task!(UserScriptExecute: move || {
let win = win.root();
let cx = win.get_cx();
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
let path = PathBuf::from(&path_str);
let mut files = read_dir(&path)
diff --git a/components/script/dom/vreyeparameters.rs b/components/script/dom/vreyeparameters.rs
index 0a8260610e1..a7463c34a28 100644
--- a/components/script/dom/vreyeparameters.rs
+++ b/components/script/dom/vreyeparameters.rs
@@ -45,10 +45,10 @@ impl VREyeParameters {
let fov = VRFieldOfView::new(&global, parameters.field_of_view.clone());
let cx = global.get_cx();
- rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>());
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
unsafe {
let _ = Float32Array::create(
- cx,
+ *cx,
CreateWith::Slice(&parameters.offset),
array.handle_mut(),
);
diff --git a/components/script/dom/vrframedata.rs b/components/script/dom/vrframedata.rs
index 9cfcadd96a8..b7b8c743080 100644
--- a/components/script/dom/vrframedata.rs
+++ b/components/script/dom/vrframedata.rs
@@ -62,7 +62,7 @@ impl VRFrameData {
global,
VRFrameDataBinding::Wrap,
);
- let cx = unsafe { JSContext::from_ptr(global.get_cx()) };
+ let cx = global.get_cx();
create_typed_array(cx, &matrix, &root.left_proj);
create_typed_array(cx, &matrix, &root.left_view);
create_typed_array(cx, &matrix, &root.right_proj);
@@ -90,7 +90,7 @@ impl VRFrameData {
#[allow(unsafe_code)]
pub fn update(&self, data: &WebVRFrameData) {
unsafe {
- let cx = JSContext::from_ptr(self.global().get_cx());
+ let cx = self.global().get_cx();
typedarray!(in(*cx) let left_proj_array: Float32Array = self.left_proj.get());
if let Ok(mut array) = left_proj_array {
array.update(&data.left_projection_matrix);
diff --git a/components/script/dom/vrpose.rs b/components/script/dom/vrpose.rs
index 898691a9679..2303641d6eb 100644
--- a/components/script/dom/vrpose.rs
+++ b/components/script/dom/vrpose.rs
@@ -7,9 +7,9 @@ use crate::dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
-use crate::script_runtime::JSContext as SafeJSContext;
+use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
-use js::jsapi::{Heap, JSContext, JSObject};
+use js::jsapi::{Heap, JSObject};
use js::typedarray::{CreateWith, Float32Array};
use std::ptr;
use std::ptr::NonNull;
@@ -33,21 +33,19 @@ pub struct VRPose {
}
#[allow(unsafe_code)]
-unsafe fn update_or_create_typed_array(
- cx: *mut JSContext,
- src: Option<&[f32]>,
- dst: &Heap<*mut JSObject>,
-) {
+fn update_or_create_typed_array(cx: JSContext, src: Option<&[f32]>, dst: &Heap<*mut JSObject>) {
match src {
Some(data) => {
if dst.get().is_null() {
- rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>());
- let _ = Float32Array::create(cx, CreateWith::Slice(data), array.handle_mut());
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
+ let _ = unsafe {
+ Float32Array::create(*cx, CreateWith::Slice(data), array.handle_mut())
+ };
(*dst).set(array.get());
} else {
- typedarray!(in(cx) let array: Float32Array = dst.get());
+ typedarray!(in(*cx) let array: Float32Array = dst.get());
if let Ok(mut array) = array {
- array.update(data);
+ unsafe { array.update(data) };
}
}
},
@@ -96,69 +94,63 @@ impl VRPose {
#[allow(unsafe_code)]
pub fn update(&self, pose: &webvr::VRPose) {
let cx = self.global().get_cx();
- unsafe {
- update_or_create_typed_array(
- cx,
- pose.position.as_ref().map(|v| &v[..]),
- &self.position,
- );
- update_or_create_typed_array(
- cx,
- pose.orientation.as_ref().map(|v| &v[..]),
- &self.orientation,
- );
- update_or_create_typed_array(
- cx,
- pose.linear_velocity.as_ref().map(|v| &v[..]),
- &self.linear_vel,
- );
- update_or_create_typed_array(
- cx,
- pose.angular_velocity.as_ref().map(|v| &v[..]),
- &self.angular_vel,
- );
- update_or_create_typed_array(
- cx,
- pose.linear_acceleration.as_ref().map(|v| &v[..]),
- &self.linear_acc,
- );
- update_or_create_typed_array(
- cx,
- pose.angular_acceleration.as_ref().map(|v| &v[..]),
- &self.angular_acc,
- );
- }
+ update_or_create_typed_array(cx, pose.position.as_ref().map(|v| &v[..]), &self.position);
+ update_or_create_typed_array(
+ cx,
+ pose.orientation.as_ref().map(|v| &v[..]),
+ &self.orientation,
+ );
+ update_or_create_typed_array(
+ cx,
+ pose.linear_velocity.as_ref().map(|v| &v[..]),
+ &self.linear_vel,
+ );
+ update_or_create_typed_array(
+ cx,
+ pose.angular_velocity.as_ref().map(|v| &v[..]),
+ &self.angular_vel,
+ );
+ update_or_create_typed_array(
+ cx,
+ pose.linear_acceleration.as_ref().map(|v| &v[..]),
+ &self.linear_acc,
+ );
+ update_or_create_typed_array(
+ cx,
+ pose.angular_acceleration.as_ref().map(|v| &v[..]),
+ &self.angular_acc,
+ );
}
}
impl VRPoseMethods for VRPose {
// https://w3c.github.io/webvr/#dom-vrpose-position
- fn GetPosition(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetPosition(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.position)
}
// https://w3c.github.io/webvr/#dom-vrpose-linearvelocity
- fn GetLinearVelocity(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetLinearVelocity(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.linear_vel)
}
// https://w3c.github.io/webvr/#dom-vrpose-linearacceleration
- fn GetLinearAcceleration(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetLinearAcceleration(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.linear_acc)
}
// https://w3c.github.io/webvr/#dom-vrpose-orientation
- fn GetOrientation(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetOrientation(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.orientation)
}
// https://w3c.github.io/webvr/#dom-vrpose-angularvelocity
- fn GetAngularVelocity(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetAngularVelocity(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.angular_vel)
}
// https://w3c.github.io/webvr/#dom-vrpose-angularacceleration
- fn GetAngularAcceleration(&self, _cx: SafeJSContext) -> Option<NonNull<JSObject>> {
+ fn GetAngularAcceleration(&self, _cx: JSContext) -> Option<NonNull<JSObject>> {
heap_to_option(&self.angular_acc)
}
}
diff --git a/components/script/dom/vrstageparameters.rs b/components/script/dom/vrstageparameters.rs
index 0b525513f57..747608763e9 100644
--- a/components/script/dom/vrstageparameters.rs
+++ b/components/script/dom/vrstageparameters.rs
@@ -43,10 +43,10 @@ impl VRStageParameters {
global: &GlobalScope,
) -> DomRoot<VRStageParameters> {
let cx = global.get_cx();
- rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>());
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
unsafe {
let _ = Float32Array::create(
- cx,
+ *cx,
CreateWith::Slice(&parameters.sitting_to_standing_transform),
array.handle_mut(),
);
@@ -67,7 +67,7 @@ impl VRStageParameters {
pub fn update(&self, parameters: &WebVRStageParameters) {
unsafe {
let cx = self.global().get_cx();
- typedarray!(in(cx) let array: Float32Array = self.transform.get());
+ typedarray!(in(*cx) let array: Float32Array = self.transform.get());
if let Ok(mut array) = array {
array.update(&parameters.sitting_to_standing_transform);
}
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 5f783ab5a30..3051cc0ff33 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -569,26 +569,26 @@ impl TaskOnce for MessageReceivedTask {
// global.get_cx() returns a valid `JSContext` pointer, so this is safe.
unsafe {
let cx = global.get_cx();
- let _ac = JSAutoRealm::new(cx, ws.reflector().get_jsobject().get());
- rooted!(in(cx) let mut message = UndefinedValue());
+ let _ac = JSAutoRealm::new(*cx, ws.reflector().get_jsobject().get());
+ rooted!(in(*cx) let mut message = UndefinedValue());
match self.message {
- MessageData::Text(text) => text.to_jsval(cx, message.handle_mut()),
+ MessageData::Text(text) => text.to_jsval(*cx, message.handle_mut()),
MessageData::Binary(data) => match ws.binary_type.get() {
BinaryType::Blob => {
let blob =
Blob::new(&global, BlobImpl::new_from_bytes(data), "".to_owned());
- blob.to_jsval(cx, message.handle_mut());
+ blob.to_jsval(*cx, message.handle_mut());
},
BinaryType::Arraybuffer => {
- rooted!(in(cx) let mut array_buffer = ptr::null_mut::<JSObject>());
+ rooted!(in(*cx) let mut array_buffer = ptr::null_mut::<JSObject>());
assert!(ArrayBuffer::create(
- cx,
+ *cx,
CreateWith::Slice(&data),
array_buffer.handle_mut()
)
.is_ok());
- (*array_buffer).to_jsval(cx, message.handle_mut());
+ (*array_buffer).to_jsval(*cx, message.handle_mut());
},
},
}
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index c97a3fd08fb..ccbd08e1ef7 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -57,8 +57,7 @@ use crate::fetch;
use crate::layout_image::fetch_image_for_layout;
use crate::microtask::MicrotaskQueue;
use crate::script_runtime::{
- CommonScriptMsg, JSContext as SafeJSContext, Runtime, ScriptChan, ScriptPort,
- ScriptThreadEventCategory,
+ CommonScriptMsg, JSContext, Runtime, ScriptChan, ScriptPort, ScriptThreadEventCategory,
};
use crate::script_thread::{ImageCacheMsg, MainThreadScriptChan, MainThreadScriptMsg};
use crate::script_thread::{ScriptThread, SendableMainThreadScriptChan};
@@ -80,7 +79,6 @@ use euclid::{Point2D, Rect, Scale, Size2D, Vector2D};
use ipc_channel::ipc::{channel, IpcSender};
use ipc_channel::router::ROUTER;
use js::jsapi::JSAutoRealm;
-use js::jsapi::JSContext;
use js::jsapi::JSPROP_ENUMERATE;
use js::jsapi::{GCReason, JS_GC};
use js::jsval::JSVal;
@@ -372,8 +370,9 @@ impl Window {
self.globalscope.origin()
}
- pub fn get_cx(&self) -> *mut JSContext {
- self.js_runtime.borrow().as_ref().unwrap().cx()
+ #[allow(unsafe_code)]
+ pub fn get_cx(&self) -> JSContext {
+ unsafe { JSContext::from_ptr(self.js_runtime.borrow().as_ref().unwrap().cx()) }
}
pub fn main_thread_script_chan(&self) -> &Sender<MainThreadScriptMsg> {
@@ -615,13 +614,13 @@ impl WindowMethods for Window {
#[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#dom-opener
- fn Opener(&self, cx: SafeJSContext) -> JSVal {
+ fn Opener(&self, cx: JSContext) -> JSVal {
unsafe { self.window_proxy().opener(*cx) }
}
#[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#dom-opener
- fn SetOpener(&self, cx: SafeJSContext, value: HandleValue) {
+ fn SetOpener(&self, cx: JSContext, value: HandleValue) {
// Step 1.
if value.is_null() {
return self.window_proxy().disown();
@@ -744,7 +743,7 @@ impl WindowMethods for Window {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-settimeout
fn SetTimeout(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: Rc<Function>,
timeout: i32,
args: Vec<HandleValue>,
@@ -760,7 +759,7 @@ impl WindowMethods for Window {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-settimeout
fn SetTimeout_(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: DOMString,
timeout: i32,
args: Vec<HandleValue>,
@@ -782,7 +781,7 @@ impl WindowMethods for Window {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-setinterval
fn SetInterval(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: Rc<Function>,
timeout: i32,
args: Vec<HandleValue>,
@@ -798,7 +797,7 @@ impl WindowMethods for Window {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-setinterval
fn SetInterval_(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: DOMString,
timeout: i32,
args: Vec<HandleValue>,
@@ -902,12 +901,7 @@ impl WindowMethods for Window {
}
// https://html.spec.whatwg.org/multipage/#dom-window-postmessage
- fn PostMessage(
- &self,
- cx: SafeJSContext,
- message: HandleValue,
- origin: DOMString,
- ) -> ErrorResult {
+ fn PostMessage(&self, cx: JSContext, message: HandleValue, origin: DOMString) -> ErrorResult {
let source_global = GlobalScope::incumbent().expect("no incumbent global??");
let source = source_global.as_window();
@@ -948,7 +942,7 @@ impl WindowMethods for Window {
#[allow(unsafe_code)]
fn Gc(&self) {
unsafe {
- JS_GC(self.get_cx(), GCReason::API);
+ JS_GC(*self.get_cx(), GCReason::API);
}
}
@@ -958,7 +952,7 @@ impl WindowMethods for Window {
}
#[allow(unsafe_code)]
- fn WebdriverCallback(&self, cx: SafeJSContext, val: HandleValue) {
+ fn WebdriverCallback(&self, cx: JSContext, val: HandleValue) {
let rv = unsafe { jsval_to_webdriver(*cx, val) };
let opt_chan = self.webdriver_script_chan.borrow_mut().take();
if let Some(chan) = opt_chan {
@@ -2177,7 +2171,7 @@ impl Window {
player_context,
});
- unsafe { WindowBinding::Wrap(SafeJSContext::from_ptr(runtime.cx()), win) }
+ unsafe { WindowBinding::Wrap(JSContext::from_ptr(runtime.cx()), win) }
}
pub fn pipeline_id(&self) -> Option<PipelineId> {
@@ -2279,8 +2273,8 @@ impl Window {
// Steps 7.2.-7.5.
let cx = this.get_cx();
let obj = this.reflector().get_jsobject();
- let _ac = JSAutoRealm::new(cx, obj.get());
- rooted!(in(cx) let mut message_clone = UndefinedValue());
+ let _ac = JSAutoRealm::new(*cx, obj.get());
+ rooted!(in(*cx) let mut message_clone = UndefinedValue());
serialize_with_transfer_result.read(
this.upcast(),
message_clone.handle_mut(),
diff --git a/components/script/dom/windowproxy.rs b/components/script/dom/windowproxy.rs
index d527a73c86f..0c7a00978bc 100644
--- a/components/script/dom/windowproxy.rs
+++ b/components/script/dom/windowproxy.rs
@@ -152,10 +152,10 @@ impl WindowProxy {
((*get_object_class(window_jsobject.get())).flags & JSCLASS_IS_GLOBAL),
0
);
- let _ac = JSAutoRealm::new(cx, window_jsobject.get());
+ let _ac = JSAutoRealm::new(*cx, window_jsobject.get());
// Create a new window proxy.
- rooted!(in(cx) let js_proxy = NewWindowProxy(cx, window_jsobject, handler));
+ rooted!(in(*cx) let js_proxy = NewWindowProxy(*cx, window_jsobject, handler));
assert!(!js_proxy.is_null());
// Create a new browsing context.
@@ -178,7 +178,7 @@ impl WindowProxy {
);
// Notify the JS engine about the new window proxy binding.
- SetWindowProxy(cx, window_jsobject, js_proxy.handle());
+ SetWindowProxy(*cx, window_jsobject, js_proxy.handle());
// Set the reflector.
debug!(
@@ -223,10 +223,10 @@ impl WindowProxy {
((*get_object_class(window_jsobject.get())).flags & JSCLASS_IS_GLOBAL),
0
);
- let _ac = JSAutoRealm::new(cx, window_jsobject.get());
+ let _ac = JSAutoRealm::new(*cx, window_jsobject.get());
// Create a new window proxy.
- rooted!(in(cx) let js_proxy = NewWindowProxy(cx, window_jsobject, handler));
+ rooted!(in(*cx) let js_proxy = NewWindowProxy(*cx, window_jsobject, handler));
assert!(!js_proxy.is_null());
// The window proxy owns the browsing context.
@@ -238,7 +238,7 @@ impl WindowProxy {
);
// Notify the JS engine about the new window proxy binding.
- SetWindowProxy(cx, window_jsobject, js_proxy.handle());
+ SetWindowProxy(*cx, window_jsobject, js_proxy.handle());
// Set the reflector.
debug!(
@@ -576,20 +576,20 @@ impl WindowProxy {
// of the old window proxy to the new window proxy, then
// making the old window proxy a cross-compartment wrapper
// pointing to the new window proxy.
- rooted!(in(cx) let new_js_proxy = NewWindowProxy(cx, window_jsobject, handler));
+ rooted!(in(*cx) let new_js_proxy = NewWindowProxy(*cx, window_jsobject, handler));
debug!(
"Transplanting proxy from {:p} to {:p}.",
old_js_proxy.get(),
new_js_proxy.get()
);
- rooted!(in(cx) let new_js_proxy = JS_TransplantObject(cx, old_js_proxy, new_js_proxy.handle()));
+ rooted!(in(*cx) let new_js_proxy = JS_TransplantObject(*cx, old_js_proxy, new_js_proxy.handle()));
debug!("Transplanted proxy is {:p}.", new_js_proxy.get());
// Transfer ownership of this browsing context from the old window proxy to the new one.
SetProxyReservedSlot(new_js_proxy.get(), 0, &PrivateValue(self.as_void_ptr()));
// Notify the JS engine about the new window proxy binding.
- SetWindowProxy(cx, window_jsobject, new_js_proxy.handle());
+ SetWindowProxy(*cx, window_jsobject, new_js_proxy.handle());
// Update the reflector.
debug!(
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 4b8384e3ed8..1ae17571fbb 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -147,7 +147,7 @@ impl Worker {
let global = worker.global();
let target = worker.upcast();
let _ac = enter_realm(target);
- rooted!(in(global.get_cx()) let mut message = UndefinedValue());
+ rooted!(in(*global.get_cx()) let mut message = UndefinedValue());
data.read(&global, message.handle_mut());
MessageEvent::dispatch_jsval(target, &global, message.handle(), None, None);
}
@@ -186,7 +186,7 @@ impl WorkerMethods for Worker {
// Step 3
let cx = self.global().get_cx();
- unsafe { JS_RequestInterruptCallback(cx) };
+ unsafe { JS_RequestInterruptCallback(*cx) };
}
// https://html.spec.whatwg.org/multipage/#handler-worker-onmessage
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index bf21b8442c3..2e5a199a08f 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -26,7 +26,7 @@ use crate::dom::window::{base64_atob, base64_btoa};
use crate::dom::workerlocation::WorkerLocation;
use crate::dom::workernavigator::WorkerNavigator;
use crate::fetch;
-use crate::script_runtime::JSContext as SafeJSContext;
+use crate::script_runtime::JSContext;
use crate::script_runtime::{get_reports, CommonScriptMsg, Runtime, ScriptChan, ScriptPort};
use crate::task::TaskCanceller;
use crate::task_source::dom_manipulation::DOMManipulationTaskSource;
@@ -40,7 +40,7 @@ use crossbeam_channel::Receiver;
use devtools_traits::{DevtoolScriptControlMsg, WorkerId};
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::{JSAutoRealm, JSContext};
+use js::jsapi::JSAutoRealm;
use js::jsval::UndefinedValue;
use js::panic::maybe_resume_unwind;
use js::rust::{HandleValue, ParentRuntime};
@@ -165,8 +165,9 @@ impl WorkerGlobalScope {
&self.from_devtools_receiver
}
- pub fn get_cx(&self) -> *mut JSContext {
- self.runtime.cx()
+ #[allow(unsafe_code)]
+ pub fn get_cx(&self) -> JSContext {
+ unsafe { JSContext::from_ptr(self.runtime.cx()) }
}
pub fn is_closing(&self) -> bool {
@@ -292,7 +293,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-settimeout
fn SetTimeout(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: Rc<Function>,
timeout: i32,
args: Vec<HandleValue>,
@@ -308,7 +309,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-settimeout
fn SetTimeout_(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: DOMString,
timeout: i32,
args: Vec<HandleValue>,
@@ -330,7 +331,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-setinterval
fn SetInterval(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: Rc<Function>,
timeout: i32,
args: Vec<HandleValue>,
@@ -346,7 +347,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-windowtimers-setinterval
fn SetInterval_(
&self,
- _cx: SafeJSContext,
+ _cx: JSContext,
callback: DOMString,
timeout: i32,
args: Vec<HandleValue>,
@@ -477,7 +478,7 @@ impl WorkerGlobalScope {
CommonScriptMsg::CollectReports(reports_chan) => {
let cx = self.get_cx();
let path_seg = format!("url({})", self.get_url());
- let reports = get_reports(cx, path_seg);
+ let reports = get_reports(*cx, path_seg);
reports_chan.send(reports);
},
}
diff --git a/components/script/dom/workletglobalscope.rs b/components/script/dom/workletglobalscope.rs
index 20f99c76ee2..90fa5bd0115 100644
--- a/components/script/dom/workletglobalscope.rs
+++ b/components/script/dom/workletglobalscope.rs
@@ -10,13 +10,13 @@ use crate::dom::paintworkletglobalscope::PaintWorkletTask;
use crate::dom::testworkletglobalscope::TestWorkletGlobalScope;
use crate::dom::testworkletglobalscope::TestWorkletTask;
use crate::dom::worklet::WorkletExecutor;
+use crate::script_runtime::JSContext;
use crate::script_thread::MainThreadScriptMsg;
use crossbeam_channel::Sender;
use devtools_traits::ScriptToDevtoolsControlMsg;
use dom_struct::dom_struct;
use ipc_channel::ipc;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::JSContext;
use js::jsval::UndefinedValue;
use js::rust::Runtime;
use msg::constellation_msg::PipelineId;
@@ -83,14 +83,14 @@ impl WorkletGlobalScope {
}
/// Get the JS context.
- pub fn get_cx(&self) -> *mut JSContext {
+ pub fn get_cx(&self) -> JSContext {
self.globalscope.get_cx()
}
/// Evaluate a JS script in this global.
pub fn evaluate_js(&self, script: &str) -> bool {
debug!("Evaluating Dom.");
- rooted!(in (self.globalscope.get_cx()) let mut rval = UndefinedValue());
+ rooted!(in (*self.globalscope.get_cx()) let mut rval = UndefinedValue());
self.globalscope
.evaluate_js_on_global_with_result(&*script, rval.handle_mut())
}
diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs
index b9690187494..2b09b89e096 100644
--- a/components/script/dom/xrrigidtransform.rs
+++ b/components/script/dom/xrrigidtransform.rs
@@ -119,10 +119,9 @@ impl XRRigidTransformMethods for XRRigidTransform {
})
}
// https://immersive-web.github.io/webxr/#dom-xrrigidtransform-matrix
- #[allow(unsafe_code)]
fn Matrix(&self, _cx: JSContext) -> NonNull<JSObject> {
if self.matrix.get().is_null() {
- let cx = unsafe { JSContext::from_ptr(self.global().get_cx()) };
+ let cx = self.global().get_cx();
// According to the spec all matrices are column-major,
// however euclid uses row vectors so we use .to_row_major_array()
let arr = self.transform.to_transform().to_row_major_array();
diff --git a/components/script/dom/xrview.rs b/components/script/dom/xrview.rs
index bc51d8f38c8..04a4a2b66c8 100644
--- a/components/script/dom/xrview.rs
+++ b/components/script/dom/xrview.rs
@@ -40,7 +40,6 @@ impl XRView {
}
}
- #[allow(unsafe_code)]
pub fn new<V: Copy>(
global: &GlobalScope,
session: &XRSession,
@@ -65,7 +64,7 @@ impl XRView {
// row_major since euclid uses row vectors
let proj = view.projection.to_row_major_array();
- let cx = unsafe { JSContext::from_ptr(global.get_cx()) };
+ let cx = global.get_cx();
create_typed_array(cx, &proj, &ret.proj);
ret
}
diff --git a/components/script/dom/xrviewerpose.rs b/components/script/dom/xrviewerpose.rs
index ce3f94c1817..8ebabc0781f 100644
--- a/components/script/dom/xrviewerpose.rs
+++ b/components/script/dom/xrviewerpose.rs
@@ -57,10 +57,10 @@ impl XRViewerPose {
XRViewerPoseBinding::Wrap,
);
+ let cx = global.get_cx();
unsafe {
- let cx = global.get_cx();
- rooted!(in(cx) let mut jsval = UndefinedValue());
- views.to_jsval(cx, jsval.handle_mut());
+ rooted!(in(*cx) let mut jsval = UndefinedValue());
+ views.to_jsval(*cx, jsval.handle_mut());
pose.views.set(jsval.get());
}
diff --git a/components/script/dom/xrwebgllayer.rs b/components/script/dom/xrwebgllayer.rs
index a5f06df0e52..148d773fe6f 100644
--- a/components/script/dom/xrwebgllayer.rs
+++ b/components/script/dom/xrwebgllayer.rs
@@ -115,7 +115,7 @@ impl XRWebGLLayer {
0,
constants::RGBA,
constants::UNSIGNED_BYTE,
- pixels.root(cx),
+ pixels.root(*cx),
);
// Bind the new texture to the framebuffer
diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs
index 4c7953de443..fb94d30fafd 100644
--- a/components/script/script_runtime.rs
+++ b/components/script/script_runtime.rs
@@ -245,7 +245,7 @@ unsafe extern "C" fn promise_rejection_tracker(
let cx = target.global().get_cx();
let root_promise = trusted_promise.root();
- rooted!(in(cx) let reason = GetPromiseResult(root_promise.reflector().get_jsobject()));
+ rooted!(in(*cx) let reason = GetPromiseResult(root_promise.reflector().get_jsobject()));
let event = PromiseRejectionEvent::new(
&target.global(),
@@ -270,9 +270,8 @@ unsafe extern "C" fn promise_rejection_tracker(
#[allow(unsafe_code, unrooted_must_root)]
/// https://html.spec.whatwg.org/multipage/#notify-about-rejected-promises
pub fn notify_about_rejected_promises(global: &GlobalScope) {
+ let cx = global.get_cx();
unsafe {
- let cx = global.get_cx();
-
// Step 2.
if global.get_uncaught_rejections().borrow().len() > 0 {
// Step 1.
@@ -282,7 +281,7 @@ pub fn notify_about_rejected_promises(global: &GlobalScope) {
.iter()
.map(|promise| {
let promise =
- Promise::new_with_js_promise(Handle::from_raw(promise.handle()), cx);
+ Promise::new_with_js_promise(Handle::from_raw(promise.handle()), *cx);
TrustedPromise::new(promise)
})
@@ -309,7 +308,7 @@ pub fn notify_about_rejected_promises(global: &GlobalScope) {
}
// Step 4-2.
- rooted!(in(cx) let reason = GetPromiseResult(promise.reflector().get_jsobject()));
+ rooted!(in(*cx) let reason = GetPromiseResult(promise.reflector().get_jsobject()));
let event = PromiseRejectionEvent::new(
&target.global(),
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 0ceed35db57..81ef7d9493c 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -70,7 +70,7 @@ use crate::dom::worklet::WorkletThreadPool;
use crate::dom::workletglobalscope::WorkletGlobalScopeInit;
use crate::fetch::FetchCanceller;
use crate::microtask::{Microtask, MicrotaskQueue};
-use crate::script_runtime::{get_reports, new_rt_and_cx, Runtime, ScriptPort};
+use crate::script_runtime::{get_reports, new_rt_and_cx, JSContext, Runtime, ScriptPort};
use crate::script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory};
use crate::serviceworkerjob::{Job, JobQueue};
use crate::task_manager::TaskManager;
@@ -102,7 +102,7 @@ use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER;
use js::glue::GetWindowProxyClass;
-use js::jsapi::{JSContext, JS_SetWrapObjectCallbacks};
+use js::jsapi::JS_SetWrapObjectCallbacks;
use js::jsapi::{JSTracer, SetWindowProxyClass};
use js::jsval::UndefinedValue;
use js::rust::ParentRuntime;
@@ -915,7 +915,7 @@ impl ScriptThread {
let script_thread = &*script_thread;
script_thread
.microtask_queue
- .enqueue(task, script_thread.get_cx());
+ .enqueue(task, *script_thread.get_cx());
}
}
});
@@ -1317,8 +1317,9 @@ impl ScriptThread {
}
}
- pub fn get_cx(&self) -> *mut JSContext {
- self.js_runtime.cx()
+ #[allow(unsafe_code)]
+ pub fn get_cx(&self) -> JSContext {
+ unsafe { JSContext::from_ptr(self.js_runtime.cx()) }
}
/// Starts the script thread. After calling this method, the script thread will loop receiving
@@ -2349,7 +2350,7 @@ impl ScriptThread {
let path_seg = format!("url({})", urls);
let mut reports = vec![];
- reports.extend(get_reports(self.get_cx(), path_seg));
+ reports.extend(get_reports(*self.get_cx(), path_seg));
reports_chan.send(reports);
}
@@ -3540,13 +3541,13 @@ impl ScriptThread {
// Script source is ready to be evaluated (11.)
let _ac = enter_realm(global_scope);
- rooted!(in(global_scope.get_cx()) let mut jsval = UndefinedValue());
+ rooted!(in(*global_scope.get_cx()) let mut jsval = UndefinedValue());
global_scope.evaluate_js_on_global_with_result(&script_source, jsval.handle_mut());
load_data.js_eval_result = if jsval.get().is_string() {
unsafe {
let strval = DOMString::from_jsval(
- global_scope.get_cx(),
+ *global_scope.get_cx(),
jsval.handle(),
StringificationBehavior::Empty,
);
@@ -3776,7 +3777,7 @@ impl ScriptThread {
let script_thread = &*root.get().unwrap();
script_thread
.microtask_queue
- .enqueue(job, script_thread.get_cx());
+ .enqueue(job, *script_thread.get_cx());
});
}
@@ -3791,7 +3792,7 @@ impl ScriptThread {
unsafe {
self.microtask_queue.checkpoint(
- self.get_cx(),
+ *self.get_cx(),
|id| self.documents.borrow().find_global(id),
globals,
)
diff --git a/components/script/timers.rs b/components/script/timers.rs
index 45c809394a1..5534df60d45 100644
--- a/components/script/timers.rs
+++ b/components/script/timers.rs
@@ -517,7 +517,7 @@ impl JsTimerTask {
InternalTimerCallback::StringTimerCallback(ref code_str) => {
let global = this.global();
let cx = global.get_cx();
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
global.evaluate_js_on_global_with_result(code_str, rval.handle_mut());
},
diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs
index ab08c0efe7d..c8aad9a6b4c 100644
--- a/components/script/webdriver_handlers.rs
+++ b/components/script/webdriver_handlers.rs
@@ -145,11 +145,11 @@ pub fn handle_execute_script(
Some(window) => {
let result = unsafe {
let cx = window.get_cx();
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
window
.upcast::<GlobalScope>()
.evaluate_js_on_global_with_result(&eval, rval.handle_mut());
- jsval_to_webdriver(cx, rval.handle())
+ jsval_to_webdriver(*cx, rval.handle())
};
reply.send(result).unwrap();
@@ -171,7 +171,7 @@ pub fn handle_execute_async_script(
Some(window) => {
let cx = window.get_cx();
window.set_webdriver_script_chan(Some(reply));
- rooted!(in(cx) let mut rval = UndefinedValue());
+ rooted!(in(*cx) let mut rval = UndefinedValue());
window
.upcast::<GlobalScope>()
.evaluate_js_on_global_with_result(&eval, rval.handle_mut());
@@ -725,21 +725,21 @@ pub fn handle_get_property(
Some(node) => {
let cx = documents.find_document(pipeline).unwrap().window().get_cx();
- rooted!(in(cx) let mut property = UndefinedValue());
+ rooted!(in(*cx) let mut property = UndefinedValue());
match unsafe {
get_property_jsval(
- cx,
+ *cx,
node.reflector().get_jsobject(),
&name,
property.handle_mut(),
)
} {
- Ok(_) => match unsafe { jsval_to_webdriver(cx, property.handle()) } {
+ Ok(_) => match unsafe { jsval_to_webdriver(*cx, property.handle()) } {
Ok(property) => Ok(property),
Err(_) => Ok(WebDriverJSValue::Undefined),
},
Err(error) => {
- unsafe { throw_dom_exception(cx, &node.reflector().global(), error) };
+ unsafe { throw_dom_exception(*cx, &node.reflector().global(), error) };
Ok(WebDriverJSValue::Undefined)
},
}