Bug 1192818 - part1 : dispatch DOMAudioPlaybackStopped when mute the tab. draft
authorAlastor Wu <alwu@mozilla.com>
Thu, 23 Feb 2017 14:15:45 +0800
changeset 488497 89b9ac41cd4dd0615a98f9d131b9b00c3301e763
parent 482503 00d16f03506b7f9f754b01a0a458c05445ac6dba
child 488498 8d766bd30bf97815079d7e18aaf0996d080d152d
push id46542
push useralwu@mozilla.com
push dateThu, 23 Feb 2017 06:14:15 +0000
bugs1192818, 1302280
milestone54.0a1
Bug 1192818 - part1 : dispatch DOMAudioPlaybackStopped when mute the tab. The root cause of the intermittent fail is because "DOMAudioPlaybackStopped" has no directly relationship with browser.mute()/unmute(). In [1], the "DOMAudioPlaybackStopped" is caused by audio stop playing, not by calling the browser.mute(). If the audio stops playing before calling the wait_for_event(), the test would be time-out. I guess the bug 1302280 is also caused by same reason. So this patch would do two thinngs, 1. dispatch "DOMAudioPlaybackStopped" when we mute tab 2. loop the audio in test file, to make sure the "DOMAudioPlaybackStopped" is dispatched when muting the audio, not the file ended. [1] https://goo.gl/ymUv8P MozReview-Commit-ID: 5RnyBRE73lQ
dom/html/HTMLMediaElement.cpp
toolkit/content/tests/browser/file_mediaPlayback2.html
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -996,17 +996,17 @@ private:
             mSuspended == nsISuspendedTypes::SUSPENDED_PAUSE_DISPOSABLE ||
             mSuspended == nsISuspendedTypes::SUSPENDED_BLOCK);
   }
 
   AudibleState
   IsOwnerAudible() const
   {
     // Muted or the volume should not be ~0
-    if (mOwner->Muted() || (std::fabs(mOwner->Volume()) <= 1e-7)) {
+    if (mOwner->mMuted || (std::fabs(mOwner->Volume()) <= 1e-7)) {
       return AudioChannelService::AudibleState::eNotAudible;
     }
 
     // No audio track.
     if (!mOwner->HasAudio()) {
       return AudioChannelService::AudibleState::eNotAudible;
     }
 
--- a/toolkit/content/tests/browser/file_mediaPlayback2.html
+++ b/toolkit/content/tests/browser/file_mediaPlayback2.html
@@ -2,11 +2,12 @@
 <body>
 <script type="text/javascript">
 var audio = new Audio();
 audio.oncanplay = function() {
   audio.oncanplay = null;
   audio.play();
 };
 audio.src = "audio.ogg";
+audio.loop = true;
 document.body.appendChild(audio);
 </script>
 </body>