зеркало из https://github.com/mozilla/gecko-dev.git
130 строки
3.7 KiB
JavaScript
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;
|
|
}
|