Bug 1277729: Ignore readyState value when reporting the buffered range. r?jwwang
For plain media playback, the buffered range will always be empty if readyState is HAVE_NOTHING has we need to decode the metadata to determine the duration and eventually decode the first frame to determine the start time. With MSE however, the buffered range is per spec directly related to the source buffer buffered range.
So we can always simply query the MediaDecoder to determine the buffered range regardless of the readyState value.
MozReview-Commit-ID: BQs8iuUCiNw
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -4737,22 +4737,20 @@ HTMLMediaElement::CopyInnerTo(Element* a
}
return rv;
}
already_AddRefed<TimeRanges>
HTMLMediaElement::Buffered() const
{
RefPtr<TimeRanges> ranges = new TimeRanges(ToSupports(OwnerDoc()));
- if (mReadyState > nsIDOMHTMLMediaElement::HAVE_NOTHING) {
- if (mDecoder) {
- media::TimeIntervals buffered = mDecoder->GetBuffered();
- if (!buffered.IsInvalid()) {
- buffered.ToTimeRanges(ranges);
- }
+ if (mDecoder) {
+ media::TimeIntervals buffered = mDecoder->GetBuffered();
+ if (!buffered.IsInvalid()) {
+ buffered.ToTimeRanges(ranges);
}
}
return ranges.forget();
}
nsresult HTMLMediaElement::GetBuffered(nsIDOMTimeRanges** aBuffered)
{
RefPtr<TimeRanges> ranges = Buffered();