| Index: Source/modules/mediasource/MediaSource.cpp
|
| diff --git a/Source/modules/mediasource/MediaSource.cpp b/Source/modules/mediasource/MediaSource.cpp
|
| index 2580e8ab2ea7e39b193ce5ff17bcc736e6ba350a..73242b7d1d28e2492361a9e48b6f60513af51f6d 100644
|
| --- a/Source/modules/mediasource/MediaSource.cpp
|
| +++ b/Source/modules/mediasource/MediaSource.cpp
|
| @@ -361,6 +361,29 @@ PassRefPtrWillBeRawPtr<TimeRanges> MediaSource::buffered() const
|
| return intersectionRanges.release();
|
| }
|
|
|
| +PassRefPtrWillBeRawPtr<TimeRanges> MediaSource::seekable() const
|
| +{
|
| + // Implements MediaSource algorithm for HTMLMediaElement.seekable.
|
| + // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#htmlmediaelement-extensions
|
| +
|
| + double sourceDuration = duration();
|
| + // 1. If duration equals NaN then return an empty TimeRanges object.
|
| + if (std::isnan(sourceDuration))
|
| + return TimeRanges::create();
|
| +
|
| + // 2. If duration equals positive Infinity, then return a single range with a start time of 0 and an end time equal to the
|
| + // highest end time reported by the HTMLMediaElement.buffered attribute.
|
| + if (sourceDuration == std::numeric_limits<double>::infinity()) {
|
| + RefPtrWillBeRawPtr<TimeRanges> buffered = m_attachedElement->buffered();
|
| + if (buffered->length() == 0)
|
| + return TimeRanges::create();
|
| + return TimeRanges::create(0, buffered->end(buffered->length() - 1, ASSERT_NO_EXCEPTION));
|
| + }
|
| +
|
| + // 3. Otherwise, return a single range with a start time of 0 and an end time equal to duration.
|
| + return TimeRanges::create(0, sourceDuration);
|
| +}
|
| +
|
| void MediaSource::setDuration(double duration, ExceptionState& exceptionState)
|
| {
|
| // 2.1 http://www.w3.org/TR/media-source/#widl-MediaSource-duration
|
|
|