gecko-dev/dom/browser-element/mochitest/browserElement_NotifyChanne...

130 строки
3.7 KiB
JavaScript

"use strict";
SimpleTest.waitForExplicitFinish();
const { classes: Cc, interfaces: Ci } = Components;
const systemMessenger = Cc["@mozilla.org/system-message-internal;1"]
.getService(Ci.nsISystemMessagesInternal);
const ioService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var tests = [false /* INPROC */, true /* OOP */];
var rootURI = "http://test/chrome/dom/browser-element/mochitest/";
var manifestURI = rootURI + "manifest.webapp";
var srcURI = rootURI + "file_browserElement_NotifyChannel.html";
var generator = runTests();
var app = null;
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.sysmsg.enabled", true]]},
() => { 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 registerPage(aEvent) {
systemMessenger.registerPage(aEvent,
ioService.newURI(srcURI, null, null),
ioService.newURI(manifestURI, null, null));
}
function uninstallApp() {
if (app) {
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(aEnable) {
var request = navigator.mozApps.install(manifestURI, {});
request.onerror = () => {
error("Install app failed!");
};
request.onsuccess = () => {
app = request.result;
ok(app, "App is installed. remote = " + aEnable);
is(app.manifestURL, manifestURI, "App manifest url is correct.");
var iframe = document.createElement('iframe');
iframe.setAttribute('mozbrowser', true);
iframe.setAttribute('remote', aEnable);
iframe.setAttribute('mozapp', manifestURI);
iframe.src = srcURI;
function loadend() {
iframe.removeEventListener('mozbrowserloadend', loadend);
iframe.addEventListener("mozbrowsershowmodalprompt", getInterruption);
var channels = iframe.allowedAudioChannels;
is(channels.length, 1, "1 audio channel by default");
var ac = channels[0];
ok(ac instanceof BrowserElementAudioChannel, "Correct class");
ok("notifyChannel" in ac, "ac.notifyChannel exists");
var message = "audiochannel-interruption-begin";
registerPage(message);
ac.notifyChannel(message);
function getInterruption(e) {
e.target.removeEventListener("mozbrowsershowmodalprompt", getInterruption);
is(e.detail.message, message,
"App got audiochannel-interruption-begin.");
document.body.removeChild(iframe);
uninstallApp();
}
};
iframe.addEventListener("mozbrowserloadend", loadend);
document.body.appendChild(iframe);
};
}
function runNextTest() {
if (tests.length) {
var isEnabledOOP = tests.shift();
runTest(isEnabledOOP);
} else {
SimpleTest.finish();
}
}
function runTests() {
SpecialPowers.setAllAppsLaunchable(true);
SpecialPowers.autoConfirmAppInstall(continueTest);
yield undefined;
SpecialPowers.autoConfirmAppUninstall(continueTest);
yield undefined;
runNextTest();
yield undefined;
}