diff --git a/components/script/canvas_state.rs b/components/script/canvas_state.rs index 4e77b03fdb6..c95c9d736ce 100644 --- a/components/script/canvas_state.rs +++ b/components/script/canvas_state.rs @@ -259,10 +259,6 @@ impl CanvasState { }) } - pub(crate) fn get_ipc_renderer(&self) -> &IpcSender { - &self.ipc_renderer - } - pub(crate) fn image_key(&self) -> ImageKey { self.image_key } @@ -2197,6 +2193,14 @@ impl CanvasState { } } +impl Drop for CanvasState { + fn drop(&mut self) { + if let Err(err) = self.ipc_renderer.send(CanvasMsg::Close(self.canvas_id)) { + warn!("Could not close canvas: {}", err) + } + } +} + pub(crate) fn parse_color( canvas: Option<&HTMLCanvasElement>, string: &str, diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index e01566b54ae..d6c94ccc1cb 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -2,10 +2,10 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use canvas_traits::canvas::{Canvas2dMsg, CanvasId, CanvasMsg}; +use canvas_traits::canvas::{Canvas2dMsg, CanvasId}; use dom_struct::dom_struct; use euclid::default::Size2D; -use ipc_channel::ipc::{self, IpcSender}; +use ipc_channel::ipc; use pixels::Snapshot; use script_bindings::inheritance::Castable; use servo_url::ServoUrl; @@ -37,29 +37,12 @@ use crate::dom::path2d::Path2D; use crate::dom::textmetrics::TextMetrics; use crate::script_runtime::CanGc; -#[derive(JSTraceable, MallocSizeOf)] -struct DroppableCanvasRenderingContext2D { - #[no_trace] - ipc_sender: IpcSender, - #[no_trace] - canvas_id: CanvasId, -} - -impl Drop for DroppableCanvasRenderingContext2D { - fn drop(&mut self) { - if let Err(err) = self.ipc_sender.send(CanvasMsg::Close(self.canvas_id)) { - warn!("Could not close canvas: {}", err) - } - } -} - // https://html.spec.whatwg.org/multipage/#canvasrenderingcontext2d #[dom_struct] pub(crate) struct CanvasRenderingContext2D { reflector_: Reflector, canvas: HTMLCanvasElementOrOffscreenCanvas, canvas_state: CanvasState, - droppable: DroppableCanvasRenderingContext2D, } impl CanvasRenderingContext2D { @@ -71,16 +54,10 @@ impl CanvasRenderingContext2D { ) -> Option { let canvas_state = CanvasState::new(global, Size2D::new(size.width as u64, size.height as u64))?; - let ipc_sender = canvas_state.get_ipc_renderer().clone(); - let canvas_id = canvas_state.get_canvas_id(); Some(CanvasRenderingContext2D { reflector_: Reflector::new(), canvas, canvas_state, - droppable: DroppableCanvasRenderingContext2D { - ipc_sender, - canvas_id, - }, }) }