aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorArya Nair <aryaajitnair@gmail.com>2025-03-19 23:33:09 +0530
committerGitHub <noreply@github.com>2025-03-19 18:03:09 +0000
commitcb56ac8561ab4f27d0268881e7c95ee57a2eadfe (patch)
treef1d73e3b202a8d06ce988578cc0ee355a451d7be /components/script/dom
parent0917e080df769011f6fd4348d63f8fd5895baa21 (diff)
downloadservo-cb56ac8561ab4f27d0268881e7c95ee57a2eadfe.tar.gz
servo-cb56ac8561ab4f27d0268881e7c95ee57a2eadfe.zip
feat: add can_gc argument to to_frozen_array (#36043)
* feat: add can_gc argument to to_frozen_array Signed-off-by: Arya Nair <aryaajitnair@gmail.com> * fix: linting issues Signed-off-by: Arya Nair <aryaajitnair@gmail.com> * feat: add can_gc in binding.conf Signed-off-by: Arya Nair <aryaajitnair@gmail.com> * fix: linting issues Signed-off-by: Arya Nair <aryaajitnair@gmail.com> --------- Signed-off-by: Arya Nair <aryaajitnair@gmail.com>
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/frozenarray.rs5
-rw-r--r--components/script/dom/bindings/utils.rs1
-rw-r--r--components/script/dom/csslayerstatementrule.rs4
-rw-r--r--components/script/dom/datatransfer.rs4
-rw-r--r--components/script/dom/datatransferitemlist.rs3
-rw-r--r--components/script/dom/extendablemessageevent.rs3
-rw-r--r--components/script/dom/gamepadhapticactuator.rs4
-rw-r--r--components/script/dom/globalscope.rs2
-rw-r--r--components/script/dom/intersectionobserver.rs4
-rw-r--r--components/script/dom/messageevent.rs3
-rw-r--r--components/script/dom/navigator.rs4
-rw-r--r--components/script/dom/notification.rs8
-rw-r--r--components/script/dom/performanceobserver.rs9
-rw-r--r--components/script/dom/resizeobserverentry.rs17
-rw-r--r--components/script/dom/webgpu/gpucompilationinfo.rs4
-rw-r--r--components/script/dom/webxr/xrboundedreferencespace.rs4
-rw-r--r--components/script/dom/webxr/xrinputsourceschangeevent.rs4
-rw-r--r--components/script/dom/webxr/xrrenderstate.rs4
-rw-r--r--components/script/dom/webxr/xrsession.rs4
-rw-r--r--components/script/dom/workernavigator.rs4
20 files changed, 56 insertions, 39 deletions
diff --git a/components/script/dom/bindings/frozenarray.rs b/components/script/dom/bindings/frozenarray.rs
index 44cc0bd4085..a9fb40ad0b4 100644
--- a/components/script/dom/bindings/frozenarray.rs
+++ b/components/script/dom/bindings/frozenarray.rs
@@ -9,7 +9,7 @@ use js::rust::MutableHandleValue;
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::utils::to_frozen_array;
-use crate::script_runtime::JSContext;
+use crate::script_runtime::{CanGc, JSContext};
#[derive(JSTraceable)]
pub(crate) struct CachedFrozenArray {
@@ -28,6 +28,7 @@ impl CachedFrozenArray {
f: F,
cx: JSContext,
mut retval: MutableHandleValue,
+ can_gc: CanGc,
) {
if let Some(inner) = &*self.frozen_value.borrow() {
retval.set(inner.get());
@@ -35,7 +36,7 @@ impl CachedFrozenArray {
}
let array = f();
- to_frozen_array(array.as_slice(), cx, retval);
+ to_frozen_array(array.as_slice(), cx, retval, can_gc);
// Safety: need to create the Heap value in its final memory location before setting it.
*self.frozen_value.borrow_mut() = Some(Heap::default());
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 36b81e6e884..c5c61425a3b 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -123,6 +123,7 @@ pub(crate) fn to_frozen_array<T: ToJSValConvertible>(
convertibles: &[T],
cx: SafeJSContext,
rval: MutableHandleValue,
+ _can_gc: CanGc,
) {
unsafe { convertibles.to_jsval(*cx, rval) };
diff --git a/components/script/dom/csslayerstatementrule.rs b/components/script/dom/csslayerstatementrule.rs
index 3678632347a..1206cff9442 100644
--- a/components/script/dom/csslayerstatementrule.rs
+++ b/components/script/dom/csslayerstatementrule.rs
@@ -69,13 +69,13 @@ impl SpecificCSSRule for CSSLayerStatementRule {
impl CSSLayerStatementRuleMethods<crate::DomTypeHolder> for CSSLayerStatementRule {
/// <https://drafts.csswg.org/css-cascade-5/#dom-csslayerstatementrule-namelist>
- fn NameList(&self, cx: SafeJSContext, retval: MutableHandleValue) {
+ fn NameList(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
let names: Vec<DOMString> = self
.layerstatementrule
.names
.iter()
.map(|name| DOMString::from_string(name.to_css_string()))
.collect();
- to_frozen_array(names.as_slice(), cx, retval)
+ to_frozen_array(names.as_slice(), cx, retval, can_gc)
}
}
diff --git a/components/script/dom/datatransfer.rs b/components/script/dom/datatransfer.rs
index 0626ec27787..d86e351f513 100644
--- a/components/script/dom/datatransfer.rs
+++ b/components/script/dom/datatransfer.rs
@@ -160,8 +160,8 @@ impl DataTransferMethods<crate::DomTypeHolder> for DataTransfer {
}
/// <https://html.spec.whatwg.org/multipage/#dom-datatransfer-types>
- fn Types(&self, cx: JSContext, retval: MutableHandleValue) {
- self.items.frozen_types(cx, retval);
+ fn Types(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ self.items.frozen_types(cx, retval, can_gc);
}
/// <https://html.spec.whatwg.org/multipage/#dom-datatransfer-getdata>
diff --git a/components/script/dom/datatransferitemlist.rs b/components/script/dom/datatransferitemlist.rs
index 0977834ddb7..f0ad17b94ef 100644
--- a/components/script/dom/datatransferitemlist.rs
+++ b/components/script/dom/datatransferitemlist.rs
@@ -51,7 +51,7 @@ impl DataTransferItemList {
)
}
- pub(crate) fn frozen_types(&self, cx: JSContext, retval: MutableHandleValue) {
+ pub(crate) fn frozen_types(&self, cx: JSContext, retval: MutableHandleValue, can_gc: CanGc) {
self.frozen_types.get_or_init(
|| {
self.data_store
@@ -61,6 +61,7 @@ impl DataTransferItemList {
},
cx,
retval,
+ can_gc,
);
}
diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs
index 029762d4dae..63852928722 100644
--- a/components/script/dom/extendablemessageevent.rs
+++ b/components/script/dom/extendablemessageevent.rs
@@ -207,7 +207,7 @@ impl ExtendableMessageEventMethods<crate::DomTypeHolder> for ExtendableMessageEv
}
/// <https://w3c.github.io/ServiceWorker/#extendablemessage-event-ports>
- fn Ports(&self, cx: JSContext, retval: MutableHandleValue) {
+ fn Ports(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
self.frozen_ports.get_or_init(
|| {
self.ports
@@ -217,6 +217,7 @@ impl ExtendableMessageEventMethods<crate::DomTypeHolder> for ExtendableMessageEv
},
cx,
retval,
+ can_gc,
);
}
}
diff --git a/components/script/dom/gamepadhapticactuator.rs b/components/script/dom/gamepadhapticactuator.rs
index fc8dbbd7add..d19db6d1279 100644
--- a/components/script/dom/gamepadhapticactuator.rs
+++ b/components/script/dom/gamepadhapticactuator.rs
@@ -126,8 +126,8 @@ impl GamepadHapticActuator {
impl GamepadHapticActuatorMethods<crate::DomTypeHolder> for GamepadHapticActuator {
/// <https://www.w3.org/TR/gamepad/#dom-gamepadhapticactuator-effects>
- fn Effects(&self, cx: JSContext, retval: MutableHandleValue) {
- to_frozen_array(self.effects.as_slice(), cx, retval)
+ fn Effects(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(self.effects.as_slice(), cx, retval, can_gc)
}
/// <https://www.w3.org/TR/gamepad/#dom-gamepadhapticactuator-playeffect>
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index bea3e1c3357..88d56456686 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -2908,6 +2908,7 @@ impl GlobalScope {
&self,
cx: SafeJSContext,
retval: MutableHandleValue,
+ can_gc: CanGc,
) {
self.frozen_supported_performance_entry_types.get_or_init(
|| {
@@ -2918,6 +2919,7 @@ impl GlobalScope {
},
cx,
retval,
+ can_gc,
);
}
diff --git a/components/script/dom/intersectionobserver.rs b/components/script/dom/intersectionobserver.rs
index 95ede7780f9..81ac8a1337d 100644
--- a/components/script/dom/intersectionobserver.rs
+++ b/components/script/dom/intersectionobserver.rs
@@ -691,8 +691,8 @@ impl IntersectionObserverMethods<crate::DomTypeHolder> for IntersectionObserver
/// > constructor, or the sequence is empty, the value of this attribute will be `[0]`.
///
/// <https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds>
- fn Thresholds(&self, context: JSContext, retval: MutableHandleValue) {
- to_frozen_array(&self.thresholds.borrow(), context, retval);
+ fn Thresholds(&self, context: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(&self.thresholds.borrow(), context, retval, can_gc);
}
/// > A number indicating the minimum delay in milliseconds between notifications from
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs
index de866425322..93e457ff049 100644
--- a/components/script/dom/messageevent.rs
+++ b/components/script/dom/messageevent.rs
@@ -302,7 +302,7 @@ impl MessageEventMethods<crate::DomTypeHolder> for MessageEvent {
}
/// <https://html.spec.whatwg.org/multipage/#dom-messageevent-ports>
- fn Ports(&self, cx: JSContext, retval: MutableHandleValue) {
+ fn Ports(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
self.frozen_ports.get_or_init(
|| {
self.ports
@@ -313,6 +313,7 @@ impl MessageEventMethods<crate::DomTypeHolder> for MessageEvent {
},
cx,
retval,
+ can_gc,
);
}
diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs
index 492cb89fb0f..371ab0b1b9f 100644
--- a/components/script/dom/navigator.rs
+++ b/components/script/dom/navigator.rs
@@ -214,8 +214,8 @@ impl NavigatorMethods<crate::DomTypeHolder> for Navigator {
// https://html.spec.whatwg.org/multipage/#dom-navigator-languages
#[allow(unsafe_code)]
- fn Languages(&self, cx: JSContext, retval: MutableHandleValue) {
- to_frozen_array(&[self.Language()], cx, retval)
+ fn Languages(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(&[self.Language()], cx, retval, can_gc)
}
// https://html.spec.whatwg.org/multipage/#dom-navigator-plugins
diff --git a/components/script/dom/notification.rs b/components/script/dom/notification.rs
index 7992cb459c3..197a79e9bfb 100644
--- a/components/script/dom/notification.rs
+++ b/components/script/dom/notification.rs
@@ -441,7 +441,7 @@ impl NotificationMethods<crate::DomTypeHolder> for Notification {
retval.set(self.data.get());
}
/// <https://notifications.spec.whatwg.org/#dom-notification-actions>
- fn Actions(&self, cx: SafeJSContext, retval: MutableHandleValue) {
+ fn Actions(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
// step 1: Let frozenActions be an empty list of type NotificationAction.
let mut frozen_actions: Vec<NotificationAction> = Vec::new();
@@ -461,11 +461,11 @@ impl NotificationMethods<crate::DomTypeHolder> for Notification {
}
// step 3: Return the result of create a frozen array from frozenActions.
- to_frozen_array(frozen_actions.as_slice(), cx, retval);
+ to_frozen_array(frozen_actions.as_slice(), cx, retval, can_gc);
}
/// <https://notifications.spec.whatwg.org/#dom-notification-vibrate>
- fn Vibrate(&self, cx: SafeJSContext, retval: MutableHandleValue) {
- to_frozen_array(self.vibration_pattern.as_slice(), cx, retval);
+ fn Vibrate(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(self.vibration_pattern.as_slice(), cx, retval, can_gc);
}
/// <https://notifications.spec.whatwg.org/#dom-notification-timestamp>
fn Timestamp(&self) -> u64 {
diff --git a/components/script/dom/performanceobserver.rs b/components/script/dom/performanceobserver.rs
index 25c3f0139fc..397069dd028 100644
--- a/components/script/dom/performanceobserver.rs
+++ b/components/script/dom/performanceobserver.rs
@@ -141,10 +141,15 @@ impl PerformanceObserverMethods<crate::DomTypeHolder> for PerformanceObserver {
}
// https://w3c.github.io/performance-timeline/#supportedentrytypes-attribute
- fn SupportedEntryTypes(cx: JSContext, global: &GlobalScope, retval: MutableHandleValue) {
+ fn SupportedEntryTypes(
+ cx: JSContext,
+ global: &GlobalScope,
+ can_gc: CanGc,
+ retval: MutableHandleValue,
+ ) {
// While this is exposed through a method of PerformanceObserver,
// it is specified as associated with the global scope.
- global.supported_performance_entry_types(cx, retval)
+ global.supported_performance_entry_types(cx, retval, can_gc)
}
// https://w3c.github.io/performance-timeline/#dom-performanceobserver-observe()
diff --git a/components/script/dom/resizeobserverentry.rs b/components/script/dom/resizeobserverentry.rs
index 12157b226ad..8ac8d43dcbb 100644
--- a/components/script/dom/resizeobserverentry.rs
+++ b/components/script/dom/resizeobserverentry.rs
@@ -90,32 +90,37 @@ impl ResizeObserverEntryMethods<crate::DomTypeHolder> for ResizeObserverEntry {
}
/// <https://drafts.csswg.org/resize-observer/#dom-resizeobserverentry-borderboxsize>
- fn BorderBoxSize(&self, cx: SafeJSContext, retval: MutableHandleValue) {
+ fn BorderBoxSize(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
let sizes: Vec<DomRoot<ResizeObserverSize>> = self
.border_box_size
.iter()
.map(|size| DomRoot::from_ref(&**size))
.collect();
- to_frozen_array(sizes.as_slice(), cx, retval)
+ to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
}
/// <https://drafts.csswg.org/resize-observer/#dom-resizeobserverentry-contentboxsize>
- fn ContentBoxSize(&self, cx: SafeJSContext, retval: MutableHandleValue) {
+ fn ContentBoxSize(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
let sizes: Vec<DomRoot<ResizeObserverSize>> = self
.content_box_size
.iter()
.map(|size| DomRoot::from_ref(&**size))
.collect();
- to_frozen_array(sizes.as_slice(), cx, retval);
+ to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
}
/// <https://drafts.csswg.org/resize-observer/#dom-resizeobserverentry-devicepixelcontentboxsize>
- fn DevicePixelContentBoxSize(&self, cx: SafeJSContext, retval: MutableHandleValue) {
+ fn DevicePixelContentBoxSize(
+ &self,
+ cx: SafeJSContext,
+ can_gc: CanGc,
+ retval: MutableHandleValue,
+ ) {
let sizes: Vec<DomRoot<ResizeObserverSize>> = self
.device_pixel_content_box_size
.iter()
.map(|size| DomRoot::from_ref(&**size))
.collect();
- to_frozen_array(sizes.as_slice(), cx, retval);
+ to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
}
}
diff --git a/components/script/dom/webgpu/gpucompilationinfo.rs b/components/script/dom/webgpu/gpucompilationinfo.rs
index a2f0cc3ff89..ae092479f2b 100644
--- a/components/script/dom/webgpu/gpucompilationinfo.rs
+++ b/components/script/dom/webgpu/gpucompilationinfo.rs
@@ -57,7 +57,7 @@ impl GPUCompilationInfo {
impl GPUCompilationInfoMethods<crate::DomTypeHolder> for GPUCompilationInfo {
/// <https://gpuweb.github.io/gpuweb/#dom-gpucompilationinfo-messages>
- fn Messages(&self, cx: JSContext, retval: MutableHandleValue) {
- to_frozen_array(self.msg.as_slice(), cx, retval)
+ fn Messages(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(self.msg.as_slice(), cx, retval, can_gc)
}
}
diff --git a/components/script/dom/webxr/xrboundedreferencespace.rs b/components/script/dom/webxr/xrboundedreferencespace.rs
index 6965ef3dc26..46c48c2494e 100644
--- a/components/script/dom/webxr/xrboundedreferencespace.rs
+++ b/components/script/dom/webxr/xrboundedreferencespace.rs
@@ -85,9 +85,9 @@ impl XRBoundedReferenceSpaceMethods<crate::DomTypeHolder> for XRBoundedReference
})
.collect();
- to_frozen_array(&points, cx, retval)
+ to_frozen_array(&points, cx, retval, can_gc)
} else {
- to_frozen_array::<DomRoot<DOMPointReadOnly>>(&[], cx, retval)
+ to_frozen_array::<DomRoot<DOMPointReadOnly>>(&[], cx, retval, can_gc)
}
}
}
diff --git a/components/script/dom/webxr/xrinputsourceschangeevent.rs b/components/script/dom/webxr/xrinputsourceschangeevent.rs
index e69d59c8529..6893a5e80ea 100644
--- a/components/script/dom/webxr/xrinputsourceschangeevent.rs
+++ b/components/script/dom/webxr/xrinputsourceschangeevent.rs
@@ -88,9 +88,9 @@ impl XRInputSourcesChangeEvent {
let _ac = enter_realm(global);
let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut frozen_val: JSVal);
- to_frozen_array(added, cx, frozen_val.handle_mut());
+ to_frozen_array(added, cx, frozen_val.handle_mut(), can_gc);
changeevent.added.set(*frozen_val);
- to_frozen_array(removed, cx, frozen_val.handle_mut());
+ to_frozen_array(removed, cx, frozen_val.handle_mut(), can_gc);
changeevent.removed.set(*frozen_val);
changeevent
}
diff --git a/components/script/dom/webxr/xrrenderstate.rs b/components/script/dom/webxr/xrrenderstate.rs
index 4cf263a9182..3f546c2353d 100644
--- a/components/script/dom/webxr/xrrenderstate.rs
+++ b/components/script/dom/webxr/xrrenderstate.rs
@@ -149,10 +149,10 @@ impl XRRenderStateMethods<crate::DomTypeHolder> for XRRenderState {
}
/// <https://immersive-web.github.io/layers/#dom-xrrenderstate-layers>
- fn Layers(&self, cx: JSContext, retval: MutableHandleValue) {
+ fn Layers(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
// TODO: cache this array?
let layers = self.layers.borrow();
let layers: Vec<&XRLayer> = layers.iter().map(|x| &**x).collect();
- to_frozen_array(&layers[..], cx, retval)
+ to_frozen_array(&layers[..], cx, retval, can_gc)
}
}
diff --git a/components/script/dom/webxr/xrsession.rs b/components/script/dom/webxr/xrsession.rs
index 31fe2ceb144..fb2a7f6c962 100644
--- a/components/script/dom/webxr/xrsession.rs
+++ b/components/script/dom/webxr/xrsession.rs
@@ -1006,10 +1006,10 @@ impl XRSessionMethods<crate::DomTypeHolder> for XRSession {
}
/// <https://www.w3.org/TR/webxr/#dom-xrsession-enabledfeatures>
- fn EnabledFeatures(&self, cx: JSContext, retval: MutableHandleValue) {
+ fn EnabledFeatures(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
let session = self.session.borrow();
let features = session.granted_features();
- to_frozen_array(features, cx, retval)
+ to_frozen_array(features, cx, retval, can_gc)
}
/// <https://www.w3.org/TR/webxr/#dom-xrsession-issystemkeyboardsupported>
diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs
index 1cbba5dcc89..1034381a287 100644
--- a/components/script/dom/workernavigator.rs
+++ b/components/script/dom/workernavigator.rs
@@ -100,8 +100,8 @@ impl WorkerNavigatorMethods<crate::DomTypeHolder> for WorkerNavigator {
// https://html.spec.whatwg.org/multipage/#dom-navigator-languages
#[allow(unsafe_code)]
- fn Languages(&self, cx: JSContext, retval: MutableHandleValue) {
- to_frozen_array(&[self.Language()], cx, retval)
+ fn Languages(&self, cx: JSContext, can_gc: CanGc, retval: MutableHandleValue) {
+ to_frozen_array(&[self.Language()], cx, retval, can_gc)
}
// https://w3c.github.io/permissions/#navigator-and-workernavigator-extension