Add media cache and implement HTMLMediaElement.buffering

This commit is contained in:
Fernando Jiménez Moreno 2018-12-17 23:50:39 +01:00
parent c558db9737
commit f5581a78ab
5 changed files with 83 additions and 71 deletions

View file

@ -1657,6 +1657,17 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
TimeRanges::new(self.global().as_window(), self.played.clone())
}
// https://html.spec.whatwg.org/multipage/#dom-media-buffered
fn Buffered(&self) -> DomRoot<TimeRanges> {
let mut buffered = TimeRangesContainer::new();
if let Ok(ranges) = self.player.buffered() {
for range in ranges {
let _ = buffered.add(range.start as f64, range.end as f64);
}
}
TimeRanges::new(self.global().as_window(), Rc::new(DomRefCell::new(buffered)))
}
// https://html.spec.whatwg.org/multipage/#dom-media-texttracks
fn TextTracks(&self) -> DomRoot<TextTrackList> {
let window = window_from_node(self);

View file

@ -14,7 +14,7 @@ use dom_struct::dom_struct;
use std::fmt;
use std::rc::Rc;
#[derive(JSTraceable, MallocSizeOf)]
#[derive(Clone, JSTraceable, MallocSizeOf)]
struct TimeRange {
start: f64,
end: f64,
@ -57,7 +57,7 @@ pub enum TimeRangesError {
OutOfRange,
}
#[derive(Debug, JSTraceable, MallocSizeOf)]
#[derive(Clone, Debug, JSTraceable, MallocSizeOf)]
pub struct TimeRangesContainer {
ranges: Vec<TimeRange>,
}
@ -132,9 +132,6 @@ pub struct TimeRanges {
ranges: Rc<DomRefCell<TimeRangesContainer>>,
}
//XXX(ferjm) We'll get warnings about unused methods until we use this
// on the media element implementation.
#[allow(dead_code)]
impl TimeRanges {
fn new_inherited(ranges: Rc<DomRefCell<TimeRangesContainer>>) -> TimeRanges {
Self {

View file

@ -23,7 +23,7 @@ interface HTMLMediaElement : HTMLElement {
const unsigned short NETWORK_NO_SOURCE = 3;
readonly attribute unsigned short networkState;
[CEReactions] attribute DOMString preload;
// readonly attribute TimeRanges buffered;
readonly attribute TimeRanges buffered;
void load();
CanPlayTypeResult canPlayType(DOMString type);