Bug 1890689 Don't pretend to pre-buffer with DynamicResampler r=pehrsons
[gecko.git] / browser / modules / test / unit / test_discovery.js
blob08f67273a66779b07789745baeee4c5b8c70a6f4
1 /* Any copyright is dedicated to the Public Domain.
2  * http://creativecommons.org/publicdomain/zero/1.0/
3  */
5 "use strict";
7 // ClientID fails without...
8 do_get_profile();
10 const { TestUtils } = ChromeUtils.importESModule(
11   "resource://testing-common/TestUtils.sys.mjs"
13 const { ClientID } = ChromeUtils.importESModule(
14   "resource://gre/modules/ClientID.sys.mjs"
16 const { Discovery } = ChromeUtils.importESModule(
17   "resource:///modules/Discovery.sys.mjs"
19 const { ContextualIdentityService } = ChromeUtils.importESModule(
20   "resource://gre/modules/ContextualIdentityService.sys.mjs"
23 const TAAR_COOKIE_NAME = "taarId";
25 add_task(async function test_discovery() {
26   let uri = Services.io.newURI("https://example.com/foobar");
28   // Ensure the prefs we need
29   Services.prefs.setBoolPref("browser.discovery.enabled", true);
30   Services.prefs.setBoolPref("browser.discovery.containers.enabled", true);
31   Services.prefs.setBoolPref("datareporting.healthreport.uploadEnabled", true);
32   Services.prefs.setCharPref("browser.discovery.sites", uri.host);
34   registerCleanupFunction(() => {
35     Services.prefs.clearUserPref("browser.discovery.enabled");
36     Services.prefs.clearUserPref("browser.discovery.containers.enabled");
37     Services.prefs.clearUserPref("browser.discovery.sites");
38     Services.prefs.clearUserPref("datareporting.healthreport.uploadEnabled");
39   });
41   // This is normally initialized by telemetry, force id creation.  This results
42   // in Discovery setting the cookie.
43   await ClientID.getClientID();
44   await Discovery.update();
46   ok(
47     Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {}),
48     "cookie exists"
49   );
50   ok(
51     !Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {
52       privateBrowsingId: 1,
53     }),
54     "no private cookie exists"
55   );
56   ContextualIdentityService.getPublicIdentities().forEach(identity => {
57     let { userContextId } = identity;
58     equal(
59       Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {
60         userContextId,
61       }),
62       identity.public,
63       "cookie exists"
64     );
65   });
67   // Test the addition of a new container.
68   let changed = TestUtils.topicObserved("cookie-changed", subject => {
69     let cookie = subject
70       .QueryInterface(Ci.nsICookieNotification)
71       .cookie.QueryInterface(Ci.nsICookie);
72     equal(cookie.name, TAAR_COOKIE_NAME, "taar cookie exists");
73     equal(cookie.host, uri.host, "cookie exists for host");
74     equal(
75       cookie.originAttributes.userContextId,
76       container.userContextId,
77       "cookie userContextId is correct"
78     );
79     return true;
80   });
81   let container = ContextualIdentityService.create(
82     "New Container",
83     "Icon",
84     "Color"
85   );
86   await changed;
88   // Test disabling
89   Discovery.enabled = false;
90   // Wait for the update to remove the cookie.
91   await TestUtils.waitForCondition(() => {
92     return !Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {});
93   });
95   ContextualIdentityService.getPublicIdentities().forEach(identity => {
96     let { userContextId } = identity;
97     ok(
98       !Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {
99         userContextId,
100       }),
101       "no cookie exists"
102     );
103   });
105   // turn off containers
106   Services.prefs.setBoolPref("browser.discovery.containers.enabled", false);
108   Discovery.enabled = true;
109   await TestUtils.waitForCondition(() => {
110     return Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {});
111   });
112   // make sure we did not set cookies on containers
113   ContextualIdentityService.getPublicIdentities().forEach(identity => {
114     let { userContextId } = identity;
115     ok(
116       !Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {
117         userContextId,
118       }),
119       "no cookie exists"
120     );
121   });
123   // Make sure clientId changes update discovery
124   changed = TestUtils.topicObserved("cookie-changed", subject => {
125     let notification = subject.QueryInterface(Ci.nsICookieNotification);
126     if (notification.action != Ci.nsICookieNotification.COOKIE_ADDED) {
127       return false;
128     }
129     let cookie = notification.cookie.QueryInterface(Ci.nsICookie);
130     equal(cookie.name, TAAR_COOKIE_NAME, "taar cookie exists");
131     equal(cookie.host, uri.host, "cookie exists for host");
132     return true;
133   });
134   await ClientID.removeClientID();
135   await ClientID.getClientID();
136   await changed;
138   // Make sure disabling telemetry disables discovery.
139   Services.prefs.setBoolPref("datareporting.healthreport.uploadEnabled", false);
140   await TestUtils.waitForCondition(() => {
141     return !Services.cookies.cookieExists(uri.host, "/", TAAR_COOKIE_NAME, {});
142   });