mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
72 lines
2.7 KiB
JavaScript
72 lines
2.7 KiB
JavaScript
/* Any copyright is dedicated to the public domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Bug 789392 - Test that apps frames can trigger mozbrowserclose by calling
|
|
// window.close(), but browser frames cannot.
|
|
"use strict";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
function runTest() {
|
|
browserElementTestHelpers.setEnabledPref(true);
|
|
browserElementTestHelpers.addPermission();
|
|
SpecialPowers.addPermission("embed-apps", true, window.document);
|
|
|
|
addEventListener('unload', function() {
|
|
SpecialPowers.removePermission("embed-apps", window.document);
|
|
});
|
|
|
|
// Our app frame and browser frame load the same content. That content calls
|
|
// window.close() and then alert(). We should get a mozbrowserclose event on
|
|
// the app frame before the mozbrowsershowmodalprompt, but not on the browser
|
|
// frame.
|
|
|
|
var appFrame = document.createElement('iframe');
|
|
appFrame.mozbrowser = true;
|
|
appFrame.setAttribute('mozapp', 'http://example.org/manifest.webapp');
|
|
|
|
var browserFrame = document.createElement('iframe');
|
|
browserFrame.mozbrowser = true;
|
|
|
|
var gotAppFrameClose = false;
|
|
appFrame.addEventListener('mozbrowserclose', function() {
|
|
ok(true, "Got close from app frame.");
|
|
gotAppFrameClose = true;
|
|
});
|
|
|
|
var gotAppFrameAlert = false;
|
|
appFrame.addEventListener('mozbrowsershowmodalprompt', function() {
|
|
ok(gotAppFrameClose, "Should have gotten app frame close by now.");
|
|
ok(!gotAppFrameAlert, "Just one alert from the app frame.");
|
|
gotAppFrameAlert = true;
|
|
if (gotBrowserFrameAlert && gotAppFrameAlert) {
|
|
SimpleTest.finish();
|
|
}
|
|
});
|
|
|
|
browserFrame.addEventListener('mozbrowserclose', function() {
|
|
ok(false, "Got close from browser frame.");
|
|
});
|
|
|
|
var gotBrowserFrameAlert = false;
|
|
browserFrame.addEventListener('mozbrowsershowmodalprompt', function() {
|
|
ok(!gotBrowserFrameAlert, "Just one browser frame alert.");
|
|
gotBrowserFrameAlert = true;
|
|
if (gotBrowserFrameAlert && gotAppFrameAlert) {
|
|
SimpleTest.finish();
|
|
}
|
|
});
|
|
|
|
document.body.appendChild(appFrame);
|
|
document.body.appendChild(browserFrame);
|
|
|
|
appFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
|
|
browserFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
|
|
}
|
|
|
|
// The test harness sets dom.allow_scripts_to_close_windows to true (as of
|
|
// writing, anyway). But that means that browser tabs can close themselves,
|
|
// which is what we want to test /can't/ happen! For the purposes of this
|
|
// test (and normal browser operation), this pref should be false.
|
|
SpecialPowers.pushPrefEnv({'set': [['dom.allow_scripts_to_close_windows', false]]}, runTest);
|