Bug 438599 - the currentEngine attribute of nsIBrowserSearchService should never be null, r=Mossop.

This commit is contained in:
Florian Quèze 2015-09-04 11:39:08 +02:00
parent 8fb7a6f8bd
commit 75810b09b4
3 changed files with 34 additions and 0 deletions

View File

@ -4916,6 +4916,14 @@ SearchService.prototype = {
this._currentEngine = this._originalDefaultEngine;
if (!this._currentEngine || this._currentEngine.hidden)
this._currentEngine = this._getSortedEngines(false)[0];
if (!this._currentEngine) {
// Last resort fallback: unhide the original default engine.
this._currentEngine = this._originalDefaultEngine;
if (this._currentEngine)
this._currentEngine.hidden = false;
}
return this._currentEngine;
},

View File

@ -0,0 +1,25 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
function run_test() {
do_check_true(Services.search.getVisibleEngines().length > 1);
do_check_true(Services.search.isInitialized);
// Remove the current engine...
let currentEngine = Services.search.currentEngine;
Services.search.removeEngine(currentEngine);
// ... and verify a new current engine has been set.
do_check_neq(Services.search.currentEngine.name, currentEngine.name);
do_check_true(currentEngine.hidden);
// Remove all the other engines.
Services.search.getVisibleEngines().forEach(Services.search.removeEngine);
do_check_eq(Services.search.getVisibleEngines().length, 0);
// Verify the original default engine is used as a fallback and no
// longer hidden.
do_check_eq(Services.search.currentEngine.name, currentEngine.name);
do_check_false(currentEngine.hidden);
do_check_eq(Services.search.getVisibleEngines().length, 1);
}

View File

@ -82,3 +82,4 @@ tags = addons
[test_selectedEngine.js]
[test_geodefaults.js]
[test_hidden.js]
[test_currentEngine_fallback.js]