Bug 1956093 - Make DAPTelemetrySender toggle without restart r=simonf,firefox-desktop-core-reviewers ,mconley,chutten
Move the data upload pref check into each `sendReport` call instead of checking only at startup. Also fixup various things in test_dap.js. Differential Revision: https://phabricator.services.mozilla.com/D243247
This commit is contained in:
@@ -3021,12 +3021,7 @@ BrowserGlue.prototype = {
|
|||||||
|
|
||||||
{
|
{
|
||||||
name: "DAPTelemetrySender.startup",
|
name: "DAPTelemetrySender.startup",
|
||||||
condition:
|
condition: AppConstants.MOZ_TELEMETRY_REPORTING,
|
||||||
AppConstants.MOZ_TELEMETRY_REPORTING &&
|
|
||||||
Services.prefs.getBoolPref(
|
|
||||||
"datareporting.healthreport.uploadEnabled",
|
|
||||||
false
|
|
||||||
),
|
|
||||||
task: async () => {
|
task: async () => {
|
||||||
await lazy.DAPTelemetrySender.startup();
|
await lazy.DAPTelemetrySender.startup();
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||||||
ObliviousHTTP: "resource://gre/modules/ObliviousHTTP.sys.mjs",
|
ObliviousHTTP: "resource://gre/modules/ObliviousHTTP.sys.mjs",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyPreferenceGetter(
|
||||||
|
lazy,
|
||||||
|
"gTelemetryEnabled",
|
||||||
|
"datareporting.healthreport.uploadEnabled",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
XPCOMUtils.defineLazyPreferenceGetter(
|
XPCOMUtils.defineLazyPreferenceGetter(
|
||||||
lazy,
|
lazy,
|
||||||
"gDapEndpoint",
|
"gDapEndpoint",
|
||||||
@@ -284,6 +291,11 @@ export const DAPTelemetrySender = new (class {
|
|||||||
* @resolves {undefined} Once the attempt to send the report completes, whether or not it was successful.
|
* @resolves {undefined} Once the attempt to send the report completes, whether or not it was successful.
|
||||||
*/
|
*/
|
||||||
async sendReport(leader_endpoint, task_id, report, abortSignal, options) {
|
async sendReport(leader_endpoint, task_id, report, abortSignal, options) {
|
||||||
|
// If telemetry disabled, don't upload DAP reports either.
|
||||||
|
if (!lazy.gTelemetryEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const upload_path = leader_endpoint + "/tasks/" + task_id + "/reports";
|
const upload_path = leader_endpoint + "/tasks/" + task_id + "/reports";
|
||||||
try {
|
try {
|
||||||
let requestOptions = {
|
let requestOptions = {
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ const BinaryInputStream = Components.Constructor(
|
|||||||
const PREF_LEADER = "toolkit.telemetry.dap.leader.url";
|
const PREF_LEADER = "toolkit.telemetry.dap.leader.url";
|
||||||
const PREF_HELPER = "toolkit.telemetry.dap.helper.url";
|
const PREF_HELPER = "toolkit.telemetry.dap.helper.url";
|
||||||
|
|
||||||
let received = false;
|
const PREF_DATAUPLOAD = "datareporting.healthreport.uploadEnabled";
|
||||||
|
|
||||||
let server;
|
let server;
|
||||||
let server_addr;
|
let server_addr;
|
||||||
|
let server_requests = 0;
|
||||||
|
|
||||||
const tasks = [
|
const tasks = [
|
||||||
{
|
{
|
||||||
@@ -60,7 +62,9 @@ function uploadHandler(request, response) {
|
|||||||
body.available() == 886 || body.available() == 3654,
|
body.available() == 886 || body.available() == 3654,
|
||||||
"Wrong request body size."
|
"Wrong request body size."
|
||||||
);
|
);
|
||||||
received = true;
|
|
||||||
|
server_requests += 1;
|
||||||
|
|
||||||
response.setStatusLine(request.httpVersion, 200);
|
response.setStatusLine(request.httpVersion, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,16 +76,14 @@ add_setup(async function () {
|
|||||||
server = new HttpServer();
|
server = new HttpServer();
|
||||||
server.registerPrefixHandler("/leader_endpoint/tasks/", uploadHandler);
|
server.registerPrefixHandler("/leader_endpoint/tasks/", uploadHandler);
|
||||||
server.start(-1);
|
server.start(-1);
|
||||||
|
|
||||||
const orig_leader = Services.prefs.getStringPref(PREF_LEADER);
|
|
||||||
const orig_helper = Services.prefs.getStringPref(PREF_HELPER);
|
|
||||||
const i = server.identity;
|
const i = server.identity;
|
||||||
server_addr = i.primaryScheme + "://" + i.primaryHost + ":" + i.primaryPort;
|
server_addr = i.primaryScheme + "://" + i.primaryHost + ":" + i.primaryPort;
|
||||||
|
|
||||||
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/leader_endpoint");
|
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/leader_endpoint");
|
||||||
Services.prefs.setStringPref(PREF_HELPER, server_addr + "/helper_endpoint");
|
Services.prefs.setStringPref(PREF_HELPER, server_addr + "/helper_endpoint");
|
||||||
registerCleanupFunction(() => {
|
registerCleanupFunction(() => {
|
||||||
Services.prefs.setStringPref(PREF_LEADER, orig_leader);
|
Services.prefs.clearUserPref(PREF_LEADER);
|
||||||
Services.prefs.setStringPref(PREF_HELPER, orig_helper);
|
Services.prefs.clearUserPref(PREF_HELPER);
|
||||||
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
server.stop(resolve);
|
server.stop(resolve);
|
||||||
@@ -92,21 +94,46 @@ add_setup(async function () {
|
|||||||
add_task(async function testVerificationTask() {
|
add_task(async function testVerificationTask() {
|
||||||
Services.fog.testResetFOG();
|
Services.fog.testResetFOG();
|
||||||
|
|
||||||
await lazy.DAPTelemetrySender.sendTestReports(tasks, 5000);
|
server_requests = 0;
|
||||||
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
||||||
Assert.ok(received, "Report upload successful.");
|
Assert.equal(server_requests, tasks.length, "Report upload successful.");
|
||||||
});
|
});
|
||||||
|
|
||||||
add_task(async function testNetworkError() {
|
add_task(async function testNetworkError() {
|
||||||
Services.fog.testResetFOG();
|
Services.fog.testResetFOG();
|
||||||
|
|
||||||
|
const test_leader = Services.prefs.getStringPref(PREF_LEADER);
|
||||||
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/invalid-endpoint");
|
Services.prefs.setStringPref(PREF_LEADER, server_addr + "/invalid-endpoint");
|
||||||
|
|
||||||
let thrownErr;
|
let thrownErr;
|
||||||
try {
|
try {
|
||||||
await lazy.DAPTelemetrySender.sendTestReports(tasks, 5000);
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
thrownErr = e;
|
thrownErr = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.ok(thrownErr.message.startsWith("Sending failed."));
|
Assert.ok(thrownErr.message.startsWith("Sending failed."));
|
||||||
|
|
||||||
|
Services.prefs.setStringPref(PREF_LEADER, test_leader);
|
||||||
|
});
|
||||||
|
|
||||||
|
add_task(async function testTelemetryToggle() {
|
||||||
|
Services.fog.testResetFOG();
|
||||||
|
|
||||||
|
// Normal
|
||||||
|
server_requests = 0;
|
||||||
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
||||||
|
Assert.equal(server_requests, tasks.length);
|
||||||
|
|
||||||
|
// Telemetry off
|
||||||
|
server_requests = 0;
|
||||||
|
Services.prefs.setBoolPref(PREF_DATAUPLOAD, false);
|
||||||
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
||||||
|
Assert.equal(server_requests, 0);
|
||||||
|
|
||||||
|
// Normal
|
||||||
|
server_requests = 0;
|
||||||
|
Services.prefs.clearUserPref(PREF_DATAUPLOAD);
|
||||||
|
await lazy.DAPTelemetrySender.sendTestReports(tasks, { timeout: 5000 });
|
||||||
|
Assert.equal(server_requests, tasks.length);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user