Bug 1336560 - Allow distributions to hide search engines. r?florian
MozReview-Commit-ID: 12lSpSPZTqm
--- a/toolkit/components/search/nsSearchService.js
+++ b/toolkit/components/search/nsSearchService.js
@@ -3686,16 +3686,30 @@ SearchService.prototype = {
region = Services.prefs.getCharPref("browser.search.region");
}
if (!region || !(region in searchSettings)) {
region = "default";
}
engineNames = searchSettings[region]["visibleDefaultEngines"];
}
+ // Remove any engine names that are supposed to be ignored.
+ // This pref is only allows in a partner distribution.
+ let branch = Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF);
+ if (isPartnerBuild() &&
+ branch.getPrefType("ignoredJAREngines") == branch.PREF_STRING) {
+ let ignoredJAREngines = branch.getCharPref("ignoredJAREngines")
+ .split(",");
+ let filteredEngineNames = engineNames.filter(e => !ignoredJAREngines.includes(e));
+ // Don't allow all engines to be hidden
+ if (filteredEngineNames.length > 0) {
+ engineNames = filteredEngineNames;
+ }
+ }
+
for (let name of engineNames) {
uris.push(APP_SEARCH_PREFIX + name + ".xml");
}
// Store this so that it can be used while writing the cache file.
this._visibleDefaultEngines = engineNames;
},
new file mode 100644
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_async_disthidden.js
@@ -0,0 +1,38 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* Test that the ignoredJAREngines pref hides search engines */
+
+"use strict";
+
+function run_test() {
+ let defaultBranch = Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF);
+ defaultBranch.setCharPref("ignoredJAREngines", "engine")
+ Services.prefs.setCharPref("distribution.id", "partner-1");
+
+ // The test engines used in this test need to be recognized as 'default'
+ // engines or the resource URL won't be used
+ let url = "resource://test/data/";
+ let resProt = Services.io.getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+ resProt.setSubstitution("search-plugins", Services.io.newURI(url));
+
+ do_check_false(Services.search.isInitialized);
+
+ run_next_test();
+}
+
+add_task(function* test_disthidden() {
+ yield asyncInit();
+
+ do_check_true(Services.search.isInitialized);
+
+ let engines = Services.search.getEngines();
+ // From data/list.json - only 5 out of 6
+ // since one is hidden
+ do_check_eq(engines.length, 5);
+
+ // Verify that the Test search engine is not available
+ let engine = Services.search.getEngineByName("Test search engine");
+ do_check_eq(engine, null);
+});
new file mode 100644
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_sync_disthidden.js
@@ -0,0 +1,32 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* Test that the ignoredJAREngines pref hides search engines */
+
+"use strict";
+
+function run_test() {
+ let defaultBranch = Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF);
+ defaultBranch.setCharPref("ignoredJAREngines", "engine");
+ Services.prefs.setCharPref("distribution.id", "partner-1");
+
+ // The test engines used in this test need to be recognized as 'default'
+ // engines or the resource URL won't be used
+ let url = "resource://test/data/";
+ let resProt = Services.io.getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+ resProt.setSubstitution("search-plugins", Services.io.newURI(url));
+
+ do_check_false(Services.search.isInitialized);
+
+ let engines = Services.search.getEngines();
+ // From data/list.json - only 5 out of 6
+ // since one is hidden
+ do_check_eq(engines.length, 5);
+
+ do_check_true(Services.search.isInitialized);
+
+ // Verify that the Test search engine is not available
+ let engine = Services.search.getEngineByName("Test search engine");
+ do_check_eq(engine, null);
+}
--- a/toolkit/components/search/tests/xpcshell/xpcshell.ini
+++ b/toolkit/components/search/tests/xpcshell/xpcshell.ini
@@ -67,24 +67,26 @@ support-files =
[test_resultDomain.js]
[test_searchSuggest.js]
[test_async.js]
[test_async_addon.js]
tags = addons
[test_async_addon_no_override.js]
tags = addons
[test_async_distribution.js]
+[test_async_disthidden.js]
[test_async_migration.js]
[test_async_profile_engine.js]
[test_sync.js]
[test_sync_addon.js]
tags = addons
[test_sync_addon_no_override.js]
tags = addons
[test_sync_distribution.js]
+[test_sync_disthidden.js]
[test_sync_fallback.js]
[test_sync_delay_fallback.js]
[test_sync_migration.js]
[test_sync_profile_engine.js]
[test_rel_searchform.js]
[test_remove_profile_engine.js]
[test_selectedEngine.js]
[test_geodefaults.js]
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -133,16 +133,17 @@ const DEFAULT_ENVIRONMENT_PREFS = new Ma
["browser.cache.disk.enable", {what: RECORD_PREF_VALUE}],
["browser.cache.disk.capacity", {what: RECORD_PREF_VALUE}],
["browser.cache.memory.enable", {what: RECORD_PREF_VALUE}],
["browser.cache.offline.enable", {what: RECORD_PREF_VALUE}],
["browser.formfill.enable", {what: RECORD_PREF_VALUE}],
["browser.newtabpage.enabled", {what: RECORD_PREF_VALUE}],
["browser.newtabpage.enhanced", {what: RECORD_PREF_VALUE}],
["browser.shell.checkDefaultBrowser", {what: RECORD_PREF_VALUE}],
+ ["browser.search.ignoredJAREngines", {what: RECORD_DEFAULTPREF_VALUE}],
["browser.search.suggest.enabled", {what: RECORD_PREF_VALUE}],
["browser.startup.homepage", {what: RECORD_PREF_STATE}],
["browser.startup.page", {what: RECORD_PREF_VALUE}],
["browser.tabs.animate", {what: RECORD_PREF_VALUE}],
["browser.urlbar.suggest.searches", {what: RECORD_PREF_VALUE}],
["browser.urlbar.userMadeSearchSuggestionsChoice", {what: RECORD_PREF_VALUE}],
["devtools.chrome.enabled", {what: RECORD_PREF_VALUE}],
["devtools.debugger.enabled", {what: RECORD_PREF_VALUE}],