aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/imagebitmap.rs
diff options
context:
space:
mode:
authorSimon Wülker <simon.wuelker@arcor.de>2024-11-04 02:09:43 +0100
committerGitHub <noreply@github.com>2024-11-04 01:09:43 +0000
commite5cc7ad235bf9782b0831350d85f87bcf80c4354 (patch)
tree24ca1aa5390a564107f41b05aab6359bc84ab1bd /components/script/dom/imagebitmap.rs
parente93544c0039b196a2514207731ec9280e22a8564 (diff)
downloadservo-e5cc7ad235bf9782b0831350d85f87bcf80c4354.tar.gz
servo-e5cc7ad235bf9782b0831350d85f87bcf80c4354.zip
Implement `ImageBitmap.close` (#34124)
* Implement ImageBitmap.close Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Update WPT expectations Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Diffstat (limited to 'components/script/dom/imagebitmap.rs')
-rw-r--r--components/script/dom/imagebitmap.rs44
1 files changed, 35 insertions, 9 deletions
diff --git a/components/script/dom/imagebitmap.rs b/components/script/dom/imagebitmap.rs
index 36b845b64e4..66294cbf05c 100644
--- a/components/script/dom/imagebitmap.rs
+++ b/components/script/dom/imagebitmap.rs
@@ -19,7 +19,11 @@ pub struct ImageBitmap {
reflector_: Reflector,
width: u32,
height: u32,
- bitmap_data: DomRefCell<Vec<u8>>,
+ /// The actual pixel data of the bitmap
+ ///
+ /// If this is `None`, then the bitmap data has been released by calling
+ /// [`close`](https://html.spec.whatwg.org/multipage/#dom-imagebitmap-close)
+ bitmap_data: DomRefCell<Option<Vec<u8>>>,
origin_clean: Cell<bool>,
}
@@ -29,7 +33,7 @@ impl ImageBitmap {
reflector_: Reflector::new(),
width: width_arg,
height: height_arg,
- bitmap_data: DomRefCell::new(vec![]),
+ bitmap_data: DomRefCell::new(Some(vec![])),
origin_clean: Cell::new(true),
}
}
@@ -43,26 +47,48 @@ impl ImageBitmap {
}
pub fn set_bitmap_data(&self, data: Vec<u8>) {
- *self.bitmap_data.borrow_mut() = data;
+ *self.bitmap_data.borrow_mut() = Some(data);
}
pub fn set_origin_clean(&self, origin_is_clean: bool) {
self.origin_clean.set(origin_is_clean);
}
+
+ /// Return the value of the [`[[Detached]]`](https://html.spec.whatwg.org/multipage/#detached)
+ /// internal slot
+ fn is_detached(&self) -> bool {
+ self.bitmap_data.borrow().is_none()
+ }
}
impl ImageBitmapMethods for ImageBitmap {
- // https://html.spec.whatwg.org/multipage/#dom-imagebitmap-height
+ /// <https://html.spec.whatwg.org/multipage/#dom-imagebitmap-height>
fn Height(&self) -> u32 {
- //to do: add a condition for checking detached internal slot
- //and return 0 if set to true
+ // Step 1. If this's [[Detached]] internal slot's value is true, then return 0.
+ if self.is_detached() {
+ return 0;
+ }
+
+ // Step 2. Return this's height, in CSS pixels.
self.height
}
- // https://html.spec.whatwg.org/multipage/#dom-imagebitmap-width
+ /// <https://html.spec.whatwg.org/multipage/#dom-imagebitmap-width>
fn Width(&self) -> u32 {
- //to do: add a condition to check detached internal slot
- ////and return 0 if set to true
+ // Step 1. If this's [[Detached]] internal slot's value is true, then return 0.
+ if self.is_detached() {
+ return 0;
+ }
+
+ // Step 2. Return this's width, in CSS pixels.
self.width
}
+
+ /// <https://html.spec.whatwg.org/multipage/#dom-imagebitmap-close>
+ fn Close(&self) {
+ // Step 1. Set this's [[Detached]] internal slot value to true.
+ // Step 2. Unset this's bitmap data.
+ // NOTE: The existence of the bitmap data is the internal slot in our implementation
+ self.bitmap_data.borrow_mut().take();
+ }
}