aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlmediaelement.rs
diff options
context:
space:
mode:
authorDan Robertson <dan@dlrobertson.com>2018-12-08 04:00:38 +0000
committerDan Robertson <dan@dlrobertson.com>2018-12-11 20:14:00 +0000
commit62a9bfa0c52c86f5ea35703529e6d23c4b06ade6 (patch)
tree4c349d27944a14727f14629b21d3f69506d2920f /components/script/dom/htmlmediaelement.rs
parent92962de76c3400e46ff329e66eff238ac076ed38 (diff)
downloadservo-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.rs37
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 {