summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js223
1 files changed, 223 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js b/browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js
new file mode 100644
index 0000000000..8cdc0e746b
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_separatePrivateDefault.js
@@ -0,0 +1,223 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests the 'Search in a Private Window' result of the address bar.
+// Tests here don't have a different private engine, for that see
+// browser_separatePrivateDefault_differentPrivateEngine.js
+
+const serverInfo = {
+ scheme: "http",
+ host: "localhost",
+ port: 20709, // Must be identical to what is in searchSuggestionEngine2.xml
+};
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.search.separatePrivateDefault.ui.enabled", true],
+ ["browser.search.separatePrivateDefault.urlbarResult.enabled", true],
+ ["browser.search.separatePrivateDefault", true],
+ ["browser.urlbar.suggest.searches", true],
+ ],
+ });
+
+ // Add some history for the empty panel.
+ await PlacesTestUtils.addVisits([
+ {
+ uri: "http://example.com/",
+ transition: PlacesUtils.history.TRANSITIONS.TYPED,
+ },
+ ]);
+
+ // Add a search suggestion engine and move it to the front so that it appears
+ // as the first one-off.
+ await SearchTestUtils.promiseNewSearchEngine({
+ url: getRootDirectory(gTestPath) + "searchSuggestionEngine.xml",
+ setAsDefault: true,
+ setAsDefaultPrivate: true,
+ });
+
+ // Add another engine in the first one-off position.
+ let engine2 = await SearchTestUtils.promiseNewSearchEngine({
+ url: getRootDirectory(gTestPath) + "POSTSearchEngine.xml",
+ });
+ await Services.search.moveEngine(engine2, 0);
+
+ // Add an engine with an alias.
+ await SearchTestUtils.installSearchExtension({
+ name: "MozSearch",
+ keyword: "alias",
+ });
+
+ registerCleanupFunction(async () => {
+ await PlacesUtils.history.clear();
+ });
+});
+
+async function AssertNoPrivateResult(win) {
+ let count = await UrlbarTestUtils.getResultCount(win);
+ Assert.ok(count > 0, "Sanity check result count");
+ for (let i = 0; i < count; ++i) {
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(win, i);
+ Assert.ok(
+ result.type != UrlbarUtils.RESULT_TYPE.SEARCH ||
+ !result.searchParams.inPrivateWindow,
+ "Check this result is not a 'Search in a Private Window' one"
+ );
+ }
+}
+
+async function AssertPrivateResult(win, engine, isPrivateEngine) {
+ let count = await UrlbarTestUtils.getResultCount(win);
+ Assert.ok(count > 1, "Sanity check result count");
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
+ Assert.equal(
+ result.type,
+ UrlbarUtils.RESULT_TYPE.SEARCH,
+ "Check result type"
+ );
+ Assert.ok(result.searchParams.inPrivateWindow, "Check inPrivateWindow");
+ Assert.equal(
+ result.searchParams.isPrivateEngine,
+ isPrivateEngine,
+ "Check isPrivateEngine"
+ );
+ Assert.equal(
+ result.searchParams.engine,
+ engine.name,
+ "Check the search engine"
+ );
+ return result;
+}
+
+add_task(async function test_nonsearch() {
+ info(
+ "Test that 'Search in a Private Window' does not appear with non-search results"
+ );
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "exa",
+ });
+ await AssertNoPrivateResult(window);
+});
+
+add_task(async function test_search() {
+ info(
+ "Test that 'Search in a Private Window' appears with only search results"
+ );
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "unique198273982173",
+ });
+ await AssertPrivateResult(window, await Services.search.getDefault(), false);
+});
+
+add_task(async function test_search_urlbar_result_disabled() {
+ info("Test that 'Search in a Private Window' does not appear when disabled");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.search.separatePrivateDefault.urlbarResult.enabled", false],
+ ],
+ });
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "unique198273982173",
+ });
+ await AssertNoPrivateResult(window);
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function test_search_disabled_suggestions() {
+ info(
+ "Test that 'Search in a Private Window' appears if suggestions are disabled"
+ );
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.suggest.searches", false]],
+ });
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "unique198273982173",
+ });
+ await AssertPrivateResult(window, await Services.search.getDefault(), false);
+ await SpecialPowers.popPrefEnv();
+});
+
+// TODO: (Bug 1658620) Write a new subtest for this behaviour with the update2
+// pref on.
+// add_task(async function test_oneoff_selected_keyboard() {
+// info(
+// "Test that 'Search in a Private Window' with keyboard opens the selected one-off engine if there's no private engine"
+// );
+// await SpecialPowers.pushPrefEnv({
+// set: [
+// ["browser.urlbar.update2", false],
+// ["browser.urlbar.update2.oneOffsRefresh", false],
+// ],
+// });
+// await UrlbarTestUtils.promiseAutocompleteResultPopup({
+// window,
+// value: "unique198273982173",
+// });
+// await AssertPrivateResult(window, await Services.search.getDefault(), false);
+// // Select the 'Search in a Private Window' result, alt down to select the
+// // first one-off button, Enter. It should open a pb window, but using the
+// // selected one-off engine.
+// let promiseWindow = BrowserTestUtils.waitForNewWindow({
+// url:
+// "http://mochi.test:8888/browser/browser/components/urlbar/tests/browser/print_postdata.sjs",
+// });
+// // Select the private result.
+// EventUtils.synthesizeKey("KEY_ArrowDown");
+// // Select the first one-off button.
+// EventUtils.synthesizeKey("KEY_ArrowDown", { altKey: true });
+// EventUtils.synthesizeKey("VK_RETURN");
+// let win = await promiseWindow;
+// Assert.ok(
+// PrivateBrowsingUtils.isWindowPrivate(win),
+// "Should open a private window"
+// );
+// await BrowserTestUtils.closeWindow(win);
+// await SpecialPowers.popPrefEnv();
+// });
+
+// TODO: (Bug 1658620) Write a new subtest for this behaviour with the update2
+// pref on.
+// add_task(async function test_oneoff_selected_mouse() {
+// info(
+// "Test that 'Search in a Private Window' with mouse opens the selected one-off engine if there's no private engine"
+// );
+// await SpecialPowers.pushPrefEnv({
+// set: [
+// ["browser.urlbar.update2", false],
+// ["browser.urlbar.update2.oneOffsRefresh", false],
+// ],
+// });
+// await UrlbarTestUtils.promiseAutocompleteResultPopup({
+// window,
+// value: "unique198273982173",
+// });
+// await AssertPrivateResult(window, await Services.search.getDefault(), false);
+// // Select the 'Search in a Private Window' result, alt down to select the
+// // first one-off button, Enter. It should open a pb window, but using the
+// // selected one-off engine.
+// let promiseWindow = BrowserTestUtils.waitForNewWindow({
+// url:
+// "http://mochi.test:8888/browser/browser/components/urlbar/tests/browser/print_postdata.sjs",
+// });
+// // Select the private result.
+// EventUtils.synthesizeKey("KEY_ArrowDown");
+// // Select the first one-off button.
+// EventUtils.synthesizeKey("KEY_ArrowDown", { altKey: true });
+// // Click on the result.
+// let element = UrlbarTestUtils.getSelectedRow(window);
+// EventUtils.synthesizeMouseAtCenter(element, {});
+// let win = await promiseWindow;
+// Assert.ok(
+// PrivateBrowsingUtils.isWindowPrivate(win),
+// "Should open a private window"
+// );
+// await BrowserTestUtils.closeWindow(win);
+// await SpecialPowers.popPrefEnv();
+// });