summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_originalURI.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /browser/base/content/test/tabs/browser_originalURI.js
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/base/content/test/tabs/browser_originalURI.js')
-rw-r--r--browser/base/content/test/tabs/browser_originalURI.js182
1 files changed, 182 insertions, 0 deletions
diff --git a/browser/base/content/test/tabs/browser_originalURI.js b/browser/base/content/test/tabs/browser_originalURI.js
new file mode 100644
index 0000000000..11241b4cb8
--- /dev/null
+++ b/browser/base/content/test/tabs/browser_originalURI.js
@@ -0,0 +1,182 @@
+/* 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
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ These tests ensure the originalURI property of the <browser> element
+ has consistent behavior when the URL of a <browser> changes.
+*/
+
+const EXAMPLE_URL = "https://example.com/some/path";
+const EXAMPLE_URL_2 = "http://mochi.test:8888/";
+
+/*
+ Load a page with no redirect.
+*/
+add_task(async function no_redirect() {
+ await BrowserTestUtils.withNewTab(EXAMPLE_URL, async browser => {
+ info("Page loaded.");
+ assertUrlEqualsOriginalURI(EXAMPLE_URL, browser.originalURI);
+ });
+});
+
+/*
+ Load a page, go to another page, then go back and forth.
+*/
+add_task(async function back_and_forth() {
+ await BrowserTestUtils.withNewTab(EXAMPLE_URL, async browser => {
+ info("Page loaded.");
+
+ info("Try loading another page.");
+ let pageLoadPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ EXAMPLE_URL_2
+ );
+ BrowserTestUtils.loadURI(browser, EXAMPLE_URL_2);
+ await pageLoadPromise;
+ info("Other page finished loading.");
+ assertUrlEqualsOriginalURI(EXAMPLE_URL_2, browser.originalURI);
+
+ let pageShowPromise = BrowserTestUtils.waitForContentEvent(
+ browser,
+ "pageshow"
+ );
+ browser.goBack();
+ info("Go back.");
+ await pageShowPromise;
+
+ info("Loaded previous page.");
+ assertUrlEqualsOriginalURI(EXAMPLE_URL, browser.originalURI);
+
+ pageShowPromise = BrowserTestUtils.waitForContentEvent(browser, "pageshow");
+ browser.goForward();
+ info("Go forward.");
+ await pageShowPromise;
+
+ info("Loaded next page.");
+ assertUrlEqualsOriginalURI(EXAMPLE_URL_2, browser.originalURI);
+ });
+});
+
+/*
+ Redirect using the Location interface.
+*/
+add_task(async function location_href() {
+ await BrowserTestUtils.withNewTab("about:blank", async browser => {
+ let pageLoadPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ EXAMPLE_URL
+ );
+ info("Loading page with location.href interface.");
+ await SpecialPowers.spawn(browser, [EXAMPLE_URL], href => {
+ content.document.location.href = href;
+ });
+ await pageLoadPromise;
+ info("Page loaded.");
+ assertUrlEqualsOriginalURI(EXAMPLE_URL, browser.originalURI);
+ });
+});
+
+/*
+ Redirect using History API, should not update the originalURI.
+*/
+add_task(async function push_state() {
+ await BrowserTestUtils.withNewTab(EXAMPLE_URL, async browser => {
+ info("Page loaded.");
+
+ info("Pushing state via History API.");
+ await SpecialPowers.spawn(browser, [], () => {
+ let newUrl = content.document.location.href + "/after?page=images";
+ content.history.pushState(null, "", newUrl);
+ });
+ Assert.equal(
+ browser.currentURI.displaySpec,
+ EXAMPLE_URL + "/after?page=images",
+ "Current URI should be modified by push state."
+ );
+ assertUrlEqualsOriginalURI(EXAMPLE_URL, browser.originalURI);
+ });
+});
+
+/*
+ Redirect using the <meta> tag.
+*/
+add_task(async function meta_tag() {
+ let URL = httpURL("redirect_via_meta_tag.html");
+ await BrowserTestUtils.withNewTab(URL, async browser => {
+ info("Page loaded.");
+
+ let pageLoadPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ EXAMPLE_URL_2
+ );
+ await pageLoadPromise;
+ info("Redirected to ", EXAMPLE_URL_2);
+ assertUrlEqualsOriginalURI(URL, browser.originalURI);
+ });
+});
+
+/*
+ Redirect using header from a server.
+*/
+add_task(async function server_header() {
+ let URL = httpURL("redirect_via_header.html");
+ await BrowserTestUtils.withNewTab(URL, async browser => {
+ info("Page loaded.");
+
+ Assert.equal(
+ browser.currentURI.displaySpec,
+ EXAMPLE_URL,
+ `Browser should be re-directed to ${EXAMPLE_URL}`
+ );
+ assertUrlEqualsOriginalURI(URL, browser.originalURI);
+ });
+});
+
+/*
+ Load a page with an iFrame and then try having the
+ iFrame load another page.
+*/
+add_task(async function page_with_iframe() {
+ let URL = httpURL("page_with_iframe.html");
+ await BrowserTestUtils.withNewTab("about:blank", async browser => {
+ info("Blank page loaded.");
+
+ info("Load URL.");
+ BrowserTestUtils.loadURI(browser, URL);
+ // Make sure the iFrame is finished loading.
+ await BrowserTestUtils.browserLoaded(
+ browser,
+ true,
+ "https://example.com/another/site"
+ );
+ info("iFrame finished loading.");
+ assertUrlEqualsOriginalURI(URL, browser.originalURI);
+
+ info("Change location of the iframe.");
+ let pageLoadPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ true,
+ EXAMPLE_URL_2
+ );
+ await SpecialPowers.spawn(browser, [EXAMPLE_URL_2], url => {
+ content.document.getElementById(
+ "hidden-iframe"
+ ).contentWindow.location = url;
+ });
+ await pageLoadPromise;
+ info("iFrame finished loading.");
+ assertUrlEqualsOriginalURI(URL, browser.originalURI);
+ });
+});
+
+function assertUrlEqualsOriginalURI(url, originalURI) {
+ let uri = Services.io.newURI(url);
+ Assert.ok(
+ uri.equals(gBrowser.selectedBrowser.originalURI),
+ `URI - ${uri.displaySpec} is not equal to the originalURI - ${originalURI.displaySpec}`
+ );
+}