Dactyloidae/toolkit/components/search/tests/xpcshell/test_searchReset.js

137 lines
5 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
const NS_APP_USER_SEARCH_DIR = "UsrSrchPlugns";
const kTestEngineShortName = "engine";
const kWhiteListPrefName = "reset.whitelist";
function run_test() {
// Copy an engine to [profile]/searchplugin/
let dir = Services.dirsvc.get(NS_APP_USER_SEARCH_DIR, Ci.nsIFile);
if (!dir.exists())
dir.create(dir.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
do_get_file("data/engine.xml").copyTo(dir, kTestEngineShortName + ".xml");
let file = dir.clone();
file.append(kTestEngineShortName + ".xml");
do_check_true(file.exists());
do_check_false(Services.search.isInitialized);
Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF)
.setBoolPref("reset.enabled", true);
run_next_test();
}
function* removeLoadPathHash() {
// Remove the loadPathHash and re-initialize the search service.
let cache = yield promiseCacheData();
for (let engine of cache.engines) {
if (engine._shortName == kTestEngineShortName) {
delete engine._metaData["loadPathHash"];
break;
}
}
yield promiseSaveCacheData(cache);
yield asyncReInit();
}
add_task(function* test_no_prompt_when_valid_loadPathHash() {
yield asyncInit();
// test the engine is loaded ok.
let engine = Services.search.getEngineByName(kTestEngineName);
do_check_neq(engine, null);
yield promiseAfterCache();
// The test engine has been found in the profile directory and imported,
// so it shouldn't have a loadPathHash.
let metadata = yield promiseEngineMetadata();
do_check_true(kTestEngineShortName in metadata);
do_check_false("loadPathHash" in metadata[kTestEngineShortName]);
// After making it the currentEngine with the search service API,
// the test engine should have a valid loadPathHash.
Services.search.currentEngine = engine;
yield promiseAfterCache();
metadata = yield promiseEngineMetadata();
do_check_true("loadPathHash" in metadata[kTestEngineShortName]);
let loadPathHash = metadata[kTestEngineShortName].loadPathHash;
do_check_eq(typeof loadPathHash, "string");
do_check_eq(loadPathHash.length, 44);
// A search should not cause the search reset prompt.
let submission =
Services.search.currentEngine.getSubmission("foo", null, "searchbar");
do_check_eq(submission.uri.spec,
"http://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&aq=t");
});
add_task(function* test_promptURLs() {
yield removeLoadPathHash();
// The default should still be the test engine.
let currentEngine = Services.search.currentEngine;
do_check_eq(currentEngine.name, kTestEngineName);
// but the submission url should be about:searchreset
let url = (data, purpose) =>
currentEngine.getSubmission(data, null, purpose).uri.spec;
do_check_eq(url("foo", "searchbar"),
"about:searchreset?data=foo&purpose=searchbar");
do_check_eq(url("foo"), "about:searchreset?data=foo");
do_check_eq(url("", "searchbar"), "about:searchreset?purpose=searchbar");
do_check_eq(url(""), "about:searchreset");
do_check_eq(url("", ""), "about:searchreset");
// Calling the currentEngine setter for the same engine should
// prevent further prompts.
Services.search.currentEngine = Services.search.currentEngine;
do_check_eq(url("foo", "searchbar"),
"http://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&aq=t");
// And the loadPathHash should be back.
yield promiseAfterCache();
let metadata = yield promiseEngineMetadata();
do_check_true("loadPathHash" in metadata[kTestEngineShortName]);
let loadPathHash = metadata[kTestEngineShortName].loadPathHash;
do_check_eq(typeof loadPathHash, "string");
do_check_eq(loadPathHash.length, 44);
});
add_task(function* test_whitelist() {
yield removeLoadPathHash();
// The default should still be the test engine.
let currentEngine = Services.search.currentEngine;
do_check_eq(currentEngine.name, kTestEngineName);
let expectPrompt = shouldPrompt => {
let expectedURL =
shouldPrompt ? "about:searchreset?data=foo&purpose=searchbar"
: "http://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&aq=t";
let url = currentEngine.getSubmission("foo", null, "searchbar").uri.spec;
do_check_eq(url, expectedURL);
};
expectPrompt(true);
// Unless we whitelist our test engine.
let branch = Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF);
let initialWhiteList = branch.getCharPref(kWhiteListPrefName);
branch.setCharPref(kWhiteListPrefName, "example.com,test.tld");
expectPrompt(true);
branch.setCharPref(kWhiteListPrefName, "www.google.com");
expectPrompt(false);
branch.setCharPref(kWhiteListPrefName, "example.com,www.google.com,test.tld");
expectPrompt(false);
// The loadPathHash should not be back after the prompt was skipped due to the
// whitelist.
yield asyncReInit();
let metadata = yield promiseEngineMetadata();
do_check_false("loadPathHash" in metadata[kTestEngineShortName]);
branch.setCharPref(kWhiteListPrefName, initialWhiteList);
expectPrompt(true);
});