import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

View 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>

View file

@ -0,0 +1 @@
Cache-control: no-cache

View 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>

View file

@ -0,0 +1 @@
Cache-control: no-cache

View 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>

View file

@ -0,0 +1 @@
Cache-control: no-store

View file

@ -0,0 +1 @@
hello world

View file

@ -0,0 +1,2 @@
<?xml-stylesheet type="text/xsl" href="582176_xslt.xsl"?>
<out/>

View 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>

View file

@ -0,0 +1,8 @@
<html>
<head>
<title>A</title>
</head>
<body>
<a id="link" href="662200b.html">Next</a>
</body>
</html>

View file

@ -0,0 +1,8 @@
<html>
<head>
<title>B</title>
</head>
<body>
<a id="link" href="662200c.html">Next</a>
</body>
</html>

View file

@ -0,0 +1,7 @@
<html>
<head>
<title>C</title>
</head>
<body>
</body>
</html>

View 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>

View 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>

View file

@ -0,0 +1 @@
Cache-control: no-store

View 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");
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View 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>

View 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>

View 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>

View 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>

View file

@ -0,0 +1,8 @@
<html>
<head>
<title>Bug 293235 page2</title>
</head>
<body>
Nothing to see here, move along.
</body>
</html>

View 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>

View 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>

View 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>

View 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>

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<title>iframe parent</title>
</head>
<body>
<iframe id="iframe" src="bug301397_2.html"/>
</body>
</html>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View file

@ -0,0 +1,10 @@
<html>
<head>
<title>
</title>
</head>
<body>
<div id="div1" style="width:1024px; height:768px; border:none;">
</div>
</body>
</html>

View 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);
}

View 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>

View 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>

View file

@ -0,0 +1,2 @@
// This file exists just to ensure that we load it with the correct flags.
dump("bug909218.js loaded\n");

View 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>

View 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

View 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;
}

View file

@ -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>

View 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);

View 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>

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>