From 3a958a144282010865c8cd44356107721a0b73f1 Mon Sep 17 00:00:00 2001 From: Chris H-C Date: Mon, 18 Dec 2023 16:56:22 +0000 Subject: [PATCH] Bug 1868988 - Remove PingCentre. Its watch has ended. r=nanj,thecount,perry.mcmanis Differential Revision: https://phabricator.services.mozilla.com/D196227 --- browser/app/profile/firefox.js | 4 - .../asrouter/docs/debugging-docs.md | 11 +- .../asrouter/docs/telemetry-screenshot.png | Bin 104954 -> 0 bytes .../content-src/asrouter/docs/telemetry.md | 19 +- .../test/browser/abouthomecache/browser.toml | 1 - .../components/newtab/test/schemas/pings.js | 1 - .../test_AboutHomeStartupCacheWorker.js | 1 - .../unit/test_quicksuggest_impressionCaps.js | 6 +- browser/modules/PingCentre.sys.mjs | 173 ---------------- browser/modules/metrics.yaml | 63 ------ browser/modules/moz.build | 1 - browser/modules/test/unit/test_PingCentre.js | 194 ------------------ browser/modules/test/unit/xpcshell.toml | 2 - tools/esmify/map.json | 1 - 14 files changed, 8 insertions(+), 469 deletions(-) delete mode 100644 browser/components/newtab/content-src/asrouter/docs/telemetry-screenshot.png delete mode 100644 browser/modules/PingCentre.sys.mjs delete mode 100644 browser/modules/test/unit/test_PingCentre.js diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 582fa2fad166..285790de6fdc 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1950,10 +1950,6 @@ pref("toolkit.telemetry.updatePing.enabled", true); // Enables sending 'bhr' pings when the browser hangs. pref("toolkit.telemetry.bhrPing.enabled", true); -// Ping Centre Telemetry settings. -pref("browser.ping-centre.telemetry", true); -pref("browser.ping-centre.log", false); - // Enable GMP support in the addon manager. pref("media.gmp-provider.enabled", true); diff --git a/browser/components/newtab/content-src/asrouter/docs/debugging-docs.md b/browser/components/newtab/content-src/asrouter/docs/debugging-docs.md index d683e2f69d30..dab1c0895d47 100644 --- a/browser/components/newtab/content-src/asrouter/docs/debugging-docs.md +++ b/browser/components/newtab/content-src/asrouter/docs/debugging-docs.md @@ -20,18 +20,13 @@ In order to see all active messages for a current provider such as `cfr`, use th The messages on the page should now be filtered to include only the provider you selected. -## How to test telemetry pings +## How to test data collection -To test telemetry pings, complete the the following steps: +All of Messaging System, including ASRouter, is instrumented in Glean. +To test this instrumentation, please consult [this guide](/toolkit/components/glean/user/instrumentation_tests.md), and: - In about:config, set: - `browser.newtabpage.activity-stream.telemetry` to `true` - - `browser.ping-centre.log` to `true` - To view additional debug logs for messaging system or about:welcome, set: - `messaging-system.log` to `debug` - `browser.aboutwelcome.log` to `debug` -- Open the Browser Toolbox devtools (Tools > Web Developer > Browser Toolbox) and switch to the console tab. Add a filter for for `activity-stream` to only display relevant pings: - -![Devtools telemetry ping](./telemetry-screenshot.png) - -You should now see pings show up as you view/interact with ASR messages/templates. diff --git a/browser/components/newtab/content-src/asrouter/docs/telemetry-screenshot.png b/browser/components/newtab/content-src/asrouter/docs/telemetry-screenshot.png deleted file mode 100644 index b27b4ab958d7e4044a28b10ca38db53a5abf9b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104954 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

&^GubawPW%EUA7n+ahb{4 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�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 diff --git a/browser/components/newtab/content-src/asrouter/docs/telemetry.md b/browser/components/newtab/content-src/asrouter/docs/telemetry.md index b6fcfd741fca..b775e6c8e866 100644 --- a/browser/components/newtab/content-src/asrouter/docs/telemetry.md +++ b/browser/components/newtab/content-src/asrouter/docs/telemetry.md @@ -1,13 +1,5 @@ # Messaging System & Onboarding Telemetry -For historical reasons, the current (but soon-to-be legacy) Messaging System & Onboarding -telemetry documentation is mixed in with the Activity Stream documentation. All -except the main documentation is at [metrics we -collect](/browser/components/newtab/docs/v2-system-addon/data_events.md) and the -[data dictionary](/browser/components/newtab/docs/v2-system-addon/data_dictionary.md). - -## Migration to Glean - Code all over the messaging system passes JSON ping objects up to a few central spots. It may be [annotated with attribution](https://searchfox.org/mozilla-central/search?q=symbol:AboutWelcomeTelemetry%23_maybeAttachAttribution&redirect=false) @@ -15,17 +7,14 @@ along the way, and/or adjusted by some [policy routines](https://searchfox.org/mozilla-central/search?q=symbol:TelemetryFeed%23createASRouterEvent&redirect=false) before it's sent. [A version of the JSON that's been transformed slightly further is sent to Glean](https://searchfox.org/mozilla-central/search?q=.submitGleanPingForPing&path=*.jsm&case=false®exp=false). -The original annotated, policy-abiding JSON is sent to PingCentre immediately -after. After more validation and usage of Glean data has happened, we'll [stop -sending the data to PingCentre entirely](https://bugzilla.mozilla.org/show_bug.cgi?id=1849006). ## Adding or changing telemetry -For now, do the same stuff we've always done in OMC: follow the [process in +Follow the [process in the Activity Stream telemetry -document](/browser/components/newtab/docs/v2-system-addon/telemetry.md) with one -exception: avoid adding any new nested objects, as these end up being flattened -or stringified before being sent to glean. Note that when you need to add new metrics +document](/browser/components/newtab/docs/v2-system-addon/telemetry.md), +and avoid adding any new nested objects, as these end up being flattened +or stringified before being sent to Glean. Note that when you need to add new metrics (i.e. JSON keys), they MUST to be [added](https://mozilla.github.io/glean/book/user/metrics/adding-new-metrics.html) to [browser/components/newtab/metrics.yaml](https://searchfox.org/mozilla-central/source/browser/components/newtab/metrics.yaml) diff --git a/browser/components/newtab/test/browser/abouthomecache/browser.toml b/browser/components/newtab/test/browser/abouthomecache/browser.toml index fb6946b7680f..1994415d9a74 100644 --- a/browser/components/newtab/test/browser/abouthomecache/browser.toml +++ b/browser/components/newtab/test/browser/abouthomecache/browser.toml @@ -16,7 +16,6 @@ prefs = [ "browser.newtabpage.activity-stream.feeds.system.topstories=true", "browser.newtabpage.activity-stream.feeds.section.topstories.options={\"provider_name\":\"\"}", "browser.newtabpage.activity-stream.telemetry.structuredIngestion=false", - "browser.ping-centre.telemetry=false", "browser.newtabpage.activity-stream.discoverystream.endpoints=https://example.com", "dom.ipc.processPrelaunch.delayMs=0", # Bug 1694957 is why we need dom.ipc.processPrelaunch.delayMs=0 diff --git a/browser/components/newtab/test/schemas/pings.js b/browser/components/newtab/test/schemas/pings.js index dffa2e17a0a5..fc35da3a95a2 100644 --- a/browser/components/newtab/test/schemas/pings.js +++ b/browser/components/newtab/test/schemas/pings.js @@ -5,7 +5,6 @@ import { import Joi from "joi-browser"; export const baseKeys = { - // client_id will be set by PingCentre if it doesn't exist. client_id: Joi.string().optional(), addon_version: Joi.string().required(), locale: Joi.string().required(), diff --git a/browser/components/newtab/test/xpcshell/test_AboutHomeStartupCacheWorker.js b/browser/components/newtab/test/xpcshell/test_AboutHomeStartupCacheWorker.js index 9db3933ed911..273b82283798 100644 --- a/browser/components/newtab/test/xpcshell/test_AboutHomeStartupCacheWorker.js +++ b/browser/components/newtab/test/xpcshell/test_AboutHomeStartupCacheWorker.js @@ -108,7 +108,6 @@ add_setup(async function () { "browser.newtabpage.activity-stream.telemetry.structuredIngestion", false ); - Services.prefs.setBoolPref("browser.ping-centre.telemetry", false); // We need a default search engine set up for rendering the search input. await SearchTestUtils.installSearchExtension( diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_impressionCaps.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_impressionCaps.js index b76f4469c488..1c00cb532019 100644 --- a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_impressionCaps.js +++ b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_impressionCaps.js @@ -3856,11 +3856,7 @@ async function checkSearch({ name, searchString, expectedResults }) { // Impression stats are updated only on engagement, so force one now. // `selIndex` doesn't really matter but since we're not trying to simulate a - // click on the suggestion, pass in -1 to ensure we don't record a click. Pass - // in true for `isPrivate` so we don't attempt to record the impression ping - // because otherwise the following PingCentre error is logged: - // "Structured Ingestion ping failure with error: undefined" - context.isPrivate = true; + // click on the suggestion, pass in -1 to ensure we don't record a click. if (UrlbarProviderQuickSuggest._resultFromLastQuery) { UrlbarProviderQuickSuggest._resultFromLastQuery.isVisible = true; } diff --git a/browser/modules/PingCentre.sys.mjs b/browser/modules/PingCentre.sys.mjs deleted file mode 100644 index e5c99b15a728..000000000000 --- a/browser/modules/PingCentre.sys.mjs +++ /dev/null @@ -1,173 +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/. */ - -import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs"; - -const lazy = {}; -ChromeUtils.defineESModuleGetters(lazy, { - TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.sys.mjs", - UpdateUtils: "resource://gre/modules/UpdateUtils.sys.mjs", - sendStandalonePing: "resource://gre/modules/TelemetrySend.sys.mjs", -}); - -const PREF_BRANCH = "browser.ping-centre."; - -const TELEMETRY_PREF = `${PREF_BRANCH}telemetry`; -const LOGGING_PREF = `${PREF_BRANCH}log`; - -const FHR_UPLOAD_ENABLED_PREF = "datareporting.healthreport.uploadEnabled"; - -/** - * Observe various notifications and send them to a telemetry endpoint. - * - * @param {Object} options - * @param {string} options.topic - a unique ID for users of PingCentre to distinguish - * their data on the server side. - */ -export class PingCentre { - constructor(options) { - if (!options.topic) { - throw new Error("Must specify topic."); - } - - this._topic = options.topic; - this._prefs = Services.prefs.getBranch(""); - - this._enabled = this._prefs.getBoolPref(TELEMETRY_PREF); - this._onTelemetryPrefChange = this._onTelemetryPrefChange.bind(this); - this._prefs.addObserver(TELEMETRY_PREF, this._onTelemetryPrefChange); - - this._fhrEnabled = this._prefs.getBoolPref(FHR_UPLOAD_ENABLED_PREF); - this._onFhrPrefChange = this._onFhrPrefChange.bind(this); - this._prefs.addObserver(FHR_UPLOAD_ENABLED_PREF, this._onFhrPrefChange); - - this.logging = this._prefs.getBoolPref(LOGGING_PREF); - this._onLoggingPrefChange = this._onLoggingPrefChange.bind(this); - this._prefs.addObserver(LOGGING_PREF, this._onLoggingPrefChange); - } - - get enabled() { - return this._enabled && this._fhrEnabled; - } - - _onLoggingPrefChange(aSubject, aTopic, prefKey) { - this.logging = this._prefs.getBoolPref(prefKey); - } - - _onTelemetryPrefChange(aSubject, aTopic, prefKey) { - this._enabled = this._prefs.getBoolPref(prefKey); - } - - _onFhrPrefChange(aSubject, aTopic, prefKey) { - this._fhrEnabled = this._prefs.getBoolPref(prefKey); - } - - _createExperimentsPayload() { - let activeExperiments = lazy.TelemetryEnvironment.getActiveExperiments(); - let experiments = {}; - for (let experimentID in activeExperiments) { - if ( - activeExperiments[experimentID] && - activeExperiments[experimentID].branch - ) { - experiments[experimentID] = { - branch: activeExperiments[experimentID].branch, - }; - } - } - return experiments; - } - - _createStructuredIngestionPing(data) { - let experiments = this._createExperimentsPayload(); - let locale = data.locale || Services.locale.appLocaleAsBCP47; - const payload = { - experiments, - locale, - version: AppConstants.MOZ_APP_VERSION, - release_channel: lazy.UpdateUtils.getUpdateChannel(false), - ...data, - }; - - return payload; - } - - // We route through this helper because it gets hooked in testing. - static _sendStandalonePing(endpoint, payload) { - return lazy.sendStandalonePing(endpoint, payload); - } - - /** - * Sends a ping to the Structured Ingestion telemetry pipeline. - * - * The payload would be compressed using gzip. - * - * @param {Object} data The payload to be sent. - * @param {String} endpoint The destination endpoint. Note that Structured Ingestion - * requires a different endpoint for each ping. It's up to the - * caller to provide that. See more details at - * https://github.com/mozilla/gcp-ingestion/blob/master/docs/edge.md#postput-request - * @param {String} namespace Optional. The structured ingestion namespace. - * Used for data collection. - */ - sendStructuredIngestionPing(data, endpoint, namespace = undefined) { - if (!this.enabled) { - return Promise.resolve(); - } - - const ping = this._createStructuredIngestionPing(data); - const payload = JSON.stringify(ping); - - if (this.logging) { - Services.console.logStringMessage( - `TELEMETRY PING (${this._topic}): ${payload}\n` - ); - } - - let gleanNamespace = "other"; - switch (namespace) { - case "activity-stream": - gleanNamespace = "activity_stream"; - break; - case "messaging-system": - gleanNamespace = "messaging_system"; - break; - case "contextual-services": - gleanNamespace = "contextual_services"; - break; - } - - return PingCentre._sendStandalonePing(endpoint, payload).then( - () => { - Glean.pingCentre.sendSuccessesByNamespace[gleanNamespace].add(1); - }, - event => { - Glean.pingCentre.sendFailures.add(1); - Glean.pingCentre.sendFailuresByNamespace[gleanNamespace].add(1); - console.error( - `Structured Ingestion ping failure with error: ${event.type}` - ); - } - ); - } - - uninit() { - try { - this._prefs.removeObserver(TELEMETRY_PREF, this._onTelemetryPrefChange); - this._prefs.removeObserver(LOGGING_PREF, this._onLoggingPrefChange); - this._prefs.removeObserver( - FHR_UPLOAD_ENABLED_PREF, - this._onFhrPrefChange - ); - } catch (e) { - console.error(e); - } - } -} - -export const PingCentreConstants = { - FHR_UPLOAD_ENABLED_PREF, - TELEMETRY_PREF, - LOGGING_PREF, -}; diff --git a/browser/modules/metrics.yaml b/browser/modules/metrics.yaml index b8f9d036e2f3..24ec1981b8dc 100644 --- a/browser/modules/metrics.yaml +++ b/browser/modules/metrics.yaml @@ -93,66 +93,3 @@ browser.engagement: send_in_pings: - metrics expires: never - -ping.centre: - send_failures: - type: counter - description: | - The number of PingCentre send failures. - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1800079 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1800079 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1851237 - data_sensitivity: - - technical - notification_emails: - - chutten@mozilla.com - expires: 125 - - send_failures_by_namespace: - type: labeled_counter - description: | - The number of PingCentre send failures, - broken down by structured ingestion namespace. - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1814922 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1814922 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1851237 - data_sensitivity: - - technical - notification_emails: - - chutten@mozilla.com - expires: 125 - labels: &structured_ingestion_namespaces - - activity_stream - - messaging_system - - contextual_services - no_lint: - - COMMON_PREFIX - - send_successes_by_namespace: - type: labeled_counter - description: | - The number of PingCentre send successes, - broken down by structured ingestion namespace. - bugs: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1814922 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - data_reviews: - - https://bugzilla.mozilla.org/show_bug.cgi?id=1814922 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1827767 - - https://bugzilla.mozilla.org/show_bug.cgi?id=1851237 - data_sensitivity: - - technical - notification_emails: - - chutten@mozilla.com - expires: 125 - labels: *structured_ingestion_namespaces - no_lint: - - COMMON_PREFIX diff --git a/browser/modules/moz.build b/browser/modules/moz.build index 52a411360b12..79d8756eda1d 100644 --- a/browser/modules/moz.build +++ b/browser/modules/moz.build @@ -139,7 +139,6 @@ EXTRA_JS_MODULES += [ "PageActions.sys.mjs", "PartnerLinkAttribution.sys.mjs", "PermissionUI.sys.mjs", - "PingCentre.sys.mjs", "ProcessHangMonitor.sys.mjs", "Sanitizer.sys.mjs", "SelectionChangedMenulist.sys.mjs", diff --git a/browser/modules/test/unit/test_PingCentre.js b/browser/modules/test/unit/test_PingCentre.js deleted file mode 100644 index 6c38397e5fc2..000000000000 --- a/browser/modules/test/unit/test_PingCentre.js +++ /dev/null @@ -1,194 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -"use strict"; - -const { PingCentre, PingCentreConstants } = ChromeUtils.importESModule( - "resource:///modules/PingCentre.sys.mjs" -); -const { TelemetryEnvironment } = ChromeUtils.importESModule( - "resource://gre/modules/TelemetryEnvironment.sys.mjs" -); -const { AppConstants } = ChromeUtils.importESModule( - "resource://gre/modules/AppConstants.sys.mjs" -); -const { UpdateUtils } = ChromeUtils.importESModule( - "resource://gre/modules/UpdateUtils.sys.mjs" -); - -const { sinon } = ChromeUtils.importESModule( - "resource://testing-common/Sinon.sys.mjs" -); - -const FAKE_PING = { event: "fake_event", value: "fake_value", locale: "en-US" }; -const FAKE_ENDPOINT = "https://www.test.com"; - -let pingCentre; -let sandbox; -let fogInitd = false; - -function _setUp() { - Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, true); - Services.prefs.setBoolPref(PingCentreConstants.FHR_UPLOAD_ENABLED_PREF, true); - Services.prefs.setBoolPref(PingCentreConstants.LOGGING_PREF, true); - sandbox.restore(); - if (fogInitd) { - Services.fog.testResetFOG(); - } -} - -add_setup(function setup() { - sandbox = sinon.createSandbox(); - _setUp(); - pingCentre = new PingCentre({ topic: "test_topic" }); - - registerCleanupFunction(() => { - sandbox.restore(); - Services.prefs.clearUserPref(PingCentreConstants.TELEMETRY_PREF); - Services.prefs.clearUserPref(PingCentreConstants.FHR_UPLOAD_ENABLED_PREF); - Services.prefs.clearUserPref(PingCentreConstants.LOGGING_PREF); - }); - - // On Android, FOG is set up through head.js - if (AppConstants.platform != "android") { - do_get_profile(); - Services.fog.initializeFOG(); - fogInitd = true; - } -}); - -add_task(function test_enabled() { - _setUp(); - Assert.ok(pingCentre.enabled, "Telemetry should be on"); -}); - -add_task(function test_disabled_by_pingCentre() { - _setUp(); - Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, false); - - Assert.ok(!pingCentre.enabled, "Telemetry should be off"); -}); - -add_task(function test_disabled_by_FirefoxHealthReport() { - _setUp(); - Services.prefs.setBoolPref( - PingCentreConstants.FHR_UPLOAD_ENABLED_PREF, - false - ); - - Assert.ok(!pingCentre.enabled, "Telemetry should be off"); -}); - -add_task(function test_logging() { - _setUp(); - Assert.ok(pingCentre.logging, "Logging should be on"); - - Services.prefs.setBoolPref(PingCentreConstants.LOGGING_PREF, false); - - Assert.ok(!pingCentre.logging, "Logging should be off"); -}); - -add_task(function test_createExperimentsPayload() { - _setUp(); - const activeExperiments = { - exp1: { branch: "foo", enrollmentID: "SOME_RANDON_ID" }, - exp2: { branch: "bar", type: "PrefStudy" }, - exp3: {}, - }; - sandbox - .stub(TelemetryEnvironment, "getActiveExperiments") - .returns(activeExperiments); - const expected = { - exp1: { branch: "foo" }, - exp2: { branch: "bar" }, - }; - - const experiments = pingCentre._createExperimentsPayload(); - - Assert.deepEqual( - experiments, - expected, - "Should create experiments with all the required context" - ); -}); - -add_task(function test_createExperimentsPayload_without_active_experiments() { - _setUp(); - sandbox.stub(TelemetryEnvironment, "getActiveExperiments").returns({}); - const experiments = pingCentre._createExperimentsPayload({}); - - Assert.deepEqual(experiments, {}, "Should send an empty object"); -}); - -add_task(function test_createStructuredIngestionPing() { - _setUp(); - sandbox - .stub(TelemetryEnvironment, "getActiveExperiments") - .returns({ exp1: { branch: "foo" } }); - const ping = pingCentre._createStructuredIngestionPing(FAKE_PING); - const expected = { - experiments: { exp1: { branch: "foo" } }, - locale: "en-US", - version: AppConstants.MOZ_APP_VERSION, - release_channel: UpdateUtils.getUpdateChannel(false), - ...FAKE_PING, - }; - - Assert.deepEqual(ping, expected, "Should create a valid ping"); -}); - -add_task(function test_sendStructuredIngestionPing_disabled() { - _setUp(); - sandbox.stub(PingCentre, "_sendStandalonePing").resolves(); - Services.prefs.setBoolPref(PingCentreConstants.TELEMETRY_PREF, false); - pingCentre.sendStructuredIngestionPing(FAKE_PING, FAKE_ENDPOINT); - - Assert.ok(PingCentre._sendStandalonePing.notCalled, "Should not be sent"); -}); - -add_task(async function test_sendStructuredIngestionPing_success() { - _setUp(); - sandbox.stub(PingCentre, "_sendStandalonePing").resolves(); - await pingCentre.sendStructuredIngestionPing( - FAKE_PING, - FAKE_ENDPOINT, - "messaging-system" - ); - - Assert.equal(PingCentre._sendStandalonePing.callCount, 1, "Should be sent"); - Assert.equal( - 1, - Glean.pingCentre.sendSuccessesByNamespace.messaging_system.testGetValue() - ); - - // Test an unknown namespace - await pingCentre.sendStructuredIngestionPing( - FAKE_PING, - FAKE_ENDPOINT, - "different-system" - ); - - Assert.equal(PingCentre._sendStandalonePing.callCount, 2, "Should be sent"); - Assert.equal( - 1, - Glean.pingCentre.sendSuccessesByNamespace.__other__.testGetValue() - ); -}); - -add_task(async function test_sendStructuredIngestionPing_failure() { - _setUp(); - sandbox.stub(PingCentre, "_sendStandalonePing").rejects(); - Assert.equal(undefined, Glean.pingCentre.sendFailures.testGetValue()); - await pingCentre.sendStructuredIngestionPing( - FAKE_PING, - FAKE_ENDPOINT, - "activity-stream" - ); - - Assert.equal(1, Glean.pingCentre.sendFailures.testGetValue()); - Assert.equal( - 1, - Glean.pingCentre.sendFailuresByNamespace.activity_stream.testGetValue() - ); -}); diff --git a/browser/modules/test/unit/xpcshell.toml b/browser/modules/test/unit/xpcshell.toml index 0bb4e72cb23d..2b4a9a66ea5d 100644 --- a/browser/modules/test/unit/xpcshell.toml +++ b/browser/modules/test/unit/xpcshell.toml @@ -14,8 +14,6 @@ run-if = ["os == 'win'"] # Test of a Windows-specific feature ["test_LaterRun.js"] -["test_PingCentre.js"] - ["test_ProfileCounter.js"] run-if = ["os == 'win'"] # Test of a Windows-specific feature diff --git a/tools/esmify/map.json b/tools/esmify/map.json index 01f5c657a067..f1ffe5b84bf1 100644 --- a/tools/esmify/map.json +++ b/tools/esmify/map.json @@ -167,7 +167,6 @@ "resource:///modules/PageActions.jsm": "browser/modules/PageActions.jsm", "resource:///modules/PanelMultiView.jsm": "browser/components/customizableui/PanelMultiView.jsm", "resource:///modules/PartnerLinkAttribution.jsm": "browser/modules/PartnerLinkAttribution.jsm", - "resource:///modules/PingCentre.jsm": "browser/modules/PingCentre.jsm", "resource:///modules/PinnedGroupBuilder.jsm": "browser/components/places/PinnedGroupBuilder.jsm", "resource:///modules/PlacesUIUtils.jsm": "browser/components/places/PlacesUIUtils.jsm", "resource:///modules/ProcessHangMonitor.jsm": "browser/modules/ProcessHangMonitor.jsm",