/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
var kPrefName =
"accessibility.typeaheadfind.prefillwithselection";
var kEmptyURI =
"data:text/html,";
// This pref is false by default in OSX; ensure the test still works there.
Services.prefs.setBoolPref(kPrefName,
true);
registerCleanupFunction(
function () {
Services.prefs.clearUserPref(kPrefName);
});
add_task(async
function () {
let aTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, kEmptyURI);
ok(!gFindBarInitialized,
"findbar isn't initialized yet");
// Note: the use case here is when the user types directly in the findbar
// _before_ it's prefilled with a text selection in the page.
// So `yield BrowserTestUtils.sendChar()` can't be used here:
// - synthesizing a key in the browser won't actually send it to the
// findbar; the findbar isn't part of the browser content.
// - we need to _not_ wait for _startFindDeferred to be resolved; yielding
// a synthesized keypress on the browser implicitely happens after the
// browser has dispatched its return message with the prefill value for
// the findbar, which essentially nulls these tests.
// The parent-side of the sidebar initialization is also async, so we do
// need to wait for that. We verify a bit further down that _startFindDeferred
// hasn't been resolved yet.
await gFindBarPromise;
let findBar = gFindBar;
is(findBar._findField.value,
"",
"findbar is empty");
// Test 1
// Any input in the findbar should erase a previous search.
findBar._findField.value =
"xy";
findBar.startFind();
is(findBar._findField.value,
"xy",
"findbar should have xy initial query");
is(findBar._findField, document.activeElement,
"findbar is now focused");
EventUtils.sendChar(
"z", window);
is(findBar._findField.value,
"z",
"z erases xy");
findBar._findField.value =
"";
ok(!findBar._findField.value,
"erase findbar after first test");
// Test 2
// Prefilling the findbar should be ignored if a search has been run.
findBar.startFind();
ok(findBar._startFindDeferred,
"prefilled value hasn't been fetched yet");
is(findBar._findField, document.activeElement,
"findbar is still focused");
EventUtils.sendChar(
"a", window);
EventUtils.sendChar(
"b", window);
is(findBar._findField.value,
"ab",
"initial ab typed in the findbar");
// This resolves _startFindDeferred if it's still pending; let's just skip
// over waiting for the browser's return message that should do this as it
// doesn't really matter.
findBar.onCurrentSelection(
"foo",
true);
ok(!findBar._startFindDeferred,
"prefilled value fetched");
is(findBar._findField.value,
"ab",
"ab kept instead of prefill value");
EventUtils.sendChar(
"c", window);
is(findBar._findField.value,
"abc",
"c is appended after ab");
// Clear the findField value to make the test run successfully
// for multiple runs in the same browser session.
findBar._findField.value =
"";
BrowserTestUtils.removeTab(aTab);
});