зеркало из https://github.com/mozilla/gecko-dev.git
251 строка
9.3 KiB
XML
251 строка
9.3 KiB
XML
<?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>
|