summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js169
1 files changed, 169 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js b/toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js
new file mode 100644
index 0000000000..3614370a8c
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_reload_engines_duplicate.js
@@ -0,0 +1,169 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests reloading engines when a user has an engine installed that is the
+ * same name as an application provided engine being added to the user's set
+ * of engines.
+ *
+ * Ensures that settings are not automatically taken across.
+ */
+
+"use strict";
+
+const CONFIG = [
+ {
+ webExtension: {
+ id: "engine@search.mozilla.org",
+ name: "Test search engine",
+ search_url: "https://www.google.com/search",
+ params: [
+ {
+ name: "q",
+ value: "{searchTerms}",
+ },
+ ],
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ default: "yes",
+ },
+ ],
+ },
+ {
+ webExtension: {
+ id: "engine-pref@search.mozilla.org",
+ name: "engine-pref",
+ search_url: "https://www.google.com/search",
+ params: [
+ {
+ name: "q",
+ value: "{searchTerms}",
+ },
+ ],
+ },
+ appliesTo: [
+ {
+ included: { regions: ["FR"] },
+ },
+ ],
+ },
+];
+
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "engine",
+ base: {
+ name: "Test search engine",
+ urls: {
+ search: {
+ base: "https://www.google.com/search",
+ params: [],
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "engine-pref",
+ base: {
+ name: "engine-pref",
+ urls: {
+ search: {
+ base: "https://www.google.com/search",
+ params: [],
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { regions: ["FR"] },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "engine",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
+add_setup(async () => {
+ let server = useHttpServer();
+ server.registerContentType("sjs", "sjs");
+
+ // We use a region that doesn't install `engine-pref` by default so that we can
+ // manually install it first (like when a user installs a browser add-on), and
+ // then test what happens when we switch regions to one which would install
+ // `engine-pref`.
+ Region._setHomeRegion("US", false);
+
+ await SearchTestUtils.useTestEngines(
+ "data",
+ null,
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG
+ );
+ await AddonTestUtils.promiseStartupManager();
+ await Services.search.init();
+});
+
+add_task(async function test_reload_engines_with_duplicate() {
+ let engines = await Services.search.getEngines();
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["Test search engine"],
+ "Should have the expected default engines"
+ );
+ // Simulate a user installing a search engine that shares the same name as an
+ // application provided search engine not currently installed in their browser.
+ let engine = await SearchTestUtils.promiseNewSearchEngine({
+ url: `${gDataUrl}engineMaker.sjs?${JSON.stringify({
+ baseURL: gDataUrl,
+ name: "engine-pref",
+ method: "GET",
+ })}`,
+ });
+
+ engine.alias = "testEngine";
+
+ let engineId = engine.id;
+
+ Region._setHomeRegion("FR", false);
+
+ await Services.search.wrappedJSObject._maybeReloadEngines();
+
+ Assert.ok(
+ !(await Services.search.getEngineById(engineId)),
+ "Should not have added the duplicate engine"
+ );
+
+ engines = await Services.search.getEngines();
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["Test search engine", "engine-pref"],
+ "Should have the expected default engines"
+ );
+
+ let enginePref = await Services.search.getEngineByName("engine-pref");
+
+ Assert.equal(
+ enginePref.alias,
+ "",
+ "Should not have copied the alias from the duplicate engine"
+ );
+});