summaryrefslogtreecommitdiff
path: root/toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js b/toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js
new file mode 100644
index 0000000000..299121c4f4
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_require_engines_in_cache.js
@@ -0,0 +1,74 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function run_test() {
+ removeMetadata();
+ removeCacheFile();
+
+ do_load_manifest("data/chrome.manifest");
+
+ configureToLoadJarEngines();
+ do_check_false(Services.search.isInitialized);
+
+ run_next_test();
+}
+
+add_task(function* ignore_cache_files_without_engines() {
+ let commitPromise = promiseAfterCache()
+ yield asyncInit();
+
+ let engineCount = Services.search.getEngines().length;
+ do_check_eq(engineCount, 1);
+
+ // Wait for the file to be saved to disk, so that we can mess with it.
+ yield commitPromise;
+
+ // Remove all engines from the cache file.
+ let cache = yield promiseCacheData();
+ cache.engines = [];
+ yield promiseSaveCacheData(cache);
+
+ // Check that after an async re-initialization, we still have the same engine count.
+ commitPromise = promiseAfterCache()
+ yield asyncReInit();
+ do_check_eq(engineCount, Services.search.getEngines().length);
+ yield commitPromise;
+
+ // Check that after a sync re-initialization, we still have the same engine count.
+ yield promiseSaveCacheData(cache);
+ let unInitPromise = waitForSearchNotification("uninit-complete");
+ let reInitPromise = asyncReInit();
+ yield unInitPromise;
+ do_check_false(Services.search.isInitialized);
+ // Synchronously check the engine count; will force a sync init.
+ do_check_eq(engineCount, Services.search.getEngines().length);
+ do_check_true(Services.search.isInitialized);
+ yield reInitPromise;
+});
+
+add_task(function* skip_writing_cache_without_engines() {
+ let unInitPromise = waitForSearchNotification("uninit-complete");
+ let reInitPromise = asyncReInit();
+ yield unInitPromise;
+
+ // Configure so that no engines will be found.
+ do_check_true(removeCacheFile());
+ let resProt = Services.io.getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+ resProt.setSubstitution("search-plugins",
+ Services.io.newURI("about:blank", null, null));
+
+ // Let the async-reInit happen.
+ yield reInitPromise;
+ do_check_eq(0, Services.search.getEngines().length);
+
+ // Trigger yet another re-init, to flush of any pending cache writing task.
+ unInitPromise = waitForSearchNotification("uninit-complete");
+ reInitPromise = asyncReInit();
+ yield unInitPromise;
+
+ // Now check that a cache file doesn't exist.
+ do_check_false(removeCacheFile());
+
+ yield reInitPromise;
+});