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