summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js')
-rw-r--r--browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js171
1 files changed, 171 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js b/browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js
new file mode 100644
index 0000000000..7462a5080a
--- /dev/null
+++ b/browser/components/places/tests/browser/interactions/browser_interactions_typing_dom_history.js
@@ -0,0 +1,171 @@
+/* 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/. */
+
+/**
+ * Tests reporting of typing interactions after DOM history API usage.
+ */
+
+"use strict";
+
+const TEST_URL =
+ "https://example.com/browser/browser/components/places/tests/browser/keyword_form.html";
+const TEST_URL2 = "https://example.com/browser";
+
+const sentence = "The quick brown fox jumps over the lazy dog.";
+
+async function sendTextToInput(browser, text) {
+ await SpecialPowers.spawn(browser, [], function () {
+ const input = content.document.querySelector(
+ "#form1 > input[name='search']"
+ );
+ input.focus();
+ input.value = ""; // Reset to later verify that the provided text matches the value
+ });
+
+ EventUtils.sendString(text);
+
+ await SpecialPowers.spawn(browser, [{ text }], async function (args) {
+ await ContentTaskUtils.waitForCondition(
+ () =>
+ content.document.querySelector("#form1 > input[name='search']").value ==
+ args.text,
+ "Text has been set on input"
+ );
+ });
+}
+
+add_task(async function test_typing_pushState() {
+ await Interactions.reset();
+
+ await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await sendTextToInput(browser, sentence);
+
+ await ContentTask.spawn(browser, TEST_URL2, url => {
+ content.history.pushState(null, "", url);
+ });
+
+ await sendTextToInput(browser, sentence);
+
+ BrowserTestUtils.loadURIString(browser, "about:blank");
+ await BrowserTestUtils.browserLoaded(browser, false, "about:blank");
+
+ await assertDatabaseValues([
+ {
+ url: TEST_URL,
+ keypresses: sentence.length,
+ typingTimeIsGreaterThan: 0,
+ },
+ {
+ url: TEST_URL2,
+ keypresses: sentence.length,
+ typingTimeIsGreaterThan: 0,
+ },
+ ]);
+ });
+});
+
+add_task(async function test_typing_pushState_sameUrl() {
+ await Interactions.reset();
+
+ await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await sendTextToInput(browser, sentence);
+
+ await ContentTask.spawn(browser, TEST_URL, url => {
+ content.history.pushState(null, "", url);
+ });
+
+ await sendTextToInput(browser, sentence);
+
+ BrowserTestUtils.loadURIString(browser, "about:blank");
+ await BrowserTestUtils.browserLoaded(browser, false, "about:blank");
+
+ await assertDatabaseValues([
+ {
+ url: TEST_URL,
+ keypresses: sentence.length * 2,
+ typingTimeIsGreaterThan: 0,
+ },
+ ]);
+ });
+});
+
+add_task(async function test_typing_replaceState() {
+ await Interactions.reset();
+
+ await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await sendTextToInput(browser, sentence);
+
+ await ContentTask.spawn(browser, TEST_URL2, url => {
+ content.history.replaceState(null, "", url);
+ });
+
+ await sendTextToInput(browser, sentence);
+
+ BrowserTestUtils.loadURIString(browser, "about:blank");
+ await BrowserTestUtils.browserLoaded(browser, false, "about:blank");
+
+ await assertDatabaseValues([
+ {
+ url: TEST_URL,
+ keypresses: sentence.length,
+ typingTimeIsGreaterThan: 0,
+ },
+ {
+ url: TEST_URL2,
+ keypresses: sentence.length,
+ typingTimeIsGreaterThan: 0,
+ },
+ ]);
+ });
+});
+
+add_task(async function test_typing_replaceState_sameUrl() {
+ await Interactions.reset();
+
+ await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await sendTextToInput(browser, sentence);
+
+ await ContentTask.spawn(browser, TEST_URL, url => {
+ content.history.replaceState(null, "", url);
+ });
+
+ await sendTextToInput(browser, sentence);
+
+ BrowserTestUtils.loadURIString(browser, "about:blank");
+ await BrowserTestUtils.browserLoaded(browser, false, "about:blank");
+
+ await assertDatabaseValues([
+ {
+ url: TEST_URL,
+ keypresses: sentence.length * 2,
+ typingTimeIsGreaterThan: 0,
+ },
+ ]);
+ });
+});
+
+add_task(async function test_typing_hashchange() {
+ await Interactions.reset();
+
+ await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await sendTextToInput(browser, sentence);
+
+ await ContentTask.spawn(browser, TEST_URL + "#foo", url => {
+ content.location = url;
+ });
+
+ await sendTextToInput(browser, sentence);
+
+ BrowserTestUtils.loadURIString(browser, "about:blank");
+ await BrowserTestUtils.browserLoaded(browser, false, "about:blank");
+
+ await assertDatabaseValues([
+ {
+ url: TEST_URL,
+ keypresses: sentence.length * 2,
+ typingTimeIsGreaterThan: 0,
+ },
+ ]);
+ });
+});