summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js b/toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js
new file mode 100644
index 0000000000..cfa9e56144
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_searchSuggest_cookies.js
@@ -0,0 +1,143 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Test that search suggestions from SearchSuggestionController.jsm don't store
+ * cookies.
+ */
+
+"use strict";
+
+const { SearchSuggestionController } = ChromeUtils.importESModule(
+ "resource://gre/modules/SearchSuggestionController.sys.mjs"
+);
+
+// We must make sure the FormHistoryStartup component is
+// initialized in order for it to respond to FormHistory
+// requests from nsFormAutoComplete.js.
+var formHistoryStartup = Cc[
+ "@mozilla.org/satchel/form-history-startup;1"
+].getService(Ci.nsIObserver);
+formHistoryStartup.observe(null, "profile-after-change", null);
+
+function countCacheEntries() {
+ info("Enumerating cache entries");
+ return new Promise(resolve => {
+ let storage = Services.cache2.diskCacheStorage(
+ Services.loadContextInfo.default
+ );
+ storage.asyncVisitStorage(
+ {
+ onCacheStorageInfo(num, consumption) {
+ this._num = num;
+ },
+ onCacheEntryInfo(uri) {
+ info("Found cache entry: " + uri.asciiSpec);
+ },
+ onCacheEntryVisitCompleted() {
+ resolve(this._num || 0);
+ },
+ },
+ true /* Do walk entries */
+ );
+ });
+}
+
+function countCookieEntries() {
+ info("Enumerating cookies");
+ let cookies = Services.cookies.cookies;
+ let cookieCount = 0;
+ for (let cookie of cookies) {
+ info(
+ "Cookie:" + cookie.rawHost + " " + JSON.stringify(cookie.originAttributes)
+ );
+ cookieCount++;
+ break;
+ }
+ return cookieCount;
+}
+
+let engines;
+
+add_setup(async function () {
+ await AddonTestUtils.promiseStartupManager();
+
+ Services.prefs.setBoolPref("browser.search.suggest.enabled", true);
+ Services.prefs.setBoolPref("browser.search.suggest.enabled.private", true);
+
+ registerCleanupFunction(async () => {
+ // Clean up all the data.
+ await new Promise(resolve =>
+ Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve)
+ );
+ Services.prefs.clearUserPref("browser.search.suggest.enabled");
+ Services.prefs.clearUserPref("browser.search.suggest.enabled.private");
+ });
+
+ let server = useHttpServer();
+ server.registerContentType("sjs", "sjs");
+
+ let unicodeName = ["\u30a8", "\u30c9"].join("");
+ engines = [
+ await SearchTestUtils.promiseNewSearchEngine({
+ url: `${gDataUrl}engineMaker.sjs?${JSON.stringify({
+ baseURL: gDataUrl,
+ name: unicodeName,
+ method: "GET",
+ })}`,
+ }),
+ await SearchTestUtils.promiseNewSearchEngine({
+ url: `${gDataUrl}engineMaker.sjs?${JSON.stringify({
+ baseURL: gDataUrl,
+ name: "engine two",
+ method: "GET",
+ })}`,
+ }),
+ ];
+
+ // Clean up all the data.
+ await new Promise(resolve =>
+ Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve)
+ );
+ Assert.equal(await countCacheEntries(), 0, "The cache should be empty");
+ Assert.equal(await countCookieEntries(), 0, "Should not find any cookie");
+});
+
+add_task(async function test_private_mode() {
+ await test_engine(true);
+});
+add_task(async function test_normal_mode() {
+ await test_engine(false);
+});
+
+async function test_engine(privateMode) {
+ info(`Testing ${privateMode ? "private" : "normal"} mode`);
+ let controller = new SearchSuggestionController();
+ let result = await controller.fetch("no results", privateMode, engines[0]);
+ Assert.equal(result.local.length, 0, "Should have no local suggestions");
+ Assert.equal(result.remote.length, 0, "Should have no remote suggestions");
+
+ result = await controller.fetch("cookie", privateMode, engines[1]);
+ Assert.equal(result.local.length, 0, "Should have no local suggestions");
+ Assert.equal(result.remote.length, 0, "Should have no remote suggestions");
+ Assert.equal(await countCacheEntries(), 0, "The cache should be empty");
+ Assert.equal(await countCookieEntries(), 0, "Should not find any cookie");
+
+ let firstPartyDomain1 = controller.firstPartyDomains.get(engines[0].name);
+ Assert.ok(
+ /^[\.a-z0-9-]+\.search\.suggestions\.mozilla/.test(firstPartyDomain1),
+ "Check firstPartyDomain1"
+ );
+
+ let firstPartyDomain2 = controller.firstPartyDomains.get(engines[1].name);
+ Assert.ok(
+ /^[\.a-z0-9-]+\.search\.suggestions\.mozilla/.test(firstPartyDomain2),
+ "Check firstPartyDomain2"
+ );
+
+ Assert.notEqual(
+ firstPartyDomain1,
+ firstPartyDomain2,
+ "Check firstPartyDomain id unique per engine"
+ );
+}