mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
308 lines
10 KiB
XML
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>
|