1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/docshell/test/chrome/bug690056_window.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,176 @@ 1.4 +<?xml version="1.0"?> 1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> 1.6 + 1.7 +<window id="690056Test" 1.8 + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 1.9 + width="600" 1.10 + height="600" 1.11 + onload="setTimeout(nextTest,0);" 1.12 + title="bug 6500056 test"> 1.13 + 1.14 + <script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" /> 1.15 + <script type="application/javascript" src="docshell_helpers.js" /> 1.16 + <script type="application/javascript"><![CDATA[ 1.17 + var tests = testIterator(); 1.18 + 1.19 + function nextTest() { 1.20 + tests.next(); 1.21 + } 1.22 + 1.23 + // Makes sure that we fire the visibilitychange events 1.24 + function testIterator() { 1.25 + // Enable bfcache 1.26 + enableBFCache(8); 1.27 + 1.28 + // Load something for a start 1.29 + doPageNavigation({ 1.30 + uri: 'data:text/html,<title>initial load</title>', 1.31 + onNavComplete: nextTest 1.32 + }); 1.33 + yield undefined; 1.34 + 1.35 + // Now load a new page 1.36 + doPageNavigation({ 1.37 + uri: 'data:text/html,<title>new load</title>', 1.38 + eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ], 1.39 + expectedEvents: [ { type: "pagehide", 1.40 + title: "initial load", 1.41 + persisted: true }, 1.42 + { type: "visibilitychange", 1.43 + title: "initial load", 1.44 + visibilityState: "hidden", 1.45 + hidden: true }, 1.46 + // No visibilitychange events fired for initial pageload 1.47 + { type: "pageshow", 1.48 + title: "new load", 1.49 + persisted: false }, // false on initial load 1.50 + ], 1.51 + onNavComplete: nextTest 1.52 + }); 1.53 + yield undefined; 1.54 + 1.55 + // Now go back 1.56 + doPageNavigation({ 1.57 + back: true, 1.58 + eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ], 1.59 + expectedEvents: [ { type: "pagehide", 1.60 + title: "new load", 1.61 + persisted: true }, 1.62 + { type: "visibilitychange", 1.63 + title: "new load", 1.64 + visibilityState: "hidden", 1.65 + hidden: true }, 1.66 + { type: "visibilitychange", 1.67 + title: "initial load", 1.68 + visibilityState: "visible", 1.69 + hidden: false }, 1.70 + { type: "pageshow", 1.71 + title: "initial load", 1.72 + persisted: true }, 1.73 + ], 1.74 + onNavComplete: nextTest 1.75 + }); 1.76 + yield undefined; 1.77 + 1.78 + // And forward 1.79 + doPageNavigation({ 1.80 + forward: true, 1.81 + eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ], 1.82 + expectedEvents: [ { type: "pagehide", 1.83 + title: "initial load", 1.84 + persisted: true }, 1.85 + { type: "visibilitychange", 1.86 + title: "initial load", 1.87 + visibilityState: "hidden", 1.88 + hidden: true }, 1.89 + { type: "visibilitychange", 1.90 + title: "new load", 1.91 + visibilityState: "visible", 1.92 + hidden: false }, 1.93 + { type: "pageshow", 1.94 + title: "new load", 1.95 + persisted: true }, 1.96 + ], 1.97 + onNavComplete: nextTest 1.98 + }); 1.99 + yield undefined; 1.100 + 1.101 + function generateDetector(state, hidden, title, name) { 1.102 + var detector = function (event) { 1.103 + is(event.target.hidden, hidden, 1.104 + name + " hidden value does not match"); 1.105 + is(event.target.visibilityState, state, 1.106 + name + " state value does not match"); 1.107 + is(event.target.title, title, 1.108 + name + " title value does not match"); 1.109 + document.getElementById("content") 1.110 + .removeEventListener("visibilitychange", 1.111 + detector, 1.112 + true); 1.113 + nextTest(); 1.114 + } 1.115 + 1.116 + document.getElementById("content") 1.117 + .addEventListener("visibilitychange", detector, true); 1.118 + } 1.119 + 1.120 + generateDetector("hidden", true, "new load", "Going hidden"); 1.121 + 1.122 + // Now flip our docshell to not active 1.123 + document.getElementById("content").docShellIsActive = false; 1.124 + yield undefined; 1.125 + 1.126 + // And navigate back; there should be no visibility state transitions 1.127 + doPageNavigation({ 1.128 + back: true, 1.129 + eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ], 1.130 + expectedEvents: [ { type: "pagehide", 1.131 + title: "new load", 1.132 + persisted: true }, 1.133 + { type: "pageshow", 1.134 + title: "initial load", 1.135 + persisted: true }, 1.136 + ], 1.137 + unexpectedEvents: [ "visibilitychange" ], 1.138 + onNavComplete: nextTest 1.139 + }); 1.140 + yield undefined; 1.141 + 1.142 + generateDetector("visible", false, "initial load", "Going visible"); 1.143 + 1.144 + // Now set the docshell active again 1.145 + document.getElementById("content").docShellIsActive = true; 1.146 + yield undefined; 1.147 + 1.148 + // And forward 1.149 + doPageNavigation({ 1.150 + forward: true, 1.151 + eventsToListenFor: [ "pageshow", "pagehide", "visibilitychange" ], 1.152 + expectedEvents: [ { type: "pagehide", 1.153 + title: "initial load", 1.154 + persisted: true }, 1.155 + { type: "visibilitychange", 1.156 + title: "initial load", 1.157 + visibilityState: "hidden", 1.158 + hidden: true }, 1.159 + { type: "visibilitychange", 1.160 + title: "new load", 1.161 + visibilityState: "visible", 1.162 + hidden: false }, 1.163 + { type: "pageshow", 1.164 + title: "new load", 1.165 + persisted: true }, 1.166 + ], 1.167 + onNavComplete: nextTest 1.168 + }); 1.169 + yield undefined; 1.170 + 1.171 + // Tell the framework the test is finished. Include the final 'yield' 1.172 + // statement to prevent a StopIteration exception from being thrown. 1.173 + finish(); 1.174 + yield undefined; 1.175 + } 1.176 + ]]></script> 1.177 + 1.178 + <browser type="content-primary" flex="1" id="content" src="about:blank"/> 1.179 +</window>