Bug 1460190 - Handle search regions with default but no enginelist. r?adw
MozReview-Commit-ID: FJM1Q9DLXWR
--- a/toolkit/components/search/nsSearchService.js
+++ b/toolkit/components/search/nsSearchService.js
@@ -3495,23 +3495,25 @@ SearchService.prototype = {
}
}
}
let searchRegion;
if (Services.prefs.prefHasUserValue("browser.search.region")) {
searchRegion = Services.prefs.getCharPref("browser.search.region");
}
- if (!searchRegion || !(searchRegion in searchSettings)) {
- searchRegion = "default";
- }
// Fallback to building a list based on the regions in the JSON
if (!engineNames || !engineNames.length) {
- engineNames = searchSettings[searchRegion].visibleDefaultEngines;
+ if (searchRegion && searchRegion in searchSettings &&
+ "visibleDefaultEngines" in searchSettings[searchRegion]) {
+ engineNames = searchSettings[searchRegion].visibleDefaultEngines;
+ } else {
+ engineNames = searchSettings.default.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")
@@ -3525,17 +3527,18 @@ SearchService.prototype = {
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;
- if ("searchDefault" in searchSettings[searchRegion]) {
+ if (searchRegion && searchRegion in searchSettings &&
+ "searchDefault" in searchSettings[searchRegion]) {
this._searchDefault = searchSettings[searchRegion].searchDefault;
} else {
this._searchDefault = searchSettings.default.searchDefault;
}
},
_parseListTxt: function SRCH_SVC_parseListTxt(list, uris) {
let names = list.split("\n").filter(n => !!n);