diff options
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index d78cf8cb8f9..bbdea90dee9 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -12,6 +12,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLMediaElementBinding::HTMLMediaE use crate::dom::bindings::codegen::Bindings::HTMLSourceElementBinding::HTMLSourceElementMethods; use crate::dom::bindings::codegen::Bindings::MediaErrorBinding::MediaErrorConstants::*; use crate::dom::bindings::codegen::Bindings::MediaErrorBinding::MediaErrorMethods; +use crate::dom::bindings::codegen::Bindings::TextTrackBinding::{TextTrackKind, TextTrackMode}; use crate::dom::bindings::codegen::InheritTypes::{ElementTypeId, HTMLElementTypeId}; use crate::dom::bindings::codegen::InheritTypes::{HTMLMediaElementTypeId, NodeTypeId}; use crate::dom::bindings::error::{Error, ErrorResult}; @@ -33,6 +34,8 @@ 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::texttrack::TextTrack; +use crate::dom::texttracklist::TextTrackList; use crate::dom::timeranges::{TimeRanges, TimeRangesContainer}; use crate::dom::virtualmethods::VirtualMethods; use crate::fetch::FetchCanceller; @@ -191,6 +194,8 @@ pub struct HTMLMediaElement { /// 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-texttracks + text_tracks_list: MutNullableDom<TextTrackList>, } /// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate> @@ -243,6 +248,7 @@ impl HTMLMediaElement { seeking: Cell::new(false), resource_url: DomRefCell::new(None), played: Rc::new(DomRefCell::new(TimeRangesContainer::new())), + text_tracks_list: Default::default(), } } @@ -1376,6 +1382,37 @@ impl HTMLMediaElementMethods for HTMLMediaElement { fn Played(&self) -> DomRoot<TimeRanges> { TimeRanges::new(self.global().as_window(), self.played.clone()) } + + // https://html.spec.whatwg.org/multipage/#dom-media-texttracks + fn TextTracks(&self) -> DomRoot<TextTrackList> { + let window = window_from_node(self); + self.text_tracks_list + .or_init(|| TextTrackList::new(&window, &[])) + } + + // https://html.spec.whatwg.org/multipage/#dom-media-addtexttrack + fn AddTextTrack( + &self, + kind: TextTrackKind, + label: DOMString, + language: DOMString, + ) -> DomRoot<TextTrack> { + let window = window_from_node(self); + // Step 1 & 2 + // FIXME(#22314, dlrobertson) set the ready state to Loaded + let track = TextTrack::new( + &window, + "".into(), + kind, + label, + language, + TextTrackMode::Hidden, + ); + // Step 3 & 4 + self.TextTracks().add(&track); + // Step 5 + DomRoot::from_ref(&track) + } } impl VirtualMethods for HTMLMediaElement { |