browser_aboutdebugging_serviceworker_not_compatible.js (4003B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // This test started running during a GC and timing out on coverage platforms. 7 // See Bug 1526153. 8 requestLongerTimeout(2); 9 10 const TEST_DATA = [ 11 { 12 serviceWorkersEnabled: true, 13 privateBrowsingEnabled: false, 14 expectedMessage: false, 15 }, 16 { 17 serviceWorkersEnabled: false, 18 privateBrowsingEnabled: false, 19 expectedMessage: true, 20 }, 21 { 22 serviceWorkersEnabled: true, 23 privateBrowsingEnabled: true, 24 expectedMessage: true, 25 }, 26 { 27 serviceWorkersEnabled: false, 28 privateBrowsingEnabled: true, 29 expectedMessage: true, 30 }, 31 ]; 32 33 /** 34 * Check that the warning message for service workers is displayed if permanent private 35 * browsing is enabled or/and if service workers are disabled. 36 */ 37 add_task(async function testLocalRuntime() { 38 for (const testData of TEST_DATA) { 39 const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } = 40 testData; 41 42 info( 43 `Test warning message on this-firefox ` + 44 `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` + 45 `and with privateBrowsingEnabled: ${privateBrowsingEnabled}` 46 ); 47 48 await pushPref("dom.serviceWorkers.enabled", serviceWorkersEnabled); 49 await pushPref("browser.privatebrowsing.autostart", privateBrowsingEnabled); 50 51 const { document, tab, window } = await openAboutDebugging({ 52 // Even though this is a service worker test, we are not adding/removing 53 // workers here. Since the test is really fast it can create intermittent 54 // failures due to pending requests to update the worker list 55 // We are updating the worker list whenever the list of processes changes 56 // and this can happen very frequently, and it's hard to control from 57 // DevTools. 58 // Set enableWorkerUpdates to false to avoid intermittent failures. 59 enableWorkerUpdates: false, 60 }); 61 await selectThisFirefoxPage(document, window.AboutDebugging.store); 62 assertWarningMessage(document, expectedMessage); 63 await removeTab(tab); 64 } 65 }); 66 67 add_task(async function testRemoteRuntime() { 68 const { 69 remoteClientManager, 70 } = require("resource://devtools/client/shared/remote-debugging/remote-client-manager.js"); 71 72 // enable USB devices mocks 73 const mocks = new Mocks(); 74 const client = mocks.createUSBRuntime("1337id", { 75 deviceName: "Fancy Phone", 76 name: "Lorem ipsum", 77 }); 78 79 for (const testData of TEST_DATA) { 80 const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } = 81 testData; 82 83 info( 84 `Test warning message on mocked USB runtime ` + 85 `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` + 86 `and with privateBrowsingEnabled: ${privateBrowsingEnabled}` 87 ); 88 89 client.setPreference("dom.serviceWorkers.enabled", serviceWorkersEnabled); 90 client.setPreference( 91 "browser.privatebrowsing.autostart", 92 privateBrowsingEnabled 93 ); 94 95 const { document, tab, window } = await openAboutDebugging({ 96 enableWorkerUpdates: false, 97 }); 98 await selectThisFirefoxPage(document, window.AboutDebugging.store); 99 100 info("Checking a USB runtime"); 101 mocks.emitUSBUpdate(); 102 await connectToRuntime("Fancy Phone", document); 103 await waitForRuntimePage("Lorem ipsum", document); 104 105 assertWarningMessage(document, expectedMessage); 106 107 // We remove all clients in order to be able to simply connect to the runtime at 108 // every iteration of the loop without checking of the runtime is already connected. 109 info("Remove all remote clients"); 110 await remoteClientManager.removeAllClients(); 111 112 await removeTab(tab); 113 } 114 }); 115 116 function assertWarningMessage(doc, expectedMessage) { 117 const hasMessage = !!doc.querySelector(".qa-service-workers-warning"); 118 Assert.strictEqual( 119 hasMessage, 120 expectedMessage, 121 expectedMessage 122 ? "Warning message is displayed" 123 : "Warning message is not displayed" 124 ); 125 }