summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_searchReset.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_searchReset.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_searchReset.js137
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);
+});