Source code
Revision control
Copy as Markdown
Other Tools
<?xml version="1.0"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
<window id="215405Test"
width="600"
height="600"
onload="onLoad();"
title="215405 test">
<script type="application/javascript"><![CDATA[
const {BrowserTestUtils} = ChromeUtils.importESModule(
);
Services.prefs.setBoolPref("browser.navigation.requireUserInteraction", false);
/* globals SimpleTest, is, isnot, ok */
var imports = [ "SimpleTest", "is", "isnot", "ok"];
for (var name of imports) {
window[name] = window.arguments[0][name];
}
const text="MOZILLA";
"215405_nostore.html";
"215405_nocache.html";
var gBrowser;
var gTestsIterator;
var currScrollX = 0;
var currScrollY = 0;
function finish() {
gBrowser.removeEventListener("pageshow", eventListener, true);
let historyPurged;
if (SpecialPowers.Services.appinfo.sessionHistoryInParent) {
let history = gBrowser.browsingContext.sessionHistory;
history.purgeHistory(history.count);
historyPurged = Promise.resolve();
} else {
historyPurged = SpecialPowers.spawn(gBrowser, [], () => {
let history = docShell.QueryInterface(Ci.nsIWebNavigation).sessionHistory
.legacySHistory;
history.purgeHistory(history.count);
});
}
historyPurged.then(_ => {
window.close();
window.arguments[0].SimpleTest.finish();
});
}
function onLoad() {
gBrowser = document.getElementById("content");
gBrowser.addEventListener("pageshow", eventListener, true);
gTestsIterator = testsIterator();
nextTest();
}
function eventListener() {
setTimeout(nextTest, 0);
}
function nextTest() {
gTestsIterator.next();
}
function* testsIterator() {
// No-store tests
var testName = "[nostore]";
// Load a page with a no-store header
BrowserTestUtils.startLoadingURIString(gBrowser, nostoreURI);
yield undefined;
// Now that the page has loaded, amend the form contents
var form = gBrowser.contentDocument.getElementById("inp");
form.value = text;
// Attempt to scroll the page
var originalXPosition = gBrowser.contentWindow.scrollX;
var originalYPosition = gBrowser.contentWindow.scrollY;
var scrollToX = gBrowser.contentWindow.scrollMaxX;
var scrollToY = gBrowser.contentWindow.scrollMaxY;
gBrowser.contentWindow.scrollBy(scrollToX, scrollToY);
// Save the scroll position for future comparison
currScrollX = gBrowser.contentWindow.scrollX;
currScrollY = gBrowser.contentWindow.scrollY;
isnot(currScrollX, originalXPosition,
testName + " failed to scroll window horizontally");
isnot(currScrollY, originalYPosition,
testName + " failed to scroll window vertically");
// Load a new document into the browser
var simple = "data:text/html,<html><head><title>test2</title></head>" +
"<body>test2</body></html>";
BrowserTestUtils.startLoadingURIString(gBrowser, simple);
yield undefined;
// Now go back in history. First page should not have been cached.
gBrowser.goBack();
yield undefined;
// First uncacheable page will now be reloaded. Check scroll position
// restored, and form contents not
is(gBrowser.contentWindow.scrollX, currScrollX, testName +
" horizontal axis scroll position not correctly restored");
is(gBrowser.contentWindow.scrollY, currScrollY, testName +
" vertical axis scroll position not correctly restored");
var formValue = gBrowser.contentDocument.getElementById("inp").value;
isnot(formValue, text, testName + " form value incorrectly restored");
// https no-cache
testName = "[nocache]";
// Load a page with a no-cache header. This should not be
BrowserTestUtils.startLoadingURIString(gBrowser, nocacheURI);
yield undefined;
// Now that the page has loaded, amend the form contents
form = gBrowser.contentDocument.getElementById("inp");
form.value = text;
// Attempt to scroll the page
originalXPosition = gBrowser.contentWindow.scrollX;
originalYPosition = gBrowser.contentWindow.scrollY;
scrollToX = gBrowser.contentWindow.scrollMaxX;
scrollToY = gBrowser.contentWindow.scrollMaxY;
gBrowser.contentWindow.scrollBy(scrollToX, scrollToY);
// Save the scroll position for future comparison
currScrollX = gBrowser.contentWindow.scrollX;
currScrollY = gBrowser.contentWindow.scrollY;
isnot(currScrollX, originalXPosition,
testName + " failed to scroll window horizontally");
isnot(currScrollY, originalYPosition,
testName + " failed to scroll window vertically");
BrowserTestUtils.startLoadingURIString(gBrowser, simple);
yield undefined;
// Now go back in history to the cached page.
gBrowser.goBack();
yield undefined;
// First page will now be reloaded. Check scroll position
// and form contents are restored
is(gBrowser.contentWindow.scrollX, currScrollX, testName +
" horizontal axis scroll position not correctly restored");
is(gBrowser.contentWindow.scrollY, currScrollY, testName +
" vertical axis scroll position not correctly restored");
formValue = gBrowser.contentDocument.getElementById("inp").value;
is(formValue, text, testName + " form value not correctly restored");
Services.prefs.clearUserPref("browser.navigation.requireUserInteraction");
finish();
}
]]></script>
<browser type="content" primary="true" flex="1" id="content" src="about:blank"/>
</window>