From 56a2f704188381ebadecdcca684432f8a305c106 Mon Sep 17 00:00:00 2001 From: Alastor Wu Date: Sat, 4 Mar 2017 01:16:40 +0800 Subject: [PATCH] Bug 1338137 - part3 : add test. r=baku MozReview-Commit-ID: 7lpvIp5IOqV --HG-- extra : rebase_source : b919e2e77fe21fa50e2e84bc2f4a98b79babd6b7 --- toolkit/content/tests/browser/browser.ini | 4 + ...wser_block_autoplay_playAfterTabVisible.js | 84 +++++++++++++++++++ .../tests/browser/file_nonAutoplayAudio.html | 7 ++ 3 files changed, 95 insertions(+) create mode 100644 toolkit/content/tests/browser/browser_block_autoplay_playAfterTabVisible.js create mode 100644 toolkit/content/tests/browser/file_nonAutoplayAudio.html diff --git a/toolkit/content/tests/browser/browser.ini b/toolkit/content/tests/browser/browser.ini index 412d40ebb217..f1ad7715d8ce 100644 --- a/toolkit/content/tests/browser/browser.ini +++ b/toolkit/content/tests/browser/browser.ini @@ -27,6 +27,10 @@ support-files = support-files = file_blockMedia_shouldPlay.html file_blockMedia_shouldNotPlay.html +[browser_block_autoplay_playAfterTabVisible.js] +tags = audiochannel +support-files = + file_nonAutoplayAudio.html [browser_bug295977_autoscroll_overflow.js] [browser_bug451286.js] skip-if = !e10s diff --git a/toolkit/content/tests/browser/browser_block_autoplay_playAfterTabVisible.js b/toolkit/content/tests/browser/browser_block_autoplay_playAfterTabVisible.js new file mode 100644 index 000000000000..93c9d6ab9c20 --- /dev/null +++ b/toolkit/content/tests/browser/browser_block_autoplay_playAfterTabVisible.js @@ -0,0 +1,84 @@ +const PAGE = "https://example.com/browser/toolkit/content/tests/browser/file_nonAutoplayAudio.html"; + +var SuspendedType = { + NONE_SUSPENDED : 0, + SUSPENDED_PAUSE : 1, + SUSPENDED_BLOCK : 2, + SUSPENDED_PAUSE_DISPOSABLE : 3 +}; + +function check_audio_suspended(suspendedType) { + var audio = content.document.getElementById("testAudio"); + if (!audio) { + ok(false, "Can't get the audio element!"); + } + + is(audio.computedSuspended, suspendedType, + "The suspeded state of audio is correct."); +} + +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.") +} + +function play_audio() { + var audio = content.document.getElementById("testAudio"); + if (!audio) { + ok(false, "Can't get the audio element!"); + } + + audio.play(); + return new Promise(resolve => { + audio.onplay = function() { + audio.onplay = null; + ok(true, "Audio starts playing."); + resolve(); + } + }); +} + +add_task(function* setup_test_preference() { + yield SpecialPowers.pushPrefEnv({"set": [ + ["media.useAudioChannelService.testing", true], + ["media.block-autoplay-until-in-foreground", true] + ]}); +}); + + +/** + * This test is used for testing the visible tab which was not resumed yet. + * If the tab doesn't have any media component, it won't be resumed even it + * has already gone to foreground until we start audio. + */ +add_task(function* media_should_be_able_to_play_in_visible_tab() { + info("- open new background tab, and check tab's media pause state -"); + let tab = window.gBrowser.addTab("about:blank"); + tab.linkedBrowser.loadURI(PAGE); + yield BrowserTestUtils.browserLoaded(tab.linkedBrowser); + yield ContentTask.spawn(tab.linkedBrowser, true, + check_audio_pause_state); + + info("- select tab as foreground tab, and tab's media should still be paused -"); + yield BrowserTestUtils.switchTab(window.gBrowser, tab); + yield ContentTask.spawn(tab.linkedBrowser, true, + check_audio_pause_state); + + info("- start audio in tab -"); + yield ContentTask.spawn(tab.linkedBrowser, null, + play_audio); + + info("- audio should be playing -"); + yield ContentTask.spawn(tab.linkedBrowser, false, + check_audio_pause_state); + yield ContentTask.spawn(tab.linkedBrowser, SuspendedType.NONE_SUSPENDED, + check_audio_suspended); + + info("- remove tab -"); + yield BrowserTestUtils.removeTab(tab); +}); diff --git a/toolkit/content/tests/browser/file_nonAutoplayAudio.html b/toolkit/content/tests/browser/file_nonAutoplayAudio.html new file mode 100644 index 000000000000..e4d19d57c54d --- /dev/null +++ b/toolkit/content/tests/browser/file_nonAutoplayAudio.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file