mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-11 17:57:32 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
10
docshell/test/chrome/112564_nocache.html
Normal file
10
docshell/test/chrome/112564_nocache.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>test1</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
This document will be sent with a no-cache cache-control header. When sent over a secure connection, it should not be stored in bfcache.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
1
docshell/test/chrome/112564_nocache.html^headers^
Normal file
1
docshell/test/chrome/112564_nocache.html^headers^
Normal file
|
|
@ -0,0 +1 @@
|
|||
Cache-control: no-cache
|
||||
14
docshell/test/chrome/215405_nocache.html
Normal file
14
docshell/test/chrome/215405_nocache.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="height: 100%">
|
||||
<head>
|
||||
<title>test1</title>
|
||||
</head>
|
||||
<body style="height: 100%">
|
||||
<input type="text" id="inp" value="">
|
||||
</input>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%; width: 300%">Some more text</div>
|
||||
</body>
|
||||
</html>
|
||||
1
docshell/test/chrome/215405_nocache.html^headers^
Normal file
1
docshell/test/chrome/215405_nocache.html^headers^
Normal file
|
|
@ -0,0 +1 @@
|
|||
Cache-control: no-cache
|
||||
14
docshell/test/chrome/215405_nostore.html
Normal file
14
docshell/test/chrome/215405_nostore.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="height: 100%">
|
||||
<head>
|
||||
<title>test1</title>
|
||||
</head>
|
||||
<body style="height: 100%">
|
||||
<input type="text" id="inp" value="">
|
||||
</input>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%">Some text</div>
|
||||
<div style="height: 50%; width: 350%">Some more text</div>
|
||||
</body>
|
||||
</html>
|
||||
1
docshell/test/chrome/215405_nostore.html^headers^
Normal file
1
docshell/test/chrome/215405_nostore.html^headers^
Normal file
|
|
@ -0,0 +1 @@
|
|||
Cache-control: no-store
|
||||
1
docshell/test/chrome/582176_dummy.html
Normal file
1
docshell/test/chrome/582176_dummy.html
Normal file
|
|
@ -0,0 +1 @@
|
|||
hello world
|
||||
2
docshell/test/chrome/582176_xml.xml
Normal file
2
docshell/test/chrome/582176_xml.xml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?xml-stylesheet type="text/xsl" href="582176_xslt.xsl"?>
|
||||
<out/>
|
||||
8
docshell/test/chrome/582176_xslt.xsl
Normal file
8
docshell/test/chrome/582176_xslt.xsl
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:template match="out">
|
||||
<html>
|
||||
<head><title>XSLT result doc</title></head>
|
||||
<body><p>xslt result</p></body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
8
docshell/test/chrome/662200a.html
Normal file
8
docshell/test/chrome/662200a.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>A</title>
|
||||
</head>
|
||||
<body>
|
||||
<a id="link" href="662200b.html">Next</a>
|
||||
</body>
|
||||
</html>
|
||||
8
docshell/test/chrome/662200b.html
Normal file
8
docshell/test/chrome/662200b.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>B</title>
|
||||
</head>
|
||||
<body>
|
||||
<a id="link" href="662200c.html">Next</a>
|
||||
</body>
|
||||
</html>
|
||||
7
docshell/test/chrome/662200c.html
Normal file
7
docshell/test/chrome/662200c.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>C</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
7
docshell/test/chrome/89419.html
Normal file
7
docshell/test/chrome/89419.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Bug 89419</title>
|
||||
</head>
|
||||
<body>
|
||||
<img src="http://mochi.test:8888/tests/docshell/test/chrome/bug89419.sjs">
|
||||
</body>
|
||||
10
docshell/test/chrome/92598_nostore.html
Normal file
10
docshell/test/chrome/92598_nostore.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>test1</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
This document will be sent with a no-store cache-control header. It should not be stored in bfcache.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
1
docshell/test/chrome/92598_nostore.html^headers^
Normal file
1
docshell/test/chrome/92598_nostore.html^headers^
Normal file
|
|
@ -0,0 +1 @@
|
|||
Cache-control: no-store
|
||||
7
docshell/test/chrome/allowContentRetargeting.sjs
Normal file
7
docshell/test/chrome/allowContentRetargeting.sjs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function handleRequest(req, resp) {
|
||||
resp.setHeader("Content-Type", "application/octet-stream", false);
|
||||
resp.write("hi");
|
||||
}
|
||||
BIN
docshell/test/chrome/blue.png
Normal file
BIN
docshell/test/chrome/blue.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
117
docshell/test/chrome/bug112564_window.xul
Normal file
117
docshell/test/chrome/bug112564_window.xul
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="112564Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="onLoad();"
|
||||
title="112564 test">
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
const LISTEN_EVENTS = ["load", "unload", "pageshow", "pagehide"];
|
||||
|
||||
var gBrowser;
|
||||
var gTestsIterator;
|
||||
var gExpected = [];
|
||||
|
||||
function ok(condition, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
|
||||
}
|
||||
|
||||
function is(a, b, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
|
||||
}
|
||||
|
||||
function finish() {
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.removeEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
// Work around bug 467960
|
||||
var history = gBrowser.webNavigation.sessionHistory;
|
||||
history.PurgeHistory(history.count);
|
||||
|
||||
window.close();
|
||||
window.opener.wrappedJSObject.SimpleTest.finish();
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
gBrowser = document.getElementById("content");
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.addEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
gTestsIterator = testsIterator();
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function eventListener(event) {
|
||||
ok(gExpected.length >= 1, "Unexpected event " + event.type);
|
||||
if (gExpected.length == 0) {
|
||||
// in case of unexpected event, try to continue anyway
|
||||
setTimeout(nextTest, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
var exp = gExpected.shift();
|
||||
is(event.type, exp.type, "Invalid event received");
|
||||
if (typeof(exp.persisted) != "undefined") {
|
||||
is(event.persisted, exp.persisted, "Invalid persisted state");
|
||||
}
|
||||
if (exp.title) {
|
||||
ok(event.originalTarget instanceof HTMLDocument,
|
||||
"originalTarget not a HTMLDocument");
|
||||
is(event.originalTarget.title, exp.title, "titles don't match");
|
||||
}
|
||||
|
||||
if (gExpected.length == 0) {
|
||||
setTimeout(nextTest, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
gTestsIterator.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function testsIterator() {
|
||||
// Load a secure page with a no-cache header, followed by a simple page.
|
||||
// no-cache should not interfere with the bfcache in the way no-store
|
||||
// does.
|
||||
var test1DocURI = "https://example.com:443/tests/docshell/test/chrome/112564_nocache.html";
|
||||
|
||||
gExpected = [{type: "pagehide", persisted: true},
|
||||
{type: "load", title: "test1"},
|
||||
{type: "pageshow", title: "test1", persisted: false}];
|
||||
gBrowser.loadURI(test1DocURI);
|
||||
yield undefined;
|
||||
|
||||
var test2Doc = "data:text/html,<html><head><title>test2</title></head>" +
|
||||
"<body>test2</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test1", persisted: true},
|
||||
{type: "load", title: "test2"},
|
||||
{type: "pageshow", title: "test2", persisted: false}];
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
// Now go back in history. First page has been cached.
|
||||
// Check persisted property to confirm
|
||||
gExpected = [{type: "pagehide", title: "test2", persisted: true},
|
||||
{type: "pageshow", title: "test1", persisted: true}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
161
docshell/test/chrome/bug113934_window.xul
Normal file
161
docshell/test/chrome/bug113934_window.xul
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<window title="Mozilla Bug 113934" onload="doTheTest()"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<hbox>
|
||||
<vbox id="box1">
|
||||
</vbox>
|
||||
<vbox id="box2">
|
||||
</vbox>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var imports = [ "SimpleTest", "is", "isnot", "ok", "snapshotWindow",
|
||||
"compareSnapshots", "onerror" ];
|
||||
for (var name of imports) {
|
||||
window[name] = window.opener.wrappedJSObject[name];
|
||||
}
|
||||
|
||||
function $(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
function addBrowser(parent, id, width, height) {
|
||||
var b =
|
||||
document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "browser");
|
||||
var type = window.location.search.slice(1);
|
||||
is(type == "chrome" || type == "content", true, "Unexpected type");
|
||||
b.setAttribute("type", type);
|
||||
b.setAttribute("id", id);
|
||||
b.setAttribute("width", width);
|
||||
b.setAttribute("height", height);
|
||||
$(parent).appendChild(b);
|
||||
}
|
||||
addBrowser("box1", "f1", 300, 200);
|
||||
addBrowser("box1", "f2", 300, 200);
|
||||
addBrowser("box2", "f3", 30, 200);
|
||||
|
||||
/** Test for Bug 113934 **/
|
||||
var doc1 =
|
||||
"data:text/html,<html><body onbeforeunload='document.documentElement.textContent = \"\"' onunload='document.documentElement.textContent = \"\"' onpagehide='document.documentElement.textContent = \"\"'>This is a test</body></html>";
|
||||
var doc2 = "data:text/html,<html><head></head><body>This is a second test</body></html>";
|
||||
|
||||
|
||||
$("f1").setAttribute("src", doc1);
|
||||
$("f2").setAttribute("src", doc2);
|
||||
$("f3").setAttribute("src", doc2);
|
||||
|
||||
function doTheTest() {
|
||||
var s1 = snapshotWindow($("f1").contentWindow);
|
||||
var s2 = snapshotWindow($("f2").contentWindow);
|
||||
var s3 = snapshotWindow($("f3").contentWindow);
|
||||
|
||||
// This test is broken - see bug 1090274
|
||||
//ok(!compareSnapshots(s2, s3, true)[0],
|
||||
// "Should look different due to different sizing");
|
||||
|
||||
function getDOM(id) {
|
||||
return $(id).contentDocument.documentElement.innerHTML;
|
||||
}
|
||||
|
||||
var dom1 = getDOM("f1");
|
||||
|
||||
var dom2 = getDOM("f2");
|
||||
$("f2").contentDocument.body.textContent = "Modified the text";
|
||||
var dom2star = getDOM("f2");
|
||||
isnot(dom2, dom2star, "We changed the DOM!");
|
||||
|
||||
$("f1").swapDocShells($("f2"));
|
||||
// now we have doms 2*, 1, 2 in the frames
|
||||
|
||||
is(getDOM("f1"), dom2star, "Shouldn't have changed the DOM on swap");
|
||||
is(getDOM("f2"), dom1, "Shouldn't have fired event handlers");
|
||||
|
||||
// Test for bug 480149
|
||||
// The DOMLink* events are dispatched asynchronously, thus I cannot
|
||||
// just include the <link> element in the initial DOM and swap the
|
||||
// docshells. Instead, the link element is added now. Then, when the
|
||||
// first DOMLinkAdded event (which is a result of the actual addition)
|
||||
// is dispatched, the docshells are swapped and the pageshow and pagehide
|
||||
// events are tested. Only then, we wait for the DOMLink* events,
|
||||
// which are a result of swapping the docshells.
|
||||
var DOMLinkListener = {
|
||||
_afterFirst: false,
|
||||
_removedDispatched: false,
|
||||
_addedDispatched: false,
|
||||
handleEvent: function(aEvent) {
|
||||
if (!this._afterFirst) {
|
||||
is(aEvent.type, "DOMLinkAdded");
|
||||
|
||||
var strs = { "f1": "", "f3" : "" };
|
||||
function attachListener(node, type) {
|
||||
var listener = function(e) {
|
||||
if (strs[node.id]) strs[node.id] += " ";
|
||||
strs[node.id] += node.id + ".page" + type;
|
||||
}
|
||||
node.addEventListener("page" + type, listener, false);
|
||||
|
||||
listener.detach = function() {
|
||||
node.removeEventListener("page" + type, listener, false);
|
||||
}
|
||||
return listener;
|
||||
}
|
||||
|
||||
var l1 = attachListener($("f1"), "show");
|
||||
var l2 = attachListener($("f1"), "hide");
|
||||
var l3 = attachListener($("f3"), "show");
|
||||
var l4 = attachListener($("f3"), "hide");
|
||||
|
||||
$("f1").swapDocShells($("f3"));
|
||||
// now we have DOMs 2, 1, 2* in the frames
|
||||
|
||||
l1.detach();
|
||||
l2.detach();
|
||||
l3.detach();
|
||||
l4.detach();
|
||||
|
||||
var s1_new = snapshotWindow($("f1").contentWindow);
|
||||
var [same, first, second] = compareSnapshots(s1_new, s2, true);
|
||||
ok(same, "Should reflow on swap", "Expected " + second + " but got " + first);
|
||||
|
||||
is(strs["f1"], "f1.pagehide f1.pageshow");
|
||||
is(strs["f3"], "f3.pagehide f3.pageshow");
|
||||
this._afterFirst = true;
|
||||
return;
|
||||
}
|
||||
if (aEvent.type == "DOMLinkAdded") {
|
||||
is(this._addedDispatched, false);
|
||||
this._addedDispatched = true;
|
||||
}
|
||||
else {
|
||||
is(this._removedDispatched, false);
|
||||
this._removedDispatched = true;
|
||||
}
|
||||
|
||||
if (this._addedDispatched && this._removedDispatched) {
|
||||
$("f1").removeEventListener("DOMLinkAdded", this, false);
|
||||
$("f1").removeEventListener("DOMLinkRemoved", this, false);
|
||||
$("f3").removeEventListener("DOMLinkAdded", this, false);
|
||||
$("f3").removeEventListener("DOMLinkRemoved", this, false);
|
||||
window.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$("f1").addEventListener("DOMLinkAdded", DOMLinkListener, false);
|
||||
$("f1").addEventListener("DOMLinkRemoved", DOMLinkListener, false);
|
||||
$("f3").addEventListener("DOMLinkAdded", DOMLinkListener, false);
|
||||
$("f3").addEventListener("DOMLinkRemoved", DOMLinkListener, false);
|
||||
|
||||
var linkElement = $("f1").contentDocument.createElement("link");
|
||||
linkElement.setAttribute("rel", "alternate");
|
||||
linkElement.setAttribute("href", "about:blank");
|
||||
$("f1").contentDocument.documentElement.firstChild.appendChild(linkElement);
|
||||
}
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
167
docshell/test/chrome/bug215405_window.xul
Normal file
167
docshell/test/chrome/bug215405_window.xul
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="215405Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="onLoad();"
|
||||
title="215405 test">
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var imports = [ "SimpleTest", "is", "isnot", "ok"];
|
||||
for (var name of imports) {
|
||||
window[name] = window.opener.wrappedJSObject[name];
|
||||
}
|
||||
|
||||
const text="MOZILLA";
|
||||
const nostoreURI = "http://mochi.test:8888/tests/docshell/test/chrome/" +
|
||||
"215405_nostore.html";
|
||||
const nocacheURI = "https://example.com:443/tests/docshell/test/chrome/" +
|
||||
"215405_nocache.html";
|
||||
|
||||
var gBrowser;
|
||||
var gTestsIterator;
|
||||
var scrollX = 0;
|
||||
var scrollY = 0;
|
||||
|
||||
function finish() {
|
||||
gBrowser.removeEventListener("pageshow", eventListener, true);
|
||||
// Work around bug 467960
|
||||
var history = gBrowser.webNavigation.sessionHistory;
|
||||
history.PurgeHistory(history.count);
|
||||
|
||||
window.close();
|
||||
window.opener.wrappedJSObject.SimpleTest.finish();
|
||||
}
|
||||
|
||||
function onLoad(e) {
|
||||
gBrowser = document.getElementById("content");
|
||||
gBrowser.addEventListener("pageshow", eventListener, true);
|
||||
|
||||
gTestsIterator = testsIterator();
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function eventListener(event) {
|
||||
setTimeout(nextTest, 0);
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
gTestsIterator.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function testsIterator() {
|
||||
// No-store tests
|
||||
var testName = "[nostore]";
|
||||
|
||||
// Load a page with a no-store header
|
||||
gBrowser.loadURI(nostoreURI);
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Now that the page has loaded, amend the form contents
|
||||
var form = gBrowser.contentDocument.getElementById("inp");
|
||||
form.value = text;
|
||||
|
||||
// Attempt to scroll the page
|
||||
var originalXPosition = gBrowser.contentWindow.scrollX;
|
||||
var originalYPosition = gBrowser.contentWindow.scrollY;
|
||||
var scrollToX = gBrowser.contentWindow.scrollMaxX;
|
||||
var scrollToY = gBrowser.contentWindow.scrollMaxY;
|
||||
gBrowser.contentWindow.scrollBy(scrollToX, scrollToY);
|
||||
|
||||
// Save the scroll position for future comparison
|
||||
scrollX = gBrowser.contentWindow.scrollX;
|
||||
scrollY = gBrowser.contentWindow.scrollY;
|
||||
isnot(scrollX, originalXPosition,
|
||||
testName + " failed to scroll window horizontally");
|
||||
isnot(scrollY, originalYPosition,
|
||||
testName + " failed to scroll window vertically");
|
||||
|
||||
// Load a new document into the browser
|
||||
var simple = "data:text/html,<html><head><title>test2</title></head>" +
|
||||
"<body>test2</body></html>";
|
||||
gBrowser.loadURI(simple);
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Now go back in history. First page should not have been cached.
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
|
||||
// First uncacheable page will now be reloaded. Check scroll position
|
||||
// restored, and form contents not
|
||||
is(gBrowser.contentWindow.scrollX, scrollX, testName +
|
||||
" horizontal axis scroll position not correctly restored");
|
||||
is(gBrowser.contentWindow.scrollY, scrollY, testName +
|
||||
" vertical axis scroll position not correctly restored");
|
||||
var formValue = gBrowser.contentDocument.getElementById("inp").value;
|
||||
isnot(formValue, text, testName + " form value incorrectly restored");
|
||||
|
||||
|
||||
// https no-cache
|
||||
testName = "[nocache]";
|
||||
|
||||
// Load a page with a no-cache header. This should not be
|
||||
// restricted like no-store (bug 567365)
|
||||
gBrowser.loadURI(nocacheURI);
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Now that the page has loaded, amend the form contents
|
||||
form = gBrowser.contentDocument.getElementById("inp");
|
||||
form.value = text;
|
||||
|
||||
// Attempt to scroll the page
|
||||
originalXPosition = gBrowser.contentWindow.scrollX;
|
||||
originalYPosition = gBrowser.contentWindow.scrollY;
|
||||
scrollToX = gBrowser.contentWindow.scrollMaxX;
|
||||
scrollToY = gBrowser.contentWindow.scrollMaxY;
|
||||
gBrowser.contentWindow.scrollBy(scrollToX, scrollToY);
|
||||
|
||||
// Save the scroll position for future comparison
|
||||
scrollX = gBrowser.contentWindow.scrollX;
|
||||
scrollY = gBrowser.contentWindow.scrollY;
|
||||
isnot(scrollX, originalXPosition,
|
||||
testName + " failed to scroll window horizontally");
|
||||
isnot(scrollY, originalYPosition,
|
||||
testName + " failed to scroll window vertically");
|
||||
|
||||
gBrowser.loadURI(simple);
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Now go back in history to the cached page.
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
|
||||
// First page will now be reloaded. Check scroll position
|
||||
// and form contents are restored
|
||||
is(gBrowser.contentWindow.scrollX, scrollX, testName +
|
||||
" horizontal axis scroll position not correctly restored");
|
||||
is(gBrowser.contentWindow.scrollY, scrollY, testName +
|
||||
" vertical axis scroll position not correctly restored");
|
||||
var formValue = gBrowser.contentDocument.getElementById("inp").value;
|
||||
is(formValue, text, testName + " form value not correctly restored");
|
||||
|
||||
// nextTest has to be called from here, as no events are fired in this
|
||||
// step
|
||||
setTimeout(nextTest, 0);
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
13
docshell/test/chrome/bug293235.html
Normal file
13
docshell/test/chrome/bug293235.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Bug 293235 page1</title>
|
||||
<style type="text/css">
|
||||
a:visited, a.forcevisited.forcevisited { color: rgb(128, 0, 128); }
|
||||
a:link, a.forcelink.forcelink { color: rgb(0, 0, 128); }
|
||||
a:focus { color: rgb(128, 0, 0); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<a id="link1" href="bug293235_p2.html">This is a test link.</a>
|
||||
</body>
|
||||
</html>
|
||||
8
docshell/test/chrome/bug293235_p2.html
Normal file
8
docshell/test/chrome/bug293235_p2.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Bug 293235 page2</title>
|
||||
</head>
|
||||
<body>
|
||||
Nothing to see here, move along.
|
||||
</body>
|
||||
</html>
|
||||
162
docshell/test/chrome/bug293235_window.xul
Normal file
162
docshell/test/chrome/bug293235_window.xul
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="293235Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 293235 test">
|
||||
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/specialpowersAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SpecialPowersObserverAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/ChromePowers.js"/>
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var Ci = Components.interfaces;
|
||||
var Cc = Components.classes;
|
||||
Components.utils.import("resource://gre/modules/NetUtil.jsm");
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
// Return the Element object for the specified element id
|
||||
function $(id) { return TestWindow.getDocument().getElementById(id); }
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 293235:
|
||||
// A visited link should have the :visited style applied
|
||||
// to it when displayed on a page which was fetched from
|
||||
// the bfcache.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Register our observer to know when the link lookup is complete.
|
||||
let testURI = NetUtil.newURI(getHttpUrl("bug293235_p2.html"));
|
||||
let os = Cc["@mozilla.org/observer-service;1"].
|
||||
getService(Ci.nsIObserverService);
|
||||
const URI_VISITED_RESOLUTION_TOPIC = "visited-status-resolution";
|
||||
let observer = {
|
||||
notified: false,
|
||||
observe: function(aSubject, aTopic, aData)
|
||||
{
|
||||
if (!testURI.equals(aSubject.QueryInterface(Ci.nsIURI))) {
|
||||
return;
|
||||
}
|
||||
is(aTopic, URI_VISITED_RESOLUTION_TOPIC, "Unexpected topic");
|
||||
this.notified = true;
|
||||
|
||||
// Cleanup after ourselves...
|
||||
os.removeObserver(this, URI_VISITED_RESOLUTION_TOPIC);
|
||||
},
|
||||
};
|
||||
os.addObserver(observer, URI_VISITED_RESOLUTION_TOPIC, false);
|
||||
function notified() {
|
||||
return observer.notified;
|
||||
}
|
||||
|
||||
// Load a test page containing a link that should be initially
|
||||
// blue, per the :link style.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("bug293235.html"),
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Before we go any further, make sure our link has been notified.
|
||||
waitForTrue(notified, nextTest);
|
||||
yield undefined;
|
||||
|
||||
// Now that we've been notified, we can check our link color.
|
||||
// Since we can't use getComputedStyle() for this because
|
||||
// getComputedStyle lies about styles that result from :visited,
|
||||
// we have to take snapshots.
|
||||
// First, take two reference snapshots.
|
||||
var link1 = $("link1");
|
||||
link1.className = "forcelink";
|
||||
var refLink = snapshotWindow(TestWindow.getWindow());
|
||||
link1.className = "forcevisited";
|
||||
var refVisited = snapshotWindow(TestWindow.getWindow());
|
||||
link1.className = "";
|
||||
function snapshotsEqual(snap1, snap2) {
|
||||
return compareSnapshots(snap1, snap2, true)[0];
|
||||
}
|
||||
ok(!snapshotsEqual(refLink, refVisited), "references should not match");
|
||||
ok(snapshotsEqual(refLink, snapshotWindow(TestWindow.getWindow())),
|
||||
"link should initially be blue");
|
||||
|
||||
let observedVisit = false, observedPageShow = false;
|
||||
function maybeRunNextTest() {
|
||||
ok(true, "maybe run next test? visited: " + observedVisit + " pageShow: " + observedPageShow);
|
||||
if (observedVisit && observedPageShow)
|
||||
nextTest();
|
||||
}
|
||||
|
||||
// Because adding visits is async, we will not be notified imemdiately.
|
||||
let visitObserver = {
|
||||
observe: function(aSubject, aTopic, aData)
|
||||
{
|
||||
if (!testURI.equals(aSubject.QueryInterface(Ci.nsIURI))) {
|
||||
return;
|
||||
}
|
||||
os.removeObserver(this, aTopic);
|
||||
observedVisit = true;
|
||||
maybeRunNextTest();
|
||||
},
|
||||
};
|
||||
os.addObserver(visitObserver, "uri-visit-saved", false);
|
||||
// Load the page that the link on the previous page points to.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("bug293235_p2.html"),
|
||||
onNavComplete: function() {
|
||||
observedPageShow = true;
|
||||
maybeRunNextTest();
|
||||
}
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// And the nodes get notified after the "link-visited" topic, so
|
||||
// we need to execute soon...
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
yield undefined;
|
||||
|
||||
// Go back, verify the original page was loaded from the bfcache,
|
||||
// and verify that the link is now purple, per the
|
||||
// :visited style.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ { type: "pageshow",
|
||||
persisted: true,
|
||||
title: "Bug 293235 page1" } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Now we can test the link color.
|
||||
ok(snapshotsEqual(refVisited, snapshotWindow(TestWindow.getWindow())),
|
||||
"visited link should be purple");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
43
docshell/test/chrome/bug294258_testcase.html
Normal file
43
docshell/test/chrome/bug294258_testcase.html
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Bug 294258 Testcase</title>
|
||||
<meta http-equiv="Content-Type" content="application/xhtml+xml"/>
|
||||
<style type="text/css">
|
||||
* {
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<p>
|
||||
input type="text": <input id="text" type="text"/>
|
||||
</p>
|
||||
<p>
|
||||
input type="checkbox": <input id="checkbox" type="checkbox"/>
|
||||
</p>
|
||||
<p>
|
||||
input type="file": <input id="file" type="file"/>
|
||||
</p>
|
||||
<p>
|
||||
input type="radio":
|
||||
<input type="radio" id="radio1" name="radio" value="radio1"/>
|
||||
<input id="radio2" type="radio" name="radio" value="radio2"/>
|
||||
</p>
|
||||
<p>
|
||||
textarea: <textarea id="textarea" rows="4" cols="80"></textarea>
|
||||
</p>
|
||||
<p>
|
||||
select -> option: <select id="select">
|
||||
<option>1</option>
|
||||
<option>2</option>
|
||||
<option>3</option>
|
||||
<option>4</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
76
docshell/test/chrome/bug294258_window.xul
Normal file
76
docshell/test/chrome/bug294258_window.xul
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="294258Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 294258 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
function $(id) { return TestWindow.getDocument().getElementById(id); }
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 294258:
|
||||
// Form values should be preserved on reload.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Load a page containing a form.
|
||||
doPageNavigation( {
|
||||
uri: getHttpUrl("bug294258_testcase.html"),
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
// Change the data for each of the form fields, and reload.
|
||||
$("text").value = "text value";
|
||||
$("checkbox").checked = true;
|
||||
var file = Components.classes["@mozilla.org/file/directory_service;1"]
|
||||
.getService(Components.interfaces.nsIProperties)
|
||||
.get("TmpD", Components.interfaces.nsILocalFile);
|
||||
file.append("294258_test.file");
|
||||
file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666);
|
||||
filePath = file.path;
|
||||
$("file").value = filePath;
|
||||
$("textarea").value = "textarea value";
|
||||
$("radio1").checked = true;
|
||||
$("select").selectedIndex = 2;
|
||||
doPageNavigation( {
|
||||
reload: true,
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
// Verify that none of the form data has changed.
|
||||
is($("text").value, "text value", "Text value changed");
|
||||
is($("checkbox").checked, true, "Checkbox value changed");
|
||||
is($("file").value, filePath, "File value changed");
|
||||
is($("textarea").value, "textarea value", "Textarea value changed");
|
||||
is($("radio1").checked, true, "Radio value changed");
|
||||
is($("select").selectedIndex, 2, "Select value changed");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
148
docshell/test/chrome/bug298622_window.xul
Normal file
148
docshell/test/chrome/bug298622_window.xul
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="298622Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 298622 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src= "docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
// Global variable that holds a reference to the find bar.
|
||||
var gFindBar;
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 298622:
|
||||
// Find should work correctly on a page loaded from the
|
||||
// bfcache.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Make sure bfcache is on.
|
||||
enableBFCache(true);
|
||||
|
||||
// Load a test page which contains some text to be found.
|
||||
doPageNavigation({
|
||||
uri: "data:text/html,<html><head><title>test1</title></head>" +
|
||||
"<body>find this!</body></html>",
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Load a second, dummy page, verifying that the original
|
||||
// page gets stored in the bfcache.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("generic.html"),
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "test1",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "generic page" } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Make sure we unsuppress painting before continuing
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
yield undefined;
|
||||
|
||||
// Search for some text that's on the second page (but not on
|
||||
// the first page), and verify that it can be found.
|
||||
gFindBar = document.getElementById("FindToolbar");
|
||||
document.getElementById("cmd_find").doCommand();
|
||||
ok(!gFindBar.hidden, "failed to open findbar");
|
||||
gFindBar._findField.value = "A generic page";
|
||||
gFindBar._find();
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
yield undefined;
|
||||
|
||||
// Make sure Find bar's internal status is not 'notfound'
|
||||
isnot(gFindBar._findField.getAttribute("status"), "notfound",
|
||||
"Findfield status attribute should not have been 'notfound'" +
|
||||
" after Find");
|
||||
|
||||
// Make sure the key events above have time to be processed
|
||||
// before continuing
|
||||
waitForTrue(function() {
|
||||
return (
|
||||
TestWindow.getWindow().getSelection().toString().toLowerCase() ==
|
||||
"a generic page");
|
||||
}, nextTest, 20);
|
||||
yield undefined;
|
||||
|
||||
is(gFindBar._findField.inputField.value, "A generic page",
|
||||
"expected text not present in find input field");
|
||||
is(TestWindow.getWindow().getSelection().toString().toLowerCase(),
|
||||
"a generic page",
|
||||
"find failed on second page loaded");
|
||||
|
||||
// Go back to the original page and verify it's loaded from the
|
||||
// bfcache.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ { type: "pageshow",
|
||||
title: "test1",
|
||||
persisted: true } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Search for some text that's on the original page (but not
|
||||
// the dummy page loaded above), and verify that it can
|
||||
// be found.
|
||||
gFindBar = document.getElementById("FindToolbar");
|
||||
document.getElementById("cmd_find").doCommand();
|
||||
ok(!gFindBar.hidden, "failed to open findbar");
|
||||
gFindBar._findField.value = "find this";
|
||||
gFindBar._find();
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
yield undefined;
|
||||
|
||||
// Make sure Find bar's internal status is not 'notfound'
|
||||
isnot(gFindBar._findField.getAttribute("status"), "notfound",
|
||||
"Findfield status attribute should not have been 'notfound'" +
|
||||
" after Find");
|
||||
|
||||
// Make sure the key events above have time to be processed
|
||||
// before continuing
|
||||
waitForTrue(function() {
|
||||
return (
|
||||
TestWindow.getWindow().getSelection().toString().toLowerCase() ==
|
||||
"find this");
|
||||
}, nextTest, 20);
|
||||
yield undefined;
|
||||
|
||||
is(TestWindow.getWindow().getSelection().toString().toLowerCase(),
|
||||
"find this",
|
||||
"find failed on page loaded from bfcache");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<commandset>
|
||||
<command id="cmd_find"
|
||||
oncommand="document.getElementById('FindToolbar').onFindCommand();"/>
|
||||
</commandset>
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
<findbar id="FindToolbar" browserid="content"/>
|
||||
</window>
|
||||
9
docshell/test/chrome/bug301397_1.html
Normal file
9
docshell/test/chrome/bug301397_1.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>iframe parent</title>
|
||||
</head>
|
||||
<body>
|
||||
<iframe id="iframe" src="bug301397_2.html"/>
|
||||
</body>
|
||||
</html>
|
||||
10
docshell/test/chrome/bug301397_2.html
Normal file
10
docshell/test/chrome/bug301397_2.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>iframe content #1</title>
|
||||
</head>
|
||||
<body>
|
||||
iframe page 1<br/>
|
||||
<a id="link" href="bug301397_3.html">go to next page</a>
|
||||
</body>
|
||||
</html>
|
||||
10
docshell/test/chrome/bug301397_3.html
Normal file
10
docshell/test/chrome/bug301397_3.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>iframe content #2</title>
|
||||
</head>
|
||||
<body>
|
||||
iframe page 2<br/>
|
||||
You made it!
|
||||
</body>
|
||||
</html>
|
||||
9
docshell/test/chrome/bug301397_4.html
Normal file
9
docshell/test/chrome/bug301397_4.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>dummy page, no iframe</title>
|
||||
</head>
|
||||
<body>
|
||||
Just a boring test page, nothing special.
|
||||
</body>
|
||||
</html>
|
||||
250
docshell/test/chrome/bug301397_window.xul
Normal file
250
docshell/test/chrome/bug301397_window.xul
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="301397Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 301397 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Return the document element with the specified id.
|
||||
//
|
||||
function $(id) { return TestWindow.getDocument().getElementById(id); }
|
||||
|
||||
////
|
||||
// Verifies that the given string exists in the innerHTML of the iframe
|
||||
// content.
|
||||
//
|
||||
function verifyIframeInnerHtml(string) {
|
||||
var iframeInnerHtml = $("iframe").contentDocument.body.innerHTML;
|
||||
ok(iframeInnerHtml.indexOf(string) != -1,
|
||||
"iframe contains wrong document: " + iframeInnerHtml);
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 301397:
|
||||
// The correct page should be displayed in an iframe when
|
||||
// navigating back and forwards, when the parent page
|
||||
// occupies multiple spots in the session history.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Make sure the bfcache is enabled.
|
||||
enableBFCache(8);
|
||||
|
||||
// Load a dummy page.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("generic.html"),
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Load a page containing an iframe.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("bug301397_1.html"),
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "generic page",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "iframe content #1",
|
||||
persisted: false }, // false on initial load
|
||||
{ type: "pageshow",
|
||||
title: "iframe parent",
|
||||
persisted: false } ], // false on initial load
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Click a link in the iframe to cause the iframe to navigate
|
||||
// to a new page, and wait until the related pagehide/pageshow
|
||||
// events have occurred.
|
||||
waitForPageEvents({
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe content #1",
|
||||
persisted: false }, // false, subframe nav
|
||||
{ type: "pageshow",
|
||||
title: "iframe content #2",
|
||||
persisted: false } ], // false on initial load
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
var link = $("iframe").contentDocument.getElementById("link");
|
||||
var event = $("iframe").contentDocument.createEvent("MouseEvents");
|
||||
event.initMouseEvent("click", true, true, $("iframe").contentWindow,
|
||||
0, 0, 0, 0, 0,
|
||||
false, false, false, false,
|
||||
0, null);
|
||||
link.dispatchEvent(event);
|
||||
yield undefined;
|
||||
|
||||
// Load another dummy page. Verify that both the outgoing parent and
|
||||
// iframe pages are stored in the bfcache.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("bug301397_4.html"),
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe parent",
|
||||
persisted: true },
|
||||
{ type: "pagehide",
|
||||
title: "iframe content #2",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "dummy page, no iframe",
|
||||
persisted: false } ], // false on initial load
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Go back. The iframe should show the second page loaded in it.
|
||||
// Both the parent and the iframe pages should be loaded from
|
||||
// the bfcache.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "dummy page, no iframe",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
persisted: true,
|
||||
title: "iframe content #2" },
|
||||
{ type: "pageshow",
|
||||
persisted: true,
|
||||
title: "iframe parent" } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
verifyIframeInnerHtml("You made it");
|
||||
|
||||
// Go gack again. The iframe should show the first page loaded in it.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe content #2",
|
||||
persisted: false }, // false, subframe nav
|
||||
{ type: "pageshow",
|
||||
title: "iframe content #1",
|
||||
// false since this page was never stored
|
||||
// in the bfcache in the first place
|
||||
persisted: false } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
verifyIframeInnerHtml("go to next page");
|
||||
|
||||
// Go back to the generic page. Now go forward to the last page,
|
||||
// again verifying that the iframe shows the first and second
|
||||
// pages in order.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe parent",
|
||||
persisted: true },
|
||||
{ type: "pagehide",
|
||||
title: "iframe content #1",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "generic page",
|
||||
persisted: true } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
doPageNavigation({
|
||||
forward: true,
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ {type: "pageshow",
|
||||
title: "iframe content #1",
|
||||
persisted: true},
|
||||
{type: "pageshow",
|
||||
title: "iframe parent",
|
||||
persisted: true} ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
verifyIframeInnerHtml("go to next page");
|
||||
|
||||
doPageNavigation({
|
||||
forward: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe content #1",
|
||||
persisted: false }, // false, subframe nav
|
||||
{ type: "pageshow",
|
||||
title: "iframe content #2",
|
||||
// false because the page wasn't stored in
|
||||
// bfcache last time it was unloaded
|
||||
persisted: false } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
verifyIframeInnerHtml("You made it");
|
||||
|
||||
doPageNavigation({
|
||||
forward: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "iframe parent",
|
||||
persisted: true },
|
||||
{ type: "pagehide",
|
||||
title: "iframe content #2",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "dummy page, no iframe",
|
||||
persisted: true } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Go back once more, and again verify that the iframe shows the
|
||||
// second page loaded in it.
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "dummy page, no iframe",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
persisted: true,
|
||||
title: "iframe content #2" },
|
||||
{ type: "pageshow",
|
||||
persisted: true,
|
||||
title: "iframe parent" } ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
verifyIframeInnerHtml("You made it");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
25
docshell/test/chrome/bug303267.html
Normal file
25
docshell/test/chrome/bug303267.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>
|
||||
bug303267.html
|
||||
</title>
|
||||
</head>
|
||||
<body onpageshow="showpageshowcount()">
|
||||
<script>
|
||||
var pageshowcount = 0;
|
||||
function showpageshowcount()
|
||||
{
|
||||
pageshowcount++;
|
||||
var div1 = document.getElementById("div1");
|
||||
while (div1.firstChild)
|
||||
{
|
||||
div1.removeChild(div1.firstChild);
|
||||
}
|
||||
div1.appendChild(document.createTextNode(
|
||||
"pageshowcount: " + pageshowcount));
|
||||
}
|
||||
</script>
|
||||
<div id="div1">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
101
docshell/test/chrome/bug303267_window.xul
Normal file
101
docshell/test/chrome/bug303267_window.xul
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="303267Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 303267 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 303267: When a page is
|
||||
// displayed from the bfcache, the script globals should
|
||||
// remain intact from the page's initial load.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Load an initial test page which should be saved in the bfcache.
|
||||
var navData = {
|
||||
uri: getHttpUrl("bug303267.html"),
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ {type: "pageshow", title: "bug303267.html"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
doPageNavigation(navData);
|
||||
yield undefined;
|
||||
|
||||
// Save the HTML of the test page for later comparison.
|
||||
var originalHTML = getInnerHTMLById("div1");
|
||||
|
||||
// Load a second test page. The first test page's pagehide event should
|
||||
// have the .persisted property set to true, indicating that it was
|
||||
// stored in the bfcache.
|
||||
navData = {
|
||||
uri: "data:text/html,<html><head><title>page2</title></head>" +
|
||||
"<body>bug303267, page2</body></html>",
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "bug303267.html",
|
||||
persisted: true},
|
||||
{type: "pageshow",
|
||||
title: "page2"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
doPageNavigation(navData);
|
||||
yield undefined;
|
||||
|
||||
// Go back. Verify that the pageshow event for the original test page
|
||||
// had a .persisted property of true, indicating that it came from the
|
||||
// bfcache.
|
||||
navData = {
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "page2"},
|
||||
{type: "pageshow",
|
||||
title: "bug303267.html",
|
||||
persisted: true} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
doPageNavigation(navData);
|
||||
yield undefined;
|
||||
|
||||
// After going back, if showpagecount() could access a global variable
|
||||
// and change the test div's innerHTML, then we pass. Otherwise, it
|
||||
// threw an exception and the following test will fail.
|
||||
var newHTML = getInnerHTMLById("div1");
|
||||
isnot(originalHTML,
|
||||
newHTML, "HTML not updated on pageshow; javascript broken?");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
////
|
||||
// Return the innerHTML of a particular element in the content document.
|
||||
//
|
||||
function getInnerHTMLById(id) {
|
||||
return TestWindow.getDocument().getElementById(id).innerHTML;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
199
docshell/test/chrome/bug311007_window.xul
Normal file
199
docshell/test/chrome/bug311007_window.xul
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="311007Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="startup();"
|
||||
title="bug 311007 test">
|
||||
|
||||
<script type="application/javascript" src="docshell_helpers.js"></script>
|
||||
<script type="application/javascript"><![CDATA[
|
||||
/*
|
||||
Regression test for bug 283733 and bug 307027.
|
||||
|
||||
Bug 283733
|
||||
"accessing a relative anchor in a secure page removes the
|
||||
locked icon and yellow background UI"
|
||||
|
||||
Bug 307027
|
||||
"Going back from secure page to error page does not clear yellow bar"
|
||||
|
||||
And enhancements:
|
||||
|
||||
Bug 478927
|
||||
onLocationChange should notify whether or not loading an error page.
|
||||
|
||||
*/
|
||||
|
||||
const kDNSErrorURI = "https://example/err.html";
|
||||
const kSecureURI =
|
||||
"https://example.com/tests/docshell/test/navigation/blank.html";
|
||||
|
||||
/*
|
||||
Step 1: load a network error page. <err.html> Not Secure
|
||||
Step 2: load a secure page. <blank.html> Secure
|
||||
Step 3: a secure page + hashchange. <blank.html#foo> Secure (bug 283733)
|
||||
Step 4: go back to the error page. <err.html> Not Secure (bug 307027)
|
||||
*/
|
||||
|
||||
var gListener = null;
|
||||
|
||||
function WebProgressListener() {
|
||||
this._callback = null;
|
||||
}
|
||||
|
||||
WebProgressListener.prototype = {
|
||||
QueryInterface: function(aIID) {
|
||||
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
|
||||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
|
||||
aIID.equals(Components.interfaces.nsISupports))
|
||||
return this;
|
||||
throw Components.results.NS_NOINTERFACE;
|
||||
},
|
||||
|
||||
onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
setTimeout(this._callback, 0, aWebProgress, aRequest, aLocation, aFlags);
|
||||
},
|
||||
|
||||
set callback(aVal) {
|
||||
this._callback = aVal;
|
||||
}
|
||||
};
|
||||
|
||||
function startup() {
|
||||
gListener = new WebProgressListener();
|
||||
|
||||
document.getElementById("content")
|
||||
.webProgress
|
||||
.addProgressListener(gListener,
|
||||
Components.interfaces.nsIWebProgress
|
||||
.NOTIFY_LOCATION);
|
||||
|
||||
setTimeout(step1A, 0);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Step 1: Load an error page, and confirm UA knows it's insecure.
|
||||
******************************************************************************/
|
||||
|
||||
function step1A() {
|
||||
gListener.callback = step1B;
|
||||
content.location = kDNSErrorURI;
|
||||
}
|
||||
|
||||
function step1B(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
is(aLocation.spec, kDNSErrorURI, "Error page's URI (1)");
|
||||
|
||||
ok(!(aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_SAME_DOCUMENT),
|
||||
"DocShell loaded a document (1)");
|
||||
|
||||
ok((aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_ERROR_PAGE),
|
||||
"This page is an error page.");
|
||||
|
||||
ok(!(aWebProgress.QueryInterface(Components.interfaces.nsIDocShell)
|
||||
.securityUI.state &
|
||||
Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE),
|
||||
"This is not a secure page (1)");
|
||||
|
||||
/* Go to step 2. */
|
||||
setTimeout(step2A, 0);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Step 2: Load a HTTPS page, and confirm it's secure.
|
||||
******************************************************************************/
|
||||
|
||||
function step2A() {
|
||||
gListener.callback = step2B;
|
||||
content.location = kSecureURI;
|
||||
}
|
||||
|
||||
function step2B(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
is(aLocation.spec, kSecureURI, "A URI on HTTPS (2)");
|
||||
|
||||
ok(!(aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_SAME_DOCUMENT),
|
||||
"DocShell loaded a document (2)");
|
||||
|
||||
ok(!(aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_ERROR_PAGE),
|
||||
"This page is not an error page.");
|
||||
|
||||
ok((aWebProgress.QueryInterface(Components.interfaces.nsIDocShell)
|
||||
.securityUI.state &
|
||||
Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE),
|
||||
"This is a secure page (2)");
|
||||
|
||||
/* Go to step 3. */
|
||||
setTimeout(step3A, 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Step 3: Trigger hashchange within a secure page, and confirm UA knows
|
||||
* it's secure. (Bug 283733)
|
||||
*****************************************************************************/
|
||||
|
||||
function step3A() {
|
||||
gListener.callback = step3B;
|
||||
content.location += "#foo";
|
||||
}
|
||||
|
||||
function step3B(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
is(aLocation.spec, kSecureURI + "#foo", "hashchange on HTTPS (3)");
|
||||
|
||||
ok((aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_SAME_DOCUMENT),
|
||||
"We are in the same document as before (3)");
|
||||
|
||||
ok(!(aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_ERROR_PAGE),
|
||||
"This page is not an error page.");
|
||||
|
||||
ok((aWebProgress.QueryInterface(Components.interfaces.nsIDocShell)
|
||||
.securityUI.state &
|
||||
Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE),
|
||||
"This is a secure page (3)");
|
||||
|
||||
/* Go to step 4. */
|
||||
setTimeout(step4A, 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Step 4: Go back from a secure page to an error page, and confirm UA knows
|
||||
* it's not secure. (Bug 307027)
|
||||
*****************************************************************************/
|
||||
|
||||
function step4A() {
|
||||
gListener.callback = step4B;
|
||||
content.history.go(-2);
|
||||
}
|
||||
|
||||
function step4B(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
is(aLocation.spec, kDNSErrorURI, "Go back to the error URI (4)");
|
||||
|
||||
ok(!(aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_SAME_DOCUMENT),
|
||||
"DocShell loaded a document (4)");
|
||||
|
||||
ok((aFlags & Components.interfaces.nsIWebProgressListener
|
||||
.LOCATION_CHANGE_ERROR_PAGE),
|
||||
"This page is an error page.");
|
||||
|
||||
ok(!(aWebProgress.QueryInterface(Components.interfaces.nsIDocShell)
|
||||
.securityUI.state &
|
||||
Components.interfaces.nsIWebProgressListener.STATE_IS_SECURE),
|
||||
"This is not a secure page (4)");
|
||||
|
||||
/* End. */
|
||||
aWebProgress.removeProgressListener(gListener);
|
||||
delete(gListener);
|
||||
finish();
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
133
docshell/test/chrome/bug321671_window.xul
Normal file
133
docshell/test/chrome/bug321671_window.xul
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="321671Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 321671 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
// Maximum number of entries in the bfcache for this session history.
|
||||
// This number is hardcoded in docshell code. In the test, we'll
|
||||
// navigate through enough pages so that we hit one that's been
|
||||
// evicted from the bfcache because it's farther from the current
|
||||
// page than this number.
|
||||
const MAX_BFCACHE_PAGES = 3;
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 321671: Scroll position
|
||||
// should be retained when moving backwards and forwards through pages
|
||||
// when bfcache is enabled.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Variable to hold the scroll positions of the test pages.
|
||||
var scrollPositions = [];
|
||||
|
||||
// Make sure bfcache is on.
|
||||
enableBFCache(true);
|
||||
|
||||
// Load enough test pages that so the first one is evicted from the
|
||||
// bfcache, scroll down on each page, and save the
|
||||
// current scroll position before continuing. Verify that each
|
||||
// page we're navigating away from is initially put into the bfcache.
|
||||
for (var i = 0; i <= MAX_BFCACHE_PAGES + 1; i++) {
|
||||
doPageNavigation( {
|
||||
uri: "data:text/html,<html><head><title>bug321671 page" + (i + 1) +
|
||||
"</title></head>" +
|
||||
"<body><table border='1' width='300' height='1000'>" +
|
||||
"<tbody><tr><td>" +
|
||||
" page " + (i + 1) + ": foobar foobar foobar foobar " +
|
||||
"</td></tr></tbody></table> " +
|
||||
"</body></html>",
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
persisted: true,
|
||||
title: i == 0 ?
|
||||
undefined : "bug321671 page" + i },
|
||||
{ type: "pageshow",
|
||||
title: "bug321671 page" + (i + 1) } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
is(TestWindow.getWindow().scrollY, 0,
|
||||
"Page initially has non-zero scrollY position");
|
||||
TestWindow.getWindow().scrollByLines(10 + (2*i));
|
||||
ok(TestWindow.getWindow().scrollY > 0,
|
||||
"Page has zero scrollY position after scrolling");
|
||||
scrollPositions[i] = TestWindow.getWindow().scrollY;
|
||||
}
|
||||
|
||||
// Go back to the first page, one page at a time. For each 'back'
|
||||
// action, verify that its vertical scroll position is restored
|
||||
// correctly. Verify that the last page in the sequence
|
||||
// does not come from the bfcache. Again verify that all pages
|
||||
// that we navigate away from are initially
|
||||
// stored in the bfcache.
|
||||
for (i = MAX_BFCACHE_PAGES + 1; i > 0; i--) {
|
||||
doPageNavigation( {
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "bug321671 page" + (i+1),
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "bug321671 page" + i,
|
||||
persisted: i > 1 } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
is(TestWindow.getWindow().scrollY, scrollPositions[i-1],
|
||||
"Scroll position not restored while going back!");
|
||||
}
|
||||
|
||||
// Traverse history forward now, and verify scroll position is still
|
||||
// restored. Similar to the backward traversal, verify that all
|
||||
// but the last page in the sequence comes from the bfcache. Also
|
||||
// verify that all of the pages get stored in the bfcache when we
|
||||
// navigate away from them.
|
||||
for (i = 1; i <= MAX_BFCACHE_PAGES + 1; i++) {
|
||||
doPageNavigation( {
|
||||
forward: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
persisted: true,
|
||||
title: "bug321671 page" + i },
|
||||
{ type: "pageshow",
|
||||
persisted: i < MAX_BFCACHE_PAGES + 1,
|
||||
title: "bug321671 page" + (i + 1) } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
is(TestWindow.getWindow().scrollY, scrollPositions[i],
|
||||
"Scroll position not restored while going forward!");
|
||||
}
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
15
docshell/test/chrome/bug360511_case1.html
Normal file
15
docshell/test/chrome/bug360511_case1.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="height: 100%">
|
||||
<head>
|
||||
<title>
|
||||
bug360511 case 1
|
||||
</title>
|
||||
</head>
|
||||
<body style="height: 100%">
|
||||
<a id="link1" href="#bottom">jump to bottom</a>
|
||||
<div id="div1" style="height: 200%; border: thin solid black;">
|
||||
hello large div
|
||||
</div>
|
||||
<a name="bottom">here's the bottom of the page</a>
|
||||
</body>
|
||||
</html>
|
||||
15
docshell/test/chrome/bug360511_case2.html
Normal file
15
docshell/test/chrome/bug360511_case2.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html style="height: 100%">
|
||||
<head>
|
||||
<title>
|
||||
bug360511 case 2
|
||||
</title>
|
||||
</head>
|
||||
<body style="height: 100%">
|
||||
<a id="link1" href="#bottom">jump to bottom</a>
|
||||
<div id="div1" style="height: 200%; border: thin solid black;">
|
||||
hello large div
|
||||
</div>
|
||||
<a name="bottom">here's the bottom of the page</a>
|
||||
</body>
|
||||
</html>
|
||||
134
docshell/test/chrome/bug360511_window.xul
Normal file
134
docshell/test/chrome/bug360511_window.xul
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="360511Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 360511 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 360511:
|
||||
// Fragment uri's in session history should be restored correctly
|
||||
// upon back navigation.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Case 1: load a page containing a fragment link; the page should be
|
||||
// stored in the bfcache.
|
||||
// Case 2: load a page containing a fragment link; the page should NOT
|
||||
// be stored in the bfcache.
|
||||
for (var i = 1; i < 3; i++)
|
||||
{
|
||||
var url = "bug360511_case" + i + ".html";
|
||||
doPageNavigation( {
|
||||
uri: getHttpUrl(url),
|
||||
onNavComplete: nextTest,
|
||||
preventBFCache: i != 1
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
// Store the original url for later comparison.
|
||||
var originalUrl = TestWindow.getBrowser().currentURI.spec;
|
||||
var originalDocLocation = TestWindow.getDocument().location.href;
|
||||
|
||||
// Verify we're at the top of the page.
|
||||
is(TestWindow.getWindow().scrollY, 0,
|
||||
"Page initially has a non-zero scrollY property");
|
||||
|
||||
// Click the on the fragment link in the browser, and use setTimeout
|
||||
// to give the event a chance to be processed.
|
||||
var event = TestWindow.getDocument().createEvent('MouseEvent');
|
||||
event.initMouseEvent("click", true, true, TestWindow.getWindow(), 0,
|
||||
0, 0, 0, 0,
|
||||
false, false, false, false, 0, null);
|
||||
TestWindow.getDocument().getElementById("link1").dispatchEvent(event);
|
||||
setTimeout(nextTest, 0);
|
||||
yield undefined;
|
||||
|
||||
// Store the fragment url for later comparison.
|
||||
var fragmentUrl = TestWindow.getBrowser().currentURI.spec;
|
||||
var fragDocLocation = TestWindow.getDocument().location.href;
|
||||
|
||||
// Verify we're no longer at the top of the page.
|
||||
ok(TestWindow.getWindow().scrollY > 0,
|
||||
"We're at the top of the page but we should be at the bottom");
|
||||
|
||||
// Now navigate to any other page
|
||||
var expectedPageTitle = "bug360511 case " + i;
|
||||
doPageNavigation( {
|
||||
uri: getHttpUrl("generic.html"),
|
||||
eventsToListenFor: ["pagehide", "pageshow"],
|
||||
expectedEvents: [ {type: "pagehide", title: expectedPageTitle,
|
||||
persisted: i == 1},
|
||||
{type: "pageshow"} ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
// Go back
|
||||
doPageNavigation( {
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ {type: "pageshow", title: expectedPageTitle,
|
||||
persisted: i == 1} ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
|
||||
// Verify the current url is the fragment url
|
||||
is(TestWindow.getBrowser().currentURI.spec, fragmentUrl,
|
||||
"current url is not the previous fragment url");
|
||||
is(TestWindow.getDocument().location.href, fragDocLocation,
|
||||
"document.location is not the previous fragment url");
|
||||
|
||||
// Go back again. Since we're just going from a fragment url to
|
||||
// parent url, no pageshow event is fired, so don't wait for any
|
||||
// events. Rather, just wait for the page's scrollY property to
|
||||
// change.
|
||||
var originalScrollY = TestWindow.getWindow().scrollY;
|
||||
doPageNavigation( {
|
||||
back: true,
|
||||
eventsToListenFor: []
|
||||
} );
|
||||
waitForTrue(
|
||||
function() {
|
||||
return (TestWindow.getWindow().scrollY != originalScrollY);
|
||||
},
|
||||
function() {
|
||||
setTimeout(nextTest, 0);
|
||||
}, 20);
|
||||
yield undefined;
|
||||
|
||||
// Verify the current url is the original url without fragment
|
||||
is(TestWindow.getBrowser().currentURI.spec, originalUrl,
|
||||
"current url is not the original url");
|
||||
is(TestWindow.getDocument().location.href, originalDocLocation,
|
||||
"document.location is not the original url");
|
||||
}
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
277
docshell/test/chrome/bug364461_window.xul
Normal file
277
docshell/test/chrome/bug364461_window.xul
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="364461Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="onLoad();"
|
||||
title="364461 test">
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
const LISTEN_EVENTS = ["load", "unload", "pageshow", "pagehide"];
|
||||
|
||||
var gBrowser;
|
||||
var gTestsIterator;
|
||||
var gExpected = [];
|
||||
|
||||
function ok(condition, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
|
||||
}
|
||||
function is(a, b, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
|
||||
}
|
||||
function finish() {
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.removeEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
window.close();
|
||||
window.opener.wrappedJSObject.SimpleTest.finish();
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
gBrowser = document.getElementById("content");
|
||||
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.addEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
gTestsIterator = testsIterator();
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function eventListener(event) {
|
||||
ok(gExpected.length >= 1, "Unexpected event " + event.type);
|
||||
if (gExpected.length == 0) {
|
||||
// in case of unexpected event, try to continue anyway
|
||||
setTimeout(nextTest, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
var exp = gExpected.shift();
|
||||
is(event.type, exp.type, "Invalid event received");
|
||||
if (typeof(exp.persisted) != "undefined") {
|
||||
is(event.persisted, exp.persisted, "Invalid persisted state");
|
||||
}
|
||||
if (exp.title) {
|
||||
ok(event.originalTarget instanceof HTMLDocument,
|
||||
"originalTarget not a HTMLDocument");
|
||||
is(event.originalTarget.title, exp.title, "titles don't match");
|
||||
}
|
||||
|
||||
if (gExpected.length == 0) {
|
||||
setTimeout(nextTest, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
gTestsIterator.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function testsIterator() {
|
||||
|
||||
// Tests 1 + 2:
|
||||
// Back/forward between two simple documents. Bfcache will be used.
|
||||
|
||||
var test1Doc = "data:text/html,<html><head><title>test1</title></head>" +
|
||||
"<body>test1</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", persisted: true},
|
||||
|
||||
{type: "load", title: "test1"},
|
||||
{type: "pageshow", title: "test1", persisted: false}];
|
||||
gBrowser.loadURI(test1Doc);
|
||||
yield undefined;
|
||||
|
||||
var test2Doc = "data:text/html,<html><head><title>test2</title></head>" +
|
||||
"<body>test2</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test1", persisted: true},
|
||||
{type: "load", title: "test2"},
|
||||
{type: "pageshow", title: "test2", persisted: false}];
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test2", persisted: true},
|
||||
{type: "pageshow", title: "test1", persisted: true}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test1", persisted: true},
|
||||
{type: "pageshow", title: "test2", persisted: true}];
|
||||
gBrowser.goForward();
|
||||
yield undefined;
|
||||
|
||||
// Tests 3 + 4:
|
||||
// Back/forward between a two-level deep iframed document and a simple
|
||||
// document. Bfcache will be used and events should be dispatched to
|
||||
// all frames.
|
||||
|
||||
var test3Doc = "data:text/html,<html><head><title>test3</title>" +
|
||||
"</head><body>" +
|
||||
"<iframe src='data:text/html," +
|
||||
"<html><head><title>test3-nested1</title></head>" +
|
||||
"<body>test3-nested1" +
|
||||
"<iframe src=\"data:text/html," +
|
||||
"<html><head><title>test3-nested2</title></head>" +
|
||||
"<body>test3-nested2</body></html>\">" +
|
||||
"</iframe>" +
|
||||
"</body></html>'>" +
|
||||
"</iframe>" +
|
||||
"</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test2", persisted: true},
|
||||
{type: "load", title: "test3-nested2"},
|
||||
{type: "pageshow", title: "test3-nested2", persisted: false},
|
||||
{type: "load", title: "test3-nested1"},
|
||||
{type: "pageshow", title: "test3-nested1", persisted: false},
|
||||
{type: "load", title: "test3"},
|
||||
{type: "pageshow", title: "test3", persisted: false}];
|
||||
gBrowser.loadURI(test3Doc);
|
||||
yield undefined;
|
||||
|
||||
var test4Doc = "data:text/html,<html><head><title>test4</title></head>" +
|
||||
"<body>test4</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test3", persisted: true},
|
||||
{type: "pagehide", title: "test3-nested1", persisted: true},
|
||||
{type: "pagehide", title: "test3-nested2", persisted: true},
|
||||
{type: "load", title: "test4"},
|
||||
{type: "pageshow", title: "test4", persisted: false}];
|
||||
gBrowser.loadURI(test4Doc);
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test4", persisted: true},
|
||||
{type: "pageshow", title: "test3-nested2", persisted: true},
|
||||
{type: "pageshow", title: "test3-nested1", persisted: true},
|
||||
{type: "pageshow", title: "test3", persisted: true}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
// This is where the two nested pagehide are not dispatched in bug 364461
|
||||
gExpected = [{type: "pagehide", title: "test3", persisted: true},
|
||||
{type: "pagehide", title: "test3-nested1", persisted: true},
|
||||
{type: "pagehide", title: "test3-nested2", persisted: true},
|
||||
{type: "pageshow", title: "test4", persisted: true}];
|
||||
gBrowser.goForward();
|
||||
yield undefined;
|
||||
|
||||
// Tests 5 + 6:
|
||||
// Back/forward between a document containing an unload handler and a
|
||||
// a simple document. Bfcache won't be used for the first one (see
|
||||
// http://developer.mozilla.org/en/docs/Using_Firefox_1.5_caching).
|
||||
|
||||
var test5Doc = "data:text/html,<html><head><title>test5</title></head>" +
|
||||
"<body onunload='while(false) { /* nop */ }'>" +
|
||||
"test5</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test4", persisted: true},
|
||||
{type: "load", title: "test5"},
|
||||
{type: "pageshow", title: "test5", persisted: false}];
|
||||
gBrowser.loadURI(test5Doc);
|
||||
yield undefined;
|
||||
|
||||
var test6Doc = "data:text/html,<html><head><title>test6</title></head>" +
|
||||
"<body>test6</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test5", persisted: false},
|
||||
{type: "unload", title: "test5"},
|
||||
{type: "load", title: "test6"},
|
||||
{type: "pageshow", title: "test6", persisted: false}];
|
||||
gBrowser.loadURI(test6Doc);
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test6", persisted: true},
|
||||
{type: "load", title: "test5"},
|
||||
{type: "pageshow", title: "test5", persisted: false}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test5", persisted: false},
|
||||
{type: "unload", title: "test5"},
|
||||
{type: "pageshow", title: "test6", persisted: true}];
|
||||
gBrowser.goForward();
|
||||
yield undefined;
|
||||
|
||||
// Test 7:
|
||||
// Testcase from https://bugzilla.mozilla.org/show_bug.cgi?id=384977#c10
|
||||
// Check that navigation is not blocked after a document is restored
|
||||
// from bfcache
|
||||
|
||||
var test7Doc = "data:text/html,<html><head><title>test7</title>" +
|
||||
"</head><body>" +
|
||||
"<iframe src='data:text/html," +
|
||||
"<html><head><title>test7-nested1</title></head>" +
|
||||
"<body>test7-nested1<br/>" +
|
||||
"<a href=\"data:text/plain,aaa\" target=\"_top\">" +
|
||||
"Click me, hit back, click me again</a>" +
|
||||
"</body></html>'>" +
|
||||
"</iframe>" +
|
||||
"</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test6", persisted: true},
|
||||
{type: "load", title: "test7-nested1"},
|
||||
{type: "pageshow", title: "test7-nested1", persisted: false},
|
||||
{type: "load", title: "test7"},
|
||||
{type: "pageshow", title: "test7", persisted: false}];
|
||||
gBrowser.loadURI(test7Doc);
|
||||
yield undefined;
|
||||
|
||||
// Simulates a click on the link inside the iframe
|
||||
function clickIframeLink() {
|
||||
var iframe = gBrowser.contentDocument.getElementsByTagName("iframe")[0];
|
||||
var w = iframe.contentWindow;
|
||||
var d = iframe.contentDocument;
|
||||
|
||||
var evt = d.createEvent("MouseEvents");
|
||||
evt.initMouseEvent("click", true, true, w,
|
||||
0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
d.getElementsByTagName("a")[0].dispatchEvent(evt);
|
||||
}
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test7", persisted: true},
|
||||
{type: "pagehide", title: "test7-nested1", persisted: true},
|
||||
{type: "load"},
|
||||
{type: "pageshow", persisted: false}];
|
||||
clickIframeLink();
|
||||
yield undefined;
|
||||
|
||||
is(gBrowser.currentURI.spec, "data:text/plain,aaa",
|
||||
"Navigation is blocked when clicking link");
|
||||
|
||||
gExpected = [{type: "pagehide", persisted: true},
|
||||
{type: "pageshow", title: "test7-nested1", persisted: true},
|
||||
{type: "pageshow", title: "test7", persisted: true}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test7", persisted: true},
|
||||
{type: "pagehide", title: "test7-nested1", persisted: true},
|
||||
{type: "load"},
|
||||
{type: "pageshow", persisted: false}];
|
||||
clickIframeLink();
|
||||
yield undefined;
|
||||
|
||||
is(gBrowser.currentURI.spec, "data:text/plain,aaa",
|
||||
"Navigation is blocked when clicking link");
|
||||
|
||||
// nextTest has to be called from here, as no events are fired in this
|
||||
// step
|
||||
setTimeout(nextTest, 0);
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
169
docshell/test/chrome/bug396519_window.xul
Normal file
169
docshell/test/chrome/bug396519_window.xul
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="396519Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="onLoad();"
|
||||
title="396519 test">
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
const LISTEN_EVENTS = ["pageshow"];
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
|
||||
var gBrowser;
|
||||
var gTestCount = 0;
|
||||
var gTestsIterator;
|
||||
var gExpected = [];
|
||||
|
||||
function ok(condition, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
|
||||
}
|
||||
function is(a, b, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
|
||||
}
|
||||
function finish() {
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.removeEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
window.close();
|
||||
window.opener.wrappedJSObject.SimpleTest.finish();
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
gBrowser = document.getElementById("content");
|
||||
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.addEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
gTestsIterator = testsIterator();
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function eventListener(event) {
|
||||
// we're in pageshow, but we need to let that finish
|
||||
// content eviction and saving happen during pageshow, so when doTest
|
||||
// runs, we should should be in a testable state
|
||||
setTimeout(doTest, 0);
|
||||
}
|
||||
|
||||
function doTest() {
|
||||
var history = gBrowser.webNavigation.sessionHistory;
|
||||
if (history.count == gExpected.length) {
|
||||
for (var i=0; i<history.count; i++) {
|
||||
var shEntry = history.getEntryAtIndex(i,false).
|
||||
QueryInterface(Components.interfaces.nsISHEntry);
|
||||
is(!!shEntry.contentViewer, gExpected[i], "content viewer "+i+", test "+gTestCount);
|
||||
}
|
||||
|
||||
// Make sure none of the SHEntries share bfcache entries with one
|
||||
// another.
|
||||
for (var i = 0; i < history.count; i++) {
|
||||
for (var j = 0; j < history.count; j++) {
|
||||
if (j == i)
|
||||
continue;
|
||||
|
||||
let shentry1 = history.getEntryAtIndex(i, false)
|
||||
.QueryInterface(Ci.nsISHEntry);
|
||||
let shentry2 = history.getEntryAtIndex(j, false)
|
||||
.QueryInterface(Ci.nsISHEntry);
|
||||
ok(!shentry1.sharesDocumentWith(shentry2),
|
||||
'Test ' + gTestCount + ': shentry[' + i + "] shouldn't " +
|
||||
"share document with shentry[" + j + ']');
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
is(history.count, gExpected.length, "Wrong history length in test "+gTestCount);
|
||||
}
|
||||
|
||||
setTimeout(nextTest, 0);
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
gTestsIterator.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function testsIterator() {
|
||||
|
||||
// Tests 1 + 2:
|
||||
// Back/forward between two simple documents. Bfcache will be used.
|
||||
|
||||
var test1Doc = "data:text/html,<html><head><title>test1</title></head>" +
|
||||
"<body>test1</body></html>";
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false];
|
||||
gBrowser.loadURI(test1Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [true, false];
|
||||
var test2Doc = test1Doc.replace(/1/,"2");
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [true, true, false];
|
||||
gBrowser.loadURI(test1Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [true, true, true, false];
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, true, true, true, false];
|
||||
gBrowser.loadURI(test1Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, false, true, true, true, false];
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, false, true, true, false, true];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, false, true, true, true, false];
|
||||
gBrowser.goForward();
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, false, true, true, true, false];
|
||||
gBrowser.gotoIndex(1);
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, true, true, true, false, false];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
|
||||
gTestCount++;
|
||||
gExpected = [false, false, true, true, false, false];
|
||||
gBrowser.gotoIndex(5);
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
122
docshell/test/chrome/bug396649_window.xul
Normal file
122
docshell/test/chrome/bug396649_window.xul
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="396649Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 396649 test">
|
||||
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/specialpowersAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SpecialPowersObserverAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/ChromePowers.js"/>
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
// Maximum number of entries in the bfcache for this session history.
|
||||
// This number is hardcoded in docshell code. In the test, we'll
|
||||
// navigate through enough pages so that we hit one that's been
|
||||
// evicted from the bfcache because it's farther from the current
|
||||
// page than this number.
|
||||
const MAX_BFCACHE_PAGES = 3;
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 396649: Content
|
||||
// viewers should be evicted from bfcache when going back if more
|
||||
// than MAX_BFCACHE_PAGES from the current index.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Make sure bfcache is on.
|
||||
enableBFCache(true);
|
||||
|
||||
// Load enough pages so that the first loaded is eviced from
|
||||
// the bfcache, since it is greater the MAX_BFCACHE_PAGES from
|
||||
// the current position in the session history. Verify all
|
||||
// of the pages are initially stored in the bfcache when
|
||||
// they're unloaded.
|
||||
for (var i = 0; i <= MAX_BFCACHE_PAGES + 1; i++) {
|
||||
doPageNavigation( {
|
||||
uri: "data:text/html,<!DOCTYPE html><html>" +
|
||||
"<head><title>bug396649 page" + i +
|
||||
"</title></head>" +
|
||||
"<body>" +
|
||||
"test page " + i +
|
||||
"</body></html>",
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: i == 0 ?
|
||||
undefined : "bug396649 page" + (i-1),
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "bug396649 page" + i } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
// Go back to the first page, one page at a time. The first
|
||||
// MAX_BFCACHE_PAGES pages loaded via back should come from the bfcache,
|
||||
// the last should not, since it should have been evicted during the
|
||||
// previous navigation sequence. Verify all pages are initially stored
|
||||
// in the bfcache when they're unloaded.
|
||||
for (i = MAX_BFCACHE_PAGES + 1; i > 0; i--) {
|
||||
doPageNavigation( {
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "bug396649 page" + i,
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "bug396649 page" + (i - 1),
|
||||
persisted: i > 1 } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
// Traverse history forward now. Again, the first MAX_BFCACHE_PAGES
|
||||
// pages should come from the bfcache, the last should not,
|
||||
// since it should have been evicted during the backwards
|
||||
// traversal above. Verify all pages are initially stored
|
||||
// in the bfcache when they're unloaded.
|
||||
for (i = 1; i <= MAX_BFCACHE_PAGES + 1; i++) {
|
||||
doPageNavigation( {
|
||||
forward: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "bug396649 page" + (i-1),
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "bug396649 page" + i,
|
||||
persisted: i < MAX_BFCACHE_PAGES + 1 } ],
|
||||
onNavComplete: nextTest
|
||||
} );
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
106
docshell/test/chrome/bug449778_window.xul
Normal file
106
docshell/test/chrome/bug449778_window.xul
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<window title="Mozilla Bug 449778" onload="doTheTest()"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<hbox id="parent">
|
||||
</hbox>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var imports = [ "SimpleTest", "is", "isnot", "ok", "onerror" ];
|
||||
for (var name of imports) {
|
||||
window[name] = window.opener.wrappedJSObject[name];
|
||||
}
|
||||
|
||||
function $(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
function addBrowser(parent, id, width, height) {
|
||||
var b =
|
||||
document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "browser");
|
||||
b.setAttribute("type", "content");
|
||||
b.setAttribute("id", id);
|
||||
b.setAttribute("width", width);
|
||||
b.setAttribute("height", height);
|
||||
$(parent).appendChild(b);
|
||||
}
|
||||
addBrowser("parent", "f1", 300, 200);
|
||||
addBrowser("parent", "f2", 300, 200);
|
||||
|
||||
/** Test for Bug 449778 **/
|
||||
var doc1 = "data:text/html,<html><body>This is a test</body></html>";
|
||||
var doc2 = "data:text/html,<html><body>This is a second test</body></html>";
|
||||
var doc3 = "data:text/html,<html><body>This is a <script>var evt = document.createEvent('Events'); evt.initEvent('testEvt', true, true); document.dispatchEvent(evt);</script>third test</body></html>";
|
||||
|
||||
|
||||
$("f1").setAttribute("src", doc1);
|
||||
$("f2").setAttribute("src", doc2);
|
||||
|
||||
function doTheTest() {
|
||||
var strs = { "f1": "", "f2" : "" };
|
||||
function attachListener(node, type) {
|
||||
var listener = function(e) {
|
||||
if (strs[node.id]) strs[node.id] += " ";
|
||||
strs[node.id] += node.id + ".page" + type;
|
||||
}
|
||||
node.addEventListener("page" + type, listener, false);
|
||||
|
||||
listener.detach = function() {
|
||||
node.removeEventListener("page" + type, listener, false);
|
||||
}
|
||||
return listener;
|
||||
}
|
||||
|
||||
var l1 = attachListener($("f1"), "show");
|
||||
var l2 = attachListener($("f1"), "hide");
|
||||
var l3 = attachListener($("f2"), "show");
|
||||
var l4 = attachListener($("f2"), "hide");
|
||||
|
||||
$("f1").swapDocShells($("f2"));
|
||||
|
||||
is(strs["f1"], "f1.pagehide f1.pageshow",
|
||||
"Expected hide then show on first loaded page");
|
||||
is(strs["f2"], "f2.pagehide f2.pageshow",
|
||||
"Expected hide then show on second loaded page");
|
||||
|
||||
function listener2() {
|
||||
$("f2").removeEventListener("testEvt", listener2, false);
|
||||
|
||||
strs = { "f1": "", "f2" : "" };
|
||||
|
||||
$("f1").swapDocShells($("f2"));
|
||||
is(strs["f1"], "f1.pagehide",
|
||||
"Expected hide on already-loaded page, then nothing");
|
||||
is(strs["f2"], "f2.pageshow f2.pagehide f2.pageshow",
|
||||
"Expected show on still-loading page, then hide on it, then show " +
|
||||
"on already-loaded page");
|
||||
|
||||
strs = { "f1": "", "f2" : "" };
|
||||
|
||||
$("f1").addEventListener("pageshow", listener3, false);
|
||||
}
|
||||
|
||||
function listener3() {
|
||||
$("f1").removeEventListener("pageshow", listener3, false);
|
||||
|
||||
is(strs["f1"], "f1.pageshow",
|
||||
"Expected show as our page finishes loading");
|
||||
is(strs["f2"], "", "Expected no more events here.");
|
||||
|
||||
l1.detach();
|
||||
l2.detach();
|
||||
l3.detach();
|
||||
l4.detach();
|
||||
|
||||
window.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
$("f2").addEventListener("testEvt", listener2, false, true);
|
||||
$("f2").setAttribute("src", doc3);
|
||||
}
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
77
docshell/test/chrome/bug449780_window.xul
Normal file
77
docshell/test/chrome/bug449780_window.xul
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<window title="Mozilla Bug 449780" onload="doTheTest()"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<hbox id="parent">
|
||||
</hbox>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var imports = [ "SimpleTest", "is", "isnot", "ok", "onerror" ];
|
||||
for (var name of imports) {
|
||||
window[name] = window.opener.wrappedJSObject[name];
|
||||
}
|
||||
|
||||
function $(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
function addBrowser(parent, id, width, height) {
|
||||
var b =
|
||||
document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "browser");
|
||||
b.setAttribute("type", "content");
|
||||
b.setAttribute("id", id);
|
||||
b.setAttribute("width", width);
|
||||
b.setAttribute("height", height);
|
||||
$(parent).appendChild(b);
|
||||
}
|
||||
addBrowser("parent", "f1", 300, 200);
|
||||
addBrowser("parent", "f2", 300, 200);
|
||||
|
||||
/** Test for Bug 449780 **/
|
||||
var doc1 = "data:text/html,<html><body>This is a test</body></html>";
|
||||
var doc2 = "data:text/html,<html><body>This is a second test</body></html>";
|
||||
|
||||
function getDOM(id) {
|
||||
return $(id).contentDocument.documentElement.innerHTML;
|
||||
}
|
||||
|
||||
var tester = (function() {
|
||||
var origDOM = getDOM("f1");
|
||||
$("f1").contentDocument.body.textContent = "Modified";
|
||||
var modifiedDOM = getDOM("f1");
|
||||
isnot(origDOM, modifiedDOM, "DOM should be different");
|
||||
$("f1").contentWindow.location.href = doc2;
|
||||
yield undefined;
|
||||
|
||||
$("f1").goBack();
|
||||
yield undefined;
|
||||
|
||||
is(getDOM("f1"), modifiedDOM, "Should have been bfcached");
|
||||
$("f1").goForward();
|
||||
yield undefined;
|
||||
|
||||
// Ignore the notifications during swap
|
||||
$("f1").removeEventListener("pageshow", testDriver, false);
|
||||
$("f1").swapDocShells($("f2"));
|
||||
$("f2").addEventListener("pageshow", testDriver, false);
|
||||
$("f2").goBack();
|
||||
yield undefined;
|
||||
|
||||
is(getDOM("f2"), origDOM, "Should have not have been bfcached");
|
||||
window.close();
|
||||
SimpleTest.finish();
|
||||
yield undefined;
|
||||
})();
|
||||
|
||||
function testDriver() {
|
||||
setTimeout(function() { tester.next() }, 0);
|
||||
}
|
||||
|
||||
function doTheTest() {
|
||||
$("f1").addEventListener("pageshow", testDriver, false);
|
||||
$("f1").setAttribute("src", doc1);
|
||||
}
|
||||
]]></script>
|
||||
</window>
|
||||
7
docshell/test/chrome/bug454235-subframe.xul
Normal file
7
docshell/test/chrome/bug454235-subframe.xul
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<window title="Mozilla Bug 454235 SubFrame"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<deck flex="1">
|
||||
<browser id="topBrowser" src="about:mozilla"/>
|
||||
<browser id="burriedBrowser" src="about:mozilla"/>
|
||||
</deck>
|
||||
</window>
|
||||
88
docshell/test/chrome/bug582176_window.xul
Normal file
88
docshell/test/chrome/bug582176_window.xul
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="303267Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="nextTestAsync();"
|
||||
title="bug 582176 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTestAsync() {
|
||||
SimpleTest.executeSoon(tests.next.bind(tests));
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 582176:
|
||||
// Description goes here.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
var browser = document.getElementById('content');
|
||||
browser.addEventListener("pageshow", nextTestAsync, true);
|
||||
|
||||
enableBFCache(true);
|
||||
|
||||
var notificationCount = 0;
|
||||
var observer = {
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
is(aSubject, browser.contentWindow,
|
||||
"correct subject");
|
||||
is(aTopic, "content-document-global-created",
|
||||
"correct topic");
|
||||
is(aData, "http://mochi.test:8888",
|
||||
"correct data");
|
||||
notificationCount++;
|
||||
}
|
||||
};
|
||||
|
||||
os = Components.classes["@mozilla.org/observer-service;1"].
|
||||
getService(Components.interfaces.nsIObserverService);
|
||||
os.addObserver(observer, "content-document-global-created", false);
|
||||
|
||||
browser.loadURI("http://mochi.test:8888/tests/docshell/test/chrome/582176_dummy.html");
|
||||
yield undefined;
|
||||
is(browser.contentWindow.testVar, undefined,
|
||||
"variable unexpectedly there already");
|
||||
browser.contentWindow.wrappedJSObject.testVar = 1;
|
||||
is(notificationCount, 1, "Should notify on first navigation");
|
||||
|
||||
browser.loadURI("http://mochi.test:8888/tests/docshell/test/chrome/582176_dummy.html?2");
|
||||
yield undefined;
|
||||
is(browser.contentWindow.wrappedJSObject.testVar, undefined,
|
||||
"variable should no longer be there");
|
||||
is(notificationCount, 2, "Should notify on second navigation");
|
||||
|
||||
browser.goBack();
|
||||
yield undefined;
|
||||
is(browser.contentWindow.wrappedJSObject.testVar, 1,
|
||||
"variable should still be there");
|
||||
is(notificationCount, 2, "Should not notify on back navigation");
|
||||
|
||||
browser.loadURI("http://mochi.test:8888/tests/docshell/test/chrome/582176_xml.xml");
|
||||
yield undefined;
|
||||
is(browser.contentDocument.body.textContent, "xslt result",
|
||||
"Transform performed successfully");
|
||||
is(notificationCount, 3, "Should notify only once on XSLT navigation");
|
||||
|
||||
os.removeObserver(observer, "content-document-global-created")
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
6
docshell/test/chrome/bug608669.xul
Normal file
6
docshell/test/chrome/bug608669.xul
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<window title="Mozilla Bug 608669 - Blank page"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<description flex="1" value="This window is intentionally left blank"/>
|
||||
</window>
|
||||
129
docshell/test/chrome/bug662200_window.xul
Normal file
129
docshell/test/chrome/bug662200_window.xul
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="303267Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 662200 test">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="docshell_helpers.js">
|
||||
</script>
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 662200:
|
||||
// Description goes here.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Load the first test page
|
||||
var navData = {
|
||||
uri: getHttpUrl("662200a.html"),
|
||||
eventsToListenFor: ["pageshow"],
|
||||
expectedEvents: [ {type: "pageshow", title: "A"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
doPageNavigation(navData);
|
||||
yield undefined;
|
||||
|
||||
// Load the second test page.
|
||||
navData = {
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "A"},
|
||||
{type: "pageshow",
|
||||
title: "B"} ],
|
||||
onNavComplete: nextTest
|
||||
}
|
||||
waitForPageEvents(navData);
|
||||
var link = TestWindow.getDocument().getElementById("link");
|
||||
var event = TestWindow.getDocument().createEvent("MouseEvents");
|
||||
event.initMouseEvent("click", true, true, TestWindow.getWindow(),
|
||||
0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
link.dispatchEvent(event);
|
||||
yield undefined;
|
||||
|
||||
// Load the third test page.
|
||||
navData = {
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "B"},
|
||||
{type: "pageshow",
|
||||
title: "C"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
waitForPageEvents(navData);
|
||||
var link = TestWindow.getDocument().getElementById("link");
|
||||
var event = TestWindow.getDocument().createEvent("MouseEvents");
|
||||
event.initMouseEvent("click", true, true, TestWindow.getWindow(),
|
||||
0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
link.dispatchEvent(event);
|
||||
yield undefined;
|
||||
|
||||
// Go back.
|
||||
navData = {
|
||||
back: true,
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "C"},
|
||||
{type: "pageshow",
|
||||
title: "B"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
doPageNavigation(navData);
|
||||
yield undefined;
|
||||
|
||||
var Ci = Components.interfaces;
|
||||
var docshell = TestWindow.getWindow()
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShell);
|
||||
var shistory = docshell.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsISHistory)
|
||||
.QueryInterface(Ci.nsIWebNavigation);
|
||||
|
||||
// Reload.
|
||||
navData = {
|
||||
eventsToListenFor: ["pageshow", "pagehide"],
|
||||
expectedEvents: [ {type: "pagehide",
|
||||
title: "B"},
|
||||
{type: "pageshow",
|
||||
title: "B"} ],
|
||||
onNavComplete: nextTest
|
||||
};
|
||||
// Asking the docshell harness to reload for us will call reload on
|
||||
// nsDocShell which has different behavior than the reload on nsSHistory
|
||||
// so we call reload explicitly here
|
||||
waitForPageEvents(navData);
|
||||
shistory.reload(0);
|
||||
yield undefined;
|
||||
|
||||
// After this sequence of events, we should be able to go back and forward
|
||||
is(TestWindow.getBrowser().canGoBack, true, "Should be able to go back!");
|
||||
is(TestWindow.getBrowser().canGoForward, true, "Should be able to go forward!");
|
||||
is(shistory.requestedIndex, -1, "Requested index should be cleared!");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
176
docshell/test/chrome/bug690056_window.xul
Normal file
176
docshell/test/chrome/bug690056_window.xul
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="690056Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 6500056 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
var tests = testIterator();
|
||||
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
// Makes sure that we fire the visibilitychange events
|
||||
function testIterator() {
|
||||
// Enable bfcache
|
||||
enableBFCache(8);
|
||||
|
||||
// Load something for a start
|
||||
doPageNavigation({
|
||||
uri: 'data:text/html,<title>initial load</title>',
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Now load a new page
|
||||
doPageNavigation({
|
||||
uri: 'data:text/html,<title>new load</title>',
|
||||
eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "initial load",
|
||||
persisted: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "initial load",
|
||||
visibilityState: "hidden",
|
||||
hidden: true },
|
||||
// No visibilitychange events fired for initial pageload
|
||||
{ type: "pageshow",
|
||||
title: "new load",
|
||||
persisted: false }, // false on initial load
|
||||
],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Now go back
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "new load",
|
||||
persisted: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "new load",
|
||||
visibilityState: "hidden",
|
||||
hidden: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "initial load",
|
||||
visibilityState: "visible",
|
||||
hidden: false },
|
||||
{ type: "pageshow",
|
||||
title: "initial load",
|
||||
persisted: true },
|
||||
],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// And forward
|
||||
doPageNavigation({
|
||||
forward: true,
|
||||
eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "initial load",
|
||||
persisted: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "initial load",
|
||||
visibilityState: "hidden",
|
||||
hidden: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "new load",
|
||||
visibilityState: "visible",
|
||||
hidden: false },
|
||||
{ type: "pageshow",
|
||||
title: "new load",
|
||||
persisted: true },
|
||||
],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
function generateDetector(state, hidden, title, name) {
|
||||
var detector = function (event) {
|
||||
is(event.target.hidden, hidden,
|
||||
name + " hidden value does not match");
|
||||
is(event.target.visibilityState, state,
|
||||
name + " state value does not match");
|
||||
is(event.target.title, title,
|
||||
name + " title value does not match");
|
||||
document.getElementById("content")
|
||||
.removeEventListener("visibilitychange",
|
||||
detector,
|
||||
true);
|
||||
nextTest();
|
||||
}
|
||||
|
||||
document.getElementById("content")
|
||||
.addEventListener("visibilitychange", detector, true);
|
||||
}
|
||||
|
||||
generateDetector("hidden", true, "new load", "Going hidden");
|
||||
|
||||
// Now flip our docshell to not active
|
||||
document.getElementById("content").docShellIsActive = false;
|
||||
yield undefined;
|
||||
|
||||
// And navigate back; there should be no visibility state transitions
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "new load",
|
||||
persisted: true },
|
||||
{ type: "pageshow",
|
||||
title: "initial load",
|
||||
persisted: true },
|
||||
],
|
||||
unexpectedEvents: [ "visibilitychange" ],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
generateDetector("visible", false, "initial load", "Going visible");
|
||||
|
||||
// Now set the docshell active again
|
||||
document.getElementById("content").docShellIsActive = true;
|
||||
yield undefined;
|
||||
|
||||
// And forward
|
||||
doPageNavigation({
|
||||
forward: true,
|
||||
eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ],
|
||||
expectedEvents: [ { type: "pagehide",
|
||||
title: "initial load",
|
||||
persisted: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "initial load",
|
||||
visibilityState: "hidden",
|
||||
hidden: true },
|
||||
{ type: "visibilitychange",
|
||||
title: "new load",
|
||||
visibilityState: "visible",
|
||||
hidden: false },
|
||||
{ type: "pageshow",
|
||||
title: "new load",
|
||||
persisted: true },
|
||||
],
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
10
docshell/test/chrome/bug846906.html
Normal file
10
docshell/test/chrome/bug846906.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="div1" style="width:1024px; height:768px; border:none;">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
13
docshell/test/chrome/bug89419.sjs
Normal file
13
docshell/test/chrome/bug89419.sjs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
function handleRequest(request, response)
|
||||
{
|
||||
var redirectstate = "/docshell/test/chrome/bug89419.sjs";
|
||||
response.setStatusLine("1.1", 302, "Found");
|
||||
if (getState(redirectstate) == "") {
|
||||
response.setHeader("Location", "red.png", false);
|
||||
setState(redirectstate, "red");
|
||||
} else {
|
||||
response.setHeader("Location", "blue.png", false);
|
||||
setState(redirectstate, "");
|
||||
}
|
||||
response.setHeader("Cache-Control", "no-cache", false);
|
||||
}
|
||||
82
docshell/test/chrome/bug89419_window.xul
Normal file
82
docshell/test/chrome/bug89419_window.xul
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="89419Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug 89419 test">
|
||||
|
||||
<script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" />
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/specialpowersAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SpecialPowersObserverAPI.js"/>
|
||||
<script type="text/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/specialpowers.js"/>
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug 89419:
|
||||
// A visited link should have the :visited style applied
|
||||
// to it when displayed on a page which was fetched from
|
||||
// the bfcache.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Load a test page containing an image referring to the sjs that returns
|
||||
// a different redirect every time it's loaded.
|
||||
doPageNavigation({
|
||||
uri: getHttpUrl("89419.html"),
|
||||
onNavComplete: nextTest,
|
||||
preventBFCache: true
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
var first = snapshotWindow(TestWindow.getWindow());
|
||||
|
||||
doPageNavigation({
|
||||
uri: "about:blank",
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
var second = snapshotWindow(TestWindow.getWindow());
|
||||
function snapshotsEqual(snap1, snap2) {
|
||||
return compareSnapshots(snap1, snap2, true)[0];
|
||||
}
|
||||
ok(!snapshotsEqual(first, second), "about:blank should not be the same as the image web page");
|
||||
|
||||
doPageNavigation({
|
||||
back: true,
|
||||
onNavComplete: nextTest
|
||||
});
|
||||
yield undefined;
|
||||
|
||||
var third = snapshotWindow(TestWindow.getWindow());
|
||||
ok(!snapshotsEqual(third, second), "going back should not be the same as about:blank");
|
||||
ok(snapshotsEqual(first, third), "going back should be the same as the initial load");
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
11
docshell/test/chrome/bug909218.html
Normal file
11
docshell/test/chrome/bug909218.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="http://mochi.test:8888/tests/SimpleTest/test.css">
|
||||
<script src="bug909218.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<img src="http://mochi.test:8888/tests/docshell/test/chrome/red.png">
|
||||
<!-- an iframe so we can check these too get the correct flags -->
|
||||
<iframe src="generic.html"/>
|
||||
</body>
|
||||
</html>
|
||||
2
docshell/test/chrome/bug909218.js
Normal file
2
docshell/test/chrome/bug909218.js
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
// This file exists just to ensure that we load it with the correct flags.
|
||||
dump("bug909218.js loaded\n");
|
||||
118
docshell/test/chrome/bug92598_window.xul
Normal file
118
docshell/test/chrome/bug92598_window.xul
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="92598Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="onLoad();"
|
||||
title="92598 test">
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
const LISTEN_EVENTS = ["load", "unload", "pageshow", "pagehide"];
|
||||
|
||||
var gBrowser;
|
||||
var gTestsIterator;
|
||||
var gExpected = [];
|
||||
|
||||
function ok(condition, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
|
||||
}
|
||||
|
||||
function is(a, b, message) {
|
||||
window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
|
||||
}
|
||||
|
||||
function finish() {
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.removeEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
// Work around bug 467960
|
||||
var history = gBrowser.webNavigation.sessionHistory;
|
||||
history.PurgeHistory(history.count);
|
||||
|
||||
window.close();
|
||||
window.opener.wrappedJSObject.SimpleTest.finish();
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
gBrowser = document.getElementById("content");
|
||||
for (let eventType of LISTEN_EVENTS) {
|
||||
gBrowser.addEventListener(eventType, eventListener, true);
|
||||
}
|
||||
|
||||
gTestsIterator = testsIterator();
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function eventListener(event) {
|
||||
ok(gExpected.length >= 1, "Unexpected event " + event.type);
|
||||
if (gExpected.length == 0) {
|
||||
// in case of unexpected event, try to continue anyway
|
||||
setTimeout(nextTest, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
var exp = gExpected.shift();
|
||||
is(event.type, exp.type, "Invalid event received");
|
||||
if (typeof(exp.persisted) != "undefined") {
|
||||
is(event.persisted, exp.persisted, "Invalid persisted state");
|
||||
}
|
||||
if (exp.title) {
|
||||
ok(event.originalTarget instanceof HTMLDocument,
|
||||
"originalTarget not a HTMLDocument");
|
||||
is(event.originalTarget.title, exp.title, "titles don't match");
|
||||
}
|
||||
|
||||
if (gExpected.length == 0) {
|
||||
setTimeout(nextTest, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
gTestsIterator.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function testsIterator() {
|
||||
// Load a page with a no-cache header, followed by a simple page
|
||||
// On pagehide, first page should report it is not being persisted
|
||||
var test1DocURI = "http://mochi.test:8888/tests/docshell/test/chrome/92598_nostore.html";
|
||||
|
||||
gExpected = [{type: "pagehide", persisted: true},
|
||||
{type: "load", title: "test1"},
|
||||
{type: "pageshow", title: "test1", persisted: false}];
|
||||
gBrowser.loadURI(test1DocURI);
|
||||
yield undefined;
|
||||
|
||||
var test2Doc = "data:text/html,<html><head><title>test2</title></head>" +
|
||||
"<body>test2</body></html>";
|
||||
|
||||
gExpected = [{type: "pagehide", title: "test1", persisted: false},
|
||||
{type: "unload", title: "test1"},
|
||||
{type: "load", title: "test2"},
|
||||
{type: "pageshow", title: "test2", persisted: false}];
|
||||
gBrowser.loadURI(test2Doc);
|
||||
yield undefined;
|
||||
|
||||
// Now go back in history. First page should not have been cached.
|
||||
// Check persisted property to confirm
|
||||
gExpected = [{type: "pagehide", title: "test2", persisted: true},
|
||||
{type: "load", title: "test1"},
|
||||
{type: "pageshow", title: "test1", persisted: false}];
|
||||
gBrowser.goBack();
|
||||
yield undefined;
|
||||
}
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
88
docshell/test/chrome/chrome.ini
Normal file
88
docshell/test/chrome/chrome.ini
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
[DEFAULT]
|
||||
skip-if = os == 'android'
|
||||
support-files =
|
||||
662200a.html
|
||||
662200b.html
|
||||
662200c.html
|
||||
89419.html
|
||||
92598_nostore.html
|
||||
bug112564_window.xul
|
||||
bug113934_window.xul
|
||||
bug215405_window.xul
|
||||
bug293235.html
|
||||
bug293235_p2.html
|
||||
bug293235_window.xul
|
||||
bug294258_testcase.html
|
||||
bug294258_window.xul
|
||||
bug298622_window.xul
|
||||
bug301397_1.html
|
||||
bug301397_2.html
|
||||
bug301397_3.html
|
||||
bug301397_4.html
|
||||
bug301397_window.xul
|
||||
bug303267.html
|
||||
bug303267_window.xul
|
||||
bug311007_window.xul
|
||||
bug321671_window.xul
|
||||
bug360511_case1.html
|
||||
bug360511_case2.html
|
||||
bug360511_window.xul
|
||||
bug364461_window.xul
|
||||
bug396519_window.xul
|
||||
bug396649_window.xul
|
||||
bug449778_window.xul
|
||||
bug449780_window.xul
|
||||
bug454235-subframe.xul
|
||||
bug582176_window.xul
|
||||
bug608669.xul
|
||||
bug662200_window.xul
|
||||
bug690056_window.xul
|
||||
bug846906.html
|
||||
bug89419_window.xul
|
||||
bug909218.html
|
||||
bug909218.js
|
||||
bug92598_window.xul
|
||||
docshell_helpers.js
|
||||
file_viewsource_forbidden_in_iframe.html
|
||||
generic.html
|
||||
mozFrameType_window.xul
|
||||
|
||||
[test_allowContentRetargeting.html]
|
||||
[test_bug112564.xul]
|
||||
[test_bug113934.xul]
|
||||
[test_bug215405.xul]
|
||||
[test_bug293235.xul]
|
||||
[test_bug294258.xul]
|
||||
[test_bug298622.xul]
|
||||
[test_bug301397.xul]
|
||||
[test_bug303267.xul]
|
||||
[test_bug311007.xul]
|
||||
[test_bug321671.xul]
|
||||
[test_bug360511.xul]
|
||||
[test_bug364461.xul]
|
||||
[test_bug396519.xul]
|
||||
[test_bug396649.xul]
|
||||
[test_bug428288.html]
|
||||
[test_bug449778.xul]
|
||||
[test_bug449780.xul]
|
||||
[test_bug453650.xul]
|
||||
[test_bug454235.xul]
|
||||
# bug 684176
|
||||
skip-if = toolkit == "gtk2"
|
||||
[test_bug456980.xul]
|
||||
[test_bug565388.xul]
|
||||
skip-if = os == 'linux' || os == 'mac' # Bug 1026815
|
||||
[test_bug582176.xul]
|
||||
[test_bug608669.xul]
|
||||
[test_bug662200.xul]
|
||||
[test_bug690056.xul]
|
||||
[test_bug789773.xul]
|
||||
[test_bug846906.xul]
|
||||
[test_bug89419.xul]
|
||||
[test_bug909218.html]
|
||||
[test_bug92598.xul]
|
||||
[test_mozFrameType.xul]
|
||||
[test_principalInherit.xul]
|
||||
[test_private_hidden_window.html]
|
||||
[test_viewsource_forbidden_in_iframe.xul]
|
||||
skip-if = true # bug 1019315
|
||||
496
docshell/test/chrome/docshell_helpers.js
Normal file
496
docshell/test/chrome/docshell_helpers.js
Normal file
|
|
@ -0,0 +1,496 @@
|
|||
/**
|
||||
* Import common SimpleTest methods so that they're usable in this window.
|
||||
*/
|
||||
var imports = [ "SimpleTest", "is", "isnot", "ok", "onerror", "todo",
|
||||
"todo_is", "todo_isnot" ];
|
||||
for (var name of imports) {
|
||||
window[name] = window.opener.wrappedJSObject[name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Define global constants and variables.
|
||||
*/
|
||||
const NAV_NONE = 0;
|
||||
const NAV_BACK = 1;
|
||||
const NAV_FORWARD = 2;
|
||||
const NAV_URI = 3;
|
||||
const NAV_RELOAD = 4;
|
||||
|
||||
var gExpectedEvents; // an array of events which are expected to
|
||||
// be triggered by this navigation
|
||||
var gUnexpectedEvents; // an array of event names which are NOT expected
|
||||
// to be triggered by this navigation
|
||||
var gFinalEvent; // true if the last expected event has fired
|
||||
var gUrisNotInBFCache = []; // an array of uri's which shouldn't be stored
|
||||
// in the bfcache
|
||||
var gNavType = NAV_NONE; // defines the most recent navigation type
|
||||
// executed by doPageNavigation
|
||||
var gOrigMaxTotalViewers = // original value of max_total_viewers,
|
||||
undefined; // to be restored at end of test
|
||||
|
||||
var gExtractedPath = null; //used to cache file path for extracting files from a .jar file
|
||||
|
||||
/**
|
||||
* The doPageNavigation() function performs page navigations asynchronously,
|
||||
* listens for specified events, and compares actual events with a list of
|
||||
* expected events. When all expected events have occurred, an optional
|
||||
* callback can be notified. The parameter passed to this function is an
|
||||
* object with the following properties:
|
||||
*
|
||||
* uri: if !undefined, the browser will navigate to this uri
|
||||
*
|
||||
* back: if true, the browser will execute goBack()
|
||||
*
|
||||
* forward: if true, the browser will execute goForward()
|
||||
*
|
||||
* reload: if true, the browser will execute reload()
|
||||
*
|
||||
* eventsToListenFor: an array containing one or more of the following event
|
||||
* types to listen for: "pageshow", "pagehide", "onload",
|
||||
* "onunload". If this property is undefined, only a
|
||||
* single "pageshow" events will be listened for. If this
|
||||
* property is explicitly empty, [], then no events will
|
||||
* be listened for.
|
||||
*
|
||||
* expectedEvents: an array of one or more expectedEvent objects,
|
||||
* corresponding to the events which are expected to be
|
||||
* fired for this navigation. Each object has the
|
||||
* following properties:
|
||||
*
|
||||
* type: one of the event type strings
|
||||
* title (optional): the title of the window the
|
||||
* event belongs to
|
||||
* persisted (optional): the event's expected
|
||||
* .persisted attribute
|
||||
*
|
||||
* This function will verify that events with the
|
||||
* specified properties are fired in the same order as
|
||||
* specified in the array. If .title or .persisted
|
||||
* properties for an expectedEvent are undefined, those
|
||||
* properties will not be verified for that particular
|
||||
* event.
|
||||
*
|
||||
* This property is ignored if eventsToListenFor is
|
||||
* undefined or [].
|
||||
*
|
||||
* preventBFCache: if true, an unload handler will be added to the loaded
|
||||
* page to prevent it from being bfcached. This property
|
||||
* has no effect when eventsToListenFor is [].
|
||||
*
|
||||
* onNavComplete: a callback which is notified after all expected events
|
||||
* have occurred, or after a timeout has elapsed. This
|
||||
* callback is not notified if eventsToListenFor is [].
|
||||
*
|
||||
* There must be an expectedEvent object for each event of the types in
|
||||
* eventsToListenFor which is triggered by this navigation. For example, if
|
||||
* eventsToListenFor = [ "pagehide", "pageshow" ], then expectedEvents
|
||||
* must contain an object for each pagehide and pageshow event which occurs as
|
||||
* a result of this navigation.
|
||||
*/
|
||||
function doPageNavigation(params) {
|
||||
// Parse the parameters.
|
||||
let back = params.back ? params.back : false;
|
||||
let forward = params.forward ? params.forward : false;
|
||||
let reload = params.reload ? params.reload : false;
|
||||
let uri = params.uri ? params.uri : false;
|
||||
let eventsToListenFor = typeof(params.eventsToListenFor) != "undefined" ?
|
||||
params.eventsToListenFor : ["pageshow"];
|
||||
gExpectedEvents = typeof(params.eventsToListenFor) == "undefined" ||
|
||||
eventsToListenFor.length == 0 ? undefined : params.expectedEvents;
|
||||
gUnexpectedEvents = typeof(params.eventsToListenFor) == "undefined" ||
|
||||
eventsToListenFor.length == 0 ? undefined : params.unexpectedEvents;
|
||||
let preventBFCache = (typeof[params.preventBFCache] == "undefined") ?
|
||||
false : params.preventBFCache;
|
||||
let waitOnly = (typeof(params.waitForEventsOnly) == "boolean"
|
||||
&& params.waitForEventsOnly);
|
||||
|
||||
// Do some sanity checking on arguments.
|
||||
if (back && forward)
|
||||
throw "Can't specify both back and forward";
|
||||
if (back && uri)
|
||||
throw "Can't specify both back and a uri";
|
||||
if (forward && uri)
|
||||
throw "Can't specify both forward and a uri";
|
||||
if (reload && (forward || back || uri))
|
||||
throw "Can't specify reload and another navigation type";
|
||||
if (!back && !forward && !uri && !reload && !waitOnly)
|
||||
throw "Must specify back or foward or reload or uri";
|
||||
if (params.onNavComplete && eventsToListenFor.length == 0)
|
||||
throw "Can't use onNavComplete when eventsToListenFor == []";
|
||||
if (params.preventBFCache && eventsToListenFor.length == 0)
|
||||
throw "Can't use preventBFCache when eventsToListenFor == []";
|
||||
if (params.preventBFCache && waitOnly)
|
||||
throw "Can't prevent bfcaching when only waiting for events";
|
||||
if (waitOnly && typeof(params.onNavComplete) == "undefined")
|
||||
throw "Must specify onNavComplete when specifying waitForEventsOnly";
|
||||
if (waitOnly && (back || forward || reload || uri))
|
||||
throw "Can't specify a navigation type when using waitForEventsOnly";
|
||||
for (let anEventType of eventsToListenFor) {
|
||||
let eventFound = false;
|
||||
if ( (anEventType == "pageshow") && (!gExpectedEvents) )
|
||||
eventFound = true;
|
||||
if (gExpectedEvents) {
|
||||
for (let anExpectedEvent of gExpectedEvents) {
|
||||
if (anExpectedEvent.type == anEventType)
|
||||
eventFound = true;
|
||||
}
|
||||
}
|
||||
if (gUnexpectedEvents) {
|
||||
for (let anExpectedEventType of gUnexpectedEvents) {
|
||||
if (anExpectedEventType == anEventType)
|
||||
eventFound = true;
|
||||
}
|
||||
}
|
||||
if (!eventFound)
|
||||
throw "Event type " + anEventType + " is specified in " +
|
||||
"eventsToListenFor, but not in expectedEvents";
|
||||
}
|
||||
|
||||
// If the test explicitly sets .eventsToListenFor to [], don't wait for any
|
||||
// events.
|
||||
gFinalEvent = eventsToListenFor.length == 0 ? true : false;
|
||||
|
||||
// Add an event listener for each type of event in the .eventsToListenFor
|
||||
// property of the input parameters.
|
||||
for (let eventType of eventsToListenFor) {
|
||||
dump("TEST: registering a listener for " + eventType + " events\n");
|
||||
TestWindow.getBrowser().addEventListener(eventType, pageEventListener,
|
||||
true);
|
||||
}
|
||||
|
||||
// Perform the specified navigation.
|
||||
if (back) {
|
||||
gNavType = NAV_BACK;
|
||||
TestWindow.getBrowser().goBack();
|
||||
}
|
||||
else if (forward) {
|
||||
gNavType = NAV_FORWARD;
|
||||
TestWindow.getBrowser().goForward();
|
||||
}
|
||||
else if (uri) {
|
||||
gNavType = NAV_URI;
|
||||
TestWindow.getBrowser().loadURI(uri);
|
||||
}
|
||||
else if (reload) {
|
||||
gNavType = NAV_RELOAD;
|
||||
TestWindow.getBrowser().reload();
|
||||
}
|
||||
else if (waitOnly) {
|
||||
gNavType = NAV_NONE;
|
||||
}
|
||||
else {
|
||||
throw "No valid navigation type passed to doPageNavigation!";
|
||||
}
|
||||
|
||||
// If we're listening for events and there is an .onNavComplete callback,
|
||||
// wait for all events to occur, and then call doPageNavigation_complete().
|
||||
if (eventsToListenFor.length > 0 && params.onNavComplete)
|
||||
{
|
||||
waitForTrue(
|
||||
function() { return gFinalEvent; },
|
||||
function() {
|
||||
doPageNavigation_complete(eventsToListenFor, params.onNavComplete,
|
||||
preventBFCache);
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish doPageNavigation(), by removing event listeners, adding an unload
|
||||
* handler if appropriate, and calling the onNavComplete callback. This
|
||||
* function is called after all the expected events for this navigation have
|
||||
* occurred.
|
||||
*/
|
||||
function doPageNavigation_complete(eventsToListenFor, onNavComplete,
|
||||
preventBFCache) {
|
||||
// Unregister our event listeners.
|
||||
dump("TEST: removing event listeners\n");
|
||||
for (let eventType of eventsToListenFor) {
|
||||
TestWindow.getBrowser().removeEventListener(eventType, pageEventListener,
|
||||
true);
|
||||
}
|
||||
|
||||
// If the .preventBFCache property was set, add an empty unload handler to
|
||||
// prevent the page from being bfcached.
|
||||
let uri = TestWindow.getBrowser().currentURI.spec;
|
||||
if (preventBFCache) {
|
||||
TestWindow.getWindow().addEventListener("unload", function() {
|
||||
dump("TEST: Called dummy unload function to prevent page from " +
|
||||
"being bfcached.\n");
|
||||
}, true);
|
||||
|
||||
// Save the current uri in an array of uri's which shouldn't be
|
||||
// stored in the bfcache, for later verification.
|
||||
if (!(uri in gUrisNotInBFCache)) {
|
||||
gUrisNotInBFCache.push(uri);
|
||||
}
|
||||
} else if (gNavType == NAV_URI) {
|
||||
// If we're navigating to a uri and .preventBFCache was not
|
||||
// specified, splice it out of gUrisNotInBFCache if it's there.
|
||||
gUrisNotInBFCache.forEach(
|
||||
function(element, index, array) {
|
||||
if (element == uri) {
|
||||
array.splice(index, 1);
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
|
||||
// Notify the callback now that we're done.
|
||||
onNavComplete.call();
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows a test to wait for page navigation events, and notify a
|
||||
* callback when they've all been received. This works exactly the
|
||||
* same as doPageNavigation(), except that no navigation is initiated.
|
||||
*/
|
||||
function waitForPageEvents(params) {
|
||||
params.waitForEventsOnly = true;
|
||||
doPageNavigation(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* The event listener which listens for expectedEvents.
|
||||
*/
|
||||
function pageEventListener(event) {
|
||||
try {
|
||||
dump("TEST: eventListener received a " + event.type + " event for page " +
|
||||
event.originalTarget.title + ", persisted=" + event.persisted + "\n");
|
||||
} catch(e) {
|
||||
// Ignore any exception.
|
||||
}
|
||||
|
||||
// If this page shouldn't be in the bfcache because it was previously
|
||||
// loaded with .preventBFCache, make sure that its pageshow event
|
||||
// has .persisted = false, even if the test doesn't explicitly test
|
||||
// for .persisted.
|
||||
if ( (event.type == "pageshow") &&
|
||||
(gNavType == NAV_BACK || gNavType == NAV_FORWARD) ) {
|
||||
let uri = TestWindow.getBrowser().currentURI.spec;
|
||||
if (uri in gUrisNotInBFCache) {
|
||||
ok(!event.persisted, "pageshow event has .persisted = false, even " +
|
||||
"though it was loaded with .preventBFCache previously\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(gUnexpectedEvents) != "undefined") {
|
||||
is(gUnexpectedEvents.indexOf(event.type), -1,
|
||||
"Should not get unexpected event " + event.type);
|
||||
}
|
||||
|
||||
// If no expected events were specified, mark the final event as having been
|
||||
// triggered when a pageshow event is fired; this will allow
|
||||
// doPageNavigation() to return.
|
||||
if ((typeof(gExpectedEvents) == "undefined") && event.type == "pageshow")
|
||||
{
|
||||
setTimeout(function() { gFinalEvent = true; }, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
// If there are explicitly no expected events, but we receive one, it's an
|
||||
// error.
|
||||
if (gExpectedEvents.length == 0) {
|
||||
ok(false, "Unexpected event (" + event.type + ") occurred");
|
||||
return;
|
||||
}
|
||||
|
||||
// Grab the next expected event, and compare its attributes against the
|
||||
// actual event.
|
||||
let expected = gExpectedEvents.shift();
|
||||
|
||||
is(event.type, expected.type,
|
||||
"A " + expected.type + " event was expected, but a " +
|
||||
event.type + " event occurred");
|
||||
|
||||
if (typeof(expected.title) != "undefined") {
|
||||
ok(event.originalTarget instanceof HTMLDocument,
|
||||
"originalTarget for last " + event.type +
|
||||
" event not an HTMLDocument");
|
||||
is(event.originalTarget.title, expected.title,
|
||||
"A " + event.type + " event was expected for page " +
|
||||
expected.title + ", but was fired for page " +
|
||||
event.originalTarget.title);
|
||||
}
|
||||
|
||||
if (typeof(expected.persisted) != "undefined") {
|
||||
is(event.persisted, expected.persisted,
|
||||
"The persisted property of the " + event.type + " event on page " +
|
||||
event.originalTarget.location + " had an unexpected value");
|
||||
}
|
||||
|
||||
if ("visibilityState" in expected) {
|
||||
is(event.originalTarget.visibilityState, expected.visibilityState,
|
||||
"The visibilityState property of the document on page " +
|
||||
event.originalTarget.location + " had an unexpected value");
|
||||
}
|
||||
|
||||
if ("hidden" in expected) {
|
||||
is(event.originalTarget.hidden, expected.hidden,
|
||||
"The hidden property of the document on page " +
|
||||
event.originalTarget.location + " had an unexpected value");
|
||||
}
|
||||
|
||||
// If we're out of expected events, let doPageNavigation() return.
|
||||
if (gExpectedEvents.length == 0)
|
||||
setTimeout(function() { gFinalEvent = true; }, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* End a test.
|
||||
*/
|
||||
function finish() {
|
||||
// Work around bug 467960.
|
||||
var history = TestWindow.getBrowser().webNavigation.sessionHistory;
|
||||
history.PurgeHistory(history.count);
|
||||
|
||||
// If the test changed the value of max_total_viewers via a call to
|
||||
// enableBFCache(), then restore it now.
|
||||
if (typeof(gOrigMaxTotalViewers) != "undefined") {
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setIntPref("browser.sessionhistory.max_total_viewers",
|
||||
gOrigMaxTotalViewers);
|
||||
}
|
||||
|
||||
// Close the test window and signal the framework that the test is done.
|
||||
let opener = window.opener;
|
||||
let SimpleTest = opener.wrappedJSObject.SimpleTest;
|
||||
|
||||
// Wait for the window to be closed before finishing the test
|
||||
let ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
|
||||
.getService(Components.interfaces.nsIWindowWatcher);
|
||||
ww.registerNotification(function(subject, topic, data) {
|
||||
if (topic == "domwindowclosed") {
|
||||
ww.unregisterNotification(arguments.callee);
|
||||
SimpleTest.waitForFocus(SimpleTest.finish, opener);
|
||||
}
|
||||
});
|
||||
|
||||
window.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function which waits until another function returns true, or until a
|
||||
* timeout occurs, and then notifies a callback.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* fn: a function which is evaluated repeatedly, and when it turns true,
|
||||
* the onWaitComplete callback is notified.
|
||||
*
|
||||
* onWaitComplete: a callback which will be notified when fn() returns
|
||||
* true, or when a timeout occurs.
|
||||
*
|
||||
* timeout: a timeout, in seconds or ms, after which waitForTrue() will
|
||||
* fail an assertion and then return, even if the fn function never
|
||||
* returns true. If timeout is undefined, waitForTrue() will never
|
||||
* time out.
|
||||
*/
|
||||
function waitForTrue(fn, onWaitComplete, timeout) {
|
||||
var start = new Date().valueOf();
|
||||
if (typeof(timeout) != "undefined") {
|
||||
// If timeoutWait is less than 500, assume it represents seconds, and
|
||||
// convert to ms.
|
||||
if (timeout < 500)
|
||||
timeout *= 1000;
|
||||
}
|
||||
|
||||
// Loop until the test function returns true, or until a timeout occurs,
|
||||
// if a timeout is defined.
|
||||
var intervalid;
|
||||
intervalid =
|
||||
setInterval(
|
||||
function() {
|
||||
var timeoutHit = false;
|
||||
if (typeof(timeout) != "undefined") {
|
||||
timeoutHit = new Date().valueOf() - start >=
|
||||
timeout ? true : false;
|
||||
if (timeoutHit) {
|
||||
ok(false, "Timed out waiting for condition");
|
||||
}
|
||||
}
|
||||
if (timeoutHit || fn.call()) {
|
||||
// Stop calling the test function and notify the callback.
|
||||
clearInterval(intervalid);
|
||||
onWaitComplete.call();
|
||||
}
|
||||
}, 20);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable the bfcache.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* enable: if true, set max_total_viewers to -1 (the default); if false, set
|
||||
* to 0 (disabled), if a number, set it to that specific number
|
||||
*/
|
||||
function enableBFCache(enable) {
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
|
||||
// If this is the first time the test called enableBFCache(),
|
||||
// store the original value of max_total_viewers, so it can
|
||||
// be restored at the end of the test.
|
||||
if (typeof(gOrigMaxTotalViewers) == "undefined") {
|
||||
gOrigMaxTotalViewers =
|
||||
prefs.getIntPref("browser.sessionhistory.max_total_viewers");
|
||||
}
|
||||
|
||||
if (typeof(enable) == "boolean") {
|
||||
if (enable)
|
||||
prefs.setIntPref("browser.sessionhistory.max_total_viewers", -1);
|
||||
else
|
||||
prefs.setIntPref("browser.sessionhistory.max_total_viewers", 0);
|
||||
}
|
||||
else if (typeof(enable) == "number") {
|
||||
prefs.setIntPref("browser.sessionhistory.max_total_viewers", enable);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* get http root for local tests. Use a single extractJarToTmp instead of
|
||||
* extracting for each test.
|
||||
* Returns a file://path if we have a .jar file
|
||||
*/
|
||||
function getHttpRoot() {
|
||||
var location = window.location.href;
|
||||
location = getRootDirectory(location);
|
||||
var jar = getJar(location);
|
||||
if (jar != null) {
|
||||
if (gExtractedPath == null) {
|
||||
var resolved = extractJarToTmp(jar);
|
||||
gExtractedPath = resolved.path;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return "file://" + gExtractedPath + '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the full HTTP url for a file in the mochitest docshell test
|
||||
* directory.
|
||||
*/
|
||||
function getHttpUrl(filename) {
|
||||
var root = getHttpRoot();
|
||||
if (root == null) {
|
||||
root = "http://mochi.test:8888/chrome/docshell/test/chrome/";
|
||||
}
|
||||
return root + filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* A convenience object with methods that return the current test window,
|
||||
* browser, and document.
|
||||
*/
|
||||
var TestWindow = {};
|
||||
TestWindow.getWindow = function () {
|
||||
return document.getElementById("content").contentWindow;
|
||||
}
|
||||
TestWindow.getBrowser = function () {
|
||||
return document.getElementById("content");
|
||||
}
|
||||
TestWindow.getDocument = function () {
|
||||
return document.getElementById("content").contentDocument;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test ifranes for view-source forbidden in iframe tests</title>
|
||||
</head>
|
||||
<body>
|
||||
<iframe id="testIframe"></iframe>
|
||||
<iframe id="refIframe"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
39
docshell/test/chrome/gen_template.pl
Normal file
39
docshell/test/chrome/gen_template.pl
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# This script makes docshell test case templates. It takes one argument:
|
||||
#
|
||||
# -b: a bugnumber
|
||||
#
|
||||
# For example, this command:
|
||||
#
|
||||
# perl gen_template.pl -b 303267
|
||||
#
|
||||
# Writes test case template files test_bug303267.xul and bug303267_window.xul
|
||||
# to the current directory.
|
||||
|
||||
use FindBin;
|
||||
use Getopt::Long;
|
||||
GetOptions("b=i"=> \$bug_number);
|
||||
|
||||
$template = "$FindBin::RealBin/test.template.txt";
|
||||
|
||||
open(IN,$template) or die("Failed to open input file for reading.");
|
||||
open(OUT, ">>test_bug" . $bug_number . ".xul") or die("Failed to open output file for appending.");
|
||||
while((defined(IN)) && ($line = <IN>)) {
|
||||
$line =~ s/{BUGNUMBER}/$bug_number/g;
|
||||
print OUT $line;
|
||||
}
|
||||
close(IN);
|
||||
close(OUT);
|
||||
|
||||
$template = "$FindBin::RealBin/window.template.txt";
|
||||
|
||||
open(IN,$template) or die("Failed to open input file for reading.");
|
||||
open(OUT, ">>bug" . $bug_number . "_window.xul") or die("Failed to open output file for appending.");
|
||||
while((defined(IN)) && ($line = <IN>)) {
|
||||
$line =~ s/{BUGNUMBER}/$bug_number/g;
|
||||
print OUT $line;
|
||||
}
|
||||
close(IN);
|
||||
close(OUT);
|
||||
|
||||
12
docshell/test/chrome/generic.html
Normal file
12
docshell/test/chrome/generic.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>
|
||||
generic page
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="div1" style="height: 1000px; border: thin solid black;">
|
||||
A generic page which can be used any time a test needs to load an arbitrary page via http.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
57
docshell/test/chrome/mozFrameType_window.xul
Normal file
57
docshell/test/chrome/mozFrameType_window.xul
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<window title="Test mozFrameType attribute"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="runTests();">
|
||||
|
||||
<html:iframe id="normalFrame"/>
|
||||
<html:iframe id="typeContentFrame" mozframetype="content"/>
|
||||
|
||||
<script type="application/javascript" src="docshell_helpers.js" />
|
||||
<script type="application/javascript"><![CDATA[
|
||||
function runTests() {
|
||||
let opener = window.opener;
|
||||
let SimpleTest = opener.wrappedJSObject.SimpleTest;
|
||||
|
||||
let Ci = Components.interfaces;
|
||||
|
||||
function getDocShellType(frame) {
|
||||
return frame.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDocShell)
|
||||
.QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.itemType;
|
||||
}
|
||||
|
||||
var normalFrame = document.getElementById("normalFrame");
|
||||
var typeContentFrame = document.getElementById("typeContentFrame");
|
||||
|
||||
SimpleTest.is(getDocShellType(normalFrame), Ci.nsIDocShellTreeItem.typeChrome,
|
||||
"normal iframe in chrome document is typeChrome");
|
||||
SimpleTest.is(getDocShellType(typeContentFrame), Ci.nsIDocShellTreeItem.typeContent,
|
||||
"iframe with mozFrameType='content' in chrome document is typeContent");
|
||||
|
||||
SimpleTest.executeSoon(function () {
|
||||
// First focus the parent window and then close this one.
|
||||
SimpleTest.waitForFocus(function() {
|
||||
let ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
|
||||
.getService(Components.interfaces.nsIWindowWatcher);
|
||||
ww.registerNotification(function windowObs(subject, topic, data) {
|
||||
if (topic == "domwindowclosed") {
|
||||
ww.unregisterNotification(windowObs);
|
||||
|
||||
// Don't start the next test synchronously!
|
||||
SimpleTest.executeSoon(function() {
|
||||
SimpleTest.finish();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
window.close();
|
||||
}, opener);
|
||||
});
|
||||
}
|
||||
]]></script>
|
||||
</window>
|
||||
|
||||
BIN
docshell/test/chrome/red.png
Normal file
BIN
docshell/test/chrome/red.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 B |
41
docshell/test/chrome/test.template.txt
Normal file
41
docshell/test/chrome/test.template.txt
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id={BUGNUMBER}.xul
|
||||
-->
|
||||
<window title="Mozilla Bug {BUGNUMBER}"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<title>Test for Bug {BUGNUMBER}</title>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id={BUGNUMBER}">
|
||||
Mozilla Bug {BUGNUMBER}</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug {BUGNUMBER} **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug{BUGNUMBER}_window.xul", "bug{BUGNUMBER}",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
94
docshell/test/chrome/test_allowContentRetargeting.html
Normal file
94
docshell/test/chrome/test_allowContentRetargeting.html
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addLoadEvent(runNextTest);
|
||||
|
||||
var TEST_URL = "http://mochi.test:8888/tests/docshell/test/chrome/allowContentRetargeting.sjs";
|
||||
|
||||
var Ci = Components.interfaces;
|
||||
|
||||
function runNextTest() {
|
||||
var test = tests.shift();
|
||||
if (!test) {
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
test();
|
||||
}
|
||||
|
||||
var tests = [
|
||||
|
||||
// Set allowContentRetargeting = false, load a downloadable URL, verify the
|
||||
// downloadable stops loading.
|
||||
function basic() {
|
||||
var iframe = insertIframe();
|
||||
docshellForWindow(iframe.contentWindow).allowContentRetargeting = false;
|
||||
loadIframe(iframe);
|
||||
},
|
||||
|
||||
// Set allowContentRetargeting = false on parent docshell, load a downloadable
|
||||
// URL, verify the downloadable stops loading.
|
||||
function inherit() {
|
||||
var docshell = docshellForWindow(window);
|
||||
docshell.allowContentRetargeting = false;
|
||||
loadIframe(insertIframe());
|
||||
},
|
||||
];
|
||||
|
||||
function docshellForWindow(win) {
|
||||
return win.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebNavigation).
|
||||
QueryInterface(Ci.nsIDocShell);
|
||||
}
|
||||
|
||||
function insertIframe() {
|
||||
var iframe = document.createElement("iframe");
|
||||
document.body.appendChild(iframe);
|
||||
return iframe;
|
||||
}
|
||||
|
||||
function loadIframe(iframe) {
|
||||
iframe.setAttribute("src", TEST_URL);
|
||||
docshellForWindow(iframe.contentWindow).
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebProgress).
|
||||
addProgressListener(progressListener,
|
||||
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
|
||||
}
|
||||
|
||||
var progressListener = {
|
||||
onStateChange: function (webProgress, req, flags, status) {
|
||||
if (!(flags & Ci.nsIWebProgressListener.STATE_STOP))
|
||||
return;
|
||||
is(Components.isSuccessCode(status), false,
|
||||
"Downloadable should have failed to load");
|
||||
document.querySelector("iframe").remove();
|
||||
runNextTest();
|
||||
},
|
||||
|
||||
QueryInterface: function (iid) {
|
||||
var iids = [
|
||||
Ci.nsIWebProgressListener,
|
||||
Ci.nsISupportsWeakReference,
|
||||
Ci.nsISupports,
|
||||
];
|
||||
if (iids.some(function (i) { return iid.equals(i); }))
|
||||
return this;
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p id="display">
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
38
docshell/test/chrome/test_bug112564.xul
Normal file
38
docshell/test/chrome/test_bug112564.xul
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=112564
|
||||
-->
|
||||
<window title="Mozilla Bug 112564"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=112564">Mozilla Bug 112564</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 112564 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug112564_window.xul", "bug112564",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
31
docshell/test/chrome/test_bug113934.xul
Normal file
31
docshell/test/chrome/test_bug113934.xul
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=113934
|
||||
-->
|
||||
<window title="Mozilla Bug 113934"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=113934"
|
||||
target="_blank">Mozilla Bug 396519</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("bug113934_window.xul?content", "bug113934",
|
||||
"chrome,width=800,height=800");
|
||||
});
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
38
docshell/test/chrome/test_bug215405.xul
Normal file
38
docshell/test/chrome/test_bug215405.xul
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=215405
|
||||
-->
|
||||
<window title="Mozilla Bug 215405"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=215405">Mozilla Bug 215405</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 215405 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug215405_window.xul", "bug215405",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug293235.xul
Normal file
39
docshell/test/chrome/test_bug293235.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=293235.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 293235"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=293235">
|
||||
Mozilla Bug 293235</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 293235 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug293235_window.xul", "bug293235",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug294258.xul
Normal file
39
docshell/test/chrome/test_bug294258.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=294258.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 294258"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=294258">
|
||||
Mozilla Bug 294258</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 294258 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug294258_window.xul", "bug294258",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug298622.xul
Normal file
39
docshell/test/chrome/test_bug298622.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=298622.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 298622"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=298622">
|
||||
Mozilla Bug 298622</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 298622 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug298622_window.xul", "bug298622",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug301397.xul
Normal file
39
docshell/test/chrome/test_bug301397.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=301397.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 301397"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=301397">
|
||||
Mozilla Bug 301397</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 301397 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug301397_window.xul", "bug301397",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
40
docshell/test/chrome/test_bug303267.xul
Normal file
40
docshell/test/chrome/test_bug303267.xul
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=303267.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 303267"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=303267">Mozilla Bug 303267</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
SimpleTest.expectAssertions(0, 1);
|
||||
|
||||
/** Test for Bug 303267 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug303267_window.xul", "bug303267",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
45
docshell/test/chrome/test_bug311007.xul
Normal file
45
docshell/test/chrome/test_bug311007.xul
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=311007.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 311007"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/MochiKit/packed.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=311007">
|
||||
Mozilla Bug 311007</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
if (navigator.platform.startsWith("Win")) {
|
||||
SimpleTest.expectAssertions(0, 1);
|
||||
}
|
||||
|
||||
/** Test for Bug 311007 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug311007_window.xul", "bug311007",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug321671.xul
Normal file
39
docshell/test/chrome/test_bug321671.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=321671.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 321671"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=321671">
|
||||
Mozilla Bug 321671</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 321671 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug321671_window.xul", "bug321671",
|
||||
"chrome,width=600,height=600,scrollbars");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
40
docshell/test/chrome/test_bug360511.xul
Normal file
40
docshell/test/chrome/test_bug360511.xul
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=360511.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 360511"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
|
||||
</script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=360511">
|
||||
Mozilla Bug 360511</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 360511 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug360511_window.xul", "bug360511",
|
||||
"chrome,scrollbars,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
38
docshell/test/chrome/test_bug364461.xul
Normal file
38
docshell/test/chrome/test_bug364461.xul
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=364461
|
||||
-->
|
||||
<window title="Mozilla Bug 364461"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=364461">Mozilla Bug 364461</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 364461 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug364461_window.xul", "bug364461",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
29
docshell/test/chrome/test_bug396519.xul
Normal file
29
docshell/test/chrome/test_bug396519.xul
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=396519
|
||||
-->
|
||||
<window title="Mozilla Bug 396519"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=396519"
|
||||
target="_blank">Mozilla Bug 396519</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
/** Test for Bug 396519 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug396519_window.xul", "bug396519",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
41
docshell/test/chrome/test_bug396649.xul
Normal file
41
docshell/test/chrome/test_bug396649.xul
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=396649.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 396649"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src=
|
||||
"chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
|
||||
</script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=396649">
|
||||
Mozilla Bug 396649</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 396649 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug396649_window.xul", "bug396649",
|
||||
"chrome,width=600,height=600,scrollbars");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
37
docshell/test/chrome/test_bug428288.html
Normal file
37
docshell/test/chrome/test_bug428288.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=428288
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 428288</title>
|
||||
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=428288">Mozilla Bug 428288</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe name="target"></iframe>
|
||||
<a id="crashy" target="target" href="about:blank">crash me</a>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 428288 **/
|
||||
|
||||
function makeClick() {
|
||||
var event = document.createEvent("MouseEvents");
|
||||
event.initMouseEvent("click", true, true, window, 0, 0,0,0,0,
|
||||
false, false, false, false, 0, null);
|
||||
document.getElementById("crashy").dispatchEvent(event);
|
||||
return true;
|
||||
}
|
||||
|
||||
ok(makeClick(), "Crashes if bug 428288 is present");
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
31
docshell/test/chrome/test_bug449778.xul
Normal file
31
docshell/test/chrome/test_bug449778.xul
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=449778
|
||||
-->
|
||||
<window title="Mozilla Bug 449778"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=449778"
|
||||
target="_blank">Mozilla Bug 396519</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("bug449778_window.xul", "bug449778",
|
||||
"chrome,width=800,height=800");
|
||||
});
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
31
docshell/test/chrome/test_bug449780.xul
Normal file
31
docshell/test/chrome/test_bug449780.xul
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=449780
|
||||
-->
|
||||
<window title="Mozilla Bug 449780"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=449780"
|
||||
target="_blank">Mozilla Bug 396519</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("bug449780_window.xul", "bug449780",
|
||||
"chrome,width=800,height=800");
|
||||
});
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
115
docshell/test/chrome/test_bug453650.xul
Normal file
115
docshell/test/chrome/test_bug453650.xul
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=453650
|
||||
-->
|
||||
<window title="Mozilla Bug 453650"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 453650 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var Ci = Components.interfaces;
|
||||
var Cr = Components.results;
|
||||
|
||||
var iter = runTests();
|
||||
nextTest();
|
||||
|
||||
function runTests() {
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.style.width = "300px";
|
||||
iframe.style.height = "300px";
|
||||
iframe.setAttribute("src", "data:text/html,<h1 id='h'>hello</h1>");
|
||||
|
||||
document.documentElement.appendChild(iframe);
|
||||
yield whenLoaded(iframe);
|
||||
info("iframe loaded");
|
||||
|
||||
var h1 = iframe.contentDocument.getElementById("h");
|
||||
h1.style.width = "400px";
|
||||
yield waitForInterruptibleReflow(iframe.docShell);
|
||||
|
||||
h1.style.width = "300px";
|
||||
waitForReflow(iframe.docShell);
|
||||
yield is(300, h1.offsetWidth, "h1 has correct width");
|
||||
}
|
||||
|
||||
function waitForInterruptibleReflow(docShell) {
|
||||
waitForReflow(docShell, true);
|
||||
}
|
||||
|
||||
function waitForReflow(docShell, interruptible = false) {
|
||||
function done() {
|
||||
docShell.removeWeakReflowObserver(observer);
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
}
|
||||
|
||||
var observer = {
|
||||
reflow: function (start, end) {
|
||||
if (interruptible) {
|
||||
ok(false, "expected interruptible reflow");
|
||||
} else {
|
||||
ok(true, "observed uninterruptible reflow");
|
||||
}
|
||||
|
||||
info("times: " + start + ", " + end);
|
||||
ok(start < end, "reflow start time lower than end time");
|
||||
done();
|
||||
},
|
||||
|
||||
reflowInterruptible: function (start, end) {
|
||||
if (!interruptible) {
|
||||
ok(false, "expected uninterruptible reflow");
|
||||
} else {
|
||||
ok(true, "observed interruptible reflow");
|
||||
}
|
||||
|
||||
info("times: " + start + ", " + end);
|
||||
ok(start < end, "reflow start time lower than end time");
|
||||
done();
|
||||
},
|
||||
|
||||
QueryInterface: function (iid) {
|
||||
if (Ci.nsIReflowObserver.equals(iid) ||
|
||||
Ci.nsISupportsWeakReference.equals(iid) ||
|
||||
Ci.nsISupports.equals(iid))
|
||||
return this;
|
||||
throw Cr.NS_ERROR_NO_INTERFACE;
|
||||
},
|
||||
};
|
||||
|
||||
docShell.addWeakReflowObserver(observer);
|
||||
}
|
||||
|
||||
function whenLoaded(iframe) {
|
||||
iframe.addEventListener("load", function onLoad() {
|
||||
iframe.removeEventListener("load", onLoad);
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
});
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
try {
|
||||
iter.next();
|
||||
} catch (e if e instanceof StopIteration) {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=453650"
|
||||
target="_blank">Mozilla Bug 453650</a>
|
||||
</body>
|
||||
</window>
|
||||
56
docshell/test/chrome/test_bug454235.xul
Normal file
56
docshell/test/chrome/test_bug454235.xul
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=454235
|
||||
-->
|
||||
<window title="Mozilla Bug 454235"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=454235"
|
||||
target="_blank">Mozilla Bug 454235</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
/** Test for Bug 454235 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
SimpleTest.waitForFocus(doTest);
|
||||
|
||||
function doTest() {
|
||||
var shownBrowser = document.getElementById("shownBrowser");
|
||||
var hiddenBrowser = document.getElementById("hiddenBrowser");
|
||||
var offScreenBrowser = document.getElementById("offScreenBrowser");
|
||||
var offScreenSubBrowser = offScreenBrowser.contentDocument.getElementById("topBrowser");
|
||||
var offScreenBurriedBrowser = offScreenBrowser.contentDocument.getElementById("burriedBrowser");
|
||||
|
||||
hiddenBrowser.contentWindow.focus();
|
||||
ok(!hiddenBrowser.contentDocument.hasFocus(),"hidden browser is visible");
|
||||
|
||||
offScreenBrowser.docShell.isOffScreenBrowser = true;
|
||||
offScreenBrowser.contentWindow.focus();
|
||||
ok(offScreenBrowser.contentDocument.hasFocus(),"offscreen browser is not visible");
|
||||
|
||||
offScreenSubBrowser.contentWindow.focus();
|
||||
todo(offScreenSubBrowser.contentDocument.hasFocus(),"visible browser in offscreen browser is not visible");
|
||||
|
||||
offScreenBurriedBrowser.contentWindow.focus();
|
||||
ok(!offScreenBurriedBrowser.contentDocument.hasFocus(),"hidden browser in offscreen browser is visible");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
|
||||
|
||||
]]></script>
|
||||
<box flex="1" style="visibility: hidden; border:5px black solid">
|
||||
<browser style="border:5px blue solid" id="hiddenBrowser" src="bug454235-subframe.xul"/>
|
||||
<browser style="border:5px yellow solid" id="offScreenBrowser" src="bug454235-subframe.xul"/>
|
||||
</box>
|
||||
</window>
|
||||
31
docshell/test/chrome/test_bug456980.xul
Normal file
31
docshell/test/chrome/test_bug456980.xul
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=456980
|
||||
-->
|
||||
<window title="Mozilla Bug 456980"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=456980"
|
||||
target="_blank">Mozilla Bug 396519</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function() {
|
||||
window.open("bug113934_window.xul?chrome", "bug456980",
|
||||
"chrome,width=800,height=800");
|
||||
});
|
||||
|
||||
]]></script>
|
||||
</window>
|
||||
83
docshell/test/chrome/test_bug565388.xul
Normal file
83
docshell/test/chrome/test_bug565388.xul
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=565388
|
||||
-->
|
||||
<window title="Mozilla Bug 565388"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 565388 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var Ci = Components.interfaces;
|
||||
var Cc = Components.classes;
|
||||
|
||||
var progressListener = {
|
||||
add: function(docShell, callback) {
|
||||
this.callback = callback;
|
||||
this.docShell = docShell;
|
||||
docShell.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebProgress).
|
||||
addProgressListener(this, Ci.nsIWebProgress.NOTIFY_STATE_WINDOW);
|
||||
},
|
||||
|
||||
finish: function() {
|
||||
this.docShell.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebProgress).
|
||||
removeProgressListener(this);
|
||||
this.callback();
|
||||
},
|
||||
|
||||
onStateChange: function (webProgress, req, flags, status) {
|
||||
if (req.name.startsWith("data:application/vnd.mozilla.xul")) {
|
||||
if (flags & Ci.nsIWebProgressListener.STATE_STOP)
|
||||
this.finish();
|
||||
}
|
||||
},
|
||||
|
||||
QueryInterface: function(iid) {
|
||||
if (iid.equals(Components.interfaces.nsIWebProgressListener) ||
|
||||
iid.equals(Components.interfaces.nsISupportsWeakReference))
|
||||
return this;
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
}
|
||||
|
||||
var systemPrincipal = Cc["@mozilla.org/systemprincipal;1"].
|
||||
createInstance(Ci.nsIPrincipal);
|
||||
var webNav = Cc["@mozilla.org/appshell/appShellService;1"].
|
||||
getService(Ci.nsIAppShellService).
|
||||
createWindowlessBrowser(true);
|
||||
var docShell = webNav.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIDocShell);
|
||||
docShell.createAboutBlankContentViewer(systemPrincipal);
|
||||
var win = docShell.contentViewer.DOMDocument.defaultView;
|
||||
|
||||
progressListener.add(docShell, function(){
|
||||
is(win.document.documentURI, "data:application/vnd.mozilla.xul+xml;charset=utf-8,<window/>");
|
||||
webNav.close();
|
||||
SimpleTest.finish();
|
||||
});
|
||||
|
||||
win.location = "data:application/vnd.mozilla.xul+xml;charset=utf-8,<window/>";
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=565388"
|
||||
target="_blank">Mozilla Bug 565388</a>
|
||||
</body>
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug582176.xul
Normal file
39
docshell/test/chrome/test_bug582176.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=582176.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 582176"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=582176">
|
||||
Mozilla Bug 582176</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 582176 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug582176_window.xul", "bug582176",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
117
docshell/test/chrome/test_bug608669.xul
Normal file
117
docshell/test/chrome/test_bug608669.xul
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=608669
|
||||
-->
|
||||
<window title="Mozilla Bug 608669"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=608669"
|
||||
target="_blank">Mozilla Bug 608669</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
var gOrigMaxTotalViewers = undefined;
|
||||
function setCachePref(enabled) {
|
||||
var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch);
|
||||
if (enabled) {
|
||||
is(typeof gOrigMaxTotalViewers, "undefined", "don't double-enable bfcache");
|
||||
prefBranch.setBoolPref("browser.sessionhistory.cache_subframes", true);
|
||||
gOrigMaxTotalViewers = prefBranch.getIntPref("browser.sessionhistory.max_total_viewers");
|
||||
prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", 10);
|
||||
}
|
||||
else {
|
||||
is(typeof gOrigMaxTotalViewers, "number", "don't double-disable bfcache");
|
||||
prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", gOrigMaxTotalViewers);
|
||||
gOrigMaxTotalViewers = undefined;
|
||||
try {
|
||||
prefBranch.clearUserPref("browser.sessionhistory.cache_subframes");
|
||||
} catch (e) { /* Pref didn't exist, meh */ }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Test for Bug 608669 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(nextTest);
|
||||
|
||||
gen = doTest();
|
||||
|
||||
function nextTest() {
|
||||
gen.next();
|
||||
}
|
||||
|
||||
function doTest() {
|
||||
var container = document.getElementById('container');
|
||||
|
||||
setCachePref(true);
|
||||
|
||||
var notificationCount = 0;
|
||||
var observer = {
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
is(aTopic, "chrome-document-global-created",
|
||||
"correct topic");
|
||||
is(aData, "null",
|
||||
"correct data");
|
||||
notificationCount++;
|
||||
}
|
||||
};
|
||||
|
||||
var os = Components.classes["@mozilla.org/observer-service;1"].
|
||||
getService(Components.interfaces.nsIObserverService);
|
||||
os.addObserver(observer, "chrome-document-global-created", false);
|
||||
os.addObserver(observer, "content-document-global-created", false);
|
||||
|
||||
is(notificationCount, 0, "initial count");
|
||||
|
||||
// create a new iframe
|
||||
var iframe = document.createElement("iframe");
|
||||
container.appendChild(iframe);
|
||||
iframe.contentWindow.x = "y";
|
||||
is(notificationCount, 1, "after created iframe");
|
||||
|
||||
// Try loading in an iframe
|
||||
iframe.setAttribute("src", "bug608669.xul");
|
||||
iframe.onload = nextTest;
|
||||
yield undefined;
|
||||
is(notificationCount, 1, "after first load");
|
||||
is(iframe.contentWindow.x, "y", "reused window");
|
||||
|
||||
// Try loading again in an iframe
|
||||
iframe.setAttribute("src", "bug608669.xul?x");
|
||||
iframe.onload = nextTest;
|
||||
yield undefined;
|
||||
is(notificationCount, 2, "after second load");
|
||||
is("x" in iframe.contentWindow, false, "didn't reuse window");
|
||||
|
||||
// Open a new window using window.open
|
||||
popup = window.open("bug608669.xul", "bug 608669",
|
||||
"chrome,width=600,height=600");
|
||||
popup.onload = nextTest;
|
||||
yield undefined;
|
||||
is(notificationCount, 3, "after window.open load");
|
||||
popup.close();
|
||||
|
||||
setCachePref(false);
|
||||
os.removeObserver(observer, "chrome-document-global-created");
|
||||
os.removeObserver(observer, "content-document-global-created");
|
||||
SimpleTest.finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
|
||||
|
||||
]]></script>
|
||||
<vbox id="container" flex="1">
|
||||
<description>Below will an iframe be added</description>
|
||||
</vbox>
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug662200.xul
Normal file
39
docshell/test/chrome/test_bug662200.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=662200.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 662200"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=662200">
|
||||
Mozilla Bug 662200</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 662200 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug662200_window.xul", "bug662200",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
26
docshell/test/chrome/test_bug690056.xul
Normal file
26
docshell/test/chrome/test_bug690056.xul
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=690056
|
||||
-->
|
||||
<window title="Mozilla Bug 690056"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=690056"
|
||||
target="_blank">Mozilla Bug 690056</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
/** Test for Bug 690056 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug690056_window.xul", "bug690056",
|
||||
"chrome,width=600,height=600");
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
||||
71
docshell/test/chrome/test_bug789773.xul
Normal file
71
docshell/test/chrome/test_bug789773.xul
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=789773
|
||||
-->
|
||||
<window title="Mozilla Bug 789773"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=789773"
|
||||
target="_blank">Mozilla Bug 789773</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
const Cr = Components.results;
|
||||
const Cu = Components.utils;
|
||||
|
||||
/* Test for Bug 789773.
|
||||
*
|
||||
* See comment 50 for the situation we're testing against here.
|
||||
*
|
||||
* Note that the failure mode of this test is to hang, and hang the browser on quit.
|
||||
* This is an unfortunate occurance, but that's why we're testing it.
|
||||
*/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var calledListenerForBrowserXUL = false;
|
||||
var testProgressListener = {
|
||||
START_DOC: Ci.nsIWebProgressListener.STATE_START | Ci.nsIWebProgressListener.STATE_IS_DOCUMENT,
|
||||
onStateChange: function(wp, req, stateFlags, status) {
|
||||
if (/browser.xul/.test(req.name)) {
|
||||
wp.DOMWindow; // Force the lazy creation of a DOM window.
|
||||
calledListenerForBrowserXUL = true;
|
||||
}
|
||||
if (/mozilla.xhtml/.test(req.name) && (stateFlags & Ci.nsIWebProgressListener.STATE_STOP))
|
||||
finishTest();
|
||||
},
|
||||
QueryInterface: function(iid) {
|
||||
if (iid.equals(Ci.nsISupportsWeakReference) ||
|
||||
iid.equals(Ci.nsIWebProgressListener))
|
||||
return this;
|
||||
throw Cr.NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
}
|
||||
|
||||
// Add our progress listener
|
||||
var webProgress = Cc['@mozilla.org/docloaderservice;1'].getService(Ci.nsIWebProgress);
|
||||
webProgress.addProgressListener(testProgressListener, Ci.nsIWebProgress.NOTIFY_STATE_REQUEST);
|
||||
|
||||
// Open the window.
|
||||
var popup = window.open("about:mozilla", "_blank", "width=640,height=400");
|
||||
|
||||
// Wait for the window to load.
|
||||
function finishTest() {
|
||||
webProgress.removeProgressListener(testProgressListener);
|
||||
ok(true, "Loaded the popup window without spinning forever in the event loop!");
|
||||
ok(calledListenerForBrowserXUL, "Should have called the progress listener for browser.xul");
|
||||
popup.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
||||
96
docshell/test/chrome/test_bug846906.xul
Normal file
96
docshell/test/chrome/test_bug846906.xul
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=846906
|
||||
-->
|
||||
<window title="Mozilla Bug 846906"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 846906 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var appShellService = Components.classes["@mozilla.org/appshell/appShellService;1"]
|
||||
.getService(Components.interfaces.nsIAppShellService);
|
||||
ok(appShellService, "Should be able to get app shell service");
|
||||
|
||||
var windowlessBrowser = appShellService.createWindowlessBrowser();
|
||||
ok(windowlessBrowser, "Should be able to create windowless browser");
|
||||
|
||||
ok(windowlessBrowser instanceof Components.interfaces.nsIWindowlessBrowser,
|
||||
"Windowless browser should implement nsIWindowlessBrowser");
|
||||
|
||||
var webNavigation = windowlessBrowser.QueryInterface(Components.interfaces.nsIWebNavigation);
|
||||
ok(webNavigation, "Windowless browser should implement nsIWebNavigation");
|
||||
|
||||
var interfaceRequestor = windowlessBrowser.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
|
||||
ok(interfaceRequestor, "Should be able to query interface requestor interface");
|
||||
|
||||
var docShell = interfaceRequestor.getInterface(Components.interfaces.nsIDocShell);
|
||||
ok(docShell, "Should be able to get doc shell interface");
|
||||
|
||||
var document = webNavigation.document;
|
||||
ok(document, "Should be able to get document");
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
ok(iframe, "Should be able to create iframe");
|
||||
|
||||
iframe.onload = function () {
|
||||
ok(true, "Should receive initial onload event");
|
||||
|
||||
iframe.onload = function () {
|
||||
ok(true, "Should receive onload event");
|
||||
|
||||
var contentDocument = iframe.contentDocument;
|
||||
ok(contentDocument, "Should be able to get content document");
|
||||
|
||||
var div = contentDocument.getElementById("div1");
|
||||
ok(div, "Should be able to get element by id");
|
||||
|
||||
var rect = div.getBoundingClientRect();
|
||||
ok(rect, "Should be able to get bounding client rect");
|
||||
|
||||
// xxx: can we do better than hardcoding these values here?
|
||||
is(rect.width, 1024);
|
||||
is(rect.height, 768);
|
||||
|
||||
windowlessBrowser.close();
|
||||
|
||||
// Once the browser is closed, nsIWebNavigation and
|
||||
// nsIInterfaceRequestor methods should no longer be accessible.
|
||||
try {
|
||||
windowlessBrowser.getInterface(Components.interfaces.nsIDocShell);
|
||||
ok(false);
|
||||
} catch (e) {
|
||||
is(e.result, Components.results.NS_ERROR_NULL_POINTER);
|
||||
}
|
||||
|
||||
try {
|
||||
windowlessBrowser.document;
|
||||
ok(false);
|
||||
} catch (e) {
|
||||
is(e.result, Components.results.NS_ERROR_NULL_POINTER);
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
};
|
||||
iframe.setAttribute("src", "http://mochi.test:8888/chrome/docshell/test/chrome/bug846906.html");
|
||||
};
|
||||
document.documentElement.appendChild(iframe);
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=846906"
|
||||
target="_blank">Mozilla Bug 846906</a>
|
||||
</body>
|
||||
</window>
|
||||
39
docshell/test/chrome/test_bug89419.xul
Normal file
39
docshell/test/chrome/test_bug89419.xul
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=89419.xul
|
||||
-->
|
||||
<window title="Mozilla Bug 89419"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=89419">
|
||||
Mozilla Bug 89419</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 89419 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug89419_window.xul", "bug89419",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
127
docshell/test/chrome/test_bug909218.html
Normal file
127
docshell/test/chrome/test_bug909218.html
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addLoadEvent(test);
|
||||
|
||||
const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
|
||||
// The default flags we will stick on the docShell - every request made by the
|
||||
// docShell should include those flags.
|
||||
const TEST_FLAGS = Ci.nsIRequest.LOAD_ANONYMOUS |
|
||||
Ci.nsIRequest.LOAD_BYPASS_CACHE |
|
||||
Ci.nsIRequest.INHIBIT_CACHING |
|
||||
Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY;
|
||||
|
||||
var TEST_URL = "http://mochi.test:8888/chrome/docshell/test/chrome/bug909218.html";
|
||||
|
||||
// These are the requests we expect to see loading TEST_URL into our iframe.
|
||||
|
||||
// The test entry-point. The basic outline is:
|
||||
// * Create an iframe and set defaultLoadFlags on its docShell.
|
||||
// * Add a web progress listener to observe each request as the iframe is
|
||||
// loaded, and check that each request has the flags we specified.
|
||||
// * Load our test URL into the iframe and wait for the load to complete.
|
||||
function test() {
|
||||
var iframe = document.createElement("iframe");
|
||||
document.body.appendChild(iframe);
|
||||
var docShell = docshellForWindow(iframe.contentWindow);
|
||||
// Add our progress listener - when it notices the top-level document is
|
||||
// complete, the test will end.
|
||||
RequestWatcher.init(docShell, SimpleTest.finish);
|
||||
// Set the flags we care about, then load our test URL.
|
||||
docShell.defaultLoadFlags = TEST_FLAGS;
|
||||
iframe.setAttribute("src", TEST_URL);
|
||||
}
|
||||
|
||||
// an nsIWebProgressListener that checks all requests made by the docShell
|
||||
// have the flags we expect.
|
||||
RequestWatcher = {
|
||||
init: function(docShell, callback) {
|
||||
this.callback = callback;
|
||||
this.docShell = docShell;
|
||||
docShell.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebProgress).
|
||||
addProgressListener(this, Ci.nsIWebProgress.NOTIFY_STATE_REQUEST |
|
||||
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
|
||||
// These are the requests we expect to see - initialize each to have a
|
||||
// count of zero.
|
||||
this.requestCounts = {};
|
||||
for (var url of [
|
||||
TEST_URL,
|
||||
// content loaded by the above test html.
|
||||
"http://mochi.test:8888/chrome/docshell/test/chrome/bug909218.js",
|
||||
"http://mochi.test:8888/tests/SimpleTest/test.css",
|
||||
"http://mochi.test:8888/tests/docshell/test/chrome/red.png",
|
||||
// the content of an iframe in the test html.
|
||||
"http://mochi.test:8888/chrome/docshell/test/chrome/generic.html"
|
||||
]) {
|
||||
this.requestCounts[url] = 0;
|
||||
}
|
||||
},
|
||||
|
||||
// Finalize the test after we detect a completed load. We check we saw the
|
||||
// correct requests and make a callback to exit.
|
||||
finalize: function() {
|
||||
ok(Object.keys(this.requestCounts).length, "we expected some requests");
|
||||
for (var url in this.requestCounts) {
|
||||
var count = this.requestCounts[url];
|
||||
// As we are looking at all request states, we expect more than 1 for
|
||||
// each URL - 0 or 1 would imply something went wrong - >1 just means
|
||||
// multiple states for each request were recorded, which we don't care
|
||||
// about (we do care they all have the correct flags though - but we
|
||||
// do that in onStateChange)
|
||||
ok(count > 1, url + " saw " + count + " requests");
|
||||
}
|
||||
this.docShell.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebProgress).
|
||||
removeProgressListener(this);
|
||||
this.callback();
|
||||
},
|
||||
|
||||
onStateChange: function (webProgress, req, flags, status) {
|
||||
// We are checking requests - if there isn't one, ignore it.
|
||||
if (!req) {
|
||||
return;
|
||||
}
|
||||
// We will usually see requests for 'about:document-onload-blocker' not
|
||||
// have the flag, so we just ignore them.
|
||||
// We also see, eg, resource://gre-resources/loading-image.png, so
|
||||
// skip resource:// URLs too.
|
||||
if (req.name.startsWith("about:") || req.name.startsWith("resource:")) {
|
||||
return;
|
||||
}
|
||||
is(req.loadFlags & TEST_FLAGS, TEST_FLAGS, "request " + req.name + " has the expected flags");
|
||||
this.requestCounts[req.name] += 1;
|
||||
var stopFlags = Ci.nsIWebProgressListener.STATE_STOP |
|
||||
Ci.nsIWebProgressListener.STATE_IS_DOCUMENT;
|
||||
if (req.name == TEST_URL && (flags & stopFlags) == stopFlags) {
|
||||
this.finalize();
|
||||
}
|
||||
},
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsIWebProgressListener,
|
||||
Ci.nsISupportsWeakReference,
|
||||
])
|
||||
}
|
||||
|
||||
function docshellForWindow(win) {
|
||||
return win.
|
||||
QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIWebNavigation).
|
||||
QueryInterface(Ci.nsIDocShell);
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
</html>
|
||||
38
docshell/test/chrome/test_bug92598.xul
Normal file
38
docshell/test/chrome/test_bug92598.xul
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=92598
|
||||
-->
|
||||
<window title="Mozilla Bug 92598"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=92598">Mozilla Bug 92598</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 92598 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.open("bug92598_window.xul", "bug92598",
|
||||
"chrome,width=600,height=600");
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
43
docshell/test/chrome/test_mozFrameType.xul
Normal file
43
docshell/test/chrome/test_mozFrameType.xul
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=769771
|
||||
-->
|
||||
<window title="Test mozFrameType attribute"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
if (navigator.platform.startsWith("Win")) {
|
||||
SimpleTest.expectAssertions(0, 1);
|
||||
}
|
||||
|
||||
/** Test for Bug 769771 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function () {
|
||||
window.open("mozFrameType_window.xul", "mozFrameType",
|
||||
"chrome,width=600,height=600");
|
||||
});
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
108
docshell/test/chrome/test_principalInherit.xul
Normal file
108
docshell/test/chrome/test_principalInherit.xul
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=719994
|
||||
-->
|
||||
<window title="Test principal inheriting"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<script class="testbody" type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 719994 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var gFrame;
|
||||
|
||||
// This test file is loaded in a type=content docshell whose principal is
|
||||
// the system principal.
|
||||
|
||||
// Using data: URIs here instead of javascript: URIs, since javascript: URIs
|
||||
// fail to load when there's no principal to load them against. This only
|
||||
// matters when these tests fail (produces better error messages).
|
||||
var tests = [
|
||||
function testInheritFromParent(cb) {
|
||||
gFrame = document.createElement("iframe");
|
||||
loadListener(gFrame, function () {
|
||||
is(window.inheritedFromParent, true, "load in type=content iframe inherited principal of same type parent");
|
||||
cb();
|
||||
});
|
||||
gFrame.setAttribute("type", "content");
|
||||
gFrame.setAttribute("src", "data:text/html,<script>parent.inheritedFromParent = true;</script>");
|
||||
document.documentElement.appendChild(gFrame);
|
||||
},
|
||||
function testInheritFromCurrent_system(cb) {
|
||||
loadListener(gFrame, function () {
|
||||
is(window.inheritedSystem, undefined, "load in type=content iframe shouldn't inherit system principal from current document");
|
||||
cb();
|
||||
}, true);
|
||||
gFrame.setAttribute("src", "data:text/html,<script>parent.inheritedSystem = true;</script>");
|
||||
},
|
||||
function testInheritFromCreated(cb) {
|
||||
// Open a new chrome window with a type="content" iframe, so that it has no
|
||||
// same-type parent.
|
||||
// Load a javascript: URI in it to ensure that GetInheritedPrincipal will
|
||||
// force creation of a content viewer.
|
||||
let xulWinURL = 'data:application/vnd.mozilla.xul+xml,<?xml version="1.0"?>' +
|
||||
'<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>';
|
||||
let newWin = window.openDialog(xulWinURL, "chrome_window", "chrome");
|
||||
loadListener(newWin, function () {
|
||||
let frame = newWin.document.createElement("iframe");
|
||||
frame.setAttribute("type", "content");
|
||||
frame.setAttribute("src", "javascript:'1';");
|
||||
loadListener(frame, function () {
|
||||
is(frame.contentWindow.document.body.textContent, "1", "content viewer was created");
|
||||
SimpleTest.executeSoon(function () {
|
||||
newWin.close();
|
||||
cb();
|
||||
})
|
||||
});
|
||||
newWin.document.documentElement.appendChild(frame);
|
||||
});
|
||||
}
|
||||
];
|
||||
|
||||
addLoadEvent(function onLoad() {
|
||||
ok(Components.stack, "this test must be run with the system principal");
|
||||
SimpleTest.executeSoon(nextTest);
|
||||
});
|
||||
|
||||
function loadListener(target, func) {
|
||||
target.addEventListener("load", function lis() {
|
||||
target.removeEventListener("load", lis, true);
|
||||
func();
|
||||
}, true);
|
||||
}
|
||||
|
||||
function nextTest() {
|
||||
if (tests.length) {
|
||||
let test = tests.shift();
|
||||
SimpleTest.executeSoon(function () {
|
||||
info("running " + test.name);
|
||||
test(nextTest);
|
||||
});
|
||||
} else
|
||||
SimpleTest.executeSoon(SimpleTest.finish);
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
|
||||
</window>
|
||||
56
docshell/test/chrome/test_private_hidden_window.html
Normal file
56
docshell/test/chrome/test_private_hidden_window.html
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=829383
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 829383</title>
|
||||
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=829383">Mozilla Bug 829383</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe name="target"></iframe>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
const Ci = Components.interfaces;
|
||||
var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.rootTreeItem
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindow);
|
||||
|
||||
// We need to wait for the hidden window to load, but can't access
|
||||
// an event target for a regular event listener.
|
||||
var hidden = mainWindow.Services.appShell.hiddenPrivateDOMWindow;
|
||||
mainWindow.PrivateBrowsingUtils.whenHiddenPrivateWindowReady(function(hidden) {
|
||||
var iframe = hidden.document.createElement('iframe');
|
||||
iframe.src = 'generic.html';
|
||||
hidden.document.body.appendChild(iframe);
|
||||
|
||||
var win = mainWindow.OpenBrowserWindow({private: true});
|
||||
win.addEventListener("load", function onLoad() {
|
||||
win.removeEventListener("load", onLoad, false);
|
||||
win.close();
|
||||
win = null;
|
||||
}, false);
|
||||
});
|
||||
|
||||
function observer(aSubject, aTopic, aData) {
|
||||
is(aTopic, "last-pb-context-exited", "Unexpected observer topic");
|
||||
mainWindow.Services.obs.removeObserver(observer, "last-pb-context-exited");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
mainWindow.Services.obs.addObserver(observer, "last-pb-context-exited", false);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
180
docshell/test/chrome/test_viewsource_forbidden_in_iframe.xul
Normal file
180
docshell/test/chrome/test_viewsource_forbidden_in_iframe.xul
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=624883
|
||||
-->
|
||||
<window title="Mozilla Bug 624883"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=624883"
|
||||
target="_blank">Mozilla Bug 624883</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<iframe type="content" onload="startTest()" src="file_viewsource_forbidden_in_iframe.html"></iframe>
|
||||
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// We create a promise that will resolve with the error message
|
||||
// on a network error page load and reject on any other load.
|
||||
function createNetworkErrorMessagePromise(frame) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Error pages do not fire "load" events, so use a progressListener.
|
||||
var originalDocumentURI = frame.contentDocument.documentURI;
|
||||
var progressListener = {
|
||||
onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
// Make sure nothing other than an error page is loaded.
|
||||
if (!(aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE)) {
|
||||
reject("location change was not to an error page");
|
||||
}
|
||||
},
|
||||
|
||||
onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
|
||||
// Wait until the documentURI changes (from about:blank) this should
|
||||
// be the error page URI.
|
||||
var documentURI = frame.contentDocument.documentURI;
|
||||
if (documentURI == originalDocumentURI) {
|
||||
return;
|
||||
}
|
||||
|
||||
aWebProgress.removeProgressListener(progressListener,
|
||||
Ci.nsIWebProgress.NOTIFY_ALL);
|
||||
var matchArray = /about:neterror\?.*&d=([^&]*)/.exec(documentURI);
|
||||
if (!matchArray) {
|
||||
reject("no network error message found in URI")
|
||||
return;
|
||||
}
|
||||
|
||||
var errorMsg = matchArray[1];
|
||||
resolve(decodeURIComponent(errorMsg));
|
||||
},
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
|
||||
Ci.nsISupportsWeakReference])
|
||||
};
|
||||
|
||||
frame.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebProgress)
|
||||
.addProgressListener(progressListener,
|
||||
Ci.nsIWebProgress.NOTIFY_LOCATION |
|
||||
Ci.nsIWebProgress.NOTIFY_STATE_REQUEST);
|
||||
});
|
||||
}
|
||||
|
||||
function startTest() {
|
||||
// Get a reference message that we know will be an unknown protocol message,
|
||||
// so we can use it for comparisons in the test cases.
|
||||
var refIframe = window[0].document.getElementById("refIframe");
|
||||
var refErrorPromise = createNetworkErrorMessagePromise(refIframe);
|
||||
|
||||
refErrorPromise.then(
|
||||
function(msg) {
|
||||
window.refErrorMsg = msg;
|
||||
var testIframe = window[0].document.getElementById("testIframe");
|
||||
|
||||
// Run test cases on load of "about:blank", so that the URI always changes
|
||||
// and we can detect this in our Promise.
|
||||
testIframe.onload = runNextTestCase;
|
||||
testIframe.src = "about:blank";
|
||||
},
|
||||
function(reason) {
|
||||
ok(false, "Could not get reference error message", reason);
|
||||
SimpleTest.finish();
|
||||
})
|
||||
.catch(function(e) {
|
||||
ok(false, "Unexpected exception thrown getting reference error message", exception);
|
||||
});
|
||||
|
||||
refIframe.src = "wibble://example.com";
|
||||
}
|
||||
|
||||
function runTestCase(testCase) {
|
||||
var testIframe = window[0].document.getElementById("testIframe");
|
||||
var expectedErrorMsg = window.refErrorMsg.replace("wibble", testCase.expectedProtocolList);
|
||||
|
||||
var testErrorPromise = createNetworkErrorMessagePromise(testIframe);
|
||||
testErrorPromise.then(
|
||||
function(actualErrorMsg) {
|
||||
is(actualErrorMsg, expectedErrorMsg, testCase.desc);
|
||||
testIframe.src = "about:blank";
|
||||
},
|
||||
function(reason) {
|
||||
ok(false, testCase.desc, reason);
|
||||
testIframe.src = "about:blank";
|
||||
})
|
||||
.catch(function(e) {
|
||||
ok(false, testCase.desc + " - unexpected exception thrown", exception);
|
||||
});
|
||||
|
||||
testIframe.src = testCase.protocols + "://example.com/!/";
|
||||
}
|
||||
|
||||
var testCaseIndex = -1;
|
||||
testCases = [
|
||||
{
|
||||
desc: "Test 1: view-source should not be allowed in an iframe",
|
||||
protocols: "view-source:http",
|
||||
expectedProtocolList: "view-source, http"
|
||||
},
|
||||
{
|
||||
desc: "Test 2: feed:view-source should not be allowed in an iframe",
|
||||
protocols: "feed:view-source:http",
|
||||
expectedProtocolList: "feed, view-source, http"
|
||||
},
|
||||
{
|
||||
desc: "Test 3: jar:view-source should not be allowed in an iframe",
|
||||
protocols: "jar:view-source:http",
|
||||
expectedProtocolList: "jar, view-source, http"
|
||||
},
|
||||
{
|
||||
desc: "Test 4: pcast:view-source should not be allowed in an iframe",
|
||||
protocols: "pcast:view-source:http",
|
||||
expectedProtocolList: "pcast, view-source, http"
|
||||
},
|
||||
{
|
||||
desc: "Test 5: pcast:feed:view-source should not be allowed in an iframe",
|
||||
protocols: "pcast:feed:view-source:http",
|
||||
expectedProtocolList: "pcast, feed, view-source, http"
|
||||
},
|
||||
{
|
||||
desc: "Test 6: if invalid protocol first should report before view-source",
|
||||
protocols: "wibble:view-source:http",
|
||||
// Nothing after the invalid protocol gets set as a proper nested URI,
|
||||
// so the list stops there.
|
||||
expectedProtocolList: "wibble"
|
||||
},
|
||||
{
|
||||
desc: "Test 7: if view-source first should report before invalid protocol",
|
||||
protocols: "view-source:wibble:http",
|
||||
expectedProtocolList: "view-source, wibble"
|
||||
}
|
||||
];
|
||||
|
||||
function runNextTestCase() {
|
||||
++testCaseIndex;
|
||||
if (testCaseIndex == testCases.length) {
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
runTestCase(testCases[testCaseIndex]);
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
||||
44
docshell/test/chrome/window.template.txt
Normal file
44
docshell/test/chrome/window.template.txt
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window id="{BUGNUMBER}Test"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="600"
|
||||
height="600"
|
||||
onload="setTimeout(nextTest,0);"
|
||||
title="bug {BUGNUMBER} test">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="docshell_helpers.js">
|
||||
</script>
|
||||
|
||||
<script type="application/javascript"><![CDATA[
|
||||
|
||||
// Define the generator-iterator for the tests.
|
||||
var tests = testIterator();
|
||||
|
||||
////
|
||||
// Execute the next test in the generator function.
|
||||
//
|
||||
function nextTest() {
|
||||
tests.next();
|
||||
}
|
||||
|
||||
////
|
||||
// Generator function for test steps for bug {BUGNUMBER}:
|
||||
// Description goes here.
|
||||
//
|
||||
function testIterator()
|
||||
{
|
||||
// Test steps go here. See bug303267_window.xul for an example.
|
||||
|
||||
// Tell the framework the test is finished. Include the final 'yield'
|
||||
// statement to prevent a StopIteration exception from being thrown.
|
||||
finish();
|
||||
yield undefined;
|
||||
}
|
||||
|
||||
]]></script>
|
||||
|
||||
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
|
||||
</window>
|
||||
Loading…
Add table
Add a link
Reference in a new issue