1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/browser-element/mochitest/browserElement_CloseApp.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,72 @@ 1.4 +/* Any copyright is dedicated to the public domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +// Bug 789392 - Test that apps frames can trigger mozbrowserclose by calling 1.8 +// window.close(), but browser frames cannot. 1.9 +"use strict"; 1.10 + 1.11 +SimpleTest.waitForExplicitFinish(); 1.12 +browserElementTestHelpers.setEnabledPref(true); 1.13 +browserElementTestHelpers.addPermission(); 1.14 +SpecialPowers.addPermission("embed-apps", true, window.document); 1.15 + 1.16 +addEventListener('unload', function() { 1.17 + SpecialPowers.removePermission("embed-apps", window.document); 1.18 +}); 1.19 + 1.20 +function runTest() { 1.21 + // Our app frame and browser frame load the same content. That content calls 1.22 + // window.close() and then alert(). We should get a mozbrowserclose event on 1.23 + // the app frame before the mozbrowsershowmodalprompt, but not on the browser 1.24 + // frame. 1.25 + 1.26 + var appFrame = document.createElement('iframe'); 1.27 + SpecialPowers.wrap(appFrame).mozbrowser = true; 1.28 + appFrame.setAttribute('mozapp', 'http://example.org/manifest.webapp'); 1.29 + 1.30 + var browserFrame = document.createElement('iframe'); 1.31 + SpecialPowers.wrap(browserFrame).mozbrowser = true; 1.32 + 1.33 + var gotAppFrameClose = false; 1.34 + appFrame.addEventListener('mozbrowserclose', function() { 1.35 + ok(true, "Got close from app frame."); 1.36 + gotAppFrameClose = true; 1.37 + }); 1.38 + 1.39 + var gotAppFrameAlert = false; 1.40 + appFrame.addEventListener('mozbrowsershowmodalprompt', function() { 1.41 + ok(gotAppFrameClose, "Should have gotten app frame close by now."); 1.42 + ok(!gotAppFrameAlert, "Just one alert from the app frame."); 1.43 + gotAppFrameAlert = true; 1.44 + if (gotBrowserFrameAlert && gotAppFrameAlert) { 1.45 + SimpleTest.finish(); 1.46 + } 1.47 + }); 1.48 + 1.49 + browserFrame.addEventListener('mozbrowserclose', function() { 1.50 + ok(false, "Got close from browser frame."); 1.51 + }); 1.52 + 1.53 + var gotBrowserFrameAlert = false; 1.54 + browserFrame.addEventListener('mozbrowsershowmodalprompt', function() { 1.55 + ok(!gotBrowserFrameAlert, "Just one browser frame alert."); 1.56 + gotBrowserFrameAlert = true; 1.57 + if (gotBrowserFrameAlert && gotAppFrameAlert) { 1.58 + SimpleTest.finish(); 1.59 + } 1.60 + }); 1.61 + 1.62 + document.body.appendChild(appFrame); 1.63 + document.body.appendChild(browserFrame); 1.64 + 1.65 + appFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html'; 1.66 + browserFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html'; 1.67 +} 1.68 + 1.69 +// The test harness sets dom.allow_scripts_to_close_windows to true (as of 1.70 +// writing, anyway). But that means that browser tabs can close themselves, 1.71 +// which is what we want to test /can't/ happen! For the purposes of this 1.72 +// test (and normal browser operation), this pref should be false. 1.73 +addEventListener('testready', function() { 1.74 + SpecialPowers.pushPrefEnv({'set': [['dom.allow_scripts_to_close_windows', false]]}, runTest); 1.75 +});