Source code
Revision control
Copy as Markdown
Other Tools
<?xml version="1.0"?>
<window id="690056Test"
width="600"
height="600"
onload="setTimeout(nextTest, 0);"
<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);
TestWindow.getBrowser().docShellIsActive = true;
// 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;
waitForPageEvents({
eventsToListenFor: [ "visibilitychange" ],
expectedEvents: [ { type: "visibilitychange",
title: "new load",
visibilityState: "hidden",
hidden: true },
],
onNavComplete: nextTest
});
// Now flip our docshell to not active
TestWindow.getBrowser().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;
waitForPageEvents({
eventsToListenFor: [ "visibilitychange" ],
expectedEvents: [ { type: "visibilitychange",
title: "initial load",
visibilityState: "visible",
hidden: false },
],
onNavComplete: nextTest
});
// Now set the docshell active again
TestWindow.getBrowser().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.
finish();
}
]]></script>
<browser type="content" primary="true" flex="1" id="content" remote="true" maychangeremoteness="true" manualactiveness="true" />
</window>