2011-03-31 16:35:04 +00:00
|
|
|
<!DOCTYPE HTML>
|
|
|
|
<html>
|
|
|
|
<!--
|
|
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=640387
|
|
|
|
-->
|
|
|
|
<head>
|
|
|
|
<title>Test for Bug 640387</title>
|
|
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
|
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
|
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=640387">Mozilla Bug 640387</a>
|
|
|
|
|
|
|
|
<script type='application/javascript;version=1.7'>
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
|
|
|
|
function test() {
|
|
|
|
/* Spin the event loop so we get out of the onload handler. */
|
|
|
|
SimpleTest.executeSoon(function() { gGen.next() });
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
|
|
|
|
popup.history.pushState('', '', '#hash1');
|
|
|
|
popup.history.pushState('', '', '#hash2');
|
|
|
|
|
|
|
|
// Now the history looks like:
|
|
|
|
// file_bug640387.html
|
|
|
|
// file_bug640387.html#hash1
|
|
|
|
// file_bug640387.html#hash2 <-- current
|
|
|
|
|
|
|
|
// Going back should trigger a hashchange, which will wake us up from the
|
|
|
|
// yield.
|
|
|
|
popup.history.back();
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
ok(true, 'Got first hashchange.');
|
|
|
|
|
|
|
|
// Going back should wake us up again.
|
|
|
|
popup.history.back();
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
ok(true, 'Got second hashchange.');
|
|
|
|
|
|
|
|
// Now the history looks like:
|
|
|
|
// file_bug640387.html <-- current
|
|
|
|
// file_bug640387.html#hash1
|
|
|
|
// file_bug640387.html#hash2
|
|
|
|
|
|
|
|
// Going forward should trigger a hashchange.
|
|
|
|
popup.history.forward();
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
ok(true, 'Got third hashchange.');
|
|
|
|
|
|
|
|
// Now modify the history so it looks like:
|
|
|
|
// file_bug640387.html
|
|
|
|
// file_bug640387.html#hash1
|
|
|
|
// file_bug640387.html#hash1 <-- current
|
|
|
|
popup.history.pushState('', '', '#hash1');
|
|
|
|
|
|
|
|
// Now when we go back, we should not get a hashchange. Instead, wait for a
|
|
|
|
// popstate. We need to asynchronously go back because popstate is fired
|
|
|
|
// sync.
|
|
|
|
gHashchangeExpected = false;
|
|
|
|
gCallbackOnPopstate = true;
|
|
|
|
SimpleTest.executeSoon(function() { popup.history.back() });
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
ok(true, 'Got popstate.');
|
|
|
|
gCallbackOnPopstate = false;
|
|
|
|
|
|
|
|
// Spin the event loop so hashchange has a chance to fire, if it's going to.
|
|
|
|
SimpleTest.executeSoon(function() { gGen.next() });
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
|
|
|
|
popup.close();
|
|
|
|
SimpleTest.finish();
|
2013-07-10 21:52:26 +00:00
|
|
|
yield undefined;
|
2011-03-31 16:35:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
gGen = null;
|
|
|
|
function childLoad() {
|
|
|
|
gGen = test();
|
|
|
|
gGen.next();
|
|
|
|
}
|
|
|
|
|
|
|
|
gHashchangeExpected = true;
|
|
|
|
function childHashchange() {
|
|
|
|
if (gHashchangeExpected) {
|
|
|
|
gGen.next();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ok(false, "Got hashchange when we weren't expecting one.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gCallbackOnPopstate = false;
|
|
|
|
function childPopstate() {
|
|
|
|
if (gCallbackOnPopstate) {
|
|
|
|
gGen.next();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* We need to run this test in a popup, because navigating an iframe
|
|
|
|
* back/forwards tends to cause intermittent orange. */
|
|
|
|
popup = window.open('file_bug640387.html');
|
|
|
|
|
|
|
|
/* Control now flows up to childLoad(), called once the popup loads. */
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|