diff -r 000000000000 -r 6474c204b198 dom/browser-element/mochitest/browserElement_CloseApp.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/browser-element/mochitest/browserElement_CloseApp.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,72 @@ +/* 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(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); +SpecialPowers.addPermission("embed-apps", true, window.document); + +addEventListener('unload', function() { + SpecialPowers.removePermission("embed-apps", window.document); +}); + +function runTest() { + // 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'); + SpecialPowers.wrap(appFrame).mozbrowser = true; + appFrame.setAttribute('mozapp', 'http://example.org/manifest.webapp'); + + var browserFrame = document.createElement('iframe'); + SpecialPowers.wrap(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. +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [['dom.allow_scripts_to_close_windows', false]]}, runTest); +});