diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 5192b2274a8..0d54d188e59 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -330,6 +330,34 @@ impl From for SrcObject {
}
}
+#[derive(JSTraceable, MallocSizeOf)]
+struct DroppableHtmlMediaElement {
+ /// Player Id reported the player thread
+ player_id: Cell,
+ #[ignore_malloc_size_of = "Defined in other crates"]
+ #[no_trace]
+ player_context: WindowGLContext,
+}
+
+impl DroppableHtmlMediaElement {
+ fn new(player_id: Cell, player_context: WindowGLContext) -> Self {
+ Self {
+ player_id,
+ player_context,
+ }
+ }
+
+ pub(crate) fn set_player_id(&self, id: u64) {
+ self.player_id.set(id);
+ }
+}
+
+impl Drop for DroppableHtmlMediaElement {
+ fn drop(&mut self) {
+ self.player_context
+ .send(GLPlayerMsg::UnregisterPlayer(self.player_id.get()));
+ }
+}
#[dom_struct]
#[allow(non_snake_case)]
pub(crate) struct HTMLMediaElement {
@@ -411,16 +439,12 @@ pub(crate) struct HTMLMediaElement {
next_timeupdate_event: Cell,
/// Latest fetch request context.
current_fetch_context: DomRefCell