gecko/docshell/test/chrome/bug754029_window.xul

308 lines
10 KiB
XML

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window id="754029Test"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
width="600"
height="600"
onload="startup();"
title="bug 754029 test">
<script type="application/javascript" src="docshell_helpers.js"></script>
<script type="application/javascript"><![CDATA[
const _kDocshellTestNavURI =
"http://test1.example.org:80/tests/docshell/test/navigation/";
const kBlankURI = _kDocshellTestNavURI + "blank.html";
const kRedirectURI = _kDocshellTestNavURI + "file_bug754029.html";
function startup() {
var browser = document.getElementById("content");
browser.addEventListener("load", contentOnLoad, true);
content.location.href = kBlankURI + "?start";
}
function contentOnLoad(aEvent) {
is(aEvent.originalTarget.nodeName, "#document", "Loading a document.");
var browser = document.getElementById("content");
var sessionHistory = browser.sessionHistory;
var _contentLoadURI = function (aHref) {content.location.href = aHref;}
function contentLoadURI(aHref) {
setTimeout(_contentLoadURI, 0, aHref);
}
function indexToSearch(aSessionHistory, aIndex) {
return "?" + aSessionHistory.getEntryAtIndex(aIndex, false)
.URI
.QueryInterface(Components.interfaces.nsIURL)
.query;
}
switch(content.location.search) {
case "?start":
// Expected SH entries are:
// 1 * <blank.html ?start>
is(content.history.length, 1, "Initial <about:blank> is replaced.");
// Requesting <file_bug754029.html?test1>
contentLoadURI(kRedirectURI + "?test1");
break;
/*****************************************************************************
* Test 1: Load a JS redirecting page; |location.href = ...| is directly in
* <script></script> tag.
*
* Expected Result: The redirected page should replace the redirecting page's
* session history.
****************************************************************************/
case "?test1":
// We can't catch this onload, because redirection is earlier than
// firing load event. That is OK.
// Expected SH entries are:
// 0 <?start>
// 1 * <?test1>
break;
case "?result1":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 * <?result1>
is(sessionHistory.count, 2, "<?result1>: SH's length");
is(sessionHistory.index, 1, "<?result1>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?result1",
"Check if the current SH entry is <?result1>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?start",
"Check if the previous SH entry is not <?test1> but <?start>");
// Requesting <file_bug754029.html?test2>
contentLoadURI(kRedirectURI + "?test2");
break;
/*****************************************************************************
* Test 2: Load a JS redirecting page; |location.href = ...| is in
* "load" event handler.
*
* Expected Result: Replace
****************************************************************************/
case "?test2":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// 2 * <?test2>
is(sessionHistory.count, 3, "<?test2>: SH's length");
is(sessionHistory.index, 2, "<?test2>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?test2",
"Check if the current SH entry is <?test2>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?result1",
"Check if the previous SH entry is <?result1>");
break;
case "?result2":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// x <?test2> // replaced.
// 2 * <?result2>
is(sessionHistory.count, 3, "<?result2>: SH's length");
is(sessionHistory.index, 2, "<?result2>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?result2",
"Check if the current SH entry is <?result2>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?result1",
"Check if the previous SH entry is not <?test2> but <?resutl1>");
contentLoadURI(kRedirectURI + "?test3");
break;
/*****************************************************************************
* Test 3: Load a JS redirecting page; |location.href = ...| is in
* setTimeout(...)'s call back.
*
* Expected Result: Not replace
****************************************************************************/
case "?test3":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// x <?test2> // replaced.
// 2 <?result2>
// 3 * <?test3>
is(sessionHistory.count, 4, "<?test3>: SH's length");
is(sessionHistory.index, 3, "<?test3>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?test3",
"Check if the current SH entry is <?test3>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?result2",
"Check if the previous SH entry is <?result2>");
break;
case "?result3":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// x <?test2> // replaced.
// 2 <?result2>
// 3 <?test3> // not replaced.
// 4 * <?result3>
is(sessionHistory.count, 5, "<?result3>: SH's length");
is(sessionHistory.index, 4, "<?result3>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?result3",
"Check if the current SH entry is <?result3>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?test3",
"Check if <?test3> exists.");
contentLoadURI(kRedirectURI + "?test4");
break;
/*****************************************************************************
* Test 4: Load a JS redirecting page; setTimeout(...)'s callback
* is inserting a new script element into the document. And the
* inserted script contains |location.href = ...|.
*
* See also:
* https://bugzilla.mozilla.org/attachment.cgi?id=622899
*
* Expected Result: Not replace
****************************************************************************/
case "?test4":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// x <?test2> // replaced.
// 2 <?result2>
// 3 <?test3> // not replaced
// 4 <?result3>
// 5 * <?test4>
is(sessionHistory.count, 6, "<?test4>: SH's length");
is(sessionHistory.index, 5, "<?test4>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?test4",
"Check if the current SH entry is <?test4>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?result3",
"Check if the previous SH entry is <?result3>");
break;
case "?result4":
// Expected SH entries are:
// 0 <?start>
// x <?test1> // replaced.
// 1 <?result1>
// x <?test2> // replaced.
// 2 <?result2>
// 3 <?test3> // not replaced.
// 4 <?result3>
// 5 <?test4> // not replaced.
// 6 * <?result4>
is(sessionHistory.count, 7, "<?test4>: SH's length");
is(sessionHistory.index, 6, "<?test4>: Current entry's index");
is(indexToSearch(sessionHistory, sessionHistory.index),
"?result4",
"Check if the current SH entry is <?test4>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?test4",
"Check if <?test4> exists.");
contentLoadURI(kRedirectURI + "?testDOMContentLoaded");
break;
/*****************************************************************************
* Test 5: Setting location.href in onDOMContentLoaded() should REPLACE.
****************************************************************************/
case "?testDOMContentLoaded":
break;
case "?resultDOMContentLoaded":
is(indexToSearch(sessionHistory, sessionHistory.index),
"?resultDOMContentLoaded",
"Check if the current SH entry is <?resultDOMContentLoaded>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?result4",
"Check if the perevious entry is not <?testDOMContentLoaded> but " +
"<?result4>.");
contentLoadURI(kRedirectURI + "?testPageshow");
break;
/*****************************************************************************
* Test 6: Setting location.href in onpageshow() should REPLACE.
****************************************************************************/
case "?testPageshow":
break;
case "?resultPageshow":
is(indexToSearch(sessionHistory, sessionHistory.index),
"?resultPageshow",
"Check if the current SH entry is <?resultPageshow>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?resultDOMContentLoaded",
"Check if the perevious entry is not <?testPageshow> but " +
"<?resultDOMContentLoaded>.");
contentLoadURI(kRedirectURI + "?testReadystatechange");
break;
/*****************************************************************************
* Test 7: Setting location.href in onreadystatechange() should REPLACE.
****************************************************************************/
case "?testReadystatechange":
break;
case "?resultReadystatechange":
is(indexToSearch(sessionHistory, sessionHistory.index),
"?resultReadystatechange",
"Check if the current SH entry is <?resultReadystatechange>");
is(indexToSearch(sessionHistory, sessionHistory.index - 1),
"?resultPageshow",
"Check if the perevious entry is not <?testReadystatechange> but " +
"<?resultPageshow>.");
finish();
break;
}
}
]]></script>
<browser type="content-primary" flex="1" id="content" src="about:blank"/>
</window>