mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
32a369b80d
We need to rely on the audio channel service for all products now, so supporting running without it seems pointless at this point.
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
/* 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);
|
|
browserElementTestHelpers.addPermission();
|
|
|
|
/**
|
|
* 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'.
|
|
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') {
|
|
SimpleTest.finish();
|
|
}
|
|
expectedNextData = 'inactive';
|
|
});
|
|
|
|
// 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.emptyPage1;
|
|
}
|
|
|
|
addEventListener('testready', runTest);
|