Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
// Test that slow heuristic results are still waited for on selection.
"use strict";
const { UrlbarEventBufferer } = ChromeUtils.importESModule(
"chrome://browser/content/urlbar/UrlbarEventBufferer.mjs",
{ global: "current" }
);
add_task(async function test_slow_heuristic() {
// Must be between chunkResultsDelayMs and DEFERRING_TIMEOUT_MS
let timeout = 150;
Assert.greater(timeout, ProvidersManager.chunkResultsDelayMs);
Assert.greater(UrlbarEventBufferer.DEFERRING_TIMEOUT_MS, timeout);
// First, add a provider that adds a heuristic result on a delay.
let heuristicResult = new UrlbarResult({
type: UrlbarShared.RESULT_TYPE.URL,
source: UrlbarShared.RESULT_SOURCE.OTHER_LOCAL,
heuristic: true,
payload: { url: "https://example.com/" },
});
let heuristicProvider = new UrlbarTestUtils.TestProvider({
results: [heuristicResult],
name: "heuristicProvider",
priority: Infinity,
addTimeout: timeout,
});
let providersManager = ProvidersManager.getInstanceForSap("urlbar");
providersManager.registerProvider(heuristicProvider);
registerCleanupFunction(() => {
providersManager.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 = ProvidersManager.chunkResultsDelayMs;
ProvidersManager.chunkResultsDelayMs = longTimeoutMs;
registerCleanupFunction(() => {
ProvidersManager.chunkResultsDelayMs = originalHeuristicTimeout;
});
// Add a fast heuristic provider.
let heuristicResult = new UrlbarResult({
type: UrlbarShared.RESULT_TYPE.URL,
source: UrlbarShared.RESULT_SOURCE.OTHER_LOCAL,
heuristic: true,
payload: { url: "https://example.com/" },
});
let heuristicProvider = new UrlbarTestUtils.TestProvider({
results: [heuristicResult],
name: "heuristicProvider",
priority: Infinity,
});
let providersManager = ProvidersManager.getInstanceForSap("urlbar");
providersManager.registerProvider(heuristicProvider);
registerCleanupFunction(() => {
providersManager.unregisterProvider(heuristicProvider);
});
// Do a search.
const win = await BrowserTestUtils.openNewBrowserWindow();
let startTime = ChromeUtils.now();
Assert.greater(
longTimeoutMs,
ChromeUtils.now() - startTime,
"Heuristic result is returned faster than chunkResultsDelayMs"
);
await UrlbarTestUtils.promisePopupClose(win);
await BrowserTestUtils.closeWindow(win);
});