diff options
author | Simon Wülker <simon.wuelker@arcor.de> | 2024-11-04 02:09:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-04 01:09:43 +0000 |
commit | e5cc7ad235bf9782b0831350d85f87bcf80c4354 (patch) | |
tree | 24ca1aa5390a564107f41b05aab6359bc84ab1bd /components/script/dom/imagebitmap.rs | |
parent | e93544c0039b196a2514207731ec9280e22a8564 (diff) | |
download | servo-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.rs | 44 |
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(); + } } |