diff options
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_searchReset.js')
-rw-r--r-- | toolkit/components/search/tests/xpcshell/test_searchReset.js | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_searchReset.js b/toolkit/components/search/tests/xpcshell/test_searchReset.js new file mode 100644 index 000000000..316069c95 --- /dev/null +++ b/toolkit/components/search/tests/xpcshell/test_searchReset.js @@ -0,0 +1,137 @@ +/* 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); +}); |