Bug 1382780 - part1 : return NS_ERROR_DOM_NOT_SUPPORTED_ERR for the negative playback rate. draft
authorAlastor Wu <alwu@mozilla.com>
Thu, 24 Aug 2017 16:58:42 +0800
changeset 651973 e37600974d4eb2ed60f0dbf79abf081ca78100dc
parent 648573 a6a1f5c1d971dbee67ba6eec7ead7902351ddca2
child 651974 a1f694724e19b08aaa2e8a26618f35b5ef3effef
push id75908
push useralwu@mozilla.com
push dateThu, 24 Aug 2017 09:41:30 +0000
bugs1382780
milestone57.0a1
Bug 1382780 - part1 : return NS_ERROR_DOM_NOT_SUPPORTED_ERR for the negative playback rate. According to [1], we should return NotSupportedError for the negative playback rate. [1] https://github.com/w3c/web-platform-tests/pull/6522 MozReview-Commit-ID: KoqDkBmP3h9
dom/html/HTMLMediaElement.cpp
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -6665,24 +6665,26 @@ HTMLMediaElement::MozFragmentEnd()
 NS_IMETHODIMP HTMLMediaElement::GetMozFragmentEnd(double* aTime)
 {
   *aTime = MozFragmentEnd();
   return NS_OK;
 }
 
 static double ClampPlaybackRate(double aPlaybackRate)
 {
+  MOZ_ASSERT(aPlaybackRate >= 0.0);
+
   if (aPlaybackRate == 0.0) {
     return aPlaybackRate;
   }
-  if (Abs(aPlaybackRate) < MIN_PLAYBACKRATE) {
-    return aPlaybackRate < 0 ? -MIN_PLAYBACKRATE : MIN_PLAYBACKRATE;
-  }
-  if (Abs(aPlaybackRate) > MAX_PLAYBACKRATE) {
-    return aPlaybackRate < 0 ? -MAX_PLAYBACKRATE : MAX_PLAYBACKRATE;
+  if (aPlaybackRate < MIN_PLAYBACKRATE) {
+    return MIN_PLAYBACKRATE;
+  }
+  if (aPlaybackRate > MAX_PLAYBACKRATE) {
+    return MAX_PLAYBACKRATE;
   }
   return aPlaybackRate;
 }
 
 NS_IMETHODIMP HTMLMediaElement::GetDefaultPlaybackRate(double* aDefaultPlaybackRate)
 {
   *aDefaultPlaybackRate = DefaultPlaybackRate();
   return NS_OK;
@@ -6714,24 +6716,24 @@ NS_IMETHODIMP HTMLMediaElement::GetPlayb
 }
 
 void
 HTMLMediaElement::SetPlaybackRate(double aPlaybackRate, ErrorResult& aRv)
 {
   // Changing the playback rate of a media that has more than two channels is
   // not supported.
   if (aPlaybackRate < 0) {
-    aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
+    aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
     return;
   }
 
   mPlaybackRate = ClampPlaybackRate(aPlaybackRate);
 
   if (mPlaybackRate != 0.0 &&
-      (mPlaybackRate < 0 || mPlaybackRate > THRESHOLD_HIGH_PLAYBACKRATE_AUDIO ||
+      (mPlaybackRate > THRESHOLD_HIGH_PLAYBACKRATE_AUDIO ||
        mPlaybackRate < THRESHOLD_LOW_PLAYBACKRATE_AUDIO)) {
     SetMutedInternal(mMuted | MUTED_BY_INVALID_PLAYBACK_RATE);
   } else {
     SetMutedInternal(mMuted & ~MUTED_BY_INVALID_PLAYBACK_RATE);
   }
 
   if (mDecoder) {
     mDecoder->SetPlaybackRate(mPlaybackRate);