summaryrefslogtreecommitdiffstats
path: root/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_cookie_banners_promo.js
blob: 2f9c87e1e1a53010bb37122182be1ff2453f78ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const { ASRouter } = ChromeUtils.importESModule(
  "resource:///modules/asrouter/ASRouter.sys.mjs"
);

const promoImgSrc = "chrome://browser/content/assets/cookie-banners-begone.svg";

async function resetState() {
  await Promise.all([ASRouter.resetMessageState(), ASRouter.unblockAll()]);
}

add_setup(async function setup() {
  registerCleanupFunction(resetState);
  await resetState();
});

add_task(async function test_cookie_banners_promo_user_set_prefs() {
  await resetState();
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.promo.cookiebanners.enabled", true],
      // The message's targeting is looking for the following prefs not being 0
      ["cookiebanners.service.mode", 0],
      ["cookiebanners.service.mode.privateBrowsing", 0],
    ],
  });
  await ASRouter.onPrefChange();

  const { win, tab } = await openTabAndWaitForRender();

  await SpecialPowers.spawn(tab, [promoImgSrc], async function (imgSrc) {
    const promoImage = content.document.querySelector(
      ".promo-image-large > img"
    );
    Assert.notStrictEqual(
      promoImage?.src,
      imgSrc,
      "Cookie banner reduction promo is not shown"
    );
  });

  await BrowserTestUtils.closeWindow(win);
  await SpecialPowers.popPrefEnv();
});

add_task(async function test_cookie_banners_promo() {
  await resetState();
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.promo.cookiebanners.enabled", true],
      ["cookiebanners.service.mode.privateBrowsing", 1],
    ],
  });
  await ASRouter.onPrefChange();

  const sandbox = sinon.createSandbox();
  const expectedUrl = Services.urlFormatter.formatURL(
    "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/cookie-banner-reduction"
  );

  const { win, tab } = await openTabAndWaitForRender();
  let triedToOpenTab = new Promise(resolve => {
    sandbox.stub(win, "openLinkIn").callsFake((url, where) => {
      is(url, expectedUrl, "The link should open the expected URL");
      is(
        where,
        "tabshifted",
        "The link should open the expected URL in a new foreground tab"
      );
      resolve();
    });
  });

  await SpecialPowers.spawn(tab, [promoImgSrc], async function (imgSrc) {
    const promoImage = content.document.querySelector(
      ".promo-image-large > img"
    );
    Assert.strictEqual(
      promoImage?.src,
      imgSrc,
      "Cookie banner reduction promo is shown"
    );
    let linkEl = content.document.getElementById("private-browsing-promo-link");
    linkEl.click();
  });

  await triedToOpenTab;
  sandbox.restore();

  ok(true, "The link was clicked and the new tab opened");

  let { win: win2, tab: tab2 } = await openTabAndWaitForRender();

  await SpecialPowers.spawn(tab2, [promoImgSrc], async function (imgSrc) {
    const promoImage = content.document.querySelector(
      ".promo-image-large > img"
    );
    Assert.notStrictEqual(
      promoImage?.src,
      imgSrc,
      "Cookie banner reduction promo is no longer shown after clicking the link"
    );
  });

  await BrowserTestUtils.closeWindow(win2);
  await BrowserTestUtils.closeWindow(win);
  await SpecialPowers.popPrefEnv();
});