1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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);
});
});
|