From d01d9399cca89184a2f96816d1f2f4d84ec108dc Mon Sep 17 00:00:00 2001 From: "arthur.iakab" Date: Fri, 19 Oct 2018 03:12:23 +0300 Subject: [PATCH] Backed out changeset b969cbe46b14 (bug 1492656)for Android xpcshell failures on unit/test_CoveragePing.js CLOSED TREE --- browser/app/profile/firefox.js | 3 - testing/profiles/common/user.js | 1 - .../telemetry/app/TelemetryController.jsm | 4 - .../telemetry/docs/data/coverage-ping.rst | 40 ----- toolkit/components/telemetry/moz.build | 1 - .../telemetry/pings/CoveragePing.jsm | 154 ------------------ .../telemetry/tests/unit/test_CoveragePing.js | 104 ------------ .../telemetry/tests/unit/xpcshell.ini | 2 - 8 files changed, 309 deletions(-) delete mode 100644 toolkit/components/telemetry/docs/data/coverage-ping.rst delete mode 100644 toolkit/components/telemetry/pings/CoveragePing.jsm delete mode 100644 toolkit/components/telemetry/tests/unit/test_CoveragePing.js diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 7e89d59a4fae..01bf53b2247f 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1784,6 +1784,3 @@ pref("prio.enabled", true); pref("browser.fastblock.enabled", true); #endif -// Telemetry Coverage is disabled by default. -pref("toolkit.telemetry.coverage.enabled", false); -pref("toolkit.telemetry.coverage.endpoint.base", "https://telemetry-coverage.mozilla.org"); diff --git a/testing/profiles/common/user.js b/testing/profiles/common/user.js index f8c2426d55be..09237cf837cc 100644 --- a/testing/profiles/common/user.js +++ b/testing/profiles/common/user.js @@ -49,4 +49,3 @@ user_pref("media.autoplay.enabled.user-gestures-needed", true); user_pref("media.autoplay.ask-permission", false); user_pref("media.autoplay.block-webaudio", false); user_pref("media.allowed-to-play.enabled", true); -user_pref("toolkit.telemetry.coverage.endpoint.base", "http://localhost"); diff --git a/toolkit/components/telemetry/app/TelemetryController.jsm b/toolkit/components/telemetry/app/TelemetryController.jsm index 943c6acdf9c1..2a4eae44d1f2 100644 --- a/toolkit/components/telemetry/app/TelemetryController.jsm +++ b/toolkit/components/telemetry/app/TelemetryController.jsm @@ -52,7 +52,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "Telemetry", XPCOMUtils.defineLazyModuleGetters(this, { ClientID: "resource://gre/modules/ClientID.jsm", - CoveragePing: "resource://gre/modules/CoveragePing.jsm", AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm", TelemetryStorage: "resource://gre/modules/TelemetryStorage.jsm", TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm", @@ -698,9 +697,6 @@ var Impl = { if (!this._shuttingDown) { // Report the modules loaded in the Firefox process. TelemetryModules.start(); - - // Send telemetry coverage ping. - await CoveragePing.startup(); } TelemetryEventPing.startup(); diff --git a/toolkit/components/telemetry/docs/data/coverage-ping.rst b/toolkit/components/telemetry/docs/data/coverage-ping.rst deleted file mode 100644 index 24703b7ea80c..000000000000 --- a/toolkit/components/telemetry/docs/data/coverage-ping.rst +++ /dev/null @@ -1,40 +0,0 @@ - -"coverage" ping -============= - -This ping is not enabled by default. When enabled, a ping is generated a total of once per profile, as a diagnostic tool -to determine whether Telemetry is working for users. - -This ping contains no client id and no environment data. - -You can find more background information in `this blog post `_. - -Structure: - -.. code-block:: js - - { - "appVersion": "63.0a1", - "appUpdateChannel": "nightly", - "osName": "Darwin", - "osVersion": "17.7.0", - "telemetryEnabled": 1 - } - -Expected behaviours -------------------- -The following is a list of expected behaviours for the ``coverage`` ping: - -- The ping will only be sent once per ping version, per profile. -- If sending the ping fails, it will be retried on startup. -- A totally arbitrary UUID is generated on first run on a new profile, to use for filtering duplicates. -- The ping is sent to a different endpoint not using existing Telemetry. -- The ping does not honor the Telemetry enabled preference, but provides its own opt-out preference: `toolkit.telemetry.coverage.opt-out`. -- The ping is disabled by default. It is intended to be enabled for users on an experimental basis using the preference `toolkit.telemetry.coverage.enabled`. - -Version History ---------------- - -- Firefox 64: - - - "coverage" ping shipped (`bug 1492656 `_). diff --git a/toolkit/components/telemetry/moz.build b/toolkit/components/telemetry/moz.build index cac02b7e6dd2..2cf99c466c31 100644 --- a/toolkit/components/telemetry/moz.build +++ b/toolkit/components/telemetry/moz.build @@ -100,7 +100,6 @@ EXTRA_JS_MODULES += [ 'other/GCTelemetry.jsm', 'other/MemoryTelemetry.jsm', 'other/UITelemetry.jsm', - 'pings/CoveragePing.jsm', 'pings/EventPing.jsm', 'pings/HealthPing.jsm', 'pings/ModulesPing.jsm', diff --git a/toolkit/components/telemetry/pings/CoveragePing.jsm b/toolkit/components/telemetry/pings/CoveragePing.jsm deleted file mode 100644 index 2aeb89e284c1..000000000000 --- a/toolkit/components/telemetry/pings/CoveragePing.jsm +++ /dev/null @@ -1,154 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -"use strict"; - -ChromeUtils.import("resource://gre/modules/Services.jsm"); - -ChromeUtils.defineModuleGetter(this, - "CommonUtils", "resource://services-common/utils.js"); -ChromeUtils.defineModuleGetter(this, - "Log", "resource://gre/modules/Log.jsm"); -ChromeUtils.defineModuleGetter(this, - "PromiseUtils", "resource://gre/modules/PromiseUtils.jsm"); -ChromeUtils.defineModuleGetter(this, - "ServiceRequest", "resource://gre/modules/ServiceRequest.jsm"); -ChromeUtils.defineModuleGetter(this, - "UpdateUtils", "resource://gre/modules/UpdateUtils.jsm"); - -var EXPORTED_SYMBOLS = ["CoveragePing"]; - -const COVERAGE_VERSION = "2"; - -const COVERAGE_ENABLED_PREF = "toolkit.telemetry.coverage.enabled"; -const LOG_LEVEL_PREF = "toolkit.telemetry.coverage.log-level"; -const OPT_OUT_PREF = "toolkit.telemetry.coverage.opt-out"; -const ALREADY_RUN_PREF = `toolkit.telemetry.coverage.already-run.v${COVERAGE_VERSION}`; -const COVERAGE_UUID_PREF = `toolkit.telemetry.coverage.uuid.v${COVERAGE_VERSION}`; -const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled"; -const REPORTING_ENDPOINT_BASE_PREF = `toolkit.telemetry.coverage.endpoint.base`; -const REPORTING_ENDPOINT = "submit/coverage/coverage"; -const PING_SUBMISSION_TIMEOUT = 30 * 1000; // 30 seconds - -const log = Log.repository.getLogger("Telemetry::CoveragePing"); -log.level = Services.prefs.getIntPref(LOG_LEVEL_PREF, Log.Level.Error); -log.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter())); - -var CoveragePing = Object.freeze({ - async startup() { - if (!Services.prefs.getCharPref(REPORTING_ENDPOINT_BASE_PREF, null)) { - log.error("no endpoint base set"); - return; - } - - if (!Services.prefs.getBoolPref(COVERAGE_ENABLED_PREF)) { - log.debug("coverage not enabled"); - return; - } - - if (Services.prefs.getBoolPref(OPT_OUT_PREF, false)) { - log.debug("user has set opt-out pref"); - return; - } - - if (Services.prefs.getBoolPref(ALREADY_RUN_PREF, false)) { - log.debug("already run on this profile"); - return; - } - - try { - await this.reportTelemetrySetting(); - } catch (e) { - log.error("unable to upload payload", e); - } - }, - - // NOTE - this does not use existing Telemetry code or honor Telemetry opt-out prefs, - // by design. It also sends no identifying data like the client ID. See the "coverage ping" - // documentation for details. - reportTelemetrySetting() { - const enabled = Services.prefs.getBoolPref(TELEMETRY_ENABLED_PREF, false); - - const payload = { - "appVersion": Services.appinfo.version, - "appUpdateChannel": UpdateUtils.getUpdateChannel(false), - "osName": Services.sysinfo.getProperty("name"), - "osVersion": Services.sysinfo.getProperty("version"), - "telemetryEnabled": enabled, - }; - - let cachedUuid = Services.prefs.getCharPref(COVERAGE_UUID_PREF, null); - if (!cachedUuid) { - // Totally random UUID, just for detecting duplicates. - cachedUuid = CommonUtils.generateUUID(); - Services.prefs.setCharPref(COVERAGE_UUID_PREF, cachedUuid); - } - - let reportingEndpointBase = Services.prefs.getCharPref(REPORTING_ENDPOINT_BASE_PREF, null); - - let endpoint = `${reportingEndpointBase}/${REPORTING_ENDPOINT}/${COVERAGE_VERSION}/${cachedUuid}`; - - log.debug(`putting to endpoint ${endpoint} with payload:`, payload); - - let deferred = PromiseUtils.defer(); - - let request = new ServiceRequest({mozAnon: true}); - request.mozBackgroundRequest = true; - request.timeout = PING_SUBMISSION_TIMEOUT; - - request.open("PUT", endpoint, true); - request.overrideMimeType("text/plain"); - request.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); - request.setRequestHeader("Date", new Date().toUTCString()); - - // Prevent the request channel from running though URLClassifier (bug 1296802) - request.channel.loadFlags &= ~Ci.nsIChannel.LOAD_CLASSIFY_URI; - - let errorhandler = (event) => { - let failure = event.type; - log.error(`error making request to ${endpoint}: ${failure}`); - deferred.reject(event); - }; - - request.onerror = errorhandler; - request.ontimeout = errorhandler; - request.onabort = errorhandler; - - request.onloadend = (event) => { - let status = request.status; - let statusClass = status - (status % 100); - let success = false; - - if (statusClass === 200) { - // We can treat all 2XX as success. - log.info(`successfully submitted, status: ${status}`); - success = true; - } else if (statusClass === 400) { - // 4XX means that something with the request was broken. - - // TODO: we should handle this better, but for now we should avoid resubmitting - // broken requests by pretending success. - success = true; - log.error(`error submitting to ${endpoint}, status: ${status} - ping request broken?`); - } else if (statusClass === 500) { - // 5XX means there was a server-side error and we should try again later. - log.error(`error submitting to ${endpoint}, status: ${status} - server error, should retry later`); - } else { - // We received an unexpected status code. - log.error(`error submitting to ${endpoint}, status: ${status}, type: ${event.type}`); - } - - if (success) { - Services.prefs.setBoolPref(ALREADY_RUN_PREF, true); - log.debug(`result from PUT: ${request.responseText}`); - deferred.resolve(); - } else { - deferred.reject(event); - } - }; - - request.send(JSON.stringify(payload)); - - return deferred.promise; - }, -}); diff --git a/toolkit/components/telemetry/tests/unit/test_CoveragePing.js b/toolkit/components/telemetry/tests/unit/test_CoveragePing.js deleted file mode 100644 index faa1c6832b06..000000000000 --- a/toolkit/components/telemetry/tests/unit/test_CoveragePing.js +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set sts=2 sw=2 et tw=80: */ -"use strict"; - -ChromeUtils.import("resource://gre/modules/CoveragePing.jsm"); -ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); -ChromeUtils.import("resource://gre/modules/Services.jsm"); - -ChromeUtils.import("resource://testing-common/httpd.js"); - - -const COVERAGE_VERSION = "2"; - -const COVERAGE_ENABLED_PREF = "toolkit.telemetry.coverage.enabled"; -const OPT_OUT_PREF = "toolkit.telemetry.coverage.opt-out"; -const ALREADY_RUN_PREF = `toolkit.telemetry.coverage.already-run.v${COVERAGE_VERSION}`; -const COVERAGE_UUID_PREF = `toolkit.telemetry.coverage.uuid.v${COVERAGE_VERSION}`; -const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled"; -const REPORTING_ENDPOINT_BASE_PREF = "toolkit.telemetry.coverage.endpoint.base"; -const REPORTING_ENDPOINT = "submit/coverage/coverage"; - -Services.prefs.setIntPref("toolkit.telemetry.coverage.log-level", 20); - -add_task(async function setup() { - let uuid = "test123"; - Services.prefs.setCharPref(COVERAGE_UUID_PREF, uuid); - - const server = new HttpServer(); - server.start(-1); - const serverPort = server.identity.primaryPort; - - Services.prefs.setCharPref(REPORTING_ENDPOINT_BASE_PREF, `http://localhost:${serverPort}`); - - server.registerPathHandler(`/${REPORTING_ENDPOINT}/${COVERAGE_VERSION}/${uuid}`, (request, response) => { - equal(request.method, "PUT"); - let telemetryEnabled = Services.prefs.getBoolPref(TELEMETRY_ENABLED_PREF, false); - - let requestBody = NetUtil.readInputStreamToString(request.bodyInputStream, - request.bodyInputStream.available()); - - let resultObj = JSON.parse(requestBody); - - deepEqual(Object.keys(resultObj), [ - "appUpdateChannel", "osName", "osVersion", "telemetryEnabled", - ]); - - if (telemetryEnabled) { - ok(resultObj.telemetryEnabled); - } else { - ok(!resultObj.telemetryEnabled); - } - - const response_body = "OK"; - response.bodyOutputStream.write(response_body, response_body.length); - server.stop(); - }); - - // Trigger a proper telemetry init. - do_get_profile(true); - // Make sure we don't generate unexpected pings due to pref changes. - await setEmptyPrefWatchlist(); - - await TelemetryController.testSetup(); -}); - -add_task(async function test_prefs() { - // Telemetry reporting setting does not control this ping, but it - // reported by this ping. - Services.prefs.setBoolPref(TELEMETRY_ENABLED_PREF, false); - - // should not run if enabled pref is false - Services.prefs.setBoolPref(COVERAGE_ENABLED_PREF, false); - Services.prefs.setBoolPref(ALREADY_RUN_PREF, false); - Services.prefs.setBoolPref(OPT_OUT_PREF, false); - - await TelemetryController.testReset(); - - let alreadyRun = Services.prefs.getBoolPref(ALREADY_RUN_PREF, false); - ok(!alreadyRun, "should not have run with enabled pref false"); - - // should not run if opt-out pref is true - Services.prefs.setBoolPref(COVERAGE_ENABLED_PREF, true); - Services.prefs.setBoolPref(ALREADY_RUN_PREF, false); - Services.prefs.setBoolPref(OPT_OUT_PREF, true); - - await TelemetryController.testReset(); - - // should run if opt-out pref is false and coverage is enabled - Services.prefs.setBoolPref(COVERAGE_ENABLED_PREF, true); - Services.prefs.setBoolPref(ALREADY_RUN_PREF, false); - Services.prefs.setBoolPref(OPT_OUT_PREF, false); - - await TelemetryController.testReset(); - - // the telemetry setting should be set correctly - Services.prefs.setBoolPref(TELEMETRY_ENABLED_PREF, true); - - await TelemetryController.testReset(); - - alreadyRun = Services.prefs.getBoolPref(ALREADY_RUN_PREF, false); - - ok(alreadyRun, "should run if no opt-out and enabled"); -}); - diff --git a/toolkit/components/telemetry/tests/unit/xpcshell.ini b/toolkit/components/telemetry/tests/unit/xpcshell.ini index b838e721ae36..a6cb9770d73e 100644 --- a/toolkit/components/telemetry/tests/unit/xpcshell.ini +++ b/toolkit/components/telemetry/tests/unit/xpcshell.ini @@ -91,5 +91,3 @@ skip-if = (os == "android") || (os == "linux" && bits == 32) [test_TelemetryUtils.js] [test_EventPing.js] [test_EventPing_disabled.js] -tags = coverage -[test_CoveragePing.js]