dom/browser-element/mochitest/browserElement_CloseApp.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:147b9d32c89e
1 /* Any copyright is dedicated to the public domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 // Bug 789392 - Test that apps frames can trigger mozbrowserclose by calling
5 // window.close(), but browser frames cannot.
6 "use strict";
7
8 SimpleTest.waitForExplicitFinish();
9 browserElementTestHelpers.setEnabledPref(true);
10 browserElementTestHelpers.addPermission();
11 SpecialPowers.addPermission("embed-apps", true, window.document);
12
13 addEventListener('unload', function() {
14 SpecialPowers.removePermission("embed-apps", window.document);
15 });
16
17 function runTest() {
18 // Our app frame and browser frame load the same content. That content calls
19 // window.close() and then alert(). We should get a mozbrowserclose event on
20 // the app frame before the mozbrowsershowmodalprompt, but not on the browser
21 // frame.
22
23 var appFrame = document.createElement('iframe');
24 SpecialPowers.wrap(appFrame).mozbrowser = true;
25 appFrame.setAttribute('mozapp', 'http://example.org/manifest.webapp');
26
27 var browserFrame = document.createElement('iframe');
28 SpecialPowers.wrap(browserFrame).mozbrowser = true;
29
30 var gotAppFrameClose = false;
31 appFrame.addEventListener('mozbrowserclose', function() {
32 ok(true, "Got close from app frame.");
33 gotAppFrameClose = true;
34 });
35
36 var gotAppFrameAlert = false;
37 appFrame.addEventListener('mozbrowsershowmodalprompt', function() {
38 ok(gotAppFrameClose, "Should have gotten app frame close by now.");
39 ok(!gotAppFrameAlert, "Just one alert from the app frame.");
40 gotAppFrameAlert = true;
41 if (gotBrowserFrameAlert && gotAppFrameAlert) {
42 SimpleTest.finish();
43 }
44 });
45
46 browserFrame.addEventListener('mozbrowserclose', function() {
47 ok(false, "Got close from browser frame.");
48 });
49
50 var gotBrowserFrameAlert = false;
51 browserFrame.addEventListener('mozbrowsershowmodalprompt', function() {
52 ok(!gotBrowserFrameAlert, "Just one browser frame alert.");
53 gotBrowserFrameAlert = true;
54 if (gotBrowserFrameAlert && gotAppFrameAlert) {
55 SimpleTest.finish();
56 }
57 });
58
59 document.body.appendChild(appFrame);
60 document.body.appendChild(browserFrame);
61
62 appFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
63 browserFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
64 }
65
66 // The test harness sets dom.allow_scripts_to_close_windows to true (as of
67 // writing, anyway). But that means that browser tabs can close themselves,
68 // which is what we want to test /can't/ happen! For the purposes of this
69 // test (and normal browser operation), this pref should be false.
70 addEventListener('testready', function() {
71 SpecialPowers.pushPrefEnv({'set': [['dom.allow_scripts_to_close_windows', false]]}, runTest);
72 });

mercurial