Start marking functions that can transitively trigger a GC (#33144)

* Mark JS reflector wrappers as CanGc.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* Propagate CanGc from reflect_dom_object_with_proto.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* Mark DOM constructors as GC operations.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
Josh Matthews 2024-08-22 07:42:36 -04:00 committed by GitHub
parent 9a1051c917
commit 60ef6bc461
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
140 changed files with 1336 additions and 304 deletions

View file

@ -31,6 +31,7 @@ use crate::dom::offlineaudiocompletionevent::OfflineAudioCompletionEvent;
use crate::dom::promise::Promise;
use crate::dom::window::Window;
use crate::realms::InRealm;
use crate::script_runtime::CanGc;
use crate::task_source::TaskSource;
#[dom_struct]
@ -77,6 +78,7 @@ impl OfflineAudioContext {
channel_count: u32,
length: u32,
sample_rate: f32,
can_gc: CanGc,
) -> Fallible<DomRoot<OfflineAudioContext>> {
if channel_count > MAX_CHANNEL_COUNT ||
channel_count == 0 ||
@ -92,12 +94,14 @@ impl OfflineAudioContext {
Box::new(context),
window,
proto,
can_gc,
))
}
pub fn Constructor(
window: &Window,
proto: Option<HandleObject>,
can_gc: CanGc,
options: &OfflineAudioContextOptions,
) -> Fallible<DomRoot<OfflineAudioContext>> {
OfflineAudioContext::new(
@ -106,17 +110,26 @@ impl OfflineAudioContext {
options.numberOfChannels,
options.length,
*options.sampleRate,
can_gc,
)
}
pub fn Constructor_(
window: &Window,
proto: Option<HandleObject>,
can_gc: CanGc,
number_of_channels: u32,
length: u32,
sample_rate: Finite<f32>,
) -> Fallible<DomRoot<OfflineAudioContext>> {
OfflineAudioContext::new(window, proto, number_of_channels, length, *sample_rate)
OfflineAudioContext::new(
window,
proto,
number_of_channels,
length,
*sample_rate,
can_gc,
)
}
}