155 lines
5.5 KiB
JavaScript
155 lines
5.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const kDefaultEngineName = "engine1";
|
|
|
|
add_setup(async function () {
|
|
useHttpServer();
|
|
await AddonTestUtils.promiseStartupManager();
|
|
await SearchTestUtils.useTestEngines("data1");
|
|
Assert.ok(!Services.search.isInitialized);
|
|
Services.prefs.setBoolPref(
|
|
"browser.search.removeEngineInfobar.enabled",
|
|
false
|
|
);
|
|
});
|
|
|
|
// Check that the default engine matches the defaultenginename pref
|
|
add_task(async function test_defaultEngine() {
|
|
await Services.search.init();
|
|
await SearchTestUtils.installOpenSearchEngine({
|
|
url: `${gDataUrl}engine.xml`,
|
|
});
|
|
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
});
|
|
|
|
// Setting the search engine should be persisted across restarts.
|
|
add_task(async function test_persistAcrossRestarts() {
|
|
// Set the engine through the API.
|
|
await Services.search.setDefault(
|
|
Services.search.getEngineByName(kTestEngineName),
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
|
|
await promiseAfterSettings();
|
|
|
|
// Check that the a hash was saved.
|
|
let metadata = await promiseGlobalMetadata();
|
|
Assert.equal(metadata.defaultEngineIdHash.length, 44);
|
|
|
|
// Re-init and check the engine is still the same.
|
|
Services.search.wrappedJSObject.reset();
|
|
await Services.search.init(true);
|
|
Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
|
|
|
|
// Cleanup (set the engine back to default).
|
|
Services.search.resetToAppDefaultEngine();
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
});
|
|
|
|
// An engine set without a valid hash should be ignored.
|
|
add_task(async function test_ignoreInvalidHash() {
|
|
// Set the engine through the API.
|
|
await Services.search.setDefault(
|
|
Services.search.getEngineByName(kTestEngineName),
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
|
|
await promiseAfterSettings();
|
|
|
|
// Then mess with the file (make the hash invalid).
|
|
let metadata = await promiseGlobalMetadata();
|
|
metadata.defaultEngineIdHash = "invalid";
|
|
await promiseSaveGlobalMetadata(metadata);
|
|
|
|
// Re-init the search service, and check that the json file is ignored.
|
|
Services.search.wrappedJSObject.reset();
|
|
await Services.search.init(true);
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
});
|
|
|
|
// Resetting the engine to the default should remove the saved value.
|
|
add_task(async function test_settingToDefault() {
|
|
// Set the engine through the API.
|
|
await Services.search.setDefault(
|
|
Services.search.getEngineByName(kTestEngineName),
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
|
|
await promiseAfterSettings();
|
|
|
|
// Check that the current engine was saved.
|
|
let metadata = await promiseGlobalMetadata();
|
|
let currentEngine = Services.search.getEngineByName(kTestEngineName);
|
|
Assert.equal(metadata.defaultEngineId, currentEngine.id);
|
|
|
|
// Then set the engine back to the default through the API.
|
|
await Services.search.setDefault(
|
|
Services.search.getEngineByName(kDefaultEngineName),
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
await promiseAfterSettings();
|
|
|
|
// Check that the current engine is no longer saved in the JSON file.
|
|
metadata = await promiseGlobalMetadata();
|
|
Assert.equal(metadata.defaultEngineId, "");
|
|
});
|
|
|
|
add_task(async function test_resetToOriginalDefaultEngine() {
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
|
|
await Services.search.setDefault(
|
|
Services.search.getEngineByName(kTestEngineName),
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
Assert.equal(Services.search.defaultEngine.name, kTestEngineName);
|
|
await promiseAfterSettings();
|
|
|
|
Services.search.resetToAppDefaultEngine();
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
await promiseAfterSettings();
|
|
});
|
|
|
|
add_task(async function test_fallback_kept_after_restart() {
|
|
// Set current engine to a default engine that isn't the original default.
|
|
let builtInEngines = await Services.search.getAppProvidedEngines();
|
|
let nonDefaultBuiltInEngine;
|
|
for (let engine of builtInEngines) {
|
|
if (engine.name != kDefaultEngineName) {
|
|
nonDefaultBuiltInEngine = engine;
|
|
break;
|
|
}
|
|
}
|
|
await Services.search.setDefault(
|
|
nonDefaultBuiltInEngine,
|
|
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
|
|
);
|
|
Assert.equal(
|
|
Services.search.defaultEngine.name,
|
|
nonDefaultBuiltInEngine.name
|
|
);
|
|
await promiseAfterSettings();
|
|
|
|
// Remove that engine...
|
|
await Services.search.removeEngine(nonDefaultBuiltInEngine);
|
|
// The engine being a default (built-in) one, it should be hidden
|
|
// rather than actually removed.
|
|
Assert.ok(nonDefaultBuiltInEngine.hidden);
|
|
|
|
// Using the defaultEngine getter should force a fallback to the
|
|
// original default engine.
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
|
|
// Restoring the default engines should unhide our built-in test
|
|
// engine, but not change the value of defaultEngine.
|
|
Services.search.restoreDefaultEngines();
|
|
Assert.ok(!nonDefaultBuiltInEngine.hidden);
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
await promiseAfterSettings();
|
|
|
|
// After a restart, the defaultEngine value should still be unchanged.
|
|
Services.search.wrappedJSObject.reset();
|
|
await Services.search.init(true);
|
|
Assert.equal(Services.search.defaultEngine.name, kDefaultEngineName);
|
|
});
|