diff options
author | Dan Robertson <dan@dlrobertson.com> | 2018-12-08 04:00:38 +0000 |
---|---|---|
committer | Dan Robertson <dan@dlrobertson.com> | 2018-12-11 20:14:00 +0000 |
commit | 62a9bfa0c52c86f5ea35703529e6d23c4b06ade6 (patch) | |
tree | 4c349d27944a14727f14629b21d3f69506d2920f /components/script/dom/htmlmediaelement.rs | |
parent | 92962de76c3400e46ff329e66eff238ac076ed38 (diff) | |
download | servo-62a9bfa0c52c86f5ea35703529e6d23c4b06ade6.tar.gz servo-62a9bfa0c52c86f5ea35703529e6d23c4b06ade6.zip |
script: Create structures for TextTrack API
Fill out the basics for the WebIDLs for the following:
- TextTrack
- TextTrackCue
- TextTrackCueList
- TextTrackList
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 { |