mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Modify *::get_cx methods to return a safe JSContext instead of a raw one
This commit is contained in:
parent
2c5d0a6ebc
commit
88cacfb009
43 changed files with 306 additions and 321 deletions
|
@ -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.")));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue