mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 22:55:23 +00:00
ca7e1cc83e
--HG-- extra : rebase_source : d7db5c56be6422c314479e20470bdd2f84a8f999
137 lines
3.7 KiB
JavaScript
137 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var tests = [false /* INPROC */, true /* OOP */];
|
|
var rootURI = "http://test/chrome/dom/browser-element/mochitest/";
|
|
var manifestURI = rootURI + "multipleAudioChannels_manifest.webapp";
|
|
var srcURI = rootURI + "file_browserElement_MultipleAudioChannels.html";
|
|
var generator = startTest();
|
|
var app = null;
|
|
var channelsNum = 2;
|
|
|
|
addLoadEvent(() => {
|
|
SpecialPowers.pushPermissions(
|
|
[{ "type": "webapps-manage", "allow": 1, "context": document },
|
|
{ "type": "browser", "allow": 1, "context": document },
|
|
{ "type": "embed-apps", "allow": 1, "context": document }],
|
|
function() {
|
|
SpecialPowers.pushPrefEnv(
|
|
{'set': [["dom.mozBrowserFramesEnabled", true],
|
|
["dom.webapps.useCurrentProfile", true],
|
|
["media.useAudioChannelAPI", true],
|
|
["b2g.system_manifest_url", "http://mochi.test:8888/manifest.webapp"]]},
|
|
() => { generator.next(); })
|
|
});
|
|
});
|
|
|
|
function error(message) {
|
|
ok(false, message);
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
function continueTest() {
|
|
try {
|
|
generator.next();
|
|
} catch (e if e instanceof StopIteration) {
|
|
error("Stop test because of exception!");
|
|
}
|
|
}
|
|
|
|
function showTestInfo(aOOPCEnabled) {
|
|
if (aOOPCEnabled) {
|
|
info("=== Start OOP testing ===");
|
|
} else {
|
|
info("=== Start INPROC testing ===");
|
|
}
|
|
}
|
|
|
|
function uninstallApp(aApp) {
|
|
if (aApp) {
|
|
var request = navigator.mozApps.mgmt.uninstall(app);
|
|
app = null;
|
|
request.onerror = () => {
|
|
error("Uninstall app failed!");
|
|
};
|
|
request.onsuccess = () => {
|
|
is(request.result, manifestURI, "App uninstalled.");
|
|
runNextTest();
|
|
}
|
|
}
|
|
}
|
|
|
|
function runTest(aOOPCEnabled) {
|
|
var request = navigator.mozApps.install(manifestURI, {});
|
|
request.onerror = () => {
|
|
error("Install app failed!");
|
|
};
|
|
|
|
request.onsuccess = () => {
|
|
app = request.result;
|
|
ok(app, "App is installed.");
|
|
is(app.manifestURL, manifestURI, "App manifest url is correct.");
|
|
|
|
var iframe = document.createElement('iframe');
|
|
iframe.setAttribute('mozbrowser', true);
|
|
iframe.setAttribute('remote', aOOPCEnabled);
|
|
iframe.setAttribute('mozapp', manifestURI);
|
|
iframe.src = srcURI;
|
|
|
|
iframe.addEventListener('mozbrowserloadend', () => {
|
|
var channels = iframe.allowedAudioChannels;
|
|
is(channels.length, channelsNum, "Have two channels.");
|
|
|
|
var activeCounter = 0;
|
|
for (var idx = 0; idx < channelsNum; idx++) {
|
|
let ac = channels[idx];
|
|
ok(ac instanceof BrowserElementAudioChannel, "Correct class.");
|
|
ok("getMuted" in ac, "ac.getMuted exists");
|
|
ok("onactivestatechanged" in ac, "ac.onactivestatechanged exists");
|
|
|
|
if (ac.name == "normal" || ac.name == "content") {
|
|
ok(true, "Get correct channel type.");
|
|
} else {
|
|
error("Get unexpected channel type!");
|
|
}
|
|
|
|
ac.getMuted().onsuccess = (e) => {
|
|
is(e.target.result, false, "Channel is unmuted.")
|
|
}
|
|
|
|
ac.onactivestatechanged = () => {
|
|
ok(true, "Receive activestatechanged event from " + ac.name);
|
|
ac.onactivestatechanged = null;
|
|
if (++activeCounter == channelsNum) {
|
|
document.body.removeChild(iframe);
|
|
uninstallApp(app);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
|
|
document.body.appendChild(iframe);
|
|
};
|
|
}
|
|
|
|
function runNextTest() {
|
|
if (tests.length) {
|
|
var isEnabledOOP = tests.shift();
|
|
showTestInfo(isEnabledOOP);
|
|
runTest(isEnabledOOP);
|
|
} else {
|
|
SimpleTest.finish();
|
|
}
|
|
}
|
|
|
|
function startTest() {
|
|
SpecialPowers.setAllAppsLaunchable(true);
|
|
SpecialPowers.autoConfirmAppInstall(continueTest);
|
|
yield undefined;
|
|
|
|
SpecialPowers.autoConfirmAppUninstall(continueTest);
|
|
yield undefined;
|
|
|
|
runNextTest();
|
|
yield undefined;
|
|
}
|