Bug 1265818 - Part 6 - Test PresState restoring on Android, too. r?sebastian draft
authorJan Henning <jh+bugzilla@buttercookie.de>
Tue, 21 Feb 2017 19:47:30 +0100
changeset 551936 5289c925d5d384bc52513983dbd66b98a7a341bd
parent 551935 17f9a10d6e47b4973d7aec20385ebb7ef6dfd187
child 621683 b2512d8f0aaf5fae59c420417cec2d3456be200b
push id51203
push usermozilla@buttercookie.de
push dateMon, 27 Mar 2017 18:36:19 +0000
reviewerssebastian
bugs1265818, 1312605
milestone55.0a1
Bug 1265818 - Part 6 - Test PresState restoring on Android, too. r?sebastian Expand the existing test by navigating to a different page and then going back after the tab has been restored again. Proper restoration of the zoom level for anything other than the current history entry depends on resolution of bug 1312605. MozReview-Commit-ID: Aspg2RRcY53
mobile/android/tests/browser/chrome/browser_scrollPositions_sample2.html
mobile/android/tests/browser/chrome/chrome.ini
mobile/android/tests/browser/chrome/test_session_scroll_position.html
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/chrome/browser_scrollPositions_sample2.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>browser_scrollPositions_sample.html</title>
+  </head>
+  <body style='width: 100000px; height: 100000px;'>top</body>
+</html>
--- a/mobile/android/tests/browser/chrome/chrome.ini
+++ b/mobile/android/tests/browser/chrome/chrome.ini
@@ -1,15 +1,16 @@
 [DEFAULT]
 skip-if = os != 'android'
 support-files =
   basic_article.html
   basic_article_mobile.html
   basic_article_mobile_2x.html
   browser_scrollPositions_sample.html
+  browser_scrollPositions_sample2.html
   desktopmode_user_agent.sjs
   devicesearch.xml
   head.js
   head_search.js
   session_formdata_sample.html
   simpleservice.xml
   video_controls.html
   video_discovery.html
--- a/mobile/android/tests/browser/chrome/test_session_scroll_position.html
+++ b/mobile/android/tests/browser/chrome/test_session_scroll_position.html
@@ -1,52 +1,60 @@
 <!DOCTYPE HTML>
 <html>
 <!--
 https://bugzilla.mozilla.org/show_bug.cgi?id=810981
 https://bugzilla.mozilla.org/show_bug.cgi?id=1282902
 https://bugzilla.mozilla.org/show_bug.cgi?id=1301016
+https://bugzilla.mozilla.org/show_bug.cgi?id=1265818
 -->
 <head>
   <meta charset="utf-8">
-  <title>Tests for Bug 810981, 1282902, 1301016</title>
+  <title>Tests for Bug 810981, 1282902, 1301016, 1265818</title>
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
   <link rel="stylesheet" type="text/css" href="chrome://global/skin"/>
   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
   <script type="application/javascript" src="head.js"></script>
   <script type="application/javascript">
 
-  /** Tests for Bug 810981, 1282902, 1301016 **/
+  /** Tests for Bug 810981, 1282902, 1301016, 1265818 **/
 
   "use strict";
 
   const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
   Cu.import("resource://gre/modules/XPCOMUtils.jsm");
   Cu.import("resource://gre/modules/Services.jsm");
   Cu.import("resource://gre/modules/Messaging.jsm");
   Cu.import("resource://gre/modules/Task.jsm");
 
   // The chrome window and friends.
   let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
   let BrowserApp = chromeWin.BrowserApp;
 
   // Use something with ample space for scrolling and zooming.
   const URL = "http://example.org/chrome/mobile/android/tests/browser/chrome/browser_scrollPositions_sample.html";
+  // 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";
   // Reader mode URL
   const URL_reader = "about:reader?url=http%3A%2F%2Fexample.org%2Fchrome%2Fmobile%2Fandroid%2Ftests%2Fbrowser%2Fchrome%2Fbasic_article_mobile.html";
 
   // Randomized set of scroll positions and zoom factors we will use in this test.
   const SCROLL_X = Math.round(100 * (1 + Math.random()));
   const SCROLL_Y = Math.round(200 * (1 + Math.random()));
   const SCROLL_STR = SCROLL_X + "," + SCROLL_Y;
   const SCROLL_STR_Y_ONLY = 0 + "," + SCROLL_Y;
   const ZOOM = 1 + 0.5 * Math.random();
 
+  const SCROLL2_X = Math.round(300 * (1 + Math.random()));
+  const SCROLL2_Y = Math.round(400 * (1 + Math.random()));
+  const SCROLL2_STR = SCROLL2_X + "," + SCROLL2_Y;
+  const ZOOM2 = 1.5 + 0.5 * Math.random();
+
   function dispatchUIEvent(browser, type) {
     let event = browser.contentDocument.createEvent("UIEvents");
     event.initUIEvent(type, true, false, browser.contentDocument.defaultView, 0);
     browser.dispatchEvent(event);
   }
 
   function setScrollPosition(browser, x, y) {
     browser.contentWindow.scrollTo(x, y);
@@ -143,40 +151,72 @@ https://bugzilla.mozilla.org/show_bug.cg
         let utils = ifreq.getInterface(Ci.nsIDOMWindowUtils);
         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.
+        browser.loadURI(URL2);
+        yield promiseBrowserEvent(browser, "pageshow");
+
+        setZoomLevel(browser, ZOOM2);
+        setScrollPosition(browser, SCROLL2_X, SCROLL2_Y);
+        yield promiseTabEvent(browser, "SSTabScrollCaptured");
+
+        utils.getResolution(zoom);
+        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.
         BrowserApp.closeTab(tabScroll);
         yield promiseTabEvent(browser, "SSTabCloseProcessed");
       });
     }
 
     yield createAndRemoveTab();
     let state = ss.getClosedTabs(chromeWin);
     let [{scrolldata}] = state;
-    is(scrolldata.scroll, SCROLL_STR, "stored scroll position is correct");
-    ok(fuzzyEquals(scrolldata.zoom.resolution, ZOOM), "stored zoom level is correct");
+    is(scrolldata.scroll, SCROLL2_STR, "stored scroll position is correct");
+    ok(fuzzyEquals(scrolldata.zoom.resolution, ZOOM2), "stored zoom level is correct");
 
     // Restore the closed tab.
     let closedTabData = ss.getClosedTabs(chromeWin)[0];
     let browser = ss.undoCloseTab(chromeWin, closedTabData);
-    yield promiseBrowserEvent(browser, "pageshow");
+    let pageshow = promiseBrowserEvent(browser, "pageshow");
+    let scroll = promiseBrowserEvent(browser, "scroll");
+    yield pageshow;
+    yield scroll;
 
     // Check the scroll position and zoom level.
     let ifreq = browser.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor);
     let utils = ifreq.getInterface(Ci.nsIDOMWindowUtils);
     let scrollX = {}, scrollY = {}, zoom = {};
     utils.getResolution(zoom);
     utils.getScrollXY(false, scrollX, scrollY);
-    ok(fuzzyEquals(zoom.value, ZOOM), "zoom restored correctly");
+    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
+    // is restored there as well.
+    is(browser.canGoBack, true, "can go back");
+    pageshow = promiseBrowserEvent(browser, "pageshow");
+    scroll = promiseBrowserEvent(browser, "scroll");
+    browser.goBack();
+    yield pageshow;
+    yield scroll;
+
+    utils.getResolution(zoom);
+    utils.getScrollXY(false, scrollX, scrollY);
+    todo(fuzzyEquals(zoom.value, ZOOM), "zoom restored correctly"); // Bug 1312605
     is(scrollX.value, SCROLL_X, "scrollX restored correctly");
     is(scrollY.value, SCROLL_Y, "scrollY restored correctly");
 
     // Remove the tab.
     BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
   });
 
   add_task(function* test_sessionStoreZoomLevelRecalc() {
@@ -241,16 +281,17 @@ https://bugzilla.mozilla.org/show_bug.cg
   });
 
   </script>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=810981">Mozilla Bug 810981</a>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1282902">Mozilla Bug 1282902</a>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1301016">Mozilla Bug 1301016</a>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1265818">Mozilla Bug 1265818</a>
 <p id="display"></p>
 <div id="content" style="display: none">
 
 </div>
 <pre id="test">
 </pre>
 </body>
 </html>