aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-01-17 11:46:48 -0500
committerGitHub <noreply@github.com>2019-01-17 11:46:48 -0500
commit866fd55ded6ded98b49862a29951d746a7846f64 (patch)
treee8ef5aa22f7496cfa90cbabcc6ba7fb0bb2ed727 /components/script/dom
parent0b5ca81f4105fcce7ebbe6a825893faadb304a9b (diff)
parent4b23c631ea9210fab34bb66d3edce9f63d5f99d1 (diff)
downloadservo-866fd55ded6ded98b49862a29951d746a7846f64.tar.gz
servo-866fd55ded6ded98b49862a29951d746a7846f64.zip
Auto merge of #22692 - ferjm:buffering, r=ceyusa
Media cache and buffering support - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #22055 and fix #22296 <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22692) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/htmlmediaelement.rs17
-rw-r--r--components/script/dom/timeranges.rs23
-rw-r--r--components/script/dom/webidls/HTMLMediaElement.webidl2
3 files changed, 21 insertions, 21 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index b38c0e9255f..97170befaf1 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -203,7 +203,7 @@ pub struct HTMLMediaElement {
resource_url: DomRefCell<Option<ServoUrl>>,
/// https://html.spec.whatwg.org/multipage/#dom-media-played
#[ignore_malloc_size_of = "Rc"]
- played: Rc<DomRefCell<TimeRangesContainer>>,
+ played: DomRefCell<TimeRangesContainer>,
/// https://html.spec.whatwg.org/multipage/#dom-media-texttracks
text_tracks_list: MutNullableDom<TextTrackList>,
/// Time of last timeupdate notification.
@@ -264,7 +264,7 @@ impl HTMLMediaElement {
volume: Cell::new(1.0),
seeking: Cell::new(false),
resource_url: DomRefCell::new(None),
- played: Rc::new(DomRefCell::new(TimeRangesContainer::new())),
+ played: DomRefCell::new(TimeRangesContainer::new()),
text_tracks_list: Default::default(),
next_timeupdate_event: Cell::new(time::get_time() + Duration::milliseconds(250)),
current_fetch_context: DomRefCell::new(None),
@@ -1654,7 +1654,18 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
// https://html.spec.whatwg.org/multipage/#dom-media-played
fn Played(&self) -> DomRoot<TimeRanges> {
- TimeRanges::new(self.global().as_window(), self.played.clone())
+ TimeRanges::new(self.global().as_window(), self.played.borrow().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(), buffered)
}
// https://html.spec.whatwg.org/multipage/#dom-media-texttracks
diff --git a/components/script/dom/timeranges.rs b/components/script/dom/timeranges.rs
index c82daac23a7..7b4d1978a60 100644
--- a/components/script/dom/timeranges.rs
+++ b/components/script/dom/timeranges.rs
@@ -2,7 +2,6 @@
* 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::TimeRangesBinding;
use crate::dom::bindings::codegen::Bindings::TimeRangesBinding::TimeRangesMethods;
use crate::dom::bindings::error::{Error, Fallible};
@@ -12,9 +11,8 @@ use crate::dom::bindings::root::DomRoot;
use crate::dom::window::Window;
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 +55,7 @@ pub enum TimeRangesError {
OutOfRange,
}
-#[derive(Debug, JSTraceable, MallocSizeOf)]
+#[derive(Clone, Debug, JSTraceable, MallocSizeOf)]
pub struct TimeRangesContainer {
ranges: Vec<TimeRange>,
}
@@ -128,25 +126,18 @@ impl TimeRangesContainer {
#[dom_struct]
pub struct TimeRanges {
reflector_: Reflector,
- #[ignore_malloc_size_of = "Rc"]
- ranges: Rc<DomRefCell<TimeRangesContainer>>,
+ ranges: 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 {
+ fn new_inherited(ranges: TimeRangesContainer) -> TimeRanges {
Self {
reflector_: Reflector::new(),
ranges,
}
}
- pub fn new(
- window: &Window,
- ranges: Rc<DomRefCell<TimeRangesContainer>>,
- ) -> DomRoot<TimeRanges> {
+ pub fn new(window: &Window, ranges: TimeRangesContainer) -> DomRoot<TimeRanges> {
reflect_dom_object(
Box::new(TimeRanges::new_inherited(ranges)),
window,
@@ -158,13 +149,12 @@ impl TimeRanges {
impl TimeRangesMethods for TimeRanges {
// https://html.spec.whatwg.org/multipage/#dom-timeranges-length
fn Length(&self) -> u32 {
- self.ranges.borrow().len()
+ self.ranges.len()
}
// https://html.spec.whatwg.org/multipage/#dom-timeranges-start
fn Start(&self, index: u32) -> Fallible<Finite<f64>> {
self.ranges
- .borrow()
.start(index)
.map(Finite::wrap)
.map_err(|_| Error::IndexSize)
@@ -173,7 +163,6 @@ impl TimeRangesMethods for TimeRanges {
// https://html.spec.whatwg.org/multipage/#dom-timeranges-end
fn End(&self, index: u32) -> Fallible<Finite<f64>> {
self.ranges
- .borrow()
.end(index)
.map(Finite::wrap)
.map_err(|_| Error::IndexSize)
diff --git a/components/script/dom/webidls/HTMLMediaElement.webidl b/components/script/dom/webidls/HTMLMediaElement.webidl
index d083b80ffff..0acd2a2c9a6 100644
--- a/components/script/dom/webidls/HTMLMediaElement.webidl
+++ b/components/script/dom/webidls/HTMLMediaElement.webidl
@@ -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);