summaryrefslogtreecommitdiffstats
path: root/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_serviceworker_not_compatible.js
blob: 641207a0311143c8cd396f8733d8e2a7646e1cf7 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// This test started running during a GC and timing out on coverage platforms.
// See Bug 1526153.
requestLongerTimeout(2);

const TEST_DATA = [
  {
    serviceWorkersEnabled: true,
    privateBrowsingEnabled: false,
    expectedMessage: false,
  },
  {
    serviceWorkersEnabled: false,
    privateBrowsingEnabled: false,
    expectedMessage: true,
  },
  {
    serviceWorkersEnabled: true,
    privateBrowsingEnabled: true,
    expectedMessage: true,
  },
  {
    serviceWorkersEnabled: false,
    privateBrowsingEnabled: true,
    expectedMessage: true,
  },
];

/**
 * Check that the warning message for service workers is displayed if permanent private
 * browsing is enabled or/and if service workers are disabled.
 */
add_task(async function testLocalRuntime() {
  for (const testData of TEST_DATA) {
    const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } =
      testData;

    info(
      `Test warning message on this-firefox ` +
        `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` +
        `and with privateBrowsingEnabled: ${privateBrowsingEnabled}`
    );

    await pushPref("dom.serviceWorkers.enabled", serviceWorkersEnabled);
    await pushPref("browser.privatebrowsing.autostart", privateBrowsingEnabled);

    const { document, tab, window } = await openAboutDebugging({
      // Even though this is a service worker test, we are not adding/removing
      // workers here. Since the test is really fast it can create intermittent
      // failures due to pending requests to update the worker list
      // We are updating the worker list whenever the list of processes changes
      // and this can happen very frequently, and it's hard to control from
      // DevTools.
      // Set enableWorkerUpdates to false to avoid intermittent failures.
      enableWorkerUpdates: false,
    });
    await selectThisFirefoxPage(document, window.AboutDebugging.store);
    assertWarningMessage(document, expectedMessage);
    await removeTab(tab);
  }
});

add_task(async function testRemoteRuntime() {
  const {
    remoteClientManager,
  } = require("resource://devtools/client/shared/remote-debugging/remote-client-manager.js");

  // enable USB devices mocks
  const mocks = new Mocks();
  const client = mocks.createUSBRuntime("1337id", {
    deviceName: "Fancy Phone",
    name: "Lorem ipsum",
  });

  for (const testData of TEST_DATA) {
    const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } =
      testData;

    info(
      `Test warning message on mocked USB runtime ` +
        `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` +
        `and with privateBrowsingEnabled: ${privateBrowsingEnabled}`
    );

    client.setPreference("dom.serviceWorkers.enabled", serviceWorkersEnabled);
    client.setPreference(
      "browser.privatebrowsing.autostart",
      privateBrowsingEnabled
    );

    const { document, tab, window } = await openAboutDebugging({
      enableWorkerUpdates: false,
    });
    await selectThisFirefoxPage(document, window.AboutDebugging.store);

    info("Checking a USB runtime");
    mocks.emitUSBUpdate();
    await connectToRuntime("Fancy Phone", document);
    await selectRuntime("Fancy Phone", "Lorem ipsum", document);

    assertWarningMessage(document, expectedMessage);

    // We remove all clients in order to be able to simply connect to the runtime at
    // every iteration of the loop without checking of the runtime is already connected.
    info("Remove all remote clients");
    await remoteClientManager.removeAllClients();

    await removeTab(tab);
  }
});

function assertWarningMessage(doc, expectedMessage) {
  const hasMessage = !!doc.querySelector(".qa-service-workers-warning");
  Assert.strictEqual(
    hasMessage,
    expectedMessage,
    expectedMessage
      ? "Warning message is displayed"
      : "Warning message is not displayed"
  );
}