Bug 1585231 - refactor test. r=bryce

We remove `file_blockMedia_shouldPlay.html` and `file_blockMedia_shouldNotPlay.html` and move those operation on test directly, and do those operations after media fully loading.

And seperate two different test cases to two testing tasks.

Differential Revision: https://phabricator.services.mozilla.com/D58275

--HG--
extra : moz-landing-system : lando
This commit is contained in:
alwu 2019-12-27 23:24:14 +00:00
Родитель c18ed341f9
Коммит 2f1d5440af
4 изменённых файлов: 104 добавлений и 79 удалений

Просмотреть файл

@ -6,8 +6,6 @@ support-files =
audio.ogg audio.ogg
empty.png empty.png
file_almostSilentAudioTrack.html file_almostSilentAudioTrack.html
file_blockMedia_shouldNotPlay.html
file_blockMedia_shouldPlay.html
file_contentTitle.html file_contentTitle.html
file_mediaPlayback.html file_mediaPlayback.html
file_mediaPlayback2.html file_mediaPlayback2.html

Просмотреть файл

@ -1,16 +1,5 @@
const PAGE_SHOULD_PLAY = const PAGE =
"https://example.com/browser/toolkit/content/tests/browser/file_blockMedia_shouldPlay.html"; "https://example.com/browser/toolkit/content/tests/browser/file_nonAutoplayAudio.html";
const PAGE_SHOULD_NOT_PLAY =
"https://example.com/browser/toolkit/content/tests/browser/file_blockMedia_shouldNotPlay.html";
function check_audio_pause_state(expectPause) {
var audio = content.document.getElementById("testAudio");
if (!audio) {
ok(false, "Can't get the audio element!");
}
is(audio.paused, expectPause, "The pause state of audio is corret.");
}
add_task(async function setup_test_preference() { add_task(async function setup_test_preference() {
await SpecialPowers.pushPrefEnv({ await SpecialPowers.pushPrefEnv({
@ -21,43 +10,112 @@ add_task(async function setup_test_preference() {
}); });
}); });
add_task(async function block_autoplay_media() { /**
info("- open new background tab1, and tab1 should not be blocked -"); * When media starts in an unvisited tab, we would delay its playback and resume
let tab1 = BrowserTestUtils.addTab(window.gBrowser, "about:blank"); * media playback when the tab goes to foreground first time. There are two test
BrowserTestUtils.loadURI(tab1.linkedBrowser, PAGE_SHOULD_NOT_PLAY); * cases are used to check different situations.
await BrowserTestUtils.browserLoaded(tab1.linkedBrowser); *
await waitForTabBlockEvent(tab1, false); * The first one is used to check if the delayed media has been paused before
* the tab goes to foreground. Then, when the tab goes to foreground, media
* should still be paused.
*
* The second one is used to check if the delayed media has been paused, but
* it eventually was started again before the tab goes to foreground. Then, when
* the tab goes to foreground, media should be resumed.
*/
add_task(async function testShouldNotResumePausedMedia() {
info("- open new background tab and wait until it finishes loading -");
const tab = BrowserTestUtils.addTab(window.gBrowser, PAGE);
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
info("- open new background tab2, and tab2 should be blocked -"); info("- play media and then immediately pause it -");
let tab2 = BrowserTestUtils.addTab(window.gBrowser, "about:blank"); await doPlayThenPauseOnMedia(tab);
BrowserTestUtils.loadURI(tab2.linkedBrowser, PAGE_SHOULD_PLAY);
await BrowserTestUtils.browserLoaded(tab2.linkedBrowser);
await waitForTabBlockEvent(tab2, true);
info("- select tab1 as foreground tab -"); info("- show delay media playback icon on tab -");
await BrowserTestUtils.switchTab(window.gBrowser, tab1); await waitForTabBlockEvent(tab, true);
info("- tab1 should not be blocked, and media should not started -"); info("- selecting tab as foreground tab would resume the tab -");
await waitForTabBlockEvent(tab1, false); await BrowserTestUtils.switchTab(window.gBrowser, tab);
await SpecialPowers.spawn(
tab1.linkedBrowser,
[true],
check_audio_pause_state
);
info("- select tab2 as foreground tab -"); info("- resuming tab should dismiss delay autoplay icon -");
await BrowserTestUtils.switchTab(window.gBrowser, tab2); await waitForTabBlockEvent(tab, false);
info("- tab2 should not be blocked and media should be playing -"); info("- paused media should still be paused -");
await waitForTabBlockEvent(tab2, false); await checkAudioPauseState(tab, true /* should be paused */);
await waitForTabPlayingEvent(tab2, true);
await SpecialPowers.spawn(
tab2.linkedBrowser,
[false],
check_audio_pause_state
);
info("- remove tabs -"); info("- paused media won't generate tab playing icon -");
BrowserTestUtils.removeTab(tab1); await waitForTabPlayingEvent(tab, false);
BrowserTestUtils.removeTab(tab2);
info("- remove tab -");
BrowserTestUtils.removeTab(tab);
}); });
add_task(async function testShouldResumePlayedMedia() {
info("- open new background tab and wait until it finishes loading -");
const tab = BrowserTestUtils.addTab(window.gBrowser, PAGE);
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
info("- play media, pause it, then play it again -");
await doPlayPauseThenPlayOnMedia(tab);
info("- show delay media playback icon on tab -");
await waitForTabBlockEvent(tab, true);
info("- select tab as foreground tab -");
await BrowserTestUtils.switchTab(window.gBrowser, tab);
info("- resuming tab should dismiss delay autoplay icon -");
await waitForTabBlockEvent(tab, false);
info("- played media should still be played -");
await checkAudioPauseState(tab, false /* should be played */);
info("- played media would generate tab playing icon -");
await waitForTabPlayingEvent(tab, true);
info("- remove tab -");
BrowserTestUtils.removeTab(tab);
});
/**
* Helper functions.
*/
async function checkAudioPauseState(tab, expectedPaused) {
await SpecialPowers.spawn(
tab.linkedBrowser,
[expectedPaused],
expectedPaused => {
const audio = content.document.getElementById("testAudio");
if (!audio) {
ok(false, "Can't get the audio element!");
}
is(audio.paused, expectedPaused, "The pause state of audio is corret.");
}
);
}
async function doPlayThenPauseOnMedia(tab) {
await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
const audio = content.document.getElementById("testAudio");
if (!audio) {
ok(false, "Can't get the audio element!");
}
audio.play();
audio.pause();
});
}
async function doPlayPauseThenPlayOnMedia(tab) {
await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
const audio = content.document.getElementById("testAudio");
if (!audio) {
ok(false, "Can't get the audio element!");
}
audio.play();
audio.pause();
audio.play();
});
}

Просмотреть файл

@ -1,15 +0,0 @@
<!DOCTYPE html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
<audio id="testAudio" src="audio.ogg" preload="none"></audio>
<script type="text/javascript">
var audio = document.getElementById("testAudio");
audio.play();
audio.pause();
</script>
</body>

Просмотреть файл

@ -1,16 +0,0 @@
<!DOCTYPE html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
<audio id="testAudio" src="audio.ogg" loop></audio>
<script type="text/javascript">
var audio = document.getElementById("testAudio");
audio.play();
audio.pause();
audio.play();
</script>
</body>