summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_slow_heuristic.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_slow_heuristic.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_slow_heuristic.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_slow_heuristic.js b/browser/components/urlbar/tests/browser/browser_slow_heuristic.js
new file mode 100644
index 0000000000..22b71d87b6
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_slow_heuristic.js
@@ -0,0 +1,84 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that slow heuristic results are still waited for on selection.
+
+"use strict";
+
+add_task(async function test_slow_heuristic() {
+ // Must be between CHUNK_RESULTS_DELAY_MS and DEFERRING_TIMEOUT_MS
+ let timeout = 150;
+ Assert.greater(timeout, UrlbarProvidersManager.CHUNK_RESULTS_DELAY_MS);
+ Assert.greater(UrlbarEventBufferer.DEFERRING_TIMEOUT_MS, timeout);
+
+ // First, add a provider that adds a heuristic result on a delay.
+ let heuristicResult = new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
+ { url: "https://example.com/" }
+ );
+ heuristicResult.heuristic = true;
+ let heuristicProvider = new UrlbarTestUtils.TestProvider({
+ results: [heuristicResult],
+ name: "heuristicProvider",
+ priority: Infinity,
+ addTimeout: timeout,
+ });
+ UrlbarProvidersManager.registerProvider(heuristicProvider);
+ registerCleanupFunction(() => {
+ UrlbarProvidersManager.unregisterProvider(heuristicProvider);
+ });
+
+ // Do a search without waiting for a result.
+ const win = await BrowserTestUtils.openNewBrowserWindow();
+ let promiseLoaded = BrowserTestUtils.browserLoaded(
+ win.gBrowser.selectedBrowser
+ );
+
+ win.gURLBar.focus();
+ EventUtils.sendString("test", win);
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ await promiseLoaded;
+
+ await UrlbarTestUtils.promisePopupClose(win);
+ await BrowserTestUtils.closeWindow(win);
+});
+
+add_task(async function test_fast_heuristic() {
+ let longTimeoutMs = 1000000;
+ let originalHeuristicTimeout = UrlbarProvidersManager.CHUNK_RESULTS_DELAY_MS;
+ UrlbarProvidersManager.CHUNK_RESULTS_DELAY_MS = longTimeoutMs;
+ registerCleanupFunction(() => {
+ UrlbarProvidersManager.CHUNK_RESULTS_DELAY_MS = originalHeuristicTimeout;
+ });
+
+ // Add a fast heuristic provider.
+ let heuristicResult = new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
+ { url: "https://example.com/" }
+ );
+ heuristicResult.heuristic = true;
+ let heuristicProvider = new UrlbarTestUtils.TestProvider({
+ results: [heuristicResult],
+ name: "heuristicProvider",
+ priority: Infinity,
+ });
+ UrlbarProvidersManager.registerProvider(heuristicProvider);
+ registerCleanupFunction(() => {
+ UrlbarProvidersManager.unregisterProvider(heuristicProvider);
+ });
+
+ // Do a search.
+ const win = await BrowserTestUtils.openNewBrowserWindow();
+
+ let startTime = Cu.now();
+ Assert.greater(
+ longTimeoutMs,
+ Cu.now() - startTime,
+ "Heuristic result is returned faster than CHUNK_RESULTS_DELAY_MS"
+ );
+
+ await UrlbarTestUtils.promisePopupClose(win);
+ await BrowserTestUtils.closeWindow(win);
+});