summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js b/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
new file mode 100644
index 0000000000..5a44db54ce
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
@@ -0,0 +1,94 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.autoFill", false]],
+ });
+ const url = "data:text/html,<body>hi";
+ await testURL(url, urlEnter);
+ await testURL(url, urlClick);
+});
+
+function urlEnter(url) {
+ gURLBar.value = url;
+ gURLBar.focus();
+ EventUtils.synthesizeKey("KEY_Enter");
+}
+
+function urlClick(url) {
+ gURLBar.focus();
+ gURLBar.value = "";
+ EventUtils.sendString(url);
+ EventUtils.synthesizeMouseAtCenter(gURLBar.goButton, {});
+}
+
+function promiseNewTabSwitched() {
+ return new Promise(resolve => {
+ gBrowser.addEventListener(
+ "TabSwitchDone",
+ function () {
+ executeSoon(resolve);
+ },
+ { once: true }
+ );
+ });
+}
+
+function promiseLoaded(browser) {
+ return SpecialPowers.spawn(browser, [undefined], async () => {
+ if (!["interactive", "complete"].includes(content.document.readyState)) {
+ await new Promise(resolve =>
+ docShell.chromeEventHandler.addEventListener(
+ "DOMContentLoaded",
+ resolve,
+ {
+ once: true,
+ capture: true,
+ }
+ )
+ );
+ }
+ });
+}
+
+async function testURL(url, loadFunc, endFunc) {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ let browser = tab.linkedBrowser;
+
+ let pagePrincipal = gBrowser.contentPrincipal;
+ // We need to ensure that we set the pageshow event listener before running
+ // loadFunc, otherwise there's a chance that the content process will finish
+ // loading the page and fire pageshow before the event listener gets set.
+ let pageShowPromise = BrowserTestUtils.waitForContentEvent(
+ browser,
+ "pageshow"
+ );
+ loadFunc(url);
+ await pageShowPromise;
+
+ await SpecialPowers.spawn(
+ browser,
+ [{ isRemote: gMultiProcessBrowser }],
+ async function (arg) {
+ Assert.equal(
+ Services.focus.focusedElement,
+ null,
+ "focusedElement not null"
+ );
+ }
+ );
+
+ is(document.activeElement, browser, "content window should be focused");
+
+ ok(
+ !gBrowser.contentPrincipal.equals(pagePrincipal),
+ "load of " +
+ url +
+ " by " +
+ loadFunc.name +
+ " should produce a page with a different principal"
+ );
+
+ await BrowserTestUtils.removeTab(tab);
+}