summaryrefslogtreecommitdiffstats
path: root/widget/tests/browser/browser_test_InputContextURI.js
diff options
context:
space:
mode:
Diffstat (limited to 'widget/tests/browser/browser_test_InputContextURI.js')
-rw-r--r--widget/tests/browser/browser_test_InputContextURI.js159
1 files changed, 159 insertions, 0 deletions
diff --git a/widget/tests/browser/browser_test_InputContextURI.js b/widget/tests/browser/browser_test_InputContextURI.js
new file mode 100644
index 0000000000..8279b76fa6
--- /dev/null
+++ b/widget/tests/browser/browser_test_InputContextURI.js
@@ -0,0 +1,159 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { ContentTaskUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/ContentTaskUtils.sys.mjs"
+);
+const gDOMWindowUtils = EventUtils._getDOMWindowUtils(window);
+
+function promiseURLBarFocus() {
+ const waitForFocusInURLBar = BrowserTestUtils.waitForEvent(gURLBar, "focus");
+ gURLBar.blur();
+ gURLBar.focus();
+ return Promise.all([
+ waitForFocusInURLBar,
+ TestUtils.waitForCondition(
+ () =>
+ gDOMWindowUtils.IMEStatus === Ci.nsIDOMWindowUtils.IME_STATUS_ENABLED &&
+ gDOMWindowUtils.inputContextOrigin ===
+ Ci.nsIDOMWindowUtils.INPUT_CONTEXT_ORIGIN_MAIN
+ ),
+ ]);
+}
+
+function promiseIMEStateEnabledByRemote() {
+ return TestUtils.waitForCondition(
+ () =>
+ gDOMWindowUtils.IMEStatus === Ci.nsIDOMWindowUtils.IME_STATUS_ENABLED &&
+ gDOMWindowUtils.inputContextOrigin ===
+ Ci.nsIDOMWindowUtils.INPUT_CONTEXT_ORIGIN_CONTENT
+ );
+}
+
+async function test_url_bar_url(aDesc) {
+ await promiseURLBarFocus();
+
+ is(
+ gDOMWindowUtils.inputContextURI,
+ null,
+ `When the search bar has focus, input context URI should be null because of in chrome document (${aDesc})`
+ );
+}
+
+async function test_input_in_http_or_https(aIsHTTPS) {
+ await promiseURLBarFocus();
+
+ const scheme = aIsHTTPS ? "https" : "http";
+ const url = `${scheme}://example.com/browser/toolkit/content/tests/browser/file_empty.html`;
+ await BrowserTestUtils.withNewTab(url, async browser => {
+ ok(browser.isRemoteBrowser, "This test passes only in e10s mode");
+
+ await SpecialPowers.spawn(browser, [], async () => {
+ content.document.body.innerHTML = "<input>";
+ const input = content.document.querySelector("input");
+ input.focus();
+
+ // Wait for a tick for flushing IMEContentObserver's pending notifications.
+ await new Promise(resolve =>
+ content.requestAnimationFrame(() =>
+ content.requestAnimationFrame(resolve)
+ )
+ );
+ });
+
+ await promiseIMEStateEnabledByRemote();
+ if (!gDOMWindowUtils.inputContextURI) {
+ ok(
+ false,
+ `Input context should have valid URI when the scheme of focused tab's URL is ${scheme}`
+ );
+ return;
+ }
+ is(
+ gDOMWindowUtils.inputContextURI.spec,
+ url,
+ `Input context should have the document URI when the scheme of focused tab's URL is ${scheme}`
+ );
+ });
+}
+
+add_task(async () => {
+ await test_url_bar_url("first check");
+});
+add_task(async () => {
+ await test_input_in_http_or_https(true);
+});
+add_task(async () => {
+ await test_url_bar_url("check after remote content sets the URI");
+});
+add_task(async () => {
+ await test_input_in_http_or_https(false);
+});
+
+add_task(async function test_input_in_data() {
+ await BrowserTestUtils.withNewTab("data:text/html,<input>", async browser => {
+ ok(browser.isRemoteBrowser, "This test passes only in e10s mode");
+
+ await SpecialPowers.spawn(browser, [], async () => {
+ const input = content.document.querySelector("input");
+ input.focus();
+
+ // Wait for a tick for flushing IMEContentObserver's pending notifications.
+ await new Promise(resolve =>
+ content.requestAnimationFrame(() =>
+ content.requestAnimationFrame(resolve)
+ )
+ );
+ });
+
+ await promiseIMEStateEnabledByRemote();
+ is(
+ gDOMWindowUtils.inputContextURI,
+ null,
+ "Input context should not have data URI"
+ );
+ });
+});
+
+add_task(async function test_omit_private_things_in_URL() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["network.auth.confirmAuth.enabled", false]],
+ });
+ await promiseURLBarFocus();
+
+ await BrowserTestUtils.withNewTab(
+ "https://username:password@example.com/browser/toolkit/content/tests/browser/file_empty.html?query=some#ref",
+ async browser => {
+ ok(browser.isRemoteBrowser, "This test passes only in e10s mode");
+
+ await SpecialPowers.spawn(browser, [], async () => {
+ content.document.body.innerHTML = "<input>";
+ const input = content.document.querySelector("input");
+ input.focus();
+
+ // Wait for a tick for flushing IMEContentObserver's pending notifications.
+ await new Promise(resolve =>
+ content.requestAnimationFrame(() =>
+ content.requestAnimationFrame(resolve)
+ )
+ );
+ });
+
+ await promiseIMEStateEnabledByRemote();
+ if (!gDOMWindowUtils.inputContextURI) {
+ ok(
+ false,
+ `Input context should have valid URI even when the URL contains some private things`
+ );
+ return;
+ }
+ is(
+ gDOMWindowUtils.inputContextURI.spec,
+ "https://example.com/browser/toolkit/content/tests/browser/file_empty.html",
+ `Input context should have the document URI which omit some private things in the URL`
+ );
+ }
+ );
+});