diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-10-30 12:45:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-30 12:45:45 -0400 |
commit | 7a715519a010e7539f3408896663750c0982a0ff (patch) | |
tree | 890c30db9bf664187fb62418aa03de924edb5683 | |
parent | ac41b813a0cb0d7e14cb5415f8916d63b44936c5 (diff) | |
parent | 35508c152a1e5556b87ec6392d77d5217a3f627b (diff) | |
download | servo-7a715519a010e7539f3408896663750c0982a0ff.tar.gz servo-7a715519a010e7539f3408896663750c0982a0ff.zip |
Auto merge of #22052 - ferjm:durationchange.resize.event.once, r=ceyusa
HTMLMediaElement - fire durationchange and resize iff something changes
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22052)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 20 | ||||
-rw-r--r-- | components/script/dom/htmlvideoelement.rs | 8 |
2 files changed, 22 insertions, 6 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 9aeabaed8b2..04754712887 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -1122,21 +1122,29 @@ impl HTMLMediaElement { self.playback_position.set(0.); // Step 4. + let previous_duration = self.duration.get(); if let Some(duration) = metadata.duration { self.duration.set(duration.as_secs() as f64); } else { self.duration.set(f64::INFINITY); } - let window = window_from_node(self); - let task_source = window.dom_manipulation_task_source(); - task_source.queue_simple_event(self.upcast(), atom!("durationchange"), &window); + if previous_duration != self.duration.get() { + let window = window_from_node(self); + let task_source = window.dom_manipulation_task_source(); + task_source.queue_simple_event(self.upcast(), atom!("durationchange"), &window); + } // Step 5. if self.is::<HTMLVideoElement>() { let video_elem = self.downcast::<HTMLVideoElement>().unwrap(); - video_elem.set_video_width(metadata.width); - video_elem.set_video_height(metadata.height); - task_source.queue_simple_event(self.upcast(), atom!("resize"), &window); + if video_elem.get_video_width() != metadata.width || + video_elem.get_video_height() != metadata.height { + video_elem.set_video_width(metadata.width); + video_elem.set_video_height(metadata.height); + let window = window_from_node(self); + let task_source = window.dom_manipulation_task_source(); + task_source.queue_simple_event(self.upcast(), atom!("resize"), &window); + } } // Step 6. diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs index 59c93bfea6e..25fe6c2d8ed 100644 --- a/components/script/dom/htmlvideoelement.rs +++ b/components/script/dom/htmlvideoelement.rs @@ -49,10 +49,18 @@ impl HTMLVideoElement { ) } + pub fn get_video_width(&self) -> u32 { + self.video_width.get() + } + pub fn set_video_width(&self, width: u32) { self.video_width.set(width); } + pub fn get_video_height(&self) -> u32 { + self.video_height.get() + } + pub fn set_video_height(&self, height: u32) { self.video_height.set(height); } |