summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_missing_engine.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_missing_engine.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_missing_engine.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_missing_engine.js b/toolkit/components/search/tests/xpcshell/test_missing_engine.js
new file mode 100644
index 0000000000..3da9fe14a6
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_missing_engine.js
@@ -0,0 +1,126 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// This test is designed to check the search service keeps working if there's
+// a built-in engine missing from the configuration.
+
+"use strict";
+
+const GOOD_CONFIG = [
+ {
+ webExtension: {
+ id: "engine@search.mozilla.org",
+ name: "Test search engine",
+ search_url: "https://www.google.com/search",
+ params: [
+ {
+ name: "q",
+ value: "{searchTerms}",
+ },
+ {
+ name: "channel",
+ condition: "purpose",
+ purpose: "contextmenu",
+ value: "rcs",
+ },
+ {
+ name: "channel",
+ condition: "purpose",
+ purpose: "keyword",
+ value: "fflb",
+ },
+ ],
+ suggest_url:
+ "https://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ },
+ ],
+ },
+];
+
+const BAD_CONFIG = [
+ ...GOOD_CONFIG,
+ {
+ webExtension: {
+ id: "engine-missing@search.mozilla.org",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ },
+ ],
+ },
+];
+
+add_setup(async function () {
+ SearchTestUtils.useMockIdleService();
+ await AddonTestUtils.promiseStartupManager();
+
+ // This test purposely attempts to load a missing engine.
+ consoleAllowList.push(
+ "Could not load engine engine-missing@search.mozilla.org"
+ );
+});
+
+add_task(async function test_startup_with_missing() {
+ await SearchTestUtils.useTestEngines("data", null, BAD_CONFIG);
+
+ const result = await Services.search.init();
+ Assert.ok(
+ Components.isSuccessCode(result),
+ "Should have started the search service successfully."
+ );
+
+ const engines = await Services.search.getEngines();
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["Test search engine"],
+ "Should have listed just the good engine"
+ );
+});
+
+add_task(async function test_update_with_missing() {
+ let reloadObserved =
+ SearchTestUtils.promiseSearchNotification("engines-reloaded");
+
+ await RemoteSettings(SearchUtils.SETTINGS_KEY).emit("sync", {
+ data: {
+ current: GOOD_CONFIG,
+ },
+ });
+
+ SearchTestUtils.idleService._fireObservers("idle");
+
+ await reloadObserved;
+
+ const engines = await Services.search.getEngines();
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["Test search engine"],
+ "Should have just the good engine"
+ );
+
+ reloadObserved =
+ SearchTestUtils.promiseSearchNotification("engines-reloaded");
+
+ await RemoteSettings(SearchUtils.SETTINGS_KEY).emit("sync", {
+ data: {
+ current: BAD_CONFIG,
+ },
+ });
+
+ SearchTestUtils.idleService._fireObservers("idle");
+
+ await reloadObserved;
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["Test search engine"],
+ "Should still have just the good engine"
+ );
+});