123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <!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() });
- yield undefined;
- 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();
- yield undefined;
- ok(true, 'Got first hashchange.');
- // Going back should wake us up again.
- popup.history.back();
- yield undefined;
- 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();
- yield undefined;
- 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() });
- yield undefined;
- 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() });
- yield undefined;
- popup.close();
- SimpleTest.finish();
- yield undefined;
- }
- 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>
|