зеркало из https://github.com/mozilla/gecko-dev.git
Bug 789392 - Allow mozapp frames to window.close() themselves. r=bz
This commit is contained in:
Родитель
abae78a22a
Коммит
edb0abd581
|
@ -6548,9 +6548,10 @@ nsGlobalWindow::Close()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// Don't allow scripts from content to close windows
|
||||
// that were not opened by script
|
||||
if (!mHadOriginalOpener && !nsContentUtils::IsCallerTrustedForWrite()) {
|
||||
// Don't allow scripts from content to close non-app windows that were not
|
||||
// opened by script.
|
||||
if (!mDocShell->GetIsApp() &&
|
||||
!mHadOriginalOpener && !nsContentUtils::IsCallerTrustedForWrite()) {
|
||||
bool allowClose =
|
||||
Preferences::GetBool("dom.allow_scripts_to_close_windows", true);
|
||||
if (!allowClose) {
|
||||
|
|
|
@ -93,6 +93,9 @@ MOCHITEST_FILES = \
|
|||
browserElement_CloseFromOpener.js \
|
||||
test_browserElement_inproc_CloseFromOpener.html \
|
||||
file_browserElement_CloseFromOpener.html \
|
||||
browserElement_CloseApp.js \
|
||||
test_browserElement_inproc_CloseApp.html \
|
||||
file_browserElement_CloseApp.html \
|
||||
browserElement_OpenWindow.js \
|
||||
test_browserElement_inproc_OpenWindow.html \
|
||||
file_browserElement_Open1.html \
|
||||
|
@ -181,6 +184,7 @@ MOCHITEST_FILES += \
|
|||
test_browserElement_oop_PromptConfirm.html \
|
||||
test_browserElement_oop_Close.html \
|
||||
test_browserElement_oop_CloseFromOpener.html \
|
||||
test_browserElement_oop_CloseApp.html \
|
||||
test_browserElement_oop_OpenWindow.html \
|
||||
test_browserElement_oop_OpenWindowInFrame.html \
|
||||
test_browserElement_oop_OpenWindowRejected.html \
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/* 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);
|
|
@ -0,0 +1,12 @@
|
|||
<html>
|
||||
<body>
|
||||
|
||||
file_browserElement_CloseApp.html
|
||||
|
||||
<script>
|
||||
window.close();
|
||||
alert('called close');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test for Bug 789392</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="browserElementTestHelpers.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<script type="application/javascript;version=1.7" src="browserElement_CloseApp.js">
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test for Bug 789392</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="browserElementTestHelpers.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<script type="application/javascript;version=1.7" src="browserElement_CloseApp.js">
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -130,6 +130,7 @@
|
|||
"dom/browser-element/mochitest/test_browserElement_inproc_AppFramePermission.html": "",
|
||||
"dom/browser-element/mochitest/test_browserElement_inproc_AppWindowNamespace.html": "TIMED_OUT, bug 783509",
|
||||
"dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html": "TIMED_OUT, bug 766586",
|
||||
"dom/browser-element/mochitest/test_browserElement_inproc_CloseApp.html": "FAILS, bug 796982",
|
||||
"dom/devicestorage": "bug 781789 & bug 782275",
|
||||
"dom/imptests/editing/conformancetest/test_event.html": "",
|
||||
"dom/imptests/editing/conformancetest/test_runtest.html": "",
|
||||
|
|
Загрузка…
Ссылка в новой задаче