diff options
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_AudioPlayback.js')
-rw-r--r-- | dom/browser-element/mochitest/browserElement_AudioPlayback.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/browserElement_AudioPlayback.js b/dom/browser-element/mochitest/browserElement_AudioPlayback.js new file mode 100644 index 000000000..bcbe89cb1 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioPlayback.js @@ -0,0 +1,75 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test the mozbrowseraudioplaybackchange event is fired correctly. +'use strict'; + +const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +/** + * Content script passed to the child iframe + */ +function playAudioScript() { + var audio = new content.Audio(); + content.document.body.appendChild(audio); + audio.oncanplay = function() { + audio.play(); + }; + audio.src = 'audio.ogg'; +} + +/** + * Creates a simple mozbrowser frame + */ +function createFrame() { + let iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + return iframe; +} + +function runTest() { + SimpleTest.waitForExplicitFinish(); + + let iframe = createFrame(); + let iframe2 = createFrame(); + + // When the first iframe is finished loading inject a script to create + // an audio element and play it. + iframe.addEventListener('mozbrowserloadend', () => { + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + mm.loadFrameScript('data:,(' + playAudioScript.toString() + ')();', false); + }); + + // Two events should come in, when the audio starts, and stops playing. + // The first one should have a detail of 'active' and the second one + // should have a detail of 'inactive-pause'. + let expectedNextData = 'active'; + iframe.addEventListener('mozbrowseraudioplaybackchange', (e) => { + is(e.detail, expectedNextData, 'Audio detail should be correct') + is(e.target, iframe, 'event target should be the first iframe') + if (e.detail === 'inactive-pause') { + SimpleTest.finish(); + } + expectedNextData = 'inactive-pause'; + }); + + // Make sure an event only goes to the first iframe. + iframe2.addEventListener('mozbrowseraudioplaybackchange', (e) => { + ok(false, + 'mozbrowseraudioplaybackchange should dispatch to the correct browser'); + }); + + // Load a simple page to get the process started. + iframe.src = browserElementTestHelpers.fileEmptyPage1; +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(runTest); + }); +}); |