Bug 1522637 - Part 5: Add tests for history navigations between http and file URIs with new pref, r=qdot
authorNika Layzell <nika@thelayzells.com>
Fri, 15 Feb 2019 19:49:15 +0000
changeset 459592 bfbc4f8775fcea37f747046588a175e868424aa9
parent 459591 ca6808f60f9b00f2fe9b306ca5a8edf01d1eb998
child 459593 28d4b904c0047f86bb1ab36ac703a6724a53ae2f
push id35563
push userccoroiu@mozilla.com
push dateSat, 16 Feb 2019 09:36:04 +0000
treeherdermozilla-central@1cfd69d05aa1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersqdot
bugs1522637
milestone67.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1522637 - Part 5: Add tests for history navigations between http and file URIs with new pref, r=qdot Depends on D18605 Differential Revision: https://phabricator.services.mozilla.com/D18606
toolkit/components/remotebrowserutils/tests/browser/browser.ini
toolkit/components/remotebrowserutils/tests/browser/browser_httpResponseProcessSelection.js
toolkit/components/remotebrowserutils/tests/browser/browser_httpToFileHistory.js
toolkit/components/remotebrowserutils/tests/browser/head.js
--- a/toolkit/components/remotebrowserutils/tests/browser/browser.ini
+++ b/toolkit/components/remotebrowserutils/tests/browser/browser.ini
@@ -1,9 +1,11 @@
 [DEFAULT]
 run-if = e10s
 support-files =
   dummy_page.html
   print_postdata.sjs
   307redirect.sjs
+  head.js
 
 [browser_RemoteWebNavigation.js]
 [browser_httpResponseProcessSelection.js]
+[browser_httpToFileHistory.js]
--- a/toolkit/components/remotebrowserutils/tests/browser/browser_httpResponseProcessSelection.js
+++ b/toolkit/components/remotebrowserutils/tests/browser/browser_httpResponseProcessSelection.js
@@ -1,28 +1,12 @@
 const {E10SUtils} = ChromeUtils.import("resource://gre/modules/E10SUtils.jsm");
 
 let PREF_NAME = "browser.tabs.remote.useHTTPResponseProcessSelection";
 
-function fileURL(filename) {
-  let ifile = getChromeDir(getResolvedURI(gTestPath));
-  ifile.append(filename);
-  return Services.io.newFileURI(ifile).spec;
-}
-
-function httpURL(filename, host = "https://example.com/") {
-  let root = getRootDirectory(gTestPath)
-    .replace("chrome://mochitests/content/", host);
-  return root + filename;
-}
-
-function add307(url, host = "https://example.com/") {
-  return httpURL("307redirect.sjs?" + url, host);
-}
-
 async function performLoad(browser, opts, action) {
   let loadedPromise = BrowserTestUtils.browserLoaded(
     browser, false, opts.url, opts.maybeErrorPage);
   await action();
   await loadedPromise;
 }
 
 const EXTENSION_DATA = {
new file mode 100644
--- /dev/null
+++ b/toolkit/components/remotebrowserutils/tests/browser/browser_httpToFileHistory.js
@@ -0,0 +1,99 @@
+const {E10SUtils} = ChromeUtils.import("resource://gre/modules/E10SUtils.jsm");
+
+const PREF_NAME = "browser.tabs.remote.useHTTPResponseProcessSelection";
+const HISTORY = [
+  {url: httpURL("dummy_page.html")},
+  {url: fileURL("dummy_page.html")},
+  {url: httpURL("dummy_page.html")},
+];
+
+function reversed(list) {
+  let copy = list.slice();
+  copy.reverse();
+  return copy;
+}
+
+function butLast(list) {
+  let copy = list.slice();
+  copy.pop();
+  return copy;
+}
+
+async function runTest() {
+  await BrowserTestUtils.withNewTab({gBrowser}, async function(aBrowser) {
+    // Perform initial load of each URL in the history.
+    let count = 0;
+    let index = -1;
+    for (let {url} of HISTORY) {
+      BrowserTestUtils.loadURI(aBrowser, url);
+      await BrowserTestUtils.browserLoaded(aBrowser, false, loaded => {
+        return Services.io.newURI(loaded).scheme == Services.io.newURI(url).scheme;
+      });
+
+      count++;
+      index++;
+      await ContentTask.spawn(aBrowser, {count, index, url}, async function({count, index, url}) {
+        docShell.QueryInterface(Ci.nsIWebNavigation);
+
+        is(docShell.sessionHistory.count, count, "Initial Navigation Count Match");
+        is(docShell.sessionHistory.index, index, "Initial Navigation Index Match");
+
+        let real = Services.io.newURI(content.location.href);
+        let expect = Services.io.newURI(url);
+        is(real.scheme, expect.scheme, "Initial Navigation URL Scheme");
+      });
+    }
+
+    // Go back to the first entry.
+    for (let {url} of reversed(HISTORY).slice(1)) {
+      ContentTask.spawn(aBrowser, {}, () => { content.history.back(); });
+      await BrowserTestUtils.browserLoaded(aBrowser, false, loaded => {
+        return Services.io.newURI(loaded).scheme == Services.io.newURI(url).scheme;
+      });
+
+      index--;
+      await ContentTask.spawn(aBrowser, {count, index, url}, async function({count, index, url}) {
+        docShell.QueryInterface(Ci.nsIWebNavigation);
+
+        is(docShell.sessionHistory.count, count, "Go Back Count Match");
+        is(docShell.sessionHistory.index, index, "Go Back Index Match");
+
+        let real = Services.io.newURI(content.location.href);
+        let expect = Services.io.newURI(url);
+        is(real.scheme, expect.scheme, "Go Back URL Scheme");
+      });
+    }
+
+    // Go forward to the last entry.
+    for (let {url} of HISTORY.slice(1)) {
+      ContentTask.spawn(aBrowser, {}, () => { content.history.forward(); });
+      await BrowserTestUtils.browserLoaded(aBrowser, false, loaded => {
+        return Services.io.newURI(loaded).scheme == Services.io.newURI(url).scheme;
+      });
+
+      index++;
+      await ContentTask.spawn(aBrowser, {count, index, url}, async function({count, index, url}) {
+        docShell.QueryInterface(Ci.nsIWebNavigation);
+
+        is(docShell.sessionHistory.count, count, "Go Forward Count Match");
+        is(docShell.sessionHistory.index, index, "Go Forward Index Match");
+
+        let real = Services.io.newURI(content.location.href);
+        let expect = Services.io.newURI(url);
+        is(real.scheme, expect.scheme, "Go Forward URL Scheme");
+      });
+    }
+  });
+}
+
+
+add_task(async function prefDisabled() {
+  await SpecialPowers.pushPrefEnv({set: [[PREF_NAME, false]]});
+  await runTest();
+});
+
+
+add_task(async function prefEnabled() {
+  await SpecialPowers.pushPrefEnv({set: [[PREF_NAME, true]]});
+  await runTest();
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/remotebrowserutils/tests/browser/head.js
@@ -0,0 +1,15 @@
+function fileURL(filename) {
+  let ifile = getChromeDir(getResolvedURI(gTestPath));
+  ifile.append(filename);
+  return Services.io.newFileURI(ifile).spec;
+}
+
+function httpURL(filename, host = "https://example.com/") {
+  let root = getRootDirectory(gTestPath)
+    .replace("chrome://mochitests/content/", host);
+  return root + filename;
+}
+
+function add307(url, host = "https://example.com/") {
+  return httpURL("307redirect.sjs?" + url, host);
+}