mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 07:15:46 +00:00
Bug 1498892 - Part 1: Clean up existing scroll position test. r=gbrown
Extract some repetitive logic into common helper functions/variables and pre- pare support for setting/checking the scroll position on frames, too. Additionally, I'm not sure why I ever thought it was necessary to manually fake "scroll" events after calling scrollTo(x,y), but in any case it is no longer necessary. Differential Revision: https://phabricator.services.mozilla.com/D8674 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
c0389d79a5
commit
6aa77e0f16
@ -29,10 +29,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
|
let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
|
||||||
let BrowserApp = chromeWin.BrowserApp;
|
let BrowserApp = chromeWin.BrowserApp;
|
||||||
|
|
||||||
|
const BASE = "http://example.org/chrome/mobile/android/tests/browser/chrome/";
|
||||||
// Use something with ample space for scrolling and zooming.
|
// Use something with ample space for scrolling and zooming.
|
||||||
const URL = "http://example.org/chrome/mobile/android/tests/browser/chrome/browser_scrollPositions_sample.html";
|
const URL = BASE + "browser_scrollPositions_sample.html";
|
||||||
// Same content but under a different URL, so we have something to navigate to and from.
|
// Same content but under a different URL, so we have something to navigate to and from.
|
||||||
const URL2 = "http://example.org/chrome/mobile/android/tests/browser/chrome/browser_scrollPositions_sample2.html";
|
const URL2 = BASE + "browser_scrollPositions_sample2.html";
|
||||||
// Reader mode URL
|
// Reader mode URL
|
||||||
const URL_reader = "about:reader?url=http%3A%2F%2Fexample.org%2Fchrome%2Fmobile%2Fandroid%2Ftests%2Fbrowser%2Fchrome%2Fbasic_article_mobile.html";
|
const URL_reader = "about:reader?url=http%3A%2F%2Fexample.org%2Fchrome%2Fmobile%2Fandroid%2Ftests%2Fbrowser%2Fchrome%2Fbasic_article_mobile.html";
|
||||||
|
|
||||||
@ -48,19 +49,42 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
const SCROLL2_STR = SCROLL2_X + "," + SCROLL2_Y;
|
const SCROLL2_STR = SCROLL2_X + "," + SCROLL2_Y;
|
||||||
const ZOOM2 = 1.5 + 0.5 * Math.random();
|
const ZOOM2 = 1.5 + 0.5 * Math.random();
|
||||||
|
|
||||||
function dispatchUIEvent(browser, type) {
|
function getFrame(browser, data) {
|
||||||
let event = browser.contentDocument.createEvent("UIEvents");
|
let frame = browser.contentWindow;
|
||||||
event.initUIEvent(type, true, false, browser.contentDocument.defaultView, 0);
|
if (data.hasOwnProperty("frame")) {
|
||||||
browser.dispatchEvent(event);
|
frame = browser.contentWindow.frames[data.frame];
|
||||||
|
}
|
||||||
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setScrollPosition(browser, x, y) {
|
function setScrollPosition(browser, data) {
|
||||||
browser.contentWindow.scrollTo(x, y);
|
let {x, y, zoom} = data;
|
||||||
dispatchUIEvent(browser, "scroll");
|
x = x || 0;
|
||||||
|
y = y || 0;
|
||||||
|
let frame = getFrame(browser, data);
|
||||||
|
if (data.hasOwnProperty("zoom")) {
|
||||||
|
browser.contentWindow.windowUtils.setResolutionAndScaleTo(zoom);
|
||||||
|
}
|
||||||
|
frame.scrollTo(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setZoomLevel(browser, zoom) {
|
function checkScroll(browser, data) {
|
||||||
browser.contentWindow.windowUtils.setResolutionAndScaleTo(zoom);
|
let {x, y, zoom} = data;
|
||||||
|
let utils = getFrame(browser, data).windowUtils;
|
||||||
|
|
||||||
|
let actualX = {}, actualY = {}, actualZoom = {};
|
||||||
|
utils.getResolution(actualZoom);
|
||||||
|
utils.getScrollXY(false, actualX, actualY);
|
||||||
|
|
||||||
|
if (data.hasOwnProperty("x")) {
|
||||||
|
is(actualX.value, x, "scrollX set correctly");
|
||||||
|
}
|
||||||
|
if (data.hasOwnProperty("y")) {
|
||||||
|
is(actualY.value, y, "scrollY set correctly");
|
||||||
|
}
|
||||||
|
if (data.hasOwnProperty("zoom")) {
|
||||||
|
ok(fuzzyEquals(actualZoom.value, zoom), "zoom set correctly");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Track the tabs where the tests are happening.
|
// Track the tabs where the tests are happening.
|
||||||
@ -80,6 +104,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
||||||
|
|
||||||
add_task(async function test_sessionStoreScrollPositionReaderMode() {
|
add_task(async function test_sessionStoreScrollPositionReaderMode() {
|
||||||
|
let testData = {x: 0, y: SCROLL_Y};
|
||||||
// Creates a tab, sets a scroll position and closes the tab.
|
// Creates a tab, sets a scroll position and closes the tab.
|
||||||
function createAndRemoveReaderTab() {
|
function createAndRemoveReaderTab() {
|
||||||
return Task.spawn(function* () {
|
return Task.spawn(function* () {
|
||||||
@ -89,15 +114,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
yield promiseBrowserEvent(browser, "AboutReaderContentReady");
|
yield promiseBrowserEvent(browser, "AboutReaderContentReady");
|
||||||
|
|
||||||
// Modify scroll position.
|
// Modify scroll position.
|
||||||
setScrollPosition(browser, 0, SCROLL_Y);
|
setScrollPosition(browser, testData);
|
||||||
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
||||||
|
|
||||||
// Check that we've actually scrolled.
|
// Check that we've actually scrolled.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
checkScroll(browser, testData);
|
||||||
let scrollX = {}, scrollY = {};
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
is(scrollX.value, 0, "scrollX set correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY set correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(tabScroll);
|
BrowserApp.closeTab(tabScroll);
|
||||||
@ -116,17 +137,15 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
await promiseBrowserEvent(browser, "AboutReaderContentReady");
|
await promiseBrowserEvent(browser, "AboutReaderContentReady");
|
||||||
|
|
||||||
// Check the scroll position.
|
// Check the scroll position.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
checkScroll(browser, testData);
|
||||||
let scrollX = {}, scrollY = {};
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
is(scrollX.value, 0, "scrollX restored correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY restored correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
||||||
});
|
});
|
||||||
|
|
||||||
add_task(async function test_sessionStoreScrollPositionAndZoomLevel() {
|
add_task(async function test_sessionStoreScrollPositionAndZoomLevel() {
|
||||||
|
let testData1 = {x: SCROLL_X, y: SCROLL_Y, zoom: ZOOM};
|
||||||
|
let testData2 = {x: SCROLL2_X, y: SCROLL2_Y, zoom: ZOOM2};
|
||||||
// Creates a tab, sets a scroll position and zoom level and closes the tab.
|
// Creates a tab, sets a scroll position and zoom level and closes the tab.
|
||||||
function createAndRemoveTab() {
|
function createAndRemoveTab() {
|
||||||
return Task.spawn(function* () {
|
return Task.spawn(function* () {
|
||||||
@ -136,32 +155,20 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
yield promiseBrowserEvent(browser, "pageshow");
|
yield promiseBrowserEvent(browser, "pageshow");
|
||||||
|
|
||||||
// Modify scroll position and zoom level.
|
// Modify scroll position and zoom level.
|
||||||
setZoomLevel(browser, ZOOM);
|
setScrollPosition(browser, testData1);
|
||||||
setScrollPosition(browser, SCROLL_X, SCROLL_Y);
|
|
||||||
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
||||||
|
|
||||||
// Check that we've actually scrolled and zoomed.
|
// Check that we've actually scrolled and zoomed.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
checkScroll(browser, testData1);
|
||||||
let scrollX = {}, scrollY = {}, zoom = {};
|
|
||||||
utils.getResolution(zoom);
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM), "zoom set correctly");
|
|
||||||
is(scrollX.value, SCROLL_X, "scrollX set correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY set correctly");
|
|
||||||
|
|
||||||
// Navigate to a different page and scroll/zoom there as well.
|
// Navigate to a different page and scroll/zoom there as well.
|
||||||
browser.loadURI(URL2);
|
browser.loadURI(URL2);
|
||||||
yield promiseBrowserEvent(browser, "pageshow");
|
yield promiseBrowserEvent(browser, "pageshow");
|
||||||
|
|
||||||
setZoomLevel(browser, ZOOM2);
|
setScrollPosition(browser, testData2);
|
||||||
setScrollPosition(browser, SCROLL2_X, SCROLL2_Y);
|
|
||||||
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
||||||
|
|
||||||
utils.getResolution(zoom);
|
checkScroll(browser, testData2);
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM2), "zoom set correctly");
|
|
||||||
is(scrollX.value, SCROLL2_X, "scrollX set correctly");
|
|
||||||
is(scrollY.value, SCROLL2_Y, "scrollY set correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(tabScroll);
|
BrowserApp.closeTab(tabScroll);
|
||||||
@ -184,13 +191,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
await scroll;
|
await scroll;
|
||||||
|
|
||||||
// Check the scroll position and zoom level.
|
// Check the scroll position and zoom level.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
checkScroll(browser, testData2);
|
||||||
let scrollX = {}, scrollY = {}, zoom = {};
|
|
||||||
utils.getResolution(zoom);
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM2), "zoom restored correctly");
|
|
||||||
is(scrollX.value, SCROLL2_X, "scrollX restored correctly");
|
|
||||||
is(scrollY.value, SCROLL2_Y, "scrollY restored correctly");
|
|
||||||
|
|
||||||
// Now go back in history and check that the scroll position
|
// Now go back in history and check that the scroll position
|
||||||
// is restored there as well.
|
// is restored there as well.
|
||||||
@ -201,17 +202,14 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
await pageshow;
|
await pageshow;
|
||||||
await scroll;
|
await scroll;
|
||||||
|
|
||||||
utils.getResolution(zoom);
|
checkScroll(browser, testData1);
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM), "zoom restored correctly");
|
|
||||||
is(scrollX.value, SCROLL_X, "scrollX restored correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY restored correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
||||||
});
|
});
|
||||||
|
|
||||||
add_task(async function test_sessionStoreZoomLevelRecalc() {
|
add_task(async function test_sessionStoreZoomLevelRecalc() {
|
||||||
|
let testData = {x: SCROLL_X, y: SCROLL_Y, zoom: ZOOM};
|
||||||
// Creates a tab, sets a scroll position and zoom level and closes the tab.
|
// Creates a tab, sets a scroll position and zoom level and closes the tab.
|
||||||
function createAndRemoveTab() {
|
function createAndRemoveTab() {
|
||||||
return Task.spawn(function* () {
|
return Task.spawn(function* () {
|
||||||
@ -221,18 +219,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
yield promiseBrowserEvent(browser, "pageshow");
|
yield promiseBrowserEvent(browser, "pageshow");
|
||||||
|
|
||||||
// Modify scroll position and zoom level.
|
// Modify scroll position and zoom level.
|
||||||
setZoomLevel(browser, ZOOM);
|
setScrollPosition(browser, testData);
|
||||||
setScrollPosition(browser, SCROLL_X, SCROLL_Y);
|
|
||||||
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
yield promiseTabEvent(browser, "SSTabScrollCaptured");
|
||||||
|
|
||||||
// Check that we've actually scrolled and zoomed.
|
// Check that we've actually scrolled and zoomed.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
checkScroll(browser, testData);
|
||||||
let scrollX = {}, scrollY = {}, zoom = {};
|
|
||||||
utils.getResolution(zoom);
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM), "zoom set correctly");
|
|
||||||
is(scrollX.value, SCROLL_X, "scrollX set correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY set correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(tabScroll);
|
BrowserApp.closeTab(tabScroll);
|
||||||
@ -258,13 +249,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
|
|||||||
await promiseBrowserEvent(browser, "pageshow");
|
await promiseBrowserEvent(browser, "pageshow");
|
||||||
|
|
||||||
// Check the scroll position and zoom level.
|
// Check the scroll position and zoom level.
|
||||||
let utils = browser.contentWindow.windowUtils;
|
testData.zoom = ZOOM * displayWidth / displayHeight;
|
||||||
let scrollX = {}, scrollY = {}, zoom = {};
|
checkScroll(browser, testData);
|
||||||
utils.getResolution(zoom);
|
|
||||||
utils.getScrollXY(false, scrollX, scrollY);
|
|
||||||
ok(fuzzyEquals(zoom.value, ZOOM * displayWidth / displayHeight), "recalculated zoom restored correctly");
|
|
||||||
is(scrollX.value, SCROLL_X, "scrollX restored correctly");
|
|
||||||
is(scrollY.value, SCROLL_Y, "scrollY restored correctly");
|
|
||||||
|
|
||||||
// Remove the tab.
|
// Remove the tab.
|
||||||
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
|
||||||
|
Loading…
Reference in New Issue
Block a user