diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-11-02 10:07:12 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-11-21 09:42:53 +0100 |
commit | f98da2e7b73885888b211736d4f7582511c9016a (patch) | |
tree | e3184dc991566fae89b8c07f15b28818129981c4 /components/script/dom/htmlmediaelement.rs | |
parent | 5da10694912fa43b673f74445f4f249eaf46b451 (diff) | |
download | servo-f98da2e7b73885888b211736d4f7582511c9016a.tar.gz servo-f98da2e7b73885888b211736d4f7582511c9016a.zip |
HTMLMediaElement playing attribute
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index b5cc9d9b1fd..bfc51227dc5 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -33,6 +33,7 @@ use crate::dom::mediaerror::MediaError; use crate::dom::node::{document_from_node, window_from_node, Node, NodeDamage, UnbindContext}; use crate::dom::performanceresourcetiming::InitiatorType; use crate::dom::promise::Promise; +use crate::dom::timeranges::{TimeRanges, TimeRangesContainer}; use crate::dom::virtualmethods::VirtualMethods; use crate::fetch::FetchCanceller; use crate::microtask::{Microtask, MicrotaskRunnable}; @@ -182,6 +183,9 @@ pub struct HTMLMediaElement { seeking: Cell<bool>, /// URL of the media resource, if any. resource_url: DomRefCell<Option<ServoUrl>>, + /// https://html.spec.whatwg.org/multipage/#dom-media-played + #[ignore_malloc_size_of = "Rc"] + played: Rc<DomRefCell<TimeRangesContainer>>, } /// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate> @@ -233,6 +237,7 @@ impl HTMLMediaElement { default_playback_start_position: Cell::new(0.), seeking: Cell::new(false), resource_url: DomRefCell::new(None), + played: Rc::new(DomRefCell::new(TimeRangesContainer::new())), } } @@ -1186,7 +1191,12 @@ impl HTMLMediaElement { // XXX Steps 12 and 13 require audio and video tracks support. }, PlayerEvent::PositionChanged(position) => { - self.playback_position.set(position as f64); + let position = position as f64; + let _ = self + .played + .borrow_mut() + .add(self.playback_position.get(), position); + self.playback_position.set(position); }, PlayerEvent::StateChanged(ref state) => match *state { PlaybackState::Paused => { @@ -1356,6 +1366,11 @@ impl HTMLMediaElementMethods for HTMLMediaElement { fn FastSeek(&self, time: Finite<f64>) { self.seek(*time, /* approximat_for_speed */ true); } + + // https://html.spec.whatwg.org/multipage/#dom-media-played + fn Played(&self) -> DomRoot<TimeRanges> { + TimeRanges::new(self.global().as_window(), self.played.clone()) + } } impl VirtualMethods for HTMLMediaElement { |