diff --git a/components/script/dom/messageport.rs b/components/script/dom/messageport.rs index fa7556fb9ef..f0497c5a8c5 100644 --- a/components/script/dom/messageport.rs +++ b/components/script/dom/messageport.rs @@ -222,16 +222,12 @@ impl MessagePort { type_.safe_to_jsval(cx, type_string.handle_mut()); // Perform ! CreateDataProperty(message, "type", type). - unsafe { - set_dictionary_property(*cx, message.handle(), "type", type_string.handle()) - .expect("Setting the message type should not fail."); - } + set_dictionary_property(cx, message.handle(), "type", type_string.handle()) + .expect("Setting the message type should not fail."); // Perform ! CreateDataProperty(message, "value", value). - unsafe { - set_dictionary_property(*cx, message.handle(), "value", value) - .expect("Setting the message value should not fail."); - } + set_dictionary_property(cx, message.handle(), "value", value) + .expect("Setting the message value should not fail."); // Let targetPort be the port with which port is entangled, if any; otherwise let it be null. // Done in `global.post_messageport_msg`. diff --git a/components/script/indexed_db.rs b/components/script/indexed_db.rs index dd89ae49622..3f737c5319f 100644 --- a/components/script/indexed_db.rs +++ b/components/script/indexed_db.rs @@ -236,10 +236,8 @@ pub(crate) fn evaluate_key_path_on_value( // Step 1.3.4. Let p be ! ToString(i). // Step 1.3.5. Let status be CreateDataProperty(result, p, key). // Step 1.3.6. Assert: status is true. - unsafe { - set_dictionary_property(*cx, result.handle(), &i.to_string(), key.handle()) - .map_err(|_| Error::JSFailed)?; - } + set_dictionary_property(cx, result.handle(), &i.to_string(), key.handle()) + .map_err(|_| Error::JSFailed)?; // Step 1.3.7. Increase i by 1. // Done by for loop with enumerate() diff --git a/components/script_bindings/codegen/codegen.py b/components/script_bindings/codegen/codegen.py index 111787903bd..c4cc51e124c 100644 --- a/components/script_bindings/codegen/codegen.py +++ b/components/script_bindings/codegen/codegen.py @@ -7545,7 +7545,7 @@ impl{self.generic} Clone for {self.makeClassName(self.dictionary)}{self.genericS insertion = ( f"rooted!(in(cx) let mut {varName}_js = UndefinedValue());\n" f"{varName}.to_jsval(cx, {varName}_js.handle_mut());\n" - f'set_dictionary_property(cx, obj.handle(), "{dictionaryName}", {varName}_js.handle()).unwrap();') + f'set_dictionary_property(SafeJSContext::from_ptr(cx), obj.handle(), "{dictionaryName}", {varName}_js.handle()).unwrap();') return CGGeneric(insertion) def memberInsert(memberInfo: tuple[IDLArgument, JSToNativeConversionInfo]) -> CGThing: diff --git a/components/script_bindings/utils.rs b/components/script_bindings/utils.rs index 57dde90b23a..ceebcbb6f3e 100644 --- a/components/script_bindings/utils.rs +++ b/components/script_bindings/utils.rs @@ -290,12 +290,9 @@ pub unsafe fn get_dictionary_property( /// Set the property with name `property` from `object`. /// Returns `Err(())` on JSAPI failure, or null object, /// and Ok(()) otherwise -/// -/// # Safety -/// `cx` must point to a valid, non-null JSContext. #[allow(clippy::result_unit_err)] -pub unsafe fn set_dictionary_property( - cx: *mut JSContext, +pub fn set_dictionary_property( + cx: SafeJSContext, object: HandleObject, property: &str, value: HandleValue, @@ -305,8 +302,10 @@ pub unsafe fn set_dictionary_property( } let property = CString::new(property).unwrap(); - if !JS_SetProperty(cx, object, property.as_ptr(), value) { - return Err(()); + unsafe { + if !JS_SetProperty(*cx, object, property.as_ptr(), value) { + return Err(()); + } } Ok(())