82 lines
3.1 KiB
HTML
82 lines
3.1 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
<script type="text/javascript" src="NavigationUtils.js"></script>
|
|
<style type="text/css">
|
|
iframe { width: 90%; height: 50px; }
|
|
</style>
|
|
<script>
|
|
function runTest() {
|
|
navigateByLocation(window0.frames[0]);
|
|
navigateByOpen("window1_child0");
|
|
navigateByForm("window2_child0");
|
|
navigateByHyperlink("window3_child0");
|
|
|
|
xpcWaitForFinishedFrames(function() {
|
|
isInaccessible(window0.frames[0], "Should not be able to navigate off-domain frame by setting location.");
|
|
isInaccessible(window1.frames[0], "Should not be able to navigate off-domain frame by calling window.open.");
|
|
isInaccessible(window2.frames[0], "Should not be able to navigate off-domain frame by submitting form.");
|
|
isInaccessible(window3.frames[0], "Should not be able to navigate off-domain frame by targeted hyperlink.");
|
|
|
|
window0.close();
|
|
window1.close();
|
|
window2.close();
|
|
window3.close();
|
|
|
|
xpcCleanupWindows();
|
|
SimpleTest.finish();
|
|
}, 4);
|
|
}
|
|
|
|
// Because our open()'d windows are cross-origin, we can't wait for onload.
|
|
// We instead wait for a postMessage from parent.html.
|
|
var windows = new Map();
|
|
addEventListener("message", function windowLoaded(evt) {
|
|
// Because window.open spins the event loop in order to open new windows,
|
|
// we might receive the "ready" message before we call waitForLoad.
|
|
// In that case, windows won't contain evt.source and we just note that the
|
|
// window is ready. Otherwise, windows contains the "resolve" function for
|
|
// that window's promise and we just have to call it.
|
|
if (windows.has(evt.source)) {
|
|
windows.get(evt.source)();
|
|
} else {
|
|
windows.set(evt.source, true);
|
|
}
|
|
});
|
|
|
|
var window0 = window.open("http://test1.example.org:80/tests/docshell/test/navigation/parent.html", "window0", "width=10,height=10");
|
|
var window1 = window.open("http://test1.example.org:80/tests/docshell/test/navigation/parent.html", "window1", "width=10,height=10");
|
|
var window2 = window.open("http://test1.example.org:80/tests/docshell/test/navigation/parent.html", "window2", "width=10,height=10");
|
|
var window3 = window.open("http://test1.example.org:80/tests/docshell/test/navigation/parent.html", "window3", "width=10,height=10");
|
|
|
|
function waitForLoad(w) {
|
|
return new Promise(function(resolve, reject) {
|
|
// If we already got the "ready" message, resolve immediately.
|
|
if (windows.has(w)) {
|
|
resolve();
|
|
} else {
|
|
windows.set(w, resolve);
|
|
}
|
|
});
|
|
}
|
|
|
|
Promise.all([ waitForLoad(window0),
|
|
waitForLoad(window1),
|
|
waitForLoad(window2),
|
|
waitForLoad(window3) ])
|
|
.then(runTest);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=13871">Mozilla Bug 13871</a>
|
|
<pre id="test">
|
|
<script type="text/javascript">
|
|
SimpleTest.waitForExplicitFinish();
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|