aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/trace.rs3
-rw-r--r--components/script/dom/htmlmediaelement.rs15
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini2
5 files changed, 19 insertions, 8 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 9a38807e510..f94048c47de 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -130,7 +130,7 @@ use style::values::specified::Length;
use tendril::fmt::UTF8;
use tendril::stream::LossyDecoder;
use tendril::{StrTendril, TendrilSink};
-use time::Duration;
+use time::{Duration, Timespec};
use uuid::Uuid;
use webrender_api::{DocumentId, ImageKey, RenderApiSender};
use webvr_traits::WebVRGamepadHand;
@@ -488,6 +488,7 @@ unsafe_no_jsmanaged_fields!(dyn Player<Error = ServoMediaError>);
unsafe_no_jsmanaged_fields!(Mutex<MediaFrameRenderer>);
unsafe_no_jsmanaged_fields!(RenderApiSender);
unsafe_no_jsmanaged_fields!(ResourceFetchTiming);
+unsafe_no_jsmanaged_fields!(Timespec);
unsafe impl<'a> JSTraceable for &'a str {
#[inline]
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 880ba8ea49c..ecbd5687bf9 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -204,6 +204,9 @@ pub struct HTMLMediaElement {
text_tracks_list: MutNullableDom<TextTrackList>,
/// Expected content length of the media asset being fetched or played.
content_length: Cell<Option<u64>>,
+ /// Time of last timeupdate notification.
+ #[ignore_malloc_size_of = "Defined in time"]
+ next_timeupdate_event: Cell<Timespec>,
}
/// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate>
@@ -261,6 +264,7 @@ impl HTMLMediaElement {
played: Rc::new(DomRefCell::new(TimeRangesContainer::new())),
text_tracks_list: Default::default(),
content_length: Cell::new(None),
+ next_timeupdate_event: Cell::new(time::get_time() + Duration::milliseconds(250)),
}
}
@@ -303,7 +307,15 @@ impl HTMLMediaElement {
/// https://html.spec.whatwg.org/multipage/#time-marches-on
fn time_marches_on(&self) {
- // TODO: implement this.
+ // Step 6.
+ if time::get_time() > self.next_timeupdate_event.get() {
+ let window = window_from_node(self);
+ window
+ .task_manager()
+ .media_element_task_source()
+ .queue_simple_event(self.upcast(), atom!("timeupdate"), &window);
+ self.next_timeupdate_event.set(time::get_time() + Duration::milliseconds(350));
+ }
}
/// <https://html.spec.whatwg.org/multipage/#internal-pause-steps>
@@ -1173,6 +1185,7 @@ impl HTMLMediaElement {
.borrow_mut()
.add(self.playback_position.get(), position);
self.playback_position.set(position);
+ self.time_marches_on();
},
PlayerEvent::StateChanged(ref state) => match *state {
PlaybackState::Paused => {
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html.ini
index 28ebc56f4dc..f3c28dfb11e 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html.ini
@@ -1,7 +1,9 @@
[autoplay-with-broken-track.html]
expected: TIMEOUT
[<video autoplay> with <track> child]
- expected: TIMEOUT
+ expected:
+ if debug and (os == "mac") and (version == "OS X 10.14.1") and (processor == "x86_64") and (bits == 64): PASS
+ TIMEOUT
[<video autoplay> with <track src=\"invalid://url\" default=\"\"> child]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate.html.ini
index 8bd1365fa43..b9a0a887777 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate.html.ini
@@ -2,9 +2,6 @@
type: testharness
disabled: Until https://github.com/servo/servo/pull/22477 is merged
expected: TIMEOUT
- [setting src attribute on a sufficiently long autoplay audio should trigger timeupdate event]
- expected: NOTRUN
-
[setting src attribute on a sufficiently long autoplay video should trigger timeupdate event]
expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
index 308f76f566b..9d6ae4cd5be 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini
@@ -5,6 +5,4 @@
[calling play() on a sufficiently long audio should trigger timeupdate event]
expected: NOTRUN
- [calling play() on a sufficiently long video should trigger timeupdate event]
- expected: FAIL