aboutsummaryrefslogtreecommitdiffstats
path: root/components/script_bindings/conversions.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2025-03-16 10:08:22 -0400
committerGitHub <noreply@github.com>2025-03-16 14:08:22 +0000
commitc8d878795966f0b685385e6961e0d69df4268734 (patch)
tree3560dee84d5ed70506b1de90910d361868b868dd /components/script_bindings/conversions.rs
parentd35da38a2fd6f093967e74f704612391b4988e69 (diff)
downloadservo-c8d878795966f0b685385e6961e0d69df4268734.tar.gz
servo-c8d878795966f0b685385e6961e0d69df4268734.zip
Move CustomTraceable to script_bindings. (#35988)
* script: Move CustomTraceable to script_bindings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * script: Move record binding support to script_bindings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Address clippy warnings. Signed-off-by: Josh Matthews <josh@joshmatthews.net> --------- Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Diffstat (limited to 'components/script_bindings/conversions.rs')
-rw-r--r--components/script_bindings/conversions.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/components/script_bindings/conversions.rs b/components/script_bindings/conversions.rs
index 98998e170da..6e0ce7adee0 100644
--- a/components/script_bindings/conversions.rs
+++ b/components/script_bindings/conversions.rs
@@ -18,8 +18,8 @@ use js::jsapi::{
};
use js::jsval::{ObjectValue, StringValue, UndefinedValue};
use js::rust::{
- HandleValue, MutableHandleValue, ToString, get_object_class, is_dom_class, is_dom_object,
- maybe_wrap_value,
+ HandleId, HandleValue, MutableHandleValue, ToString, get_object_class, is_dom_class,
+ is_dom_object, maybe_wrap_value,
};
use crate::inheritance::Castable;
@@ -387,3 +387,24 @@ where
}
root_from_object(v.get().to_object(), cx)
}
+
+/// Convert `id` to a `DOMString`. Returns `None` if `id` is not a string or
+/// integer.
+///
+/// Handling of invalid UTF-16 in strings depends on the relevant option.
+///
+/// # Safety
+/// - cx must point to a non-null, valid JSContext instance.
+pub unsafe fn jsid_to_string(cx: *mut JSContext, id: HandleId) -> Option<DOMString> {
+ let id_raw = *id;
+ if id_raw.is_string() {
+ let jsstr = std::ptr::NonNull::new(id_raw.to_string()).unwrap();
+ return Some(jsstring_to_str(cx, jsstr));
+ }
+
+ if id_raw.is_int() {
+ return Some(id_raw.to_int().to_string().into());
+ }
+
+ None
+}