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 | |
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
-rw-r--r-- | components/atoms/static_atoms.txt | 2 | ||||
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 37 | ||||
-rw-r--r-- | components/script/dom/mod.rs | 4 | ||||
-rw-r--r-- | components/script/dom/texttrack.rs | 145 | ||||
-rw-r--r-- | components/script/dom/texttrackcue.rs | 111 | ||||
-rw-r--r-- | components/script/dom/texttrackcuelist.rs | 91 | ||||
-rw-r--r-- | components/script/dom/texttracklist.rs | 103 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLMediaElement.webidl | 4 | ||||
-rw-r--r-- | components/script/dom/webidls/TextTrack.webidl | 30 | ||||
-rw-r--r-- | components/script/dom/webidls/TextTrackCue.webidl | 18 | ||||
-rw-r--r-- | components/script/dom/webidls/TextTrackCueList.webidl | 12 | ||||
-rw-r--r-- | components/script/dom/webidls/TextTrackList.webidl | 16 |
12 files changed, 571 insertions, 2 deletions
diff --git a/components/atoms/static_atoms.txt b/components/atoms/static_atoms.txt index 58d64bb823d..8a618bbe878 100644 --- a/components/atoms/static_atoms.txt +++ b/components/atoms/static_atoms.txt @@ -1,6 +1,7 @@ DOMContentLoaded abort activate +addtrack beforeunload button canplay @@ -69,6 +70,7 @@ range readystatechange reftest-wait rejectionhandled +removetrack reset resize right 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 { diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index 7c1aa2593ee..e38a5e924ac 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -460,6 +460,10 @@ pub mod text; pub mod textcontrol; pub mod textdecoder; pub mod textencoder; +pub mod texttrack; +pub mod texttrackcue; +pub mod texttrackcuelist; +pub mod texttracklist; pub mod timeranges; pub mod touch; pub mod touchevent; diff --git a/components/script/dom/texttrack.rs b/components/script/dom/texttrack.rs new file mode 100644 index 00000000000..553ff8ea159 --- /dev/null +++ b/components/script/dom/texttrack.rs @@ -0,0 +1,145 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::codegen::Bindings::TextTrackBinding::{ + self, TextTrackKind, TextTrackMethods, TextTrackMode, +}; +use crate::dom::bindings::error::{Error, ErrorResult}; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; +use crate::dom::bindings::root::{DomRoot, MutNullableDom}; +use crate::dom::bindings::str::DOMString; +use crate::dom::eventtarget::EventTarget; +use crate::dom::texttrackcue::TextTrackCue; +use crate::dom::texttrackcuelist::TextTrackCueList; +use crate::dom::window::Window; +use dom_struct::dom_struct; +use std::cell::Cell; + +#[dom_struct] +pub struct TextTrack { + eventtarget: EventTarget, + kind: TextTrackKind, + label: String, + language: String, + id: String, + mode: Cell<TextTrackMode>, + cue_list: MutNullableDom<TextTrackCueList>, +} + +impl TextTrack { + pub fn new_inherited( + id: DOMString, + kind: TextTrackKind, + label: DOMString, + language: DOMString, + mode: TextTrackMode, + ) -> TextTrack { + TextTrack { + eventtarget: EventTarget::new_inherited(), + kind: kind, + label: label.into(), + language: language.into(), + id: id.into(), + mode: Cell::new(mode), + cue_list: Default::default(), + } + } + + pub fn new( + window: &Window, + id: DOMString, + kind: TextTrackKind, + label: DOMString, + language: DOMString, + mode: TextTrackMode, + ) -> DomRoot<TextTrack> { + reflect_dom_object( + Box::new(TextTrack::new_inherited(id, kind, label, language, mode)), + window, + TextTrackBinding::Wrap, + ) + } + + pub fn get_cues(&self) -> DomRoot<TextTrackCueList> { + self.cue_list + .or_init(|| TextTrackCueList::new(&self.global().as_window(), &[])) + } + + pub fn id(&self) -> &str { + &self.id + } +} + +impl TextTrackMethods for TextTrack { + // https://html.spec.whatwg.org/multipage/#dom-texttrack-kind + fn Kind(&self) -> TextTrackKind { + self.kind + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-label + fn Label(&self) -> DOMString { + DOMString::from(self.label.clone()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-language + fn Language(&self) -> DOMString { + DOMString::from(self.language.clone()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-id + fn Id(&self) -> DOMString { + DOMString::from(self.id.clone()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-mode + fn Mode(&self) -> TextTrackMode { + self.mode.get() + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-mode + fn SetMode(&self, value: TextTrackMode) { + self.mode.set(value) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-cues + fn GetCues(&self) -> Option<DomRoot<TextTrackCueList>> { + match self.Mode() { + TextTrackMode::Disabled => None, + _ => Some(self.get_cues()), + } + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-addcue + fn AddCue(&self, cue: &TextTrackCue) -> ErrorResult { + // FIXME(#22314, dlrobertson) add Step 1 & 2 + // Step 3 + if let Some(old_track) = cue.get_track() { + // gecko calls RemoveCue when the given cue + // has an associated track, but doesn't return + // the error from it, so we wont either. + if let Err(_) = old_track.RemoveCue(cue) { + warn!("Failed to remove cues for the added cue's text track"); + } + } + // Step 4 + self.get_cues().add(cue); + Ok(()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrack-removecue + fn RemoveCue(&self, cue: &TextTrackCue) -> ErrorResult { + // Step 1 + let cues = self.get_cues(); + let index = match cues.find(cue) { + Some(i) => Ok(i), + None => Err(Error::NotFound), + }?; + // Step 2 + cues.remove(index); + Ok(()) + } + + // https://html.spec.whatwg.org/multipage/#handler-texttrack-oncuechange + event_handler!(oncuechange, GetOncuechange, SetOncuechange); +} diff --git a/components/script/dom/texttrackcue.rs b/components/script/dom/texttrackcue.rs new file mode 100644 index 00000000000..6faf698921f --- /dev/null +++ b/components/script/dom/texttrackcue.rs @@ -0,0 +1,111 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::TextTrackCueBinding::{self, TextTrackCueMethods}; +use crate::dom::bindings::num::Finite; +use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; +use crate::dom::eventtarget::EventTarget; +use crate::dom::texttrack::TextTrack; +use crate::dom::window::Window; +use dom_struct::dom_struct; +use std::cell::Cell; + +#[dom_struct] +pub struct TextTrackCue { + eventtarget: EventTarget, + id: DomRefCell<DOMString>, + track: Option<Dom<TextTrack>>, + start_time: Cell<f64>, + end_time: Cell<f64>, + pause_on_exit: Cell<bool>, +} + +impl TextTrackCue { + // FIXME(#22314, dlrobertson) implement VTTCue. + #[allow(dead_code)] + pub fn new_inherited(id: DOMString, track: Option<&TextTrack>) -> TextTrackCue { + TextTrackCue { + eventtarget: EventTarget::new_inherited(), + id: DomRefCell::new(id), + track: track.map(Dom::from_ref), + start_time: Cell::new(0.), + end_time: Cell::new(0.), + pause_on_exit: Cell::new(false), + } + } + + // FIXME(#22314, dlrobertson) implement VTTCue. + #[allow(dead_code)] + pub fn new(window: &Window, id: DOMString, track: Option<&TextTrack>) -> DomRoot<TextTrackCue> { + reflect_dom_object( + Box::new(TextTrackCue::new_inherited(id, track)), + window, + TextTrackCueBinding::Wrap, + ) + } + + pub fn id(&self) -> DOMString { + self.id.borrow().clone() + } + + pub fn get_track(&self) -> Option<DomRoot<TextTrack>> { + self.track.as_ref().map(|t| DomRoot::from_ref(&**t)) + } +} + +impl TextTrackCueMethods for TextTrackCue { + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id + fn Id(&self) -> DOMString { + self.id() + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-id + fn SetId(&self, value: DOMString) { + *self.id.borrow_mut() = value; + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-track + fn GetTrack(&self) -> Option<DomRoot<TextTrack>> { + self.get_track() + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime + fn StartTime(&self) -> Finite<f64> { + Finite::wrap(self.start_time.get()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-starttime + fn SetStartTime(&self, value: Finite<f64>) { + self.start_time.set(*value); + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime + fn EndTime(&self) -> Finite<f64> { + Finite::wrap(self.end_time.get()) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-endtime + fn SetEndTime(&self, value: Finite<f64>) { + self.end_time.set(*value); + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit + fn PauseOnExit(&self) -> bool { + self.pause_on_exit.get() + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcue-pauseonexit + fn SetPauseOnExit(&self, value: bool) { + self.pause_on_exit.set(value); + } + + // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onenter + event_handler!(onenter, GetOnenter, SetOnenter); + + // https://html.spec.whatwg.org/multipage/#handler-texttrackcue-onexit + event_handler!(onexit, GetOnexit, SetOnexit); +} diff --git a/components/script/dom/texttrackcuelist.rs b/components/script/dom/texttrackcuelist.rs new file mode 100644 index 00000000000..bd66027bb07 --- /dev/null +++ b/components/script/dom/texttrackcuelist.rs @@ -0,0 +1,91 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::TextTrackCueListBinding::{ + self, TextTrackCueListMethods, +}; +use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; +use crate::dom::texttrackcue::TextTrackCue; +use crate::dom::window::Window; +use dom_struct::dom_struct; + +#[dom_struct] +pub struct TextTrackCueList { + reflector_: Reflector, + dom_cues: DomRefCell<Vec<Dom<TextTrackCue>>>, +} + +impl TextTrackCueList { + pub fn new_inherited(cues: &[&TextTrackCue]) -> TextTrackCueList { + TextTrackCueList { + reflector_: Reflector::new(), + dom_cues: DomRefCell::new(cues.iter().map(|g| Dom::from_ref(&**g)).collect()), + } + } + + pub fn new(window: &Window, cues: &[&TextTrackCue]) -> DomRoot<TextTrackCueList> { + reflect_dom_object( + Box::new(TextTrackCueList::new_inherited(cues)), + window, + TextTrackCueListBinding::Wrap, + ) + } + + pub fn item(&self, idx: usize) -> Option<DomRoot<TextTrackCue>> { + self.dom_cues + .borrow() + .get(idx) + .map(|t| DomRoot::from_ref(&**t)) + } + + pub fn find(&self, cue: &TextTrackCue) -> Option<usize> { + self.dom_cues + .borrow() + .iter() + .enumerate() + .filter(|(_, c)| **c == cue) + .next() + .map(|(i, _)| i) + } + + pub fn add(&self, cue: &TextTrackCue) { + // Only add a cue if it does not exist in the list + if self.find(cue).is_none() { + self.dom_cues.borrow_mut().push(Dom::from_ref(cue)); + } + } + + pub fn remove(&self, idx: usize) { + self.dom_cues.borrow_mut().remove(idx); + } +} + +impl TextTrackCueListMethods for TextTrackCueList { + // https://html.spec.whatwg.org/multipage/#dom-texttrackcuelist-length + fn Length(&self) -> u32 { + self.dom_cues.borrow().len() as u32 + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcuelist-item + fn IndexedGetter(&self, idx: u32) -> Option<DomRoot<TextTrackCue>> { + self.item(idx as usize) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttrackcuelist-getcuebyid + fn GetCueById(&self, id: DOMString) -> Option<DomRoot<TextTrackCue>> { + if id.is_empty() { + None + } else { + self.dom_cues + .borrow() + .iter() + .filter(|cue| cue.id() == id) + .next() + .map(|t| DomRoot::from_ref(&**t)) + } + } +} diff --git a/components/script/dom/texttracklist.rs b/components/script/dom/texttracklist.rs new file mode 100644 index 00000000000..220d012cdfd --- /dev/null +++ b/components/script/dom/texttracklist.rs @@ -0,0 +1,103 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::TextTrackListBinding::{self, TextTrackListMethods}; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; +use crate::dom::eventtarget::EventTarget; +use crate::dom::texttrack::TextTrack; +use crate::dom::window::Window; +use dom_struct::dom_struct; + +#[dom_struct] +pub struct TextTrackList { + eventtarget: EventTarget, + dom_tracks: DomRefCell<Vec<Dom<TextTrack>>>, +} + +impl TextTrackList { + pub fn new_inherited(tracks: &[&TextTrack]) -> TextTrackList { + TextTrackList { + eventtarget: EventTarget::new_inherited(), + dom_tracks: DomRefCell::new(tracks.iter().map(|g| Dom::from_ref(&**g)).collect()), + } + } + + pub fn new(window: &Window, tracks: &[&TextTrack]) -> DomRoot<TextTrackList> { + reflect_dom_object( + Box::new(TextTrackList::new_inherited(tracks)), + window, + TextTrackListBinding::Wrap, + ) + } + + pub fn item(&self, idx: usize) -> Option<DomRoot<TextTrack>> { + self.dom_tracks + .borrow() + .get(idx as usize) + .map(|t| DomRoot::from_ref(&**t)) + } + + pub fn find(&self, track: &TextTrack) -> Option<usize> { + self.dom_tracks + .borrow() + .iter() + .enumerate() + .filter(|(_, t)| **t == track) + .next() + .map(|(i, _)| i) + } + + pub fn add(&self, track: &TextTrack) { + // Only add a track if it does not exist in the list + if self.find(track).is_none() { + self.dom_tracks.borrow_mut().push(Dom::from_ref(track)); + }; + self.upcast::<EventTarget>().fire_event(atom!("addtrack")); + } + + // FIXME(#22314, dlrobertson) allow TextTracks to be + // removed from the TextTrackList. + #[allow(dead_code)] + pub fn remove(&self, idx: usize) { + self.dom_tracks.borrow_mut().remove(idx); + self.upcast::<EventTarget>() + .fire_event(atom!("removetrack")); + } +} + +impl TextTrackListMethods for TextTrackList { + // https://html.spec.whatwg.org/multipage/#dom-texttracklist-length + fn Length(&self) -> u32 { + self.dom_tracks.borrow().len() as u32 + } + + // https://html.spec.whatwg.org/multipage/#dom-texttracklist-item + fn IndexedGetter(&self, idx: u32) -> Option<DomRoot<TextTrack>> { + self.item(idx as usize) + } + + // https://html.spec.whatwg.org/multipage/#dom-texttracklist-gettrackbyid + fn GetTrackById(&self, id: DOMString) -> Option<DomRoot<TextTrack>> { + let id_str = String::from(id.clone()); + self.dom_tracks + .borrow() + .iter() + .filter(|track| track.id() == &id_str) + .next() + .map(|t| DomRoot::from_ref(&**t)) + } + + // https://html.spec.whatwg.org/multipage/#handler-texttracklist-onchange + event_handler!(onchange, GetOnchange, SetOnchange); + + // https://html.spec.whatwg.org/multipage/#handler-texttracklist-onaddtrack + event_handler!(onaddtrack, GetOnaddtrack, SetOnaddtrack); + + // https://html.spec.whatwg.org/multipage/#handler-texttracklist-onremovetrack + event_handler!(onremovetrack, GetOnremovetrack, SetOnremovetrack); +} diff --git a/components/script/dom/webidls/HTMLMediaElement.webidl b/components/script/dom/webidls/HTMLMediaElement.webidl index fa0459e0921..27e9d79c78d 100644 --- a/components/script/dom/webidls/HTMLMediaElement.webidl +++ b/components/script/dom/webidls/HTMLMediaElement.webidl @@ -61,6 +61,6 @@ interface HTMLMediaElement : HTMLElement { // tracks // readonly attribute AudioTrackList audioTracks; // readonly attribute VideoTrackList videoTracks; - // readonly attribute TextTrackList textTracks; - // TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = ""); + readonly attribute TextTrackList textTracks; + TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = ""); }; diff --git a/components/script/dom/webidls/TextTrack.webidl b/components/script/dom/webidls/TextTrack.webidl new file mode 100644 index 00000000000..71fc0e84099 --- /dev/null +++ b/components/script/dom/webidls/TextTrack.webidl @@ -0,0 +1,30 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://html.spec.whatwg.org/multipage/#texttrack + +enum TextTrackMode { "disabled", "hidden", "showing" }; +enum TextTrackKind { "subtitles", "captions", "descriptions", "chapters", "metadata" }; + +[Exposed=Window] +interface TextTrack : EventTarget { + readonly attribute TextTrackKind kind; + readonly attribute DOMString label; + readonly attribute DOMString language; + + readonly attribute DOMString id; + // readonly attribute DOMString inBandMetadataTrackDispatchType; + + attribute TextTrackMode mode; + + readonly attribute TextTrackCueList? cues; + // readonly attribute TextTrackCueList? activeCues; + + [Throws] + void addCue(TextTrackCue cue); + [Throws] + void removeCue(TextTrackCue cue); + + attribute EventHandler oncuechange; +}; diff --git a/components/script/dom/webidls/TextTrackCue.webidl b/components/script/dom/webidls/TextTrackCue.webidl new file mode 100644 index 00000000000..20f1bf3f06d --- /dev/null +++ b/components/script/dom/webidls/TextTrackCue.webidl @@ -0,0 +1,18 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://html.spec.whatwg.org/multipage/#texttrackcue + +[Exposed=Window] +interface TextTrackCue : EventTarget { + readonly attribute TextTrack? track; + + attribute DOMString id; + attribute double startTime; + attribute double endTime; + attribute boolean pauseOnExit; + + attribute EventHandler onenter; + attribute EventHandler onexit; +}; diff --git a/components/script/dom/webidls/TextTrackCueList.webidl b/components/script/dom/webidls/TextTrackCueList.webidl new file mode 100644 index 00000000000..357d8751bc2 --- /dev/null +++ b/components/script/dom/webidls/TextTrackCueList.webidl @@ -0,0 +1,12 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://html.spec.whatwg.org/multipage/#texttrackcuelist + +[Exposed=Window] +interface TextTrackCueList { + readonly attribute unsigned long length; + getter TextTrackCue (unsigned long index); + TextTrackCue? getCueById(DOMString id); +}; diff --git a/components/script/dom/webidls/TextTrackList.webidl b/components/script/dom/webidls/TextTrackList.webidl new file mode 100644 index 00000000000..33e1bef0ff4 --- /dev/null +++ b/components/script/dom/webidls/TextTrackList.webidl @@ -0,0 +1,16 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://html.spec.whatwg.org/multipage/#texttracklist + +[Exposed=Window] +interface TextTrackList : EventTarget { + readonly attribute unsigned long length; + getter TextTrack (unsigned long index); + TextTrack? getTrackById(DOMString id); + + attribute EventHandler onchange; + attribute EventHandler onaddtrack; + attribute EventHandler onremovetrack; +}; |