aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlmediaelement.rs
diff options
context:
space:
mode:
authorAndrei Volykhin <andrei.volykhin@gmail.com>2025-05-21 14:18:24 +0300
committerGitHub <noreply@github.com>2025-05-21 11:18:24 +0000
commit859a0ffbd58d57a22aada6ce28647fa69dfad5c8 (patch)
tree0466f32d03a8b8bc5b7fae780c6fbbcc5621e96b /components/script/dom/htmlmediaelement.rs
parenta5c3d6f0752d92d4ca806add1aa21873ae1b9fdc (diff)
downloadservo-859a0ffbd58d57a22aada6ce28647fa69dfad5c8.tar.gz
servo-859a0ffbd58d57a22aada6ce28647fa69dfad5c8.zip
htmlmediaelement: Make dirty element on any intrinsic size changes (#37056)
To properly compute (the video) element's content size for layout requires to dirty the element on any intrinstic size changes. Full list of the operations which cause layout invalidation: - media metadata update (NEW) - removing "src" attribute - video frame update - show poster image Testing: html/semantics/embedded-content/the-video-element/intrinsic_sizes.htm Fixes: https://github.com/servo/servo/issues/34434 Signed-off-by: Andrei Volykhin <andrei.volykhin@gmail.com>
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r--components/script/dom/htmlmediaelement.rs4
1 files changed, 1 insertions, 3 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 391da272ef3..d1791620592 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -1369,7 +1369,6 @@ impl HTMLMediaElement {
.lock()
.unwrap()
.render_poster_frame(image);
- self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
if pref!(media_testing_enabled) {
self.owner_global()
@@ -1618,7 +1617,6 @@ impl HTMLMediaElement {
// TODO: 6. Abort the overall resource selection algorithm.
},
PlayerEvent::VideoFrameUpdated => {
- self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
// Check if the frame was resized
if let Some(frame) = self.video_renderer.lock().unwrap().current_frame {
self.handle_resize(Some(frame.width as u32), Some(frame.height as u32));
@@ -2017,12 +2015,12 @@ impl HTMLMediaElement {
pub(crate) fn clear_current_frame_data(&self) {
self.handle_resize(None, None);
self.video_renderer.lock().unwrap().current_frame = None;
- self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
fn handle_resize(&self, width: Option<u32>, height: Option<u32>) {
if let Some(video_elem) = self.downcast::<HTMLVideoElement>() {
video_elem.resize(width, height);
+ self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
}
}