mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
script: Create structures for TextTrack API
Fill out the basics for the WebIDLs for the following: - TextTrack - TextTrackCue - TextTrackCueList - TextTrackList
This commit is contained in:
parent
92962de76c
commit
62a9bfa0c5
12 changed files with 571 additions and 2 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue