aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-10-30 12:45:45 -0400
committerGitHub <noreply@github.com>2018-10-30 12:45:45 -0400
commit7a715519a010e7539f3408896663750c0982a0ff (patch)
tree890c30db9bf664187fb62418aa03de924edb5683
parentac41b813a0cb0d7e14cb5415f8916d63b44936c5 (diff)
parent35508c152a1e5556b87ec6392d77d5217a3f627b (diff)
downloadservo-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.rs20
-rw-r--r--components/script/dom/htmlvideoelement.rs8
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);
}