fune/browser/components/sessionstore/test/browser_scrollPositionsReaderMode.js
Kagami Sascha Rosylight 46f609593d Bug 1697253 - Hide VisualViewport interface behind the existing pref r=edgar
Bug 1357785 accidentally omitted the flag on the interface itself. This patch makes thing consistent to prevent potential confusion in feature detection.

Differential Revision: https://phabricator.services.mozilla.com/D107742
2021-03-11 20:51:51 +00:00

80 lines
2.4 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const BASE = "http://example.com/browser/browser/components/sessionstore/test/";
const READER_MODE_URL =
"about:reader?url=" +
encodeURIComponent(BASE + "browser_scrollPositions_readerModeArticle.html");
// Randomized set of scroll positions we will use in this test.
const SCROLL_READER_MODE_Y = Math.round(400 * (1 + Math.random()));
const SCROLL_READER_MODE_STR = "0," + SCROLL_READER_MODE_Y;
requestLongerTimeout(2);
/**
* Test that scroll positions of about reader page after restoring background
* tabs in a restored window (bug 1153393).
*/
add_task(async function test_scroll_background_about_reader_tabs() {
await pushPrefs(
["browser.sessionstore.restore_on_demand", true],
// Needed for setScrollPosition()
["dom.visualviewport.enabled", true]
);
let newWin = await BrowserTestUtils.openNewBrowserWindow();
let tab = BrowserTestUtils.addTab(newWin.gBrowser, READER_MODE_URL);
let browser = tab.linkedBrowser;
await Promise.all([
BrowserTestUtils.browserLoaded(browser),
BrowserTestUtils.waitForContentEvent(browser, "AboutReaderContentReady"),
]);
// Scroll down a little.
await setScrollPosition(browser, 0, SCROLL_READER_MODE_Y);
await checkScroll(tab, { scroll: SCROLL_READER_MODE_STR }, "scroll is fine");
// Close the window
await BrowserTestUtils.closeWindow(newWin);
await forceSaveState();
// Now restore the window
newWin = ss.undoCloseWindow(0);
// Make sure to wait for the window to be restored.
await BrowserTestUtils.waitForEvent(newWin, "SSWindowStateReady");
is(newWin.gBrowser.tabs.length, 2, "There should be two tabs");
// The second tab should be the one we loaded URL at still
tab = newWin.gBrowser.tabs[1];
ok(tab.hasAttribute("pending"), "Tab should be pending");
browser = tab.linkedBrowser;
// Ensure there are no pending queued messages in the child.
await TabStateFlusher.flush(browser);
// Now check to see if the background tab remembers where it
// should be scrolled to.
newWin.gBrowser.selectedTab = tab;
await Promise.all([
promiseTabRestored(tab),
BrowserTestUtils.waitForContentEvent(
tab.linkedBrowser,
"AboutReaderContentReady"
),
]);
await checkScroll(
tab,
{ scroll: SCROLL_READER_MODE_STR },
"scroll is still fine"
);
await BrowserTestUtils.closeWindow(newWin);
});