summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_settings_duplicate.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_settings_duplicate.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_settings_duplicate.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_settings_duplicate.js b/toolkit/components/search/tests/xpcshell/test_settings_duplicate.js
new file mode 100644
index 0000000000..b269fcafca
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_settings_duplicate.js
@@ -0,0 +1,134 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Test initializing with an engine that's a duplicate of an app-provided
+ * engine.
+ */
+
+"use strict";
+
+const { getAppInfo } = ChromeUtils.importESModule(
+ "resource://testing-common/AppInfo.sys.mjs"
+);
+
+const enginesSettings = {
+ version: SearchUtils.SETTINGS_VERSION,
+ buildID: "TBD",
+ appVersion: "TBD",
+ locale: "en-US",
+ metaData: {
+ searchDefault: "Test search engine",
+ searchDefaultHash: "TBD",
+ // Intentionally in the past, but shouldn't actually matter for this test.
+ searchDefaultExpir: 1567694909002,
+ current: "",
+ hash: "TBD",
+ visibleDefaultEngines:
+ "engine,engine-pref,engine-rel-searchform-purpose,engine-chromeicon,engine-resourceicon,engine-reordered",
+ visibleDefaultEnginesHash: "TBD",
+ },
+ engines: [
+ {
+ _metaData: { alias: null },
+ _isAppProvided: true,
+ _name: "engine1",
+ },
+ {
+ _metaData: { alias: null },
+ _isAppProvided: true,
+ _name: "engine2",
+ },
+ // This is a user-installed engine - the only one that was listed due to the
+ // original issue.
+ {
+ _name: "engine1",
+ _shortName: "engine1",
+ _loadPath: "[test]oldduplicateversion",
+ description: "An old near duplicate version of engine1",
+ _iconURL:
+ "data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9/AAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB/WvXoYiIiIfEZfWBSIiIEGi/foqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF+iDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ _iconMapObj: {
+ '{"width":16,"height":16}':
+ "data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9/AAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB/WvXoYiIiIfEZfWBSIiIEGi/foqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF+iDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ },
+ _metaData: {
+ order: 1,
+ },
+ _urls: [
+ {
+ template: "https://example.com/?myquery={searchTerms}",
+ rels: [],
+ resultDomain: "example.com",
+ params: [],
+ },
+ ],
+ queryCharset: "UTF-8",
+ filePath: "TBD",
+ },
+ ],
+};
+
+add_task(async function setup() {
+ await AddonTestUtils.promiseStartupManager();
+
+ // Allow telemetry probes which may otherwise be disabled for some applications (e.g. Thunderbird)
+ Services.prefs.setBoolPref(
+ "toolkit.telemetry.testing.overrideProductsCheck",
+ true
+ );
+
+ await SearchTestUtils.useTestEngines("data1");
+ Services.prefs.setCharPref(SearchUtils.BROWSER_SEARCH_PREF + "region", "US");
+ Services.locale.availableLocales = ["en-US"];
+ Services.locale.requestedLocales = ["en-US"];
+
+ // We dynamically generate the hashes because these depend on the profile.
+ enginesSettings.metaData.searchDefaultHash = SearchUtils.getVerificationHash(
+ enginesSettings.metaData.searchDefault
+ );
+ enginesSettings.metaData.hash = SearchUtils.getVerificationHash(
+ enginesSettings.metaData.current
+ );
+ enginesSettings.metaData.visibleDefaultEnginesHash =
+ SearchUtils.getVerificationHash(
+ enginesSettings.metaData.visibleDefaultEngines
+ );
+ let appInfo = getAppInfo();
+ enginesSettings.buildID = appInfo.platformBuildID;
+ enginesSettings.appVersion = appInfo.version;
+
+ await IOUtils.write(
+ PathUtils.join(PathUtils.profileDir, SETTINGS_FILENAME),
+ new TextEncoder().encode(JSON.stringify(enginesSettings)),
+ { compress: true }
+ );
+});
+
+add_task(async function test_cached_duplicate() {
+ info("init search service");
+
+ let initResult = await Services.search.init();
+
+ info("init'd search service");
+ Assert.ok(
+ Components.isSuccessCode(initResult),
+ "Should have successfully created the search service"
+ );
+
+ let engine = await Services.search.getEngineByName("engine1");
+ let submission = engine.getSubmission("foo");
+ Assert.equal(
+ submission.uri.spec,
+ "https://1.example.com/search?q=foo",
+ "Should have not changed the app provided engine."
+ );
+
+ let engines = await Services.search.getEngines();
+
+ Assert.deepEqual(
+ engines.map(e => e.name),
+ ["engine1", "engine2"],
+ "Should have the expected default engines"
+ );
+});