test_remote_settings_utils_telemetry.js (2438B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const { TelemetryController } = ChromeUtils.importESModule( 7 "resource://gre/modules/TelemetryController.sys.mjs" 8 ); 9 10 const server = new HttpServer(); 11 server.start(-1); 12 registerCleanupFunction(() => server.stop(() => {})); 13 const SERVER_BASE_URL = `http://localhost:${server.identity.primaryPort}`; 14 15 const proxyServer = new HttpServer(); 16 proxyServer.start(-1); 17 const PROXY_PORT = proxyServer.identity.primaryPort; 18 proxyServer.stop(); 19 20 server.registerPathHandler("/destination", (request, response) => { 21 response.setStatusLine(null, 412); 22 }); 23 24 async function assertTelemetryEvents(expectedEvents) { 25 await TelemetryTestUtils.assertEvents(expectedEvents, { 26 category: "service_request", 27 method: "bypass", 28 }); 29 } 30 31 add_setup(async () => { 32 await TelemetryController.testSetup(); 33 }); 34 35 add_task(async function test_telemetry() { 36 const DESTINATION_URL = `${SERVER_BASE_URL}/destination`; 37 38 { 39 let res = await Utils.fetch(DESTINATION_URL); 40 Assert.equal(res.status, 412, "fetch without proxy succeeded"); 41 } 42 await assertTelemetryEvents([]); 43 44 Services.prefs.setIntPref("network.proxy.type", 1); 45 Services.prefs.setStringPref("network.proxy.http", "127.0.0.1"); 46 Services.prefs.setIntPref("network.proxy.http_port", PROXY_PORT); 47 Services.prefs.setBoolPref("network.proxy.allow_hijacking_localhost", true); 48 49 { 50 let res = await Utils.fetch(DESTINATION_URL); 51 Assert.equal(res.status, 412, "fetch with broken proxy succeeded"); 52 } 53 // Note: failover handled by HttpChannel, hence no failover here. 54 await assertTelemetryEvents([]); 55 56 // Disable HttpChannel failover in favor of Utils.fetch's implementation. 57 Services.prefs.setBoolPref("network.proxy.failover_direct", false); 58 { 59 let res = await Utils.fetch(DESTINATION_URL); 60 Assert.equal(res.status, 412, "fetch succeeded with bypassProxy feature"); 61 } 62 await assertTelemetryEvents([ 63 { 64 category: "service_request", 65 method: "bypass", 66 object: "proxy_info", 67 value: "remote-settings", 68 extra: { 69 source: "prefs", 70 type: "manual", 71 }, 72 }, 73 ]); 74 75 Services.prefs.setBoolPref("network.proxy.allow_bypass", false); 76 await Assert.rejects( 77 Utils.fetch(DESTINATION_URL), 78 /NetworkError/, 79 "Request without failover fails" 80 ); 81 await assertTelemetryEvents([]); 82 });