Bug 1817997 - Limit time resolution to microsecond on values exposed to script. r=alwu

Differential Revision: https://phabricator.services.mozilla.com/D176041
This commit is contained in:
Paul Adenot
2023-05-17 15:47:07 +00:00
parent 87e0624b48
commit f3b945378b
2 changed files with 8 additions and 6 deletions

View File

@@ -3094,11 +3094,11 @@ bool HTMLMediaElement::Seeking() const {
double HTMLMediaElement::CurrentTime() const {
if (mMediaStreamRenderer) {
return mMediaStreamRenderer->CurrentTime();
return ToMicrosecondResolution(mMediaStreamRenderer->CurrentTime());
}
if (mDefaultPlaybackStartPosition == 0.0 && mDecoder) {
return mDecoder->GetCurrentTime();
return std::clamp(mDecoder->GetCurrentTime(), 0.0, mDecoder->GetDuration());
}
return mDefaultPlaybackStartPosition;
@@ -3202,7 +3202,7 @@ void HTMLMediaElement::Seek(double aTime, SeekTarget::Type aSeekType,
if (mCurrentPlayRangeStart != rangeEndTime) {
// Don't round the left of the interval: it comes from script and needs
// to be exact.
mPlayed->Add(mCurrentPlayRangeStart, ToMicrosecondResolution(rangeEndTime));
mPlayed->Add(mCurrentPlayRangeStart, rangeEndTime);
}
// Reset the current played range start time. We'll re-set it once
// the seek completes.
@@ -3302,7 +3302,8 @@ double HTMLMediaElement::Duration() const {
already_AddRefed<TimeRanges> HTMLMediaElement::Seekable() const {
media::TimeIntervals seekable =
mDecoder ? mDecoder->GetSeekable() : media::TimeIntervals();
RefPtr<TimeRanges> ranges = new TimeRanges(ToSupports(OwnerDoc()), seekable);
RefPtr<TimeRanges> ranges = new TimeRanges(
ToSupports(OwnerDoc()), seekable.ToMicrosecondResolution());
return ranges.forget();
}
@@ -3324,7 +3325,7 @@ already_AddRefed<TimeRanges> HTMLMediaElement::Played() {
if (mCurrentPlayRangeStart != now) {
// Don't round the left of the interval: it comes from script and needs
// to be exact.
ranges->Add(mCurrentPlayRangeStart, ToMicrosecondResolution(now));
ranges->Add(mCurrentPlayRangeStart, now);
}
}