diff options
author | Moonchild <moonchild@palemoon.org> | 2021-11-01 00:24:15 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2021-11-01 00:24:15 +0000 |
commit | 97d2c9f50232e06b7a3702b30c1997e9bc8adb19 (patch) | |
tree | 981bedf8ee3e5bb63485b3be921420dedf3e7d5f | |
parent | 5a6b0717eb7d0bf9b8538d6cc40bf53649c6b31c (diff) | |
download | basilisk-97d2c9f50232e06b7a3702b30c1997e9bc8adb19.tar.gz |
Issue MoonchildProductions/GRE#3029 - Remove telemetry from FE
50 files changed, 17 insertions, 1661 deletions
diff --git a/basilisk/app/nsBrowserApp.cpp b/basilisk/app/nsBrowserApp.cpp index 66ea8ae..deda833 100644 --- a/basilisk/app/nsBrowserApp.cpp +++ b/basilisk/app/nsBrowserApp.cpp @@ -32,7 +32,6 @@ #include "nsXPCOMPrivate.h" // for MAXPATHLEN and XPCOM_DLL #include "mozilla/Sprintf.h" -#include "mozilla/Telemetry.h" #include "mozilla/WindowsDllBlocklist.h" #if !defined(MOZ_WIDGET_COCOA) && !defined(MOZ_WIDGET_ANDROID) @@ -110,7 +109,6 @@ static bool IsArg(const char* arg, const char* s) XRE_GetFileFromPathType XRE_GetFileFromPath; XRE_CreateAppDataType XRE_CreateAppData; XRE_FreeAppDataType XRE_FreeAppData; -XRE_TelemetryAccumulateType XRE_TelemetryAccumulate; XRE_StartupTimelineRecordType XRE_StartupTimelineRecord; XRE_mainType XRE_main; XRE_StopLateWriteChecksType XRE_StopLateWriteChecks; @@ -128,7 +126,6 @@ static const nsDynamicFunctionLoad kXULFuncs[] = { { "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath }, { "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData }, { "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData }, - { "XRE_TelemetryAccumulate", (NSFuncPtr*) &XRE_TelemetryAccumulate }, { "XRE_StartupTimelineRecord", (NSFuncPtr*) &XRE_StartupTimelineRecord }, { "XRE_main", (NSFuncPtr*) &XRE_main }, { "XRE_StopLateWriteChecks", (NSFuncPtr*) &XRE_StopLateWriteChecks }, @@ -370,8 +367,6 @@ int main(int argc, char* argv[], char* envp[]) return 255; } - XRE_StartupTimelineRecord(mozilla::StartupTimeline::START, start); - #ifdef MOZ_BROWSER_CAN_BE_CONTENTPROC XRE_EnableSameExecutableForContentProc(); #endif diff --git a/basilisk/app/profile/basilisk.js b/basilisk/app/profile/basilisk.js index d97660d..0ca123f 100644 --- a/basilisk/app/profile/basilisk.js +++ b/basilisk/app/profile/basilisk.js @@ -1190,14 +1190,10 @@ pref("media.gmp-widevinecdm.visible", true); pref("media.gmp-widevinecdm.enabled", true); #endif -// Play with different values of the decay time and get telemetry, +// Play with different values of the decay time, // 0 means to randomize (and persist) the experiment value in users' profiles, // -1 means no experiment is run and we use the preferred value for frecency (6h) -pref("browser.cache.frecency_experiment", 0); - -// Telemetry settings. -// Determines if Telemetry pings can be archived locally. -pref("toolkit.telemetry.archive.enabled", true); +pref("browser.cache.frecency_experiment", -1); // Enable GMP support in the addon manager. pref("media.gmp-provider.enabled", true); diff --git a/basilisk/base/content/aboutNetError.xhtml b/basilisk/base/content/aboutNetError.xhtml index 5ff79ea..77aca22 100644 --- a/basilisk/base/content/aboutNetError.xhtml +++ b/basilisk/base/content/aboutNetError.xhtml @@ -123,12 +123,6 @@ document.getElementById("advancedButton") .addEventListener("click", function togglePanelVisibility() { toggleDisplay(panel); - - if (panel.style.display == "block") { - // send event to trigger telemetry ping - var event = new CustomEvent("AboutNetErrorUIExpanded", {bubbles:true}); - document.dispatchEvent(event); - } }); if (allowOverride) { diff --git a/basilisk/base/content/abouthealthreport/abouthealth.js b/basilisk/base/content/abouthealthreport/abouthealth.js index 66cbe16..b8ae2b1 100644 --- a/basilisk/base/content/abouthealthreport/abouthealth.js +++ b/basilisk/base/content/abouthealthreport/abouthealth.js @@ -11,7 +11,6 @@ Cu.import("resource://gre/modules/Services.jsm"); const prefs = new Preferences("datareporting.healthreport."); -const PREF_UNIFIED = "toolkit.telemetry.unified"; const PREF_REPORTING_URL = "datareporting.healthreport.about.reportUrl"; var healthReportWrapper = { @@ -48,49 +47,10 @@ var healthReportWrapper = { } }, - sendTelemetryPingList: function () { - console.log("AboutHealthReport: Collecting Telemetry ping list."); - MozSelfSupport.getTelemetryPingList().then((list) => { - console.log("AboutHealthReport: Sending Telemetry ping list."); - this.injectData("telemetry-ping-list", list); - }).catch((ex) => { - console.log("AboutHealthReport: Collecting ping list failed: " + ex); - }); - }, - - sendTelemetryPingData: function (pingId) { - console.log("AboutHealthReport: Collecting Telemetry ping data."); - MozSelfSupport.getTelemetryPing(pingId).then((ping) => { - console.log("AboutHealthReport: Sending Telemetry ping data."); - this.injectData("telemetry-ping-data", { - id: pingId, - pingData: ping, - }); - }).catch((ex) => { - console.log("AboutHealthReport: Loading ping data failed: " + ex); - this.injectData("telemetry-ping-data", { - id: pingId, - error: "error-generic", - }); - }); - }, - sendCurrentEnvironment: function () { - console.log("AboutHealthReport: Sending Telemetry environment data."); - MozSelfSupport.getCurrentTelemetryEnvironment().then((environment) => { - this.injectData("telemetry-current-environment-data", environment); - }).catch((ex) => { - console.log("AboutHealthReport: Collecting current environment data failed: " + ex); - }); }, sendCurrentPingData: function () { - console.log("AboutHealthReport: Sending current Telemetry ping data."); - MozSelfSupport.getCurrentTelemetrySubsessionPing().then((ping) => { - this.injectData("telemetry-current-ping-data", ping); - }).catch((ex) => { - console.log("AboutHealthReport: Collecting current ping data failed: " + ex); - }); }, injectData: function (type, content) { @@ -129,12 +89,6 @@ var healthReportWrapper = { case "RequestCurrentPrefs": this.updatePrefState(); break; - case "RequestTelemetryPingList": - this.sendTelemetryPingList(); - break; - case "RequestTelemetryPingData": - this.sendTelemetryPingData(evt.detail.id); - break; case "RequestCurrentEnvironment": this.sendCurrentEnvironment(); break; diff --git a/basilisk/base/content/baseMenuOverlay.xul b/basilisk/base/content/baseMenuOverlay.xul index def549b..445ce8d 100644 --- a/basilisk/base/content/baseMenuOverlay.xul +++ b/basilisk/base/content/baseMenuOverlay.xul @@ -57,13 +57,6 @@ onclick="checkForMiddleClick(this, event);" label="&helpKeyboardShortcuts.label;" accesskey="&helpKeyboardShortcuts.accesskey;"/> -#ifdef MOZ_TELEMETRY_REPORTING - <menuitem id="healthReport" - label="&healthReport2.label;" - accesskey="&healthReport2.accesskey;" - oncommand="openHealthReport()" - onclick="checkForMiddleClick(this, event);"/> -#endif <menuitem id="troubleShooting" accesskey="&helpTroubleshootingInfo.accesskey;" label="&helpTroubleshootingInfo.label;" diff --git a/basilisk/base/content/browser-data-submission-info-bar.js b/basilisk/base/content/browser-data-submission-info-bar.js index 0c87d19..bb76903 100644 --- a/basilisk/base/content/browser-data-submission-info-bar.js +++ b/basilisk/base/content/browser-data-submission-info-bar.js @@ -2,9 +2,6 @@ * 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/. */ -const LOGGER_NAME = "Toolkit.Telemetry"; -const LOGGER_PREFIX = "DataNotificationInfoBar::"; - /** * Represents an info bar that shows a data submission notification. */ @@ -22,9 +19,6 @@ var gDataNotificationInfoBar = { }, get _log() { - let Log = Cu.import("resource://gre/modules/Log.jsm", {}).Log; - delete this._log; - return this._log = Log.repository.getLoggerWithMessagePrefix(LOGGER_NAME, LOGGER_PREFIX); }, init: function() { diff --git a/basilisk/base/content/browser-fullScreenAndPointerLock.js b/basilisk/base/content/browser-fullScreenAndPointerLock.js index b26a31f..a72b409 100644 --- a/basilisk/base/content/browser-fullScreenAndPointerLock.js +++ b/basilisk/base/content/browser-fullScreenAndPointerLock.js @@ -342,11 +342,6 @@ var FullScreen = { // TabsInTitlebar._update() and bug 1173768. TabsInTitlebar.updateAppearance(true); } - - if (enterFS && !document.fullscreenElement) { - Services.telemetry.getHistogramById("FX_BROWSER_FULLSCREEN_USED") - .add(1); - } }, exitDomFullScreen : function() { diff --git a/basilisk/base/content/browser-media.js b/basilisk/base/content/browser-media.js index 775fc4d..12e134a 100644 --- a/basilisk/base/content/browser-media.js +++ b/basilisk/base/content/browser-media.js @@ -185,12 +185,6 @@ XPCOMUtils.defineLazyGetter(gEMEHandler, "_brandShortName", function() { return document.getElementById("bundle_brand").getString("brandShortName"); }); -const TELEMETRY_DDSTAT_SHOWN = 0; -const TELEMETRY_DDSTAT_SHOWN_FIRST = 1; -const TELEMETRY_DDSTAT_CLICKED = 2; -const TELEMETRY_DDSTAT_CLICKED_FIRST = 3; -const TELEMETRY_DDSTAT_SOLVED = 4; - let gDecoderDoctorHandler = { getLabelForNotificationBox(type) { if (type == "platform-decoder-not-found") { @@ -240,14 +234,12 @@ let gDecoderDoctorHandler = { // - 'type' is the type of issue, it determines which text to show in the // infobar. // - 'decoderDoctorReportId' is the Decoder Doctor issue identifier, to be - // used here as key for the telemetry (counting infobar displays, - // "Learn how" buttons clicks, and resolutions) and for the prefs used - // to store at-issue formats. + // used here as key for the prefs used to store at-issue formats. // - 'formats' contains a comma-separated list of formats (or key systems) // that suffer the issue. These are kept in a pref, which the backend // uses to later find when an issue is resolved. // - 'isSolved' is true when the notification actually indicates the - // resolution of that issue, to be reported as telemetry. + // resolution of that issue. let {type, isSolved, decoderDoctorReportId, formats} = parsedData; type = type.toLowerCase(); // Error out early on invalid ReportId @@ -264,9 +256,6 @@ let gDecoderDoctorHandler = { // (Writing prefs from e10s content is now allowed.) let formatsPref = "media.decoder-doctor." + decoderDoctorReportId + ".formats"; let buttonClickedPref = "media.decoder-doctor." + decoderDoctorReportId + ".button-clicked"; - let histogram = - Services.telemetry.getKeyedHistogramById("DECODER_DOCTOR_INFOBAR_STATS"); - let formatsInPref = Services.prefs.getPrefType(formatsPref) && Services.prefs.getCharPref(formatsPref); @@ -277,7 +266,6 @@ let gDecoderDoctorHandler = { } if (!formatsInPref) { Services.prefs.setCharPref(formatsPref, formats); - histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_SHOWN_FIRST); } else { // Split existing formats into an array of strings. let existing = formatsInPref.split(",").map(String.trim); @@ -290,7 +278,6 @@ let gDecoderDoctorHandler = { existing.concat(newbies).join(", ")); } } - histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_SHOWN); let buttons = []; let sumo = gDecoderDoctorHandler.getSumoForLearnHowButton(type); @@ -303,9 +290,7 @@ let gDecoderDoctorHandler = { Services.prefs.getBoolPref(buttonClickedPref); if (!clickedInPref) { Services.prefs.setBoolPref(buttonClickedPref, true); - histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_CLICKED_FIRST); } - histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_CLICKED); let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL"); openUILinkIn(baseURL + sumo, "tab"); @@ -322,10 +307,9 @@ let gDecoderDoctorHandler = { ); } else if (formatsInPref) { // Issue is solved, and prefs haven't been cleared yet, meaning it's the - // first time we get this resolution -> Clear prefs and report telemetry. + // first time we get this resolution -> Clear prefs. Services.prefs.clearUserPref(formatsPref); Services.prefs.clearUserPref(buttonClickedPref); - histogram.add(decoderDoctorReportId, TELEMETRY_DDSTAT_SOLVED); } }, } diff --git a/basilisk/base/content/browser-plugins.js b/basilisk/base/content/browser-plugins.js index d8ed768..32a6210 100644 --- a/basilisk/base/content/browser-plugins.js +++ b/basilisk/base/content/browser-plugins.js @@ -111,18 +111,7 @@ var gPluginHandler = { }, _clickToPlayNotificationEventCallback: function(event) { - if (event == "showing") { - Services.telemetry.getHistogramById("PLUGINS_NOTIFICATION_SHOWN") - .add(!this.options.primaryPlugin); - // Histograms always start at 0, even though our data starts at 1 - let histogramCount = this.options.pluginData.size - 1; - if (histogramCount > 4) { - histogramCount = 4; - } - Services.telemetry.getHistogramById("PLUGINS_NOTIFICATION_PLUGIN_COUNT") - .add(histogramCount); - } - else if (event == "dismissed") { + if (event == "dismissed") { // Once the popup is dismissed, clicking the icon should show the full // list again this.options.primaryPlugin = null; @@ -138,8 +127,6 @@ var gPluginHandler = { let permission; let expireType; let expireTime; - let histogram = - Services.telemetry.getHistogramById("PLUGINS_NOTIFICATION_USER_ACTION"); // Update the permission manager. // Also update the current state of pluginInfo.fallbackType so that @@ -149,7 +136,6 @@ var gPluginHandler = { permission = Ci.nsIPermissionManager.ALLOW_ACTION; expireType = Ci.nsIPermissionManager.EXPIRE_SESSION; expireTime = Date.now() + Services.prefs.getIntPref(this.PREF_SESSION_PERSIST_MINUTES) * 60 * 1000; - histogram.add(0); aPluginInfo.fallbackType = Ci.nsIObjectLoadingContent.PLUGIN_ACTIVE; break; @@ -158,7 +144,6 @@ var gPluginHandler = { expireType = Ci.nsIPermissionManager.EXPIRE_TIME; expireTime = Date.now() + Services.prefs.getIntPref(this.PREF_PERSISTENT_DAYS) * 24 * 60 * 60 * 1000; - histogram.add(1); aPluginInfo.fallbackType = Ci.nsIObjectLoadingContent.PLUGIN_ACTIVE; break; @@ -166,7 +151,6 @@ var gPluginHandler = { permission = Ci.nsIPermissionManager.PROMPT_ACTION; expireType = Ci.nsIPermissionManager.EXPIRE_NEVER; expireTime = 0; - histogram.add(2); switch (aPluginInfo.blocklistState) { case Ci.nsIBlocklistService.STATE_VULNERABLE_UPDATE_AVAILABLE: aPluginInfo.fallbackType = Ci.nsIObjectLoadingContent.PLUGIN_VULNERABLE_UPDATABLE; @@ -347,9 +331,6 @@ var gPluginHandler = { return; } - Services.telemetry.getHistogramById("PLUGINS_INFOBAR_SHOWN"). - add(true); - let message; // Icons set directly cannot be manipulated using moz-image-region, so // we use CSS classes instead. @@ -386,9 +367,6 @@ var gPluginHandler = { label: gNavigatorBundle.getString("pluginContinueBlocking.label"), accessKey: gNavigatorBundle.getString("pluginContinueBlocking.accesskey"), callback: function() { - Services.telemetry.getHistogramById("PLUGINS_INFOBAR_BLOCK"). - add(true); - Services.perms.addFromPrincipal(principal, "plugin-hidden-notification", Services.perms.DENY_ACTION); @@ -398,9 +376,6 @@ var gPluginHandler = { label: gNavigatorBundle.getString("pluginActivateTrigger.label"), accessKey: gNavigatorBundle.getString("pluginActivateTrigger.accesskey"), callback: function() { - Services.telemetry.getHistogramById("PLUGINS_INFOBAR_ALLOW"). - add(true); - let curNotification = PopupNotifications.getNotification("click-to-play-plugins", browser); diff --git a/basilisk/base/content/browser.js b/basilisk/base/content/browser.js index 6d48373..61bba23 100644 --- a/basilisk/base/content/browser.js +++ b/basilisk/base/content/browser.js @@ -15,7 +15,6 @@ Cu.import("resource://gre/modules/NotificationDB.jsm"); ["AboutHome", "resource:///modules/AboutHome.jsm"], ["AddonWatcher", "resource://gre/modules/AddonWatcher.jsm"], ["AppConstants", "resource://gre/modules/AppConstants.jsm"], - ["BrowserUsageTelemetry", "resource:///modules/BrowserUsageTelemetry.jsm"], ["BrowserUtils", "resource://gre/modules/BrowserUtils.jsm"], ["CharsetMenu", "resource://gre/modules/CharsetMenu.jsm"], ["Color", "resource://gre/modules/Color.jsm"], @@ -1043,10 +1042,6 @@ var gBrowserInit = { _delayedStartup: function() { let tmp = {}; - Cu.import("resource://gre/modules/TelemetryTimestamps.jsm", tmp); - let TelemetryTimestamps = tmp.TelemetryTimestamps; - TelemetryTimestamps.add("delayedStartupStarted"); - this._cancelDelayedStartup(); // We need to set the OfflineApps message listeners up before we @@ -1183,8 +1178,6 @@ var gBrowserInit = { PanelUI.init(); LightweightThemeListener.init(); - Services.telemetry.getHistogramById("E10S_WINDOW").add(gMultiProcessBrowser); - SidebarUI.startDelayedLoad(); UpdateUrlbarSearchSplitterState(); @@ -1338,20 +1331,6 @@ var gBrowserInit = { this.gmpInstallManager.simpleCheckAndInstall().then(null, () => {}); }, 1000 * 60); - // Report via telemetry whether we're able to play MP4/H.264/AAC video. - // We suspect that some Windows users have a broken or have not installed - // Windows Media Foundation, and we'd like to know how many. We'd also like - // to know how good our coverage is on other platforms. - // Note: we delay by 90 seconds reporting this, as calling canPlayType() - // on Windows will cause DLLs to load, i.e. cause disk I/O. - setTimeout(() => { - let v = document.createElementNS("http://www.w3.org/1999/xhtml", "video"); - let aacWorks = v.canPlayType("audio/mp4") != ""; - Services.telemetry.getHistogramById("VIDEO_CAN_CREATE_AAC_DECODER").add(aacWorks); - let h264Works = v.canPlayType("video/mp4") != ""; - Services.telemetry.getHistogramById("VIDEO_CAN_CREATE_H264_DECODER").add(h264Works); - }, 90 * 1000); - SessionStore.promiseInitialized.then(() => { // Bail out if the window has been closed in the meantime. if (window.closed) { @@ -1364,23 +1343,6 @@ var gBrowserInit = { // Start monitoring slow add-ons AddonWatcher.init(); - // Telemetry for master-password - we do this after 5 seconds as it - // can cause IO if NSS/PSM has not already initialized. - setTimeout(() => { - if (window.closed) { - return; - } - let secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"] - .getService(Ci.nsIPKCS11ModuleDB); - let slot = secmodDB.findSlotByName(""); - let mpEnabled = slot && - slot.status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED && - slot.status != Ci.nsIPKCS11Slot.SLOT_READY; - if (mpEnabled) { - Services.telemetry.getHistogramById("MASTER_PASSWORD_ENABLED").add(mpEnabled); - } - }, 5000); - PanicButtonNotifier.init(); }); @@ -1395,7 +1357,6 @@ var gBrowserInit = { this.delayedStartupFinished = true; Services.obs.notifyObservers(window, "browser-delayed-startup-finished", ""); - TelemetryTimestamps.add("delayedStartupFinished"); }, // Returns the URI(s) to load at startup. @@ -2674,12 +2635,6 @@ var gMenuButtonUpdateBadge = { } }; -// Values for telemtery bins: see TLS_ERROR_REPORT_UI in Histograms.json -const TLS_ERROR_REPORT_TELEMETRY_AUTO_CHECKED = 2; -const TLS_ERROR_REPORT_TELEMETRY_AUTO_UNCHECKED = 3; -const TLS_ERROR_REPORT_TELEMETRY_MANUAL_SEND = 4; -const TLS_ERROR_REPORT_TELEMETRY_AUTO_SEND = 5; - const PREF_SSL_IMPACT_ROOTS = ["security.tls.version.", "security.ssl3."]; const PREF_SSL_IMPACT = PREF_SSL_IMPACT_ROOTS.reduce((prefs, root) => { @@ -2699,7 +2654,6 @@ var BrowserOnClick = { mm.addMessageListener("Browser:SiteBlockedError", this); mm.addMessageListener("Browser:EnableOnlineMode", this); mm.addMessageListener("Browser:ResetSSLPreferences", this); - mm.addMessageListener("Browser:SSLErrorReportTelemetry", this); mm.addMessageListener("Browser:OverrideWeakCrypto", this); mm.addMessageListener("Browser:SSLErrorGoBack", this); @@ -2713,7 +2667,6 @@ var BrowserOnClick = { mm.removeMessageListener("Browser:SiteBlockedError", this); mm.removeMessageListener("Browser:EnableOnlineMode", this); mm.removeMessageListener("Browser:ResetSSLPreferences", this); - mm.removeMessageListener("Browser:SSLErrorReportTelemetry", this); mm.removeMessageListener("Browser:OverrideWeakCrypto", this); mm.removeMessageListener("Browser:SSLErrorGoBack", this); @@ -2759,19 +2712,6 @@ var BrowserOnClick = { } msg.target.reload(); break; - case "Browser:SetSSLErrorReportAuto": - Services.prefs.setBoolPref("security.ssl.errorReporting.automatic", msg.json.automatic); - let bin = TLS_ERROR_REPORT_TELEMETRY_AUTO_UNCHECKED; - if (msg.json.automatic) { - bin = TLS_ERROR_REPORT_TELEMETRY_AUTO_CHECKED; - } - Services.telemetry.getHistogramById("TLS_ERROR_REPORT_UI").add(bin); - break; - case "Browser:SSLErrorReportTelemetry": - let reportStatus = msg.data.reportStatus; - Services.telemetry.getHistogramById("TLS_ERROR_REPORT_UI") - .add(reportStatus); - break; case "Browser:OverrideWeakCrypto": let weakCryptoOverride = Cc["@mozilla.org/security/weakcryptooverride;1"] .getService(Ci.nsIWeakCryptoOverride); @@ -3466,9 +3406,6 @@ const BrowserSearch = { */ loadSearchFromContext: function (terms) { let engine = BrowserSearch._loadSearch(terms, true, "contextmenu"); - if (engine) { - BrowserSearch.recordSearchInTelemetry(engine, "contextmenu"); - } }, pasteAndSearch: function (event) { @@ -3492,56 +3429,8 @@ const BrowserSearch = { var newWindowPref = gPrefService.getIntPref("browser.link.open_newwindow"); var where = newWindowPref == 3 ? "tab" : "window"; openUILinkIn(this.searchEnginesURL, where); - }, - - /** - * Helper to record a search with Telemetry. - * - * Telemetry records only search counts and nothing pertaining to the search itself. - * - * @param engine - * (nsISearchEngine) The engine handling the search. - * @param source - * (string) Where the search originated from. See BrowserUsageTelemetry for - * allowed values. - * @param details [optional] - * An optional parameter passed to |BrowserUsageTelemetry.recordSearch|. - * See its documentation for allowed options. - * Additionally, if the search was a suggested search, |details.selection| - * indicates where the item was in the suggestion list and how the user - * selected it: {selection: {index: The selected index, kind: "key" or "mouse"}} - */ - recordSearchInTelemetry: function (engine, source, details={}) { - try { - BrowserUsageTelemetry.recordSearch(engine, source, details); - } catch (ex) { - Cu.reportError(ex); - } - }, - - /** - * Helper to record a one-off search with Telemetry. - * - * Telemetry records only search counts and nothing pertaining to the search itself. - * - * @param engine - * (nsISearchEngine) The engine handling the search. - * @param source - * (string) Where the search originated from. See BrowserUsageTelemetry for - * allowed values. - * @param type - * (string) Indicates how the user selected the search item. - * @param where - * (string) Where was the search link opened (e.g. new tab, current tab, ..). - */ - recordOneoffSearchInTelemetry: function (engine, source, type, where) { - try { - const details = {type, isOneOff: true}; - BrowserUsageTelemetry.recordSearch(engine, source, details); - } catch (ex) { - Cu.reportError(ex); - } } + }; XPCOMUtils.defineConstant(this, "BrowserSearch", BrowserSearch); @@ -4867,11 +4756,6 @@ var gTabletModePageCounter = { }, finish() { - if (this.enabled) { - let histogram = Services.telemetry.getKeyedHistogramById("FX_TABLETMODE_PAGE_LOAD"); - histogram.add("tablet", this._tabletCount); - histogram.add("desktop", this._desktopCount); - } }, }; @@ -6401,12 +6285,6 @@ var gIdentityHandler = { }, disableMixedContentProtection() { - // Use telemetry to measure how often unblocking happens - const kMIXED_CONTENT_UNBLOCK_EVENT = 2; - let histogram = - Services.telemetry.getHistogramById( - "MIXED_CONTENT_UNBLOCK_COUNTER"); - histogram.add(kMIXED_CONTENT_UNBLOCK_EVENT); // Reload the page with the content unblocked BrowserReloadWithFlags( Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT); @@ -7123,9 +7001,6 @@ var gIdentityHandler = { this._permissionJustRemoved = true; this.updatePermissionHint(); - // Set telemetry values for clearing a permission - let histogram = Services.telemetry.getKeyedHistogramById("WEB_PERMISSION_CLEARED"); - let permissionType = 0; if (aPermission.state == SitePermissions.ALLOW) { // 1 : clear permanently allowed permission diff --git a/basilisk/base/content/content.js b/basilisk/base/content/content.js index d2a70ba..23890df 100644 --- a/basilisk/base/content/content.js +++ b/basilisk/base/content/content.js @@ -217,12 +217,6 @@ Cc["@mozilla.org/eventlistenerservice;1"] .getService(Ci.nsIEventListenerService) .addSystemEventListener(global, "contextmenu", handleContentContextMenu, false); -// Values for telemtery bins: see TLS_ERROR_REPORT_UI in Histograms.json -const TLS_ERROR_REPORT_TELEMETRY_UI_SHOWN = 0; -const TLS_ERROR_REPORT_TELEMETRY_EXPANDED = 1; -const TLS_ERROR_REPORT_TELEMETRY_SUCCESS = 6; -const TLS_ERROR_REPORT_TELEMETRY_FAILURE = 7; - const SEC_ERROR_BASE = Ci.nsINSSErrorsService.NSS_SEC_ERROR_BASE; const MOZILLA_PKIX_ERROR_BASE = Ci.nsINSSErrorsService.MOZILLA_PKIX_ERROR_BASE; diff --git a/basilisk/base/content/newtab/page.js b/basilisk/base/content/newtab/page.js index 9cc91e8..9402b07 100644 --- a/basilisk/base/content/newtab/page.js +++ b/basilisk/base/content/newtab/page.js @@ -213,9 +213,6 @@ var gPage = { }, onPageFirstVisible: function () { - // Record another page impression. - Services.telemetry.getHistogramById("NEWTAB_PAGE_SHOWN").add(true); - for (let site of gGrid.sites) { if (site) { // The site may need to modify and/or re-render itself if diff --git a/basilisk/base/content/newtab/sites.js b/basilisk/base/content/newtab/sites.js index 548c20a..9d91aea 100644 --- a/basilisk/base/content/newtab/sites.js +++ b/basilisk/base/content/newtab/sites.js @@ -270,21 +270,6 @@ Site.prototype = { }, /** - * Record interaction with site using telemetry. - */ - _recordSiteClicked: function(aIndex) { - if (Services.prefs.prefHasUserValue("browser.newtabpage.rows") || - Services.prefs.prefHasUserValue("browser.newtabpage.columns") || - aIndex > 8) { - // We only want to get indices for the default configuration, everything - // else goes in the same bucket. - aIndex = 9; - } - Services.telemetry.getHistogramById("NEWTAB_PAGE_SITE_CLICKED") - .add(aIndex); - }, - - /** * Handles site click events. */ onClick: function(aEvent) { @@ -296,11 +281,6 @@ Site.prototype = { // Handle tile/thumbnail link click if (target.classList.contains("newtab-link") || target.parentElement.classList.contains("newtab-link")) { - // Record for primary and middle clicks - if (button == 0 || button == 1) { - this._recordSiteClicked(tileIndex); - action = "click"; - } } // Only handle primary clicks for the remaining targets else if (button == 0) { diff --git a/basilisk/base/content/tabbrowser.xml b/basilisk/base/content/tabbrowser.xml index a9e936d..f95d7db 100644 --- a/basilisk/base/content/tabbrowser.xml +++ b/basilisk/base/content/tabbrowser.xml @@ -1304,8 +1304,7 @@ This function assumes we have an LRU cache of tabs (either images of tab content or their layers). The goal is to find out how far into the cache we need to look in order to find - aTab. We record this number in telemetry and also move aTab to - the front of the cache. + aTab. We move aTab to the front of the cache. A newly created tab has position Infinity in the cache. If a tab is closed, it has no effect on the position of other @@ -1317,10 +1316,6 @@ <method name="_recordTabAccess"> <parameter name="aTab"/> <body><![CDATA[ - if (!Services.telemetry.canRecordExtended) { - return; - } - let tabs = Array.from(this.visibleTabs); let pos = aTab.cachePosition; @@ -1332,10 +1327,6 @@ } } aTab.cachePosition = 0; - - if (isFinite(pos)) { - Services.telemetry.getHistogramById("TAB_SWITCH_CACHE_POSITION").add(pos); - } ]]></body> </method> @@ -2243,8 +2234,6 @@ if (animate) { requestAnimationFrame(function () { - this.tabContainer._handleTabTelemetryStart(t, aURI); - // kick the animation off t.setAttribute("fadein", "true"); }.bind(this)); @@ -2428,8 +2417,6 @@ return; } - this.tabContainer._handleTabTelemetryStart(aTab); - this._blurTab(aTab); aTab.style.maxWidth = ""; // ensure that fade-out transition happens aTab.removeAttribute("fadein"); @@ -5846,81 +5833,6 @@ </body> </method> - <method name="_handleTabTelemetryStart"> - <parameter name="aTab"/> - <parameter name="aURI"/> - <body> - <![CDATA[ - // Animation-smoothness telemetry/logging - if (Services.telemetry.canRecordExtended || this._tabAnimationLoggingEnabled) { - if (aURI == "about:newtab" && (aTab._tPos == 1 || aTab._tPos == 2)) { - // Indicate newtab page animation where other tabs are unaffected - // (for which case, the 2nd or 3rd tabs are good representatives, even if not absolute) - aTab._recordingTabOpenPlain = true; - } - aTab._recordingHandle = window.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils) - .startFrameTimeRecording(); - } - - // Overall animation duration - aTab._animStartTime = Date.now(); - ]]> - </body> - </method> - - <method name="_handleTabTelemetryEnd"> - <parameter name="aTab"/> - <body> - <![CDATA[ - if (!aTab._animStartTime) { - return; - } - - aTab._animStartTime = 0; - - // Handle tab animation smoothness telemetry/logging of frame intervals and paint times - if (!("_recordingHandle" in aTab)) { - return; - } - - let intervals = window.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIDOMWindowUtils) - .stopFrameTimeRecording(aTab._recordingHandle); - delete aTab._recordingHandle; - let frameCount = intervals.length; - - if (this._tabAnimationLoggingEnabled) { - let msg = "Tab " + (aTab.closing ? "close" : "open") + " (Frame-interval):\n"; - for (let i = 0; i < frameCount; i++) { - msg += Math.round(intervals[i]) + "\n"; - } - Services.console.logStringMessage(msg); - } - - // For telemetry, the first frame interval is not useful since it may represent an interval - // to a relatively old frame (prior to recording start). So we'll ignore it for the average. - if (frameCount > 1) { - let averageInterval = 0; - for (let i = 1; i < frameCount; i++) { - averageInterval += intervals[i]; - } - averageInterval = averageInterval / (frameCount - 1); - - Services.telemetry.getHistogramById("FX_TAB_ANIM_ANY_FRAME_INTERVAL_MS").add(averageInterval); - - if (aTab._recordingTabOpenPlain) { - delete aTab._recordingTabOpenPlain; - // While we do have a telemetry probe NEWTAB_PAGE_ENABLED to monitor newtab preview, it'll be - // easier to overview the data without slicing by it. Hence the additional histograms with _PREVIEW. - let preview = this._browserNewtabpageEnabled ? "_PREVIEW" : ""; - Services.telemetry.getHistogramById("FX_TAB_ANIM_OPEN" + preview + "_FRAME_INTERVAL_MS").add(averageInterval); - } - } - ]]> - </body> - </method> - <!-- Deprecated stuff, implemented for backwards compatibility. --> <property name="mAllTabsPopup" readonly="true" onget="return document.getElementById('alltabs-popup');"/> @@ -5935,8 +5847,6 @@ var tab = event.target; - this._handleTabTelemetryEnd(tab); - if (tab.getAttribute("fadein") == "true") { if (tab._fullyOpen) this.adjustTabstrip(); diff --git a/basilisk/base/content/urlbarBindings.xml b/basilisk/base/content/urlbarBindings.xml index b9c1781..949023a 100644 --- a/basilisk/base/content/urlbarBindings.xml +++ b/basilisk/base/content/urlbarBindings.xml @@ -601,8 +601,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. typeof(engineOrEngineName) == "string" ? Services.search.getEngineByName(engineOrEngineName) : engineOrEngineName; - let isOneOff = this.popup.oneOffSearchButtons - .maybeRecordTelemetry(event, openUILinkWhere, openUILinkParams); // Infer the type of the event which triggered the search. let eventType = "unknown"; if (event instanceof KeyboardEvent) { @@ -615,7 +613,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. details.isOneOff = isOneOff; details.type = eventType; - BrowserSearch.recordSearchInTelemetry(engine, "urlbar", details); let submission = engine.getSubmission(query, null, "keyword"); return [submission.uri.spec, submission.postData]; ]]></body> @@ -1289,12 +1286,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var searchBar = BrowserSearch.searchBar; var popupForSearchBar = searchBar && searchBar.textbox == this.mInput; - if (popupForSearchBar) { - searchBar.telemetrySearchDetails = { - index: controller.selection.currentIndex, - kind: "mouse" - }; - } // Check for unmodified left-click, and use default behavior if (aEvent.button == 0 && !aEvent.shiftKey && !aEvent.ctrlKey && @@ -1437,12 +1428,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. <body><![CDATA[ this._oneOffSearchesEnabled = enable; if (enable) { - this.oneOffSearchButtons.telemetryOrigin = "urlbar"; this.oneOffSearchButtons.style.display = "-moz-box"; this.oneOffSearchButtons.popup = this; this.oneOffSearchButtons.textbox = this.input; } else { - this.oneOffSearchButtons.telemetryOrigin = null; this.oneOffSearchButtons.style.display = "none"; this.oneOffSearchButtons.popup = null; this.oneOffSearchButtons.textbox = null; diff --git a/basilisk/components/migration/AutoMigrate.jsm b/basilisk/components/migration/AutoMigrate.jsm index 003f70d..93f1612 100644 --- a/basilisk/components/migration/AutoMigrate.jsm +++ b/basilisk/components/migration/AutoMigrate.jsm @@ -93,30 +93,20 @@ const AutoMigrate = { * failed for some reason. */ migrate(profileStartup, migratorKey, profileToMigrate) { - let histogram = Services.telemetry.getHistogramById( - "FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_PROCESS_SUCCESS"); - histogram.add(0); let {migrator, pickedKey} = this.pickMigrator(migratorKey); - histogram.add(5); profileToMigrate = this.pickProfile(migrator, profileToMigrate); - histogram.add(10); let resourceTypes = migrator.getMigrateData(profileToMigrate, profileStartup); if (!(resourceTypes & this.resourceTypesToUse)) { throw new Error("No usable resources were found for the selected browser!"); } - histogram.add(15); let sawErrors = false; let migrationObserver = (subject, topic) => { if (topic == "Migration:ItemError") { sawErrors = true; } else if (topic == "Migration:Ended") { - histogram.add(25); - if (sawErrors) { - histogram.add(26); - } Services.obs.removeObserver(migrationObserver, "Migration:Ended"); Services.obs.removeObserver(migrationObserver, "Migration:ItemError"); Services.prefs.setCharPref(kAutoMigrateBrowserPref, pickedKey); @@ -132,7 +122,6 @@ const AutoMigrate = { Services.obs.addObserver(migrationObserver, "Migration:Ended", false); Services.obs.addObserver(migrationObserver, "Migration:ItemError", false); migrator.migrate(this.resourceTypesToUse, profileStartup, profileToMigrate); - histogram.add(20); }, /** @@ -209,50 +198,35 @@ const AutoMigrate = { undo: Task.async(function* () { let browserId = Preferences.get(kAutoMigrateBrowserPref, "unknown"); - let histogram = Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_AUTOMATED_IMPORT_UNDO"); - histogram.add(0); if (!(yield this.canUndo())) { - histogram.add(5); throw new Error("Can't undo!"); } this._pendingUndoTasks = true; this._removeNotificationBars(); - histogram.add(10); let readPromise = OS.File.read(kUndoStateFullPath, { encoding: "utf-8", compression: "lz4", }); let stateData = this._dejsonifyUndoState(yield readPromise); - histogram.add(12); this._errorMap = {bookmarks: 0, visits: 0, logins: 0}; - let reportErrorTelemetry = (type) => { - let histogramId = `FX_STARTUP_MIGRATION_UNDO_${type.toUpperCase()}_ERRORCOUNT`; - Services.telemetry.getKeyedHistogramById(histogramId).add(browserId, this._errorMap[type]); - }; yield this._removeUnchangedBookmarks(stateData.get("bookmarks")).catch(ex => { Cu.reportError("Uncaught exception when removing unchanged bookmarks!"); Cu.reportError(ex); }); - reportErrorTelemetry("bookmarks"); - histogram.add(15); yield this._removeSomeVisits(stateData.get("visits")).catch(ex => { Cu.reportError("Uncaught exception when removing history visits!"); Cu.reportError(ex); }); - reportErrorTelemetry("visits"); - histogram.add(20); yield this._removeUnchangedLogins(stateData.get("logins")).catch(ex => { Cu.reportError("Uncaught exception when removing unchanged logins!"); Cu.reportError(ex); }); - reportErrorTelemetry("logins"); - histogram.add(25); // This is async, but no need to wait for it. NewTabUtils.links.populateCache(() => { @@ -260,7 +234,6 @@ const AutoMigrate = { }, true); this._purgeUndoState(this.UNDO_REMOVED_REASON_UNDO_USED); - histogram.add(30); }), _removeNotificationBars() { @@ -288,10 +261,6 @@ const AutoMigrate = { let migrationBrowser = Preferences.get(kAutoMigrateBrowserPref, "unknown"); Services.prefs.clearUserPref(kAutoMigrateBrowserPref); - - let histogram = - Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_UNDO_REASON"); - histogram.add(migrationBrowser, reason); }, getBrowserUsedForMigration() { @@ -367,7 +336,6 @@ const AutoMigrate = { message, kNotificationId, null, notificationBox.PRIORITY_INFO_HIGH, buttons ); let remainingDays = Preferences.get(kAutoMigrateDaysToOfferUndoPref, 0); - Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_UNDO_OFFERED").add(4 - remainingDays); }), shouldStillShowUndoPrompt() { diff --git a/basilisk/components/migration/FirefoxProfileMigrator.js b/basilisk/components/migration/FirefoxProfileMigrator.js index 2714cdb..b53f7b5 100644 --- a/basilisk/components/migration/FirefoxProfileMigrator.js +++ b/basilisk/components/migration/FirefoxProfileMigrator.js @@ -1,6 +1,5 @@ /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- - * vim: sw=2 ts=2 sts=2 et */ - /* This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ @@ -170,77 +169,8 @@ FirefoxProfileMigrator.prototype._getResourcesInternal = function(sourceProfileD }; } - // Telemetry related migrations. - let times = { - name: "times", // name is used only by tests. - type: types.OTHERDATA, - migrate: aCallback => { - let file = this._getFileObject(sourceProfileDir, "times.json"); - if (file) { - file.copyTo(currentProfileDir, ""); - } - // And record the fact a migration (ie, a reset) happened. - let timesAccessor = new ProfileAge(currentProfileDir.path); - timesAccessor.recordProfileReset().then( - () => aCallback(true), - () => aCallback(false) - ); - } - }; - let telemetry = { - name: "telemetry", // name is used only by tests... - type: types.OTHERDATA, - migrate: aCallback => { - let createSubDir = (name) => { - let dir = currentProfileDir.clone(); - dir.append(name); - dir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY); - return dir; - }; - - // If the 'datareporting' directory exists we migrate files from it. - let haveStateFile = false; - let dataReportingDir = this._getFileObject(sourceProfileDir, "datareporting"); - if (dataReportingDir && dataReportingDir.isDirectory()) { - // Copy only specific files. - let toCopy = ["state.json", "session-state.json"]; - - let dest = createSubDir("datareporting"); - let enumerator = dataReportingDir.directoryEntries; - while (enumerator.hasMoreElements()) { - let file = enumerator.getNext().QueryInterface(Ci.nsIFile); - if (file.isDirectory() || toCopy.indexOf(file.leafName) == -1) { - continue; - } - - if (file.leafName == "state.json") { - haveStateFile = true; - } - file.copyTo(dest, ""); - } - } - - if (!haveStateFile) { - // Fall back to migrating the state file that contains the client id from healthreport/. - // We first moved the client id management from the FHR implementation to the datareporting - // service. - // Consequently, we try to migrate an existing FHR state file here as a fallback. - let healthReportDir = this._getFileObject(sourceProfileDir, "healthreport"); - if (healthReportDir && healthReportDir.isDirectory()) { - let stateFile = this._getFileObject(healthReportDir, "state.json"); - if (stateFile) { - let dest = createSubDir("healthreport"); - stateFile.copyTo(dest, ""); - } - } - } - - aCallback(true); - } - }; - return [places, cookies, passwords, formData, dictionary, bookmarksBackups, - session, times, telemetry].filter(r => r); + session].filter(r => r); }; Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", { diff --git a/basilisk/components/migration/MigrationUtils.jsm b/basilisk/components/migration/MigrationUtils.jsm index 9425cce..2bb7787 100644 --- a/basilisk/components/migration/MigrationUtils.jsm +++ b/basilisk/components/migration/MigrationUtils.jsm @@ -265,27 +265,6 @@ this.MigratorPrototype = { let maybeFinishResponsivenessMonitor = (responsivenessMonitor, histogramId) => { if (responsivenessMonitor) { let accumulatedDelay = responsivenessMonitor.finish(); - if (histogramId) { - try { - Services.telemetry.getKeyedHistogramById(histogramId) - .add(browserKey, accumulatedDelay); - } catch (ex) { - Cu.reportError(histogramId + ": " + ex); - } - } - } - }; - - let collectQuantityTelemetry = () => { - for (let resourceType of Object.keys(MigrationUtils._importQuantities)) { - let histogramId = - "FX_MIGRATION_" + resourceType.toUpperCase() + "_QUANTITY"; - try { - Services.telemetry.getKeyedHistogramById(histogramId) - .add(browserKey, MigrationUtils._importQuantities[resourceType]); - } catch (ex) { - Cu.reportError(histogramId + ": " + ex); - } } }; @@ -331,7 +310,6 @@ this.MigratorPrototype = { maybeFinishResponsivenessMonitor(responsivenessMonitor, responsivenessHistogramId); if (resourcesGroupedByItems.size == 0) { - collectQuantityTelemetry(); notify("Migration:Ended"); } } @@ -803,7 +781,6 @@ this.MigrationUtils = Object.freeze({ * - {String} an identifier for the profile to use when migrating * NB: If you add new consumers, please add a migration entry point * constant below, and specify at least the first element of the array - * (the migration entry point for purposes of telemetry). */ showMigrationWizard: function MU_showMigrationWizard(aOpener, aParams) { @@ -1096,7 +1073,4 @@ this.MigrationUtils = Object.freeze({ "safari": 8, "360se": 9, }, - getSourceIdForTelemetry(sourceName) { - return this._sourceNameToIdMapping[sourceName] || 0; - }, }); diff --git a/basilisk/components/migration/content/migration.js b/basilisk/components/migration/content/migration.js index eb21756..8ca60a3 100644 --- a/basilisk/components/migration/content/migration.js +++ b/basilisk/components/migration/content/migration.js @@ -35,7 +35,6 @@ var MigrationWizard = { /* exported MigrationWizard */ let args = window.arguments; let entryPointId = args[0] || MigrationUtils.MIGRATION_ENTRYPOINT_UNKNOWN; - Services.telemetry.getHistogramById("FX_MIGRATION_ENTRY_POINT").add(entryPointId); this.isInitialMigration = entryPointId == MigrationUtils.MIGRATION_ENTRYPOINT_FIRSTRUN; if (args.length > 1) { @@ -105,15 +104,6 @@ var MigrationWizard = { /* exported MigrationWizard */ } } } - if (this.isInitialMigration) { - Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_BROWSER_COUNT") - .add(this._availableMigrators.length); - let defaultBrowser = MigrationUtils.getMigratorKeyForDefaultBrowser(); - // This will record 0 for unknown default browser IDs. - defaultBrowser = MigrationUtils.getSourceIdForTelemetry(defaultBrowser); - Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_EXISTING_DEFAULT_BROWSER") - .add(defaultBrowser); - } group.addEventListener("command", toggleCloseBrowserWarning); @@ -142,11 +132,6 @@ var MigrationWizard = { /* exported MigrationWizard */ var newSource = document.getElementById("importSourceGroup").selectedItem.id; if (newSource == "nothing") { - // Need to do telemetry here because we're closing the dialog before we get to - // do actual migration. For actual migration, this doesn't happen until after - // migration takes place. - Services.telemetry.getHistogramById("FX_MIGRATION_SOURCE_BROWSER") - .add(MigrationUtils.getSourceIdForTelemetry("nothing")); document.documentElement.cancel(); return false; } @@ -366,21 +351,6 @@ var MigrationWizard = { /* exported MigrationWizard */ onMigratingMigrate: function () { this._migrator.migrate(this._itemsFlags, this._autoMigrate, this._selectedProfile); - - Services.telemetry.getHistogramById("FX_MIGRATION_SOURCE_BROWSER") - .add(MigrationUtils.getSourceIdForTelemetry(this._source)); - if (!this._autoMigrate) { - let hist = Services.telemetry.getKeyedHistogramById("FX_MIGRATION_USAGE"); - let exp = 0; - let items = this._itemsFlags; - while (items) { - if (items & 1) { - hist.add(this._source, exp); - } - items = items >> 1; - exp++; - } - } }, _listItems: function (aID) @@ -426,18 +396,8 @@ var MigrationWizard = { /* exported MigrationWizard */ label.removeAttribute("style"); break; case "Migration:Ended": - if (this.isInitialMigration) { - // Ensure errors in reporting data recency do not affect the rest of the migration. - try { - this.reportDataRecencyTelemetry(); - } catch (ex) { - Cu.reportError(ex); - } - } if (this._autoMigrate) { let hasImportedHomepage = !!(this._newHomePage && this._newHomePage != "DEFAULT"); - Services.telemetry.getKeyedHistogramById("FX_MIGRATION_IMPORTED_HOMEPAGE") - .add(this._source, hasImportedHomepage); if (this._newHomePage) { try { // set homepage properly @@ -508,8 +468,6 @@ var MigrationWizard = { /* exported MigrationWizard */ Cc["@mozilla.org/consoleservice;1"] .getService(Ci.nsIConsoleService) .logStringMessage("some " + type + " did not successfully migrate."); - Services.telemetry.getKeyedHistogramById("FX_MIGRATION_ERRORS") - .add(this._source, Math.log2(numericType)); break; } }, @@ -521,29 +479,4 @@ var MigrationWizard = { /* exported MigrationWizard */ this._listItems("doneItems"); }, - reportDataRecencyTelemetry() { - let histogram = Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_DATA_RECENCY"); - let lastUsedPromises = []; - for (let [key, migrator] of this._availableMigrators) { - // No block-scoped let in for...of loop conditions, so get the source: - let localKey = key; - lastUsedPromises.push(migrator.getLastUsedDate().then(date => { - const ONE_YEAR = 24 * 365; - let diffInHours = Math.round((Date.now() - date) / (60 * 60 * 1000)); - if (diffInHours > ONE_YEAR) { - diffInHours = ONE_YEAR; - } - histogram.add(localKey, diffInHours); - return [localKey, diffInHours]; - })); - } - Promise.all(lastUsedPromises).then(migratorUsedTimeDiff => { - // Sort low to high. - migratorUsedTimeDiff.sort(([keyA, diffA], [keyB, diffB]) => diffA - diffB); /* eslint no-unused-vars: off */ - let usedMostRecentBrowser = migratorUsedTimeDiff.length && this._source == migratorUsedTimeDiff[0][0]; - let usedRecentBrowser = - Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_USED_RECENT_BROWSER"); - usedRecentBrowser.add(this._source, usedMostRecentBrowser); - }); - }, }; diff --git a/basilisk/components/nsBrowserContentHandler.js b/basilisk/components/nsBrowserContentHandler.js index 841d7a4..97c9c28 100644 --- a/basilisk/components/nsBrowserContentHandler.js +++ b/basilisk/components/nsBrowserContentHandler.js @@ -236,9 +236,6 @@ function openPreferences() { } function logSystemBasedSearch(engine) { - var countId = (engine.identifier || ("other-" + engine.name)) + ".system"; - var count = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS"); - count.add(countId); } function doSearch(searchTerm, cmdLine) { @@ -688,18 +685,6 @@ nsDefaultCommandLineHandler.prototype = { /* nsICommandLineHandler */ handle : function(cmdLine) { - // The -url flag is inserted by the operating system when the default - // application handler is used. We check for default browser to remove - // instances where users explicitly decide to "open with" the browser. - // Note that users who launch firefox manually with the -url flag will - // get erroneously counted. - try { - if (cmdLine.findFlag("url", false) && - ShellService.isDefaultBrowser(false, false)) { - Services.telemetry.getHistogramById("FX_STARTUP_EXTERNAL_CONTENT_HANDLER").add(); - } - } catch (e) {} - var urilist = []; if (AppConstants.platform == "win") { diff --git a/basilisk/components/nsBrowserGlue.js b/basilisk/components/nsBrowserGlue.js index 7446d11..2b2daeb 100644 --- a/basilisk/components/nsBrowserGlue.js +++ b/basilisk/components/nsBrowserGlue.js @@ -27,7 +27,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s ["AutoCompletePopup", "resource://gre/modules/AutoCompletePopup.jsm"], ["BookmarkHTMLUtils", "resource://gre/modules/BookmarkHTMLUtils.jsm"], ["BookmarkJSONUtils", "resource://gre/modules/BookmarkJSONUtils.jsm"], - ["BrowserUsageTelemetry", "resource:///modules/BrowserUsageTelemetry.jsm"], ["ContentClick", "resource:///modules/ContentClick.jsm"], ["ContentPrefServiceParent", "resource://gre/modules/ContentPrefServiceParent.jsm"], ["ContentSearch", "resource:///modules/ContentSearch.jsm"], @@ -308,8 +307,6 @@ BrowserGlue.prototype = { } catch (ex) { Cu.reportError(ex); } - let win = RecentWindow.getMostRecentBrowserWindow(); - win.BrowserSearch.recordSearchInTelemetry(engine, "urlbar"); break; case "browser-search-engine-modified": // Ensure we cleanup the hiddenOneOffs pref when removing @@ -340,7 +337,6 @@ BrowserGlue.prototype = { }); break; case "autocomplete-did-enter-text": - this._handleURLBarTelemetry(subject.QueryInterface(Ci.nsIAutoCompleteInput)); break; case "test-initialize-sanitizer": this._sanitizer.onStartup(); @@ -351,64 +347,6 @@ BrowserGlue.prototype = { } }, - _handleURLBarTelemetry(input) { - if (!input || - input.id != "urlbar" || - input.inPrivateContext || - input.popup.selectedIndex < 0) { - return; - } - let controller = - input.popup.view.QueryInterface(Ci.nsIAutoCompleteController); - let idx = input.popup.selectedIndex; - let value = controller.getValueAt(idx); - let action = input._parseActionUrl(value); - let actionType; - if (action) { - actionType = - action.type == "searchengine" && action.params.searchSuggestion ? - "searchsuggestion" : - action.type; - } - if (!actionType) { - let styles = new Set(controller.getStyleAt(idx).split(/\s+/)); - let style = ["autofill", "tag", "bookmark"].find(s => styles.has(s)); - actionType = style || "history"; - } - - Services.telemetry - .getHistogramById("FX_URLBAR_SELECTED_RESULT_INDEX") - .add(idx); - - // Ideally this would be a keyed histogram and we'd just add(actionType), - // but keyed histograms aren't currently shown on the telemetry dashboard - // (bug 1151756). - // - // You can add values but don't change any of the existing values. - // Otherwise you'll break our data. - let buckets = { - autofill: 0, - bookmark: 1, - history: 2, - keyword: 3, - searchengine: 4, - searchsuggestion: 5, - switchtab: 6, - tag: 7, - visiturl: 8, - remotetab: 9, - extension: 10, - }; - if (actionType in buckets) { - Services.telemetry - .getHistogramById("FX_URLBAR_SELECTED_RESULT_TYPE") - .add(buckets[actionType]); - } else { - Cu.reportError("Unknown FX_URLBAR_SELECTED_RESULT_TYPE type: " + - actionType); - } - }, - // initialization (called on application startup) _init: function() { let os = Services.obs; @@ -436,9 +374,6 @@ BrowserGlue.prototype = { os.addObserver(this, "distribution-customization-complete", false); os.addObserver(this, "handle-xul-text-link", false); os.addObserver(this, "profile-before-change", false); - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - os.addObserver(this, "keyword-search", false); - } os.addObserver(this, "browser-search-engine-modified", false); os.addObserver(this, "restart-in-safe-mode", false); os.addObserver(this, "flash-plugin-hang", false); @@ -490,9 +425,6 @@ BrowserGlue.prototype = { os.removeObserver(this, "places-database-locked"); os.removeObserver(this, "handle-xul-text-link"); os.removeObserver(this, "profile-before-change"); - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - os.removeObserver(this, "keyword-search"); - } os.removeObserver(this, "browser-search-engine-modified"); os.removeObserver(this, "flash-plugin-hang"); os.removeObserver(this, "xpi-signature-changed"); @@ -531,10 +463,6 @@ BrowserGlue.prototype = { const STATE_USER_PICKED_IGNORE_FOREVER = 3; const STATE_USER_CLOSED_NOTIFICATION = 4; - let update = function(response) { - Services.telemetry.getHistogramById("SLOW_ADDON_WARNING_STATES").add(response); - } - let complete = false; let start = Date.now(); let done = function(response) { @@ -543,12 +471,8 @@ BrowserGlue.prototype = { return; } complete = true; - update(response); - Services.telemetry.getHistogramById("SLOW_ADDON_WARNING_RESPONSE_TIME").add(Date.now() - start); }; - update(STATE_WARNING_DISPLAYED); - if (notification) { notification.label = message; } else { @@ -659,7 +583,6 @@ BrowserGlue.prototype = { NewTabMessages.init(); SessionStore.init(); - BrowserUsageTelemetry.init(); ContentSearch.init(); FormValidationHandler.init(); @@ -874,27 +797,6 @@ BrowserGlue.prototype = { nb.PRIORITY_WARNING_MEDIUM, buttons); }, - _firstWindowTelemetry: function(aWindow) { - let SCALING_PROBE_NAME = ""; - switch (AppConstants.platform) { - case "win": - SCALING_PROBE_NAME = "DISPLAY_SCALING_MSWIN"; - break; - case "macosx": - SCALING_PROBE_NAME = "DISPLAY_SCALING_OSX"; - break; - case "linux": - SCALING_PROBE_NAME = "DISPLAY_SCALING_LINUX"; - break; - } - if (SCALING_PROBE_NAME) { - let scaling = aWindow.devicePixelRatio * 100; - try { - Services.telemetry.getHistogramById(SCALING_PROBE_NAME).add(scaling); - } catch (ex) {} - } - }, - // the first browser window has finished initializing _onFirstWindowLoaded: function(aWindow) { // Initialize PdfJs when running in-process and remote. This only @@ -975,7 +877,6 @@ BrowserGlue.prototype = { AutoCompletePopup.init(); DateTimePickerHelper.init(); - this._firstWindowTelemetry(aWindow); this._firstWindowLoaded(); }, @@ -1002,7 +903,6 @@ BrowserGlue.prototype = { delete this._bookmarksBackupIdleTime; } - BrowserUsageTelemetry.uninit(); UserAgentOverrides.uninit(); PageThumbs.uninit(); NewTabMessages.uninit(); @@ -1122,20 +1022,6 @@ BrowserGlue.prototype = { Services.prefs.setIntPref("browser.shell.defaultBrowserCheckCount", promptCount); } - try { - // Report default browser status on startup to telemetry - // so we can track whether we are the default. - Services.telemetry.getHistogramById("BROWSER_IS_USER_DEFAULT") - .add(isDefault); - Services.telemetry.getHistogramById("BROWSER_IS_USER_DEFAULT_ERROR") - .add(isDefaultError); - Services.telemetry.getHistogramById("BROWSER_SET_DEFAULT_ALWAYS_CHECK") - .add(shouldCheck); - Services.telemetry.getHistogramById("BROWSER_SET_DEFAULT_DIALOG_PROMPT_RAWCOUNT") - .add(promptCount); - } - catch (ex) { /* Don't break the default prompt if telemetry is broken. */ } - if (willPrompt) { Services.tm.mainThread.dispatch(function() { DefaultBrowserCheck.prompt(RecentWindow.getMostRecentBrowserWindow()); @@ -1552,14 +1438,6 @@ BrowserGlue.prototype = { // available backup compared to that session. if (profileLastUse > lastBackupTime) { let backupAge = Math.round((profileLastUse - lastBackupTime) / 86400000); - // Report the age of the last available backup. - try { - Services.telemetry - .getHistogramById("PLACES_BACKUPS_DAYSFROMLAST") - .add(backupAge); - } catch (ex) { - Cu.reportError(new Error("Unable to report telemetry.")); - } if (backupAge > BOOKMARKS_BACKUP_MAX_INTERVAL_DAYS) this._bookmarksBackupIdleTime /= 2; @@ -2408,24 +2286,12 @@ var DefaultBrowserCheck = { if (isDefault || runTime > 600) { this._setAsDefaultTimer.cancel(); this._setAsDefaultTimer = null; - Services.telemetry.getHistogramById("BROWSER_SET_DEFAULT_TIME_TO_COMPLETION_SECONDS") - .add(runTime); } - Services.telemetry.getHistogramById("BROWSER_IS_USER_DEFAULT_ERROR") - .add(isDefaultError); }, 1000, Ci.nsITimer.TYPE_REPEATING_SLACK); } catch (ex) { setAsDefaultError = true; Cu.reportError(ex); } - // Here BROWSER_IS_USER_DEFAULT and BROWSER_SET_USER_DEFAULT_ERROR appear - // to be inverse of each other, but that is only because this function is - // called when the browser is set as the default. During startup we record - // the BROWSER_IS_USER_DEFAULT value without recording BROWSER_SET_USER_DEFAULT_ERROR. - Services.telemetry.getHistogramById("BROWSER_IS_USER_DEFAULT") - .add(!setAsDefaultError); - Services.telemetry.getHistogramById("BROWSER_SET_DEFAULT_ERROR") - .add(setAsDefaultError); }, _createPopup: function(win, notNowStrings, neverStrings) { @@ -2537,12 +2403,6 @@ var DefaultBrowserCheck = { } else if (!shouldAsk.value) { ShellService.shouldCheckDefaultBrowser = false; } - - try { - let resultEnum = rv * 2 + shouldAsk.value; - Services.telemetry.getHistogramById("BROWSER_SET_DEFAULT_RESULT") - .add(resultEnum); - } catch (ex) { /* Don't break if Telemetry is acting up. */ } } }, diff --git a/basilisk/components/places/content/browserPlacesViews.js b/basilisk/components/places/content/browserPlacesViews.js index 2d1a9a2..f8a03c8 100644 --- a/basilisk/components/places/content/browserPlacesViews.js +++ b/basilisk/components/places/content/browserPlacesViews.js @@ -980,9 +980,6 @@ function PlacesToolbar(aPlace) { } PlacesViewBase.call(this, aPlace); - - Services.telemetry.getHistogramById("FX_BOOKMARKS_TOOLBAR_INIT_MS") - .add(Date.now() - startTime); } PlacesToolbar.prototype = { diff --git a/basilisk/components/places/content/places.js b/basilisk/components/places/content/places.js index 30b4b7b..b04aea3 100644 --- a/basilisk/components/places/content/places.js +++ b/basilisk/components/places/content/places.js @@ -17,7 +17,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "DownloadUtils", "resource://gre/modules/DownloadUtils.jsm"); const RESTORE_FILEPICKER_FILTER_EXT = "*.json;*.jsonlz4"; -const HISTORY_LIBRARY_SEARCH_TELEMETRY = "PLACES_HISTORY_LIBRARY_SEARCH_TIME_MS"; var PlacesOrganizer = { _places: null, @@ -360,7 +359,6 @@ var PlacesOrganizer = { * cookies, history, preferences, and bookmarks. */ importFromBrowser: function() { - // We pass in the type of source we're using for use in telemetry: MigrationUtils.showMigrationWizard(window, [MigrationUtils.MIGRATION_ENTRYPOINT_PLACES]); }, diff --git a/basilisk/components/preferences/in-content/advanced.js b/basilisk/components/preferences/in-content/advanced.js index 5a94cb3..176dbdd 100644 --- a/basilisk/components/preferences/in-content/advanced.js +++ b/basilisk/components/preferences/in-content/advanced.js @@ -40,10 +40,6 @@ var gAdvancedPane = { this.updateReadPrefs(); } this.updateOfflineApps(); - this.initTelemetry(); - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - this.initSubmitHealthReport(); - } this.updateOnScreenKeyboardVisibility(); this.updateCacheSizeInputField(); this.updateActualCacheSize(); @@ -53,10 +49,6 @@ var gAdvancedPane = { gAdvancedPane.updateHardwareAcceleration); setEventListener("advancedPrefs", "select", gAdvancedPane.tabSelectionChanged); - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - setEventListener("submitHealthReportBox", "command", - gAdvancedPane.updateSubmitHealthReport); - } setEventListener("connectionSettings", "command", gAdvancedPane.showConnections); @@ -107,15 +99,6 @@ var gAdvancedPane = { var advancedPrefs = document.getElementById("advancedPrefs"); var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex"); - // tabSelectionChanged gets called twice due to the selectedIndex being set - // by both the selectedItem and selectedPanel callstacks. This guard is used - // to prevent double-counting in Telemetry. - if (preference.valueFromPreferences != advancedPrefs.selectedIndex) { - Services.telemetry - .getHistogramById("FX_PREFERENCES_CATEGORY_OPENED") - .add(telemetryBucketForCategory("advanced")); - } - preference.valueFromPreferences = advancedPrefs.selectedIndex; }, @@ -250,63 +233,15 @@ var gAdvancedPane = { }, /** - * The preference/checkbox is configured in XUL. - * - * In all cases, set up the Learn More link sanely. - */ - initTelemetry: function () - { - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - this._setupLearnMoreLink("toolkit.telemetry.infoURL", "telemetryLearnMore"); - } - }, - - /** - * Set the status of the telemetry controls based on the input argument. - * @param {Boolean} aEnabled False disables the controls, true enables them. - */ - setTelemetrySectionEnabled: function (aEnabled) - { - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - // If FHR is disabled, additional data sharing should be disabled as well. - let disabled = !aEnabled; - document.getElementById("submitTelemetryBox").disabled = disabled; - if (disabled) { - // If we disable FHR, untick the telemetry checkbox. - Services.prefs.setBoolPref("toolkit.telemetry.enabled", false); - } - document.getElementById("telemetryDataDesc").disabled = disabled; - } - }, - - /** * Initialize the health report service reference and checkbox. */ initSubmitHealthReport: function () { - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - this._setupLearnMoreLink("datareporting.healthreport.infoURL", "FHRLearnMore"); - - let checkbox = document.getElementById("submitHealthReportBox"); - - if (Services.prefs.prefIsLocked(PREF_UPLOAD_ENABLED)) { - checkbox.setAttribute("disabled", "true"); - return; - } - - checkbox.checked = Services.prefs.getBoolPref(PREF_UPLOAD_ENABLED); - this.setTelemetrySectionEnabled(checkbox.checked); - } }, /** * Update the health report preference with state from checkbox. */ updateSubmitHealthReport: function () { - if (AppConstants.MOZ_TELEMETRY_REPORTING) { - let checkbox = document.getElementById("submitHealthReportBox"); - Services.prefs.setBoolPref(PREF_UPLOAD_ENABLED, checkbox.checked); - this.setTelemetrySectionEnabled(checkbox.checked); - } }, updateOnScreenKeyboardVisibility() { diff --git a/basilisk/components/preferences/in-content/advanced.xul b/basilisk/components/preferences/in-content/advanced.xul index d5498e7..8957211 100644 --- a/basilisk/components/preferences/in-content/advanced.xul +++ b/basilisk/components/preferences/in-content/advanced.xul @@ -47,12 +47,6 @@ name="layout.spellcheckDefault" type="int"/> -#ifdef MOZ_TELEMETRY_REPORTING - <preference id="toolkit.telemetry.enabled" - name="toolkit.telemetry.enabled" - type="bool"/> -#endif - <!-- Network tab --> <preference id="browser.cache.disk.capacity" name="browser.cache.disk.capacity" @@ -185,42 +179,6 @@ preference="layout.spellcheckDefault"/> </groupbox> </tabpanel> -#ifdef MOZ_DATA_REPORTING - <!-- Data Choices --> - <tabpanel id="dataChoicesPanel" orient="vertical"> -#ifdef MOZ_TELEMETRY_REPORTING - <groupbox> - <caption> - <checkbox id="submitHealthReportBox" label="&enableHealthReport.label;" - accesskey="&enableHealthReport.accesskey;"/> - </caption> - <vbox> - <hbox class="indent"> - <label flex="1">&healthReportDesc.label;</label> - <spacer flex="10"/> - <label id="FHRLearnMore" - class="text-link">&healthReportLearnMore.label;</label> - </hbox> - <hbox class="indent"> - <groupbox flex="1"> - <caption> - <checkbox id="submitTelemetryBox" preference="toolkit.telemetry.enabled" - label="&enableTelemetryData.label;" - accesskey="&enableTelemetryData.accesskey;"/> - </caption> - <hbox class="indent"> - <label id="telemetryDataDesc" flex="1">&telemetryDesc.label;</label> - <spacer flex="10"/> - <label id="telemetryLearnMore" - class="text-link">&telemetryLearnMore.label;</label> - </hbox> - </groupbox> - </hbox> - </vbox> - </groupbox> -#endif - </tabpanel> -#endif <!-- Network --> <tabpanel id="networkPanel" orient="vertical"> diff --git a/basilisk/components/preferences/in-content/content.js b/basilisk/components/preferences/in-content/content.js index 2eac10c..80f058a 100644 --- a/basilisk/components/preferences/in-content/content.js +++ b/basilisk/components/preferences/in-content/content.js @@ -117,11 +117,6 @@ var gContentPane = { gSubDialog.open("chrome://browser/content/preferences/permissions.xul", "resizable=yes", params); - - try { - Services.telemetry - .getHistogramById("WEB_NOTIFICATION_EXCEPTIONS_OPENED").add(); - } catch (e) {} }, diff --git a/basilisk/components/preferences/in-content/preferences.js b/basilisk/components/preferences/in-content/preferences.js index 69cb180..f6a6941 100644 --- a/basilisk/components/preferences/in-content/preferences.js +++ b/basilisk/components/preferences/in-content/preferences.js @@ -124,36 +124,6 @@ function init_dynamic_padding() { document.documentElement.appendChild(mediaStyle); } -function telemetryBucketForCategory(category) { - switch (category) { - case "general": - case "search": - case "content": - case "applications": - case "privacy": - case "security": - case "sync": - return category; - case "advanced": - let advancedPaneTabs = document.getElementById("advancedPrefs"); - switch (advancedPaneTabs.selectedTab.id) { - case "generalTab": - return "advancedGeneral"; - case "dataChoicesTab": - return "advancedDataChoices"; - case "networkTab": - return "advancedNetwork"; - case "updateTab": - return "advancedUpdates"; - case "encryptionTab": - return "advancedCerts"; - } - // fall-through for unknown. - default: - return "unknown"; - } -} - function onHashChange() { gotoPref(); } @@ -194,10 +164,6 @@ function gotoPref(aCategory) { search(category, "data-category"); let mainContent = document.querySelector(".main-content"); mainContent.scrollTop = 0; - - Services.telemetry - .getHistogramById("FX_PREFERENCES_CATEGORY_OPENED") - .add(telemetryBucketForCategory(friendlyName)); } function search(aQuery, aAttribute) { diff --git a/basilisk/components/search/content/searchReset.js b/basilisk/components/search/content/searchReset.js index b541d41..d0e6cfd 100644 --- a/basilisk/components/search/content/searchReset.js +++ b/basilisk/components/search/content/searchReset.js @@ -8,14 +8,6 @@ var {classes: Cc, interfaces: Ci, utils: Cu} = Components; Cu.import("resource://gre/modules/Services.jsm"); -const TELEMETRY_RESULT_ENUM = { - RESTORED_DEFAULT: 0, - KEPT_CURRENT: 1, - CHANGED_ENGINE: 2, - CLOSED_PAGE: 3, - OPENED_SETTINGS: 4 -}; - window.onload = function() { let defaultEngine = document.getElementById("defaultEngine"); let originalDefault = Services.search.originalDefaultEngine; @@ -24,7 +16,6 @@ window.onload = function() { 'url("' + originalDefault.iconURI.spec + '")'; document.getElementById("searchResetChangeEngine").focus(); - window.addEventListener("unload", recordPageClosed); document.getElementById("linkSettingsPage") .addEventListener("click", openingSettings); }; @@ -46,8 +37,6 @@ function doSearch() { let engine = Services.search.currentEngine; let submission = engine.getSubmission(queryString, null, purpose); - window.removeEventListener("unload", recordPageClosed); - let win = window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIWebNavigation) .QueryInterface(Ci.nsIDocShellTreeItem) @@ -58,19 +47,12 @@ function doSearch() { } function openingSettings() { - record(TELEMETRY_RESULT_ENUM.OPENED_SETTINGS); - window.removeEventListener("unload", recordPageClosed); -} - -function record(result) { - Services.telemetry.getHistogramById("SEARCH_RESET_RESULT").add(result); } function keepCurrentEngine() { // Calling the currentEngine setter will force a correct loadPathHash to be // written for this engine, so that we don't prompt the user again. Services.search.currentEngine = Services.search.currentEngine; - record(TELEMETRY_RESULT_ENUM.KEPT_CURRENT); doSearch(); } @@ -80,11 +62,6 @@ function changeSearchEngine() { engine.hidden = false; Services.search.currentEngine = engine; - record(TELEMETRY_RESULT_ENUM.RESTORED_DEFAULT); - doSearch(); } -function recordPageClosed() { - record(TELEMETRY_RESULT_ENUM.CLOSED_PAGE); -} diff --git a/basilisk/components/search/service/nsSearchService.js b/basilisk/components/search/service/nsSearchService.js index 3cd2531..403d06c 100644 --- a/basilisk/components/search/service/nsSearchService.js +++ b/basilisk/components/search/service/nsSearchService.js @@ -2313,8 +2313,6 @@ SearchService.prototype = { this._initObservers.resolve(this._initRV); Services.obs.notifyObservers(null, SEARCH_SERVICE_TOPIC, "init-complete"); - Services.telemetry.getHistogramById("SEARCH_SERVICE_INIT_SYNC").add(true); - this._recordEngineTelemetry(); LOG("_syncInit end"); }, @@ -2352,8 +2350,6 @@ SearchService.prototype = { this._cacheFileJSON = null; this._initObservers.resolve(this._initRV); Services.obs.notifyObservers(null, SEARCH_SERVICE_TOPIC, "init-complete"); - Services.telemetry.getHistogramById("SEARCH_SERVICE_INIT_SYNC").add(false); - this._recordEngineTelemetry(); LOG("_asyncInit: Completed _asyncInit"); }), @@ -2719,7 +2715,6 @@ SearchService.prototype = { // Typically we'll re-init as a result of a pref observer, // so signal to 'callers' that we're done. Services.obs.notifyObservers(null, SEARCH_SERVICE_TOPIC, "init-complete"); - this._recordEngineTelemetry(); gInitialized = true; } catch (err) { LOG("Reinit failed: " + err); @@ -3896,25 +3891,6 @@ SearchService.prototype = { return result; }, - _recordEngineTelemetry: function() { - Services.telemetry.getHistogramById("SEARCH_SERVICE_ENGINE_COUNT") - .add(Object.keys(this._engines).length); - let hasUpdates = false; - let hasIconUpdates = false; - for (let name in this._engines) { - let engine = this._engines[name]; - if (engine._hasUpdates) { - hasUpdates = true; - if (engine._iconUpdateURL) { - hasIconUpdates = true; - break; - } - } - } - Services.telemetry.getHistogramById("SEARCH_SERVICE_HAS_UPDATES").add(hasUpdates); - Services.telemetry.getHistogramById("SEARCH_SERVICE_HAS_ICON_UPDATES").add(hasIconUpdates); - }, - /** * This map is built lazily after the available search engines change. It * allows quick parsing of an URL representing a search submission into the diff --git a/basilisk/components/selfsupport/SelfSupportService.js b/basilisk/components/selfsupport/SelfSupportService.js index 26148c6..103b065 100644 --- a/basilisk/components/selfsupport/SelfSupportService.js +++ b/basilisk/components/selfsupport/SelfSupportService.js @@ -12,13 +12,6 @@ Cu.import("resource://gre/modules/Preferences.jsm"); const PREF_FHR_UPLOAD_ENABLED = "datareporting.healthreport.uploadEnabled"; -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryArchive", - "resource://gre/modules/TelemetryArchive.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryEnvironment", - "resource://gre/modules/TelemetryEnvironment.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryController", - "resource://gre/modules/TelemetryController.jsm"); - function MozSelfSupportInterface() { } @@ -51,24 +44,6 @@ MozSelfSupportInterface.prototype = { Services.search.resetToOriginalDefaultEngine(); }, - getTelemetryPingList: function() { - return this._wrapPromise(TelemetryArchive.promiseArchivedPingList()); - }, - - getTelemetryPing: function(pingId) { - return this._wrapPromise(TelemetryArchive.promiseArchivedPingById(pingId)); - }, - - getCurrentTelemetryEnvironment: function() { - const current = TelemetryEnvironment.currentEnvironment; - return new this._window.Promise(resolve => resolve(current)); - }, - - getCurrentTelemetrySubsessionPing: function() { - const current = TelemetryController.getCurrentPingData(true); - return new this._window.Promise(resolve => resolve(current)); - }, - _wrapPromise: function(promise) { return new this._window.Promise( (resolve, reject) => promise.then(resolve, reject)); diff --git a/basilisk/components/sessionstore/SessionFile.jsm b/basilisk/components/sessionstore/SessionFile.jsm index 3c55101..a51b03d 100644 --- a/basilisk/components/sessionstore/SessionFile.jsm +++ b/basilisk/components/sessionstore/SessionFile.jsm @@ -45,8 +45,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "RunState", "resource:///modules/sessionstore/RunState.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm"); -XPCOMUtils.defineLazyServiceGetter(this, "Telemetry", - "@mozilla.org/base/telemetry;1", "nsITelemetry"); XPCOMUtils.defineLazyServiceGetter(this, "sessionStartup", "@mozilla.org/browser/sessionstartup;1", "nsISessionStartup"); XPCOMUtils.defineLazyModuleGetter(this, "SessionWorker", @@ -234,10 +232,6 @@ var SessionFileInternal = { source: source, parsed: parsed }; - Telemetry.getHistogramById("FX_SESSION_RESTORE_CORRUPT_FILE"). - add(false); - Telemetry.getHistogramById("FX_SESSION_RESTORE_READ_FILE_MS"). - add(Date.now() - startMs); break; } catch (ex if ex instanceof OS.File.Error && ex.becauseNoSuchFile) { exists = false; @@ -253,16 +247,12 @@ var SessionFileInternal = { } finally { if (exists) { noFilesFound = false; - Telemetry.getHistogramById("FX_SESSION_RESTORE_CORRUPT_FILE"). - add(corrupted); } } } // All files are corrupted if files found but none could deliver a result. let allCorrupt = !noFilesFound && !result; - Telemetry.getHistogramById("FX_SESSION_RESTORE_ALL_FILES_CORRUPT"). - add(allCorrupt); if (!result) { // If everything fails, start with an empty session. @@ -331,7 +321,6 @@ var SessionFileInternal = { // Wait until the write is done. promise = promise.then(msg => { // Record how long the write took. - this._recordTelemetry(msg.telemetry); this._successes++; if (msg.result.upgradeBackup) { // We have just completed a backup-on-upgrade, store the information @@ -379,19 +368,4 @@ var SessionFileInternal = { return this._postToWorker("wipe"); }, - _recordTelemetry: function(telemetry) { - for (let id of Object.keys(telemetry)){ - let value = telemetry[id]; - let samples = []; - if (Array.isArray(value)) { - samples.push(...value); - } else { - samples.push(value); - } - let histogram = Telemetry.getHistogramById(id); - for (let sample of samples) { - histogram.add(sample); - } - } - } }; diff --git a/basilisk/components/sessionstore/SessionStore.jsm b/basilisk/components/sessionstore/SessionStore.jsm index 144fa46..9d9ef55 100644 --- a/basilisk/components/sessionstore/SessionStore.jsm +++ b/basilisk/components/sessionstore/SessionStore.jsm @@ -135,7 +135,6 @@ Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm", this); Cu.import("resource://gre/modules/Promise.jsm", this); Cu.import("resource://gre/modules/Services.jsm", this); Cu.import("resource://gre/modules/Task.jsm", this); -Cu.import("resource://gre/modules/TelemetryTimestamps.jsm", this); Cu.import("resource://gre/modules/Timer.jsm", this); Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); Cu.import("resource://gre/modules/debug.js", this); @@ -145,8 +144,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "gSessionStartup", "@mozilla.org/browser/sessionstartup;1", "nsISessionStartup"); XPCOMUtils.defineLazyServiceGetter(this, "gScreenManager", "@mozilla.org/gfx/screenmanager;1", "nsIScreenManager"); -XPCOMUtils.defineLazyServiceGetter(this, "Telemetry", - "@mozilla.org/base/telemetry;1", "nsITelemetry"); XPCOMUtils.defineLazyModuleGetter(this, "console", "resource://gre/modules/Console.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow", @@ -550,7 +547,6 @@ var SessionStoreInternal = { throw new Error("SessionStore.init() must only be called once!"); } - TelemetryTimestamps.add("sessionRestoreInitialized"); OBSERVING.forEach(function(aTopic) { Services.obs.addObserver(this, aTopic, true); }, this); @@ -782,9 +778,8 @@ var SessionStoreInternal = { return; } - // Record telemetry measurements done in the child and update the tab's - // cached state. Mark the window as dirty and trigger a delayed write. - this.recordTelemetry(aMessage.data.telemetry); + // Update the tab's cached state. + // Mark the window as dirty and trigger a delayed write. TabState.update(browser, aMessage.data); this.saveStateDelayed(win); @@ -919,18 +914,6 @@ var SessionStoreInternal = { } }, - /** - * Record telemetry measurements stored in an object. - * @param telemetry - * {histogramID: value, ...} An object mapping histogramIDs to the - * value to be recorded for that ID, - */ - recordTelemetry: function (telemetry) { - for (let histogramId in telemetry){ - Telemetry.getHistogramById(histogramId).add(telemetry[histogramId]); - } - }, - /* ........ Window Event Handlers .............. */ /** @@ -1081,7 +1064,6 @@ var SessionStoreInternal = { // Nothing to restore now, notify observers things are complete. Services.obs.notifyObservers(null, NOTIFY_WINDOWS_RESTORED, ""); } else { - TelemetryTimestamps.add("sessionRestoreRestoring"); this._restoreCount = aInitialState.windows ? aInitialState.windows.length : 0; // global data must be restored before restoreWindow is called so that @@ -3810,8 +3792,7 @@ var SessionStoreInternal = { }, /** - * Update the session start time and send a telemetry measurement - * for the number of days elapsed since the session was started. + * Update the session start time. * * @param state * The session state. @@ -4437,13 +4418,7 @@ var SessionStoreInternal = { * Handle an error report from a content process. */ reportInternalError(data) { - // For the moment, we only report errors through Telemetry. - if (data.telemetry) { - for (let key of Object.keys(data.telemetry)) { - let histogram = Telemetry.getHistogramById(key); - histogram.add(data.telemetry[key]); - } - } + // STUB, was only reported through Telemetry. }, /** diff --git a/basilisk/components/sessionstore/SessionWorker.js b/basilisk/components/sessionstore/SessionWorker.js index 7d802a7..1297a11 100644 --- a/basilisk/components/sessionstore/SessionWorker.js +++ b/basilisk/components/sessionstore/SessionWorker.js @@ -126,7 +126,6 @@ var Agent = { */ write: function (state, options = {}) { let exn; - let telemetry = {}; // Cap the number of backward and forward shistory entries on shutdown. if (options.isFinalWrite) { @@ -197,9 +196,6 @@ var Agent = { }); } - telemetry.FX_SESSION_RESTORE_WRITE_FILE_MS = Date.now() - startWriteMs; - telemetry.FX_SESSION_RESTORE_FILE_SIZE_BYTES = data.byteLength; - } catch (ex) { // Don't throw immediately exn = exn || ex; @@ -276,7 +272,6 @@ var Agent = { result: { upgradeBackup: upgradeBackupComplete }, - telemetry: telemetry, }; }, diff --git a/basilisk/components/sessionstore/StartupPerformance.jsm b/basilisk/components/sessionstore/StartupPerformance.jsm index d1b77a2..361602b 100644 --- a/basilisk/components/sessionstore/StartupPerformance.jsm +++ b/basilisk/components/sessionstore/StartupPerformance.jsm @@ -111,18 +111,6 @@ this.StartupPerformance = { return; } - // Once we are done restoring tabs, update Telemetry. - let histogramName = isAutoRestore ? - "FX_SESSION_RESTORE_AUTO_RESTORE_DURATION_UNTIL_EAGER_TABS_RESTORED_MS" : - "FX_SESSION_RESTORE_MANUAL_RESTORE_DURATION_UNTIL_EAGER_TABS_RESTORED_MS"; - let histogram = Services.telemetry.getHistogramById(histogramName); - let delta = this._latestRestoredTimeStamp - this._startTimeStamp; - histogram.add(delta); - - Services.telemetry.getHistogramById("FX_SESSION_RESTORE_NUMBER_OF_EAGER_TABS_RESTORED").add(this._totalNumberOfEagerTabs); - Services.telemetry.getHistogramById("FX_SESSION_RESTORE_NUMBER_OF_TABS_RESTORED").add(this._totalNumberOfTabs); - Services.telemetry.getHistogramById("FX_SESSION_RESTORE_NUMBER_OF_WINDOWS_RESTORED").add(this._totalNumberOfWindows); - // Reset this._startTimeStamp = null; } catch (ex) { diff --git a/basilisk/components/sessionstore/content/content-sessionStore.js b/basilisk/components/sessionstore/content/content-sessionStore.js index 858e357..8af3350 100644 --- a/basilisk/components/sessionstore/content/content-sessionStore.js +++ b/basilisk/components/sessionstore/content/content-sessionStore.js @@ -628,7 +628,6 @@ var SessionStorageListener = { let size = this.estimateStorageSize(collected); - MessageQueue.push("telemetry", () => ({ FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS: size })); if (size > Preferences.get("browser.sessionstore.dom_storage_limit", DOM_STORAGE_MAX_CHARS)) { // Rather than keeping the old storage, which wouldn't match the rest // of the state of the page, empty the storage. DOM storage will be @@ -800,37 +799,23 @@ var MessageQueue = { let durationMs = Date.now(); let data = {}; - let telemetry = {}; for (let [key, func] of this._data) { let value = func(); - if (key == "telemetry") { - for (let histogramId of Object.keys(value)) { - telemetry[histogramId] = value[histogramId]; - } - } else if (value || (key != "storagechange" && key != "historychange")) { + if (value || (key != "storagechange" && key != "historychange")) { data[key] = value; } } this._data.clear(); - durationMs = Date.now() - durationMs; - telemetry.FX_SESSION_RESTORE_CONTENT_COLLECT_DATA_LONGEST_OP_MS = durationMs; - try { // Send all data to the parent process. sendAsyncMessage("SessionStore:update", { - data, telemetry, flushID, + data, flushID, isFinal: options.isFinal || false, epoch: gCurrentEpoch }); } catch (ex if ex && ex.result == Cr.NS_ERROR_OUT_OF_MEMORY) { - let telemetry = { - FX_SESSION_RESTORE_SEND_UPDATE_CAUSED_OOM: 1 - }; - sendAsyncMessage("SessionStore:error", { - telemetry - }); } }, }; diff --git a/basilisk/components/sessionstore/nsSessionStartup.js b/basilisk/components/sessionstore/nsSessionStartup.js index 9e77b12..0dba95c 100644 --- a/basilisk/components/sessionstore/nsSessionStartup.js +++ b/basilisk/components/sessionstore/nsSessionStartup.js @@ -203,11 +203,6 @@ SessionStartup.prototype = { } } - // Report shutdown success via telemetry. Shortcoming here are - // being-killed-by-OS-shutdown-logic, shutdown freezing after - // session restore was written, etc. - Services.telemetry.getHistogramById("SHUTDOWN_OK").add(!this._previousSessionCrashed); - // set the startup type if (this._previousSessionCrashed && resumeFromCrash) this._sessionType = Ci.nsISessionStartup.RECOVER_SESSION; diff --git a/basilisk/installer/allowed-dupes.mn b/basilisk/installer/allowed-dupes.mn index a3780bf..9469554 100644 --- a/basilisk/installer/allowed-dupes.mn +++ b/basilisk/installer/allowed-dupes.mn @@ -124,8 +124,6 @@ chrome/en-US/locale/en-US/browser/overrides/dom/dom.properties chrome/en-US/locale/en-US/browser/overrides/global.dtd chrome/en-US/locale/en-US/browser/overrides/global/aboutSupport.dtd chrome/en-US/locale/en-US/browser/overrides/global/aboutSupport.properties -chrome/en-US/locale/en-US/browser/overrides/global/aboutTelemetry.dtd -chrome/en-US/locale/en-US/browser/overrides/global/aboutTelemetry.properties chrome/en-US/locale/en-US/browser/overrides/global/aboutWebrtc.properties chrome/en-US/locale/en-US/browser/overrides/global/mozilla.dtd chrome/en-US/locale/en-US/browser/overrides/intl.css @@ -148,8 +146,6 @@ chrome/en-US/locale/en-US/global/aboutReader.properties chrome/en-US/locale/en-US/global/aboutRights.dtd chrome/en-US/locale/en-US/global/aboutSupport.dtd chrome/en-US/locale/en-US/global/aboutSupport.properties -chrome/en-US/locale/en-US/global/aboutTelemetry.dtd -chrome/en-US/locale/en-US/global/aboutTelemetry.properties chrome/en-US/locale/en-US/global/aboutWebrtc.properties chrome/en-US/locale/en-US/global/charsetMenu.properties chrome/en-US/locale/en-US/global/commonDialogs.properties diff --git a/basilisk/installer/package-manifest.in b/basilisk/installer/package-manifest.in index ee5d205..8af679c 100644 --- a/basilisk/installer/package-manifest.in +++ b/basilisk/installer/package-manifest.in @@ -313,7 +313,6 @@ @RESPATH@/components/xul.xpt @RESPATH@/components/xultmpl.xpt @RESPATH@/components/zipwriter.xpt -@RESPATH@/components/telemetry.xpt ; JavaScript components @RESPATH@/components/ConsoleAPI.manifest @@ -471,8 +470,6 @@ @RESPATH@/components/captivedetect.js @RESPATH@/components/servicesComponents.manifest @RESPATH@/components/cryptoComponents.manifest -@RESPATH@/components/TelemetryStartup.js -@RESPATH@/components/TelemetryStartup.manifest @RESPATH@/components/XULStore.js @RESPATH@/components/XULStore.manifest @RESPATH@/components/messageWakeupService.js @@ -695,7 +692,6 @@ @RESPATH@/components/dom_audiochannel.xpt ; Shutdown Terminator -@RESPATH@/components/nsTerminatorTelemetry.js @RESPATH@/components/terminator.manifest #if defined(CLANG_CXX) diff --git a/basilisk/locales/en-US/chrome/browser/aboutDialog.dtd b/basilisk/locales/en-US/chrome/browser/aboutDialog.dtd index e0c3469..1f87b60 100644 --- a/basilisk/locales/en-US/chrome/browser/aboutDialog.dtd +++ b/basilisk/locales/en-US/chrome/browser/aboutDialog.dtd @@ -16,8 +16,6 @@ <!-- LOCALIZATION NOTE (warningDesc.version): This is a warning about the experimental nature of Nightly and Aurora builds. It is only shown in those versions. --> <!ENTITY warningDesc.version "&brandShortName; is experimental and may be unstable."> -<!-- LOCALIZATION NOTE (warningDesc.telemetryDesc): This is a notification that Nightly/Aurora builds automatically send Telemetry data back to Mozilla. It is only shown in those versions. "It" refers to brandShortName. --> -<!ENTITY warningDesc.telemetryDesc "It automatically sends information about performance, hardware, usage and customizations back to &vendorShortName; to help make &brandShortName; better."> <!-- LOCALIZATION NOTE (community.exp.*) This paragraph is shown in "experimental" builds, i.e. Nightly and Aurora builds, instead of the other "community.*" strings below. --> <!ENTITY community.exp.start ""> diff --git a/basilisk/locales/en-US/chrome/browser/browser.properties b/basilisk/locales/en-US/chrome/browser/browser.properties index 00dbb70..c9a05af 100644 --- a/basilisk/locales/en-US/chrome/browser/browser.properties +++ b/basilisk/locales/en-US/chrome/browser/browser.properties @@ -424,11 +424,6 @@ safeModeRestartButton=Restart # menu, set this to "true". Otherwise, you can leave it as "false". browser.menu.showCharacterEncoding=false -# Mozilla data reporting notification (Telemetry, Firefox Health Report, etc) -dataReportingNotification.message = %1$S automatically sends some data to %2$S so that we can improve your experience. -dataReportingNotification.button.label = Choose What I Share -dataReportingNotification.button.accessKey = C - # Process hang reporter processHang.label = A web page is slowing down your browser. What would you like to do? processHang.button_stop.label = Stop It diff --git a/basilisk/locales/en-US/chrome/browser/preferences/advanced.dtd b/basilisk/locales/en-US/chrome/browser/preferences/advanced.dtd index 124c00d..25429c6 100644 --- a/basilisk/locales/en-US/chrome/browser/preferences/advanced.dtd +++ b/basilisk/locales/en-US/chrome/browser/preferences/advanced.dtd @@ -35,11 +35,6 @@ <!ENTITY enableHealthReport.accesskey "R"> <!ENTITY healthReportLearnMore.label "Learn More"> -<!ENTITY telemetryDesc.label "Shares performance, usage, hardware and customization data about your browser with &vendorShortName; to help us make &brandShortName; better"> -<!ENTITY enableTelemetryData.label "Share additional data (i.e., Telemetry)"> -<!ENTITY enableTelemetryData.accesskey "T"> -<!ENTITY telemetryLearnMore.label "Learn More"> - <!ENTITY crashReporterDesc2.label "Crash reports help &vendorShortName; fix problems and make your browser more stable and secure"> <!ENTITY alwaysSubmitCrashReports.label "Allow &brandShortName; to send backlogged crash reports on your behalf"> <!ENTITY alwaysSubmitCrashReports.accesskey "c"> diff --git a/basilisk/modules/BrowserUsageTelemetry.jsm b/basilisk/modules/BrowserUsageTelemetry.jsm deleted file mode 100644 index 39012d2..0000000 --- a/basilisk/modules/BrowserUsageTelemetry.jsm +++ /dev/null @@ -1,468 +0,0 @@ -/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */ -/* 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"; - -this.EXPORTED_SYMBOLS = ["BrowserUsageTelemetry"]; - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", - "resource://gre/modules/PrivateBrowsingUtils.jsm"); - -// The upper bound for the count of the visited unique domain names. -const MAX_UNIQUE_VISITED_DOMAINS = 100; - -// Observed topic names. -const WINDOWS_RESTORED_TOPIC = "sessionstore-windows-restored"; -const TAB_RESTORING_TOPIC = "SSTabRestoring"; -const TELEMETRY_SUBSESSIONSPLIT_TOPIC = "internal-telemetry-after-subsession-split"; -const DOMWINDOW_OPENED_TOPIC = "domwindowopened"; - -// Probe names. -const MAX_TAB_COUNT_SCALAR_NAME = "browser.engagement.max_concurrent_tab_count"; -const MAX_WINDOW_COUNT_SCALAR_NAME = "browser.engagement.max_concurrent_window_count"; -const TAB_OPEN_EVENT_COUNT_SCALAR_NAME = "browser.engagement.tab_open_event_count"; -const WINDOW_OPEN_EVENT_COUNT_SCALAR_NAME = "browser.engagement.window_open_event_count"; -const UNIQUE_DOMAINS_COUNT_SCALAR_NAME = "browser.engagement.unique_domains_count"; -const TOTAL_URI_COUNT_SCALAR_NAME = "browser.engagement.total_uri_count"; -const UNFILTERED_URI_COUNT_SCALAR_NAME = "browser.engagement.unfiltered_uri_count"; - -// A list of known search origins. -const KNOWN_SEARCH_SOURCES = [ - "abouthome", - "contextmenu", - "newtab", - "searchbar", - "urlbar", -]; - -const KNOWN_ONEOFF_SOURCES = [ - "oneoff-urlbar", - "oneoff-searchbar", - "unknown", // Edge case: this is the searchbar (see bug 1195733 comment 7). -]; - -function getOpenTabsAndWinsCounts() { - let tabCount = 0; - let winCount = 0; - - let browserEnum = Services.wm.getEnumerator("navigator:browser"); - while (browserEnum.hasMoreElements()) { - let win = browserEnum.getNext(); - winCount++; - tabCount += win.gBrowser.tabs.length; - } - - return { tabCount, winCount }; -} - -function getSearchEngineId(engine) { - if (engine) { - if (engine.identifier) { - return engine.identifier; - } - // Due to bug 1222070, we can't directly check Services.telemetry.canRecordExtended - // here. - const extendedTelemetry = Services.prefs.getBoolPref("toolkit.telemetry.enabled"); - if (engine.name && extendedTelemetry) { - // If it's a custom search engine only report the engine name - // if extended Telemetry is enabled. - return "other-" + engine.name; - } - } - return "other"; -} - -let URICountListener = { - // A set containing the visited domains, see bug 1271310. - _domainSet: new Set(), - // A map to keep track of the URIs loaded from the restored tabs. - _restoredURIsMap: new WeakMap(), - - isHttpURI(uri) { - // Only consider http(s) schemas. - return uri.schemeIs("http") || uri.schemeIs("https"); - }, - - addRestoredURI(browser, uri) { - if (!this.isHttpURI(uri)) { - return; - } - - this._restoredURIsMap.set(browser, uri.spec); - }, - - onLocationChange(browser, webProgress, request, uri, flags) { - // Don't count this URI if it's an error page. - if (flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE) { - return; - } - - // We only care about top level loads. - if (!webProgress.isTopLevel) { - return; - } - - // The SessionStore sets the URI of a tab first, firing onLocationChange the - // first time, then manages content loading using its scheduler. Once content - // loads, we will hit onLocationChange again. - // We can catch the first case by checking for null requests: be advised that - // this can also happen when navigating page fragments, so account for it. - if (!request && - !(flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT)) { - return; - } - - // Track URI loads, even if they're not http(s). - let uriSpec = null; - try { - uriSpec = uri.spec; - } catch (e) { - // If we have troubles parsing the spec, still count this as - // an unfiltered URI. - Services.telemetry.scalarAdd(UNFILTERED_URI_COUNT_SCALAR_NAME, 1); - return; - } - - - // Don't count about:blank and similar pages, as they would artificially - // inflate the counts. - if (browser.ownerDocument.defaultView.gInitialPages.includes(uriSpec)) { - return; - } - - // If the URI we're loading is in the _restoredURIsMap, then it comes from a - // restored tab. If so, let's skip it and remove it from the map as we want to - // count page refreshes. - if (this._restoredURIsMap.get(browser) === uriSpec) { - this._restoredURIsMap.delete(browser); - return; - } - - // The URI wasn't from a restored tab. Count it among the unfiltered URIs. - // If this is an http(s) URI, this also gets counted by the "total_uri_count" - // probe. - Services.telemetry.scalarAdd(UNFILTERED_URI_COUNT_SCALAR_NAME, 1); - - if (!this.isHttpURI(uri)) { - return; - } - - // Update the URI counts. - Services.telemetry.scalarAdd(TOTAL_URI_COUNT_SCALAR_NAME, 1); - - // We only want to count the unique domains up to MAX_UNIQUE_VISITED_DOMAINS. - if (this._domainSet.size == MAX_UNIQUE_VISITED_DOMAINS) { - return; - } - - // Unique domains should be aggregated by (eTLD + 1): x.test.com and y.test.com - // are counted once as test.com. - try { - // Even if only considering http(s) URIs, |getBaseDomain| could still throw - // due to the URI containing invalid characters or the domain actually being - // an ipv4 or ipv6 address. - this._domainSet.add(Services.eTLD.getBaseDomain(uri)); - } catch (e) { - return; - } - - Services.telemetry.scalarSet(UNIQUE_DOMAINS_COUNT_SCALAR_NAME, this._domainSet.size); - }, - - /** - * Reset the counts. This should be called when breaking a session in Telemetry. - */ - reset() { - this._domainSet.clear(); - }, - - QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, - Ci.nsISupportsWeakReference]), -}; - -let BrowserUsageTelemetry = { - init() { - Services.obs.addObserver(this, WINDOWS_RESTORED_TOPIC, false); - }, - - /** - * Handle subsession splits in the parent process. - */ - afterSubsessionSplit() { - // Scalars just got cleared due to a subsession split. We need to set the maximum - // concurrent tab and window counts so that they reflect the correct value for the - // new subsession. - const counts = getOpenTabsAndWinsCounts(); - Services.telemetry.scalarSetMaximum(MAX_TAB_COUNT_SCALAR_NAME, counts.tabCount); - Services.telemetry.scalarSetMaximum(MAX_WINDOW_COUNT_SCALAR_NAME, counts.winCount); - - // Reset the URI counter. - URICountListener.reset(); - }, - - uninit() { - Services.obs.removeObserver(this, DOMWINDOW_OPENED_TOPIC, false); - Services.obs.removeObserver(this, TELEMETRY_SUBSESSIONSPLIT_TOPIC, false); - Services.obs.removeObserver(this, WINDOWS_RESTORED_TOPIC, false); - }, - - observe(subject, topic, data) { - switch (topic) { - case WINDOWS_RESTORED_TOPIC: - this._setupAfterRestore(); - break; - case DOMWINDOW_OPENED_TOPIC: - this._onWindowOpen(subject); - break; - case TELEMETRY_SUBSESSIONSPLIT_TOPIC: - this.afterSubsessionSplit(); - break; - } - }, - - handleEvent(event) { - switch (event.type) { - case "TabOpen": - this._onTabOpen(); - break; - case "unload": - this._unregisterWindow(event.target); - break; - case TAB_RESTORING_TOPIC: - // We're restoring a new tab from a previous or crashed session. - // We don't want to track the URIs from these tabs, so let - // |URICountListener| know about them. - let browser = event.target.linkedBrowser; - URICountListener.addRestoredURI(browser, browser.currentURI); - break; - } - }, - - /** - * The main entry point for recording search related Telemetry. This includes - * search counts and engagement measurements. - * - * Telemetry records only search counts per engine and action origin, but - * nothing pertaining to the search contents themselves. - * - * @param {nsISearchEngine} engine - * The engine handling the search. - * @param {String} source - * Where the search originated from. See KNOWN_SEARCH_SOURCES for allowed - * values. - * @param {Object} [details] Options object. - * @param {Boolean} [details.isOneOff=false] - * true if this event was generated by a one-off search. - * @param {Boolean} [details.isSuggestion=false] - * true if this event was generated by a suggested search. - * @param {Boolean} [details.isAlias=false] - * true if this event was generated by a search using an alias. - * @param {Object} [details.type=null] - * The object describing the event that triggered the search. - * @throws if source is not in the known sources list. - */ - recordSearch(engine, source, details={}) { - const isOneOff = !!details.isOneOff; - const countId = getSearchEngineId(engine) + "." + source; - - if (isOneOff) { - if (!KNOWN_ONEOFF_SOURCES.includes(source)) { - // Silently drop the error if this bogus call - // came from 'urlbar' or 'searchbar'. They're - // calling |recordSearch| twice from two different - // code paths because they want to record the search - // in SEARCH_COUNTS. - if (['urlbar', 'searchbar'].includes(source)) { - Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").add(countId); - return; - } - throw new Error("Unknown source for one-off search: " + source); - } - } else { - if (!KNOWN_SEARCH_SOURCES.includes(source)) { - throw new Error("Unknown source for search: " + source); - } - Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").add(countId); - } - - // Dispatch the search signal to other handlers. - this._handleSearchAction(engine, source, details); - }, - - _recordSearch(engine, source, action = null) { - let scalarKey = action ? "search_" + action : "search"; - Services.telemetry.keyedScalarAdd("browser.engagement.navigation." + source, - scalarKey, 1); - Services.telemetry.recordEvent("navigation", "search", source, action, - { engine: getSearchEngineId(engine) }); - }, - - _handleSearchAction(engine, source, details) { - switch (source) { - case "urlbar": - case "oneoff-urlbar": - case "searchbar": - case "oneoff-searchbar": - case "unknown": // Edge case: this is the searchbar (see bug 1195733 comment 7). - this._handleSearchAndUrlbar(engine, source, details); - break; - case "abouthome": - this._recordSearch(engine, "about_home", "enter"); - break; - case "newtab": - this._recordSearch(engine, "about_newtab", "enter"); - break; - case "contextmenu": - this._recordSearch(engine, "contextmenu"); - break; - } - }, - - /** - * This function handles the "urlbar", "urlbar-oneoff", "searchbar" and - * "searchbar-oneoff" sources. - */ - _handleSearchAndUrlbar(engine, source, details) { - // We want "urlbar" and "urlbar-oneoff" (and similar cases) to go in the same - // scalar, but in a different key. - - // When using one-offs in the searchbar we get an "unknown" source. See bug - // 1195733 comment 7 for the context. Fix-up the label here. - const sourceName = - (source === "unknown") ? "searchbar" : source.replace("oneoff-", ""); - - const isOneOff = !!details.isOneOff; - if (isOneOff) { - // We will receive a signal from the "urlbar"/"searchbar" even when the - // search came from "oneoff-urlbar". That's because both signals - // are propagated from search.xml. Skip it if that's the case. - // Moreover, we skip the "unknown" source that comes from the searchbar - // when performing searches from the default search engine. See bug 1195733 - // comment 7 for context. - if (["urlbar", "searchbar", "unknown"].includes(source)) { - return; - } - - // If that's a legit one-off search signal, record it using the relative key. - this._recordSearch(engine, sourceName, "oneoff"); - return; - } - - // The search was not a one-off. It was a search with the default search engine. - if (details.isSuggestion) { - // It came from a suggested search, so count it as such. - this._recordSearch(engine, sourceName, "suggestion"); - return; - } else if (details.isAlias) { - // This one came from a search that used an alias. - this._recordSearch(engine, sourceName, "alias"); - return; - } - - // The search signal was generated by typing something and pressing enter. - this._recordSearch(engine, sourceName, "enter"); - }, - - /** - * This gets called shortly after the SessionStore has finished restoring - * windows and tabs. It counts the open tabs and adds listeners to all the - * windows. - */ - _setupAfterRestore() { - // Make sure to catch new chrome windows and subsession splits. - Services.obs.addObserver(this, DOMWINDOW_OPENED_TOPIC, false); - Services.obs.addObserver(this, TELEMETRY_SUBSESSIONSPLIT_TOPIC, false); - - // Attach the tabopen handlers to the existing Windows. - let browserEnum = Services.wm.getEnumerator("navigator:browser"); - while (browserEnum.hasMoreElements()) { - this._registerWindow(browserEnum.getNext()); - } - - // Get the initial tab and windows max counts. - const counts = getOpenTabsAndWinsCounts(); - Services.telemetry.scalarSetMaximum(MAX_TAB_COUNT_SCALAR_NAME, counts.tabCount); - Services.telemetry.scalarSetMaximum(MAX_WINDOW_COUNT_SCALAR_NAME, counts.winCount); - }, - - /** - * Adds listeners to a single chrome window. - */ - _registerWindow(win) { - win.addEventListener("unload", this); - win.addEventListener("TabOpen", this, true); - - // Don't include URI and domain counts when in private mode. - if (PrivateBrowsingUtils.isWindowPrivate(win)) { - return; - } - win.gBrowser.tabContainer.addEventListener(TAB_RESTORING_TOPIC, this); - win.gBrowser.addTabsProgressListener(URICountListener); - }, - - /** - * Removes listeners from a single chrome window. - */ - _unregisterWindow(win) { - win.removeEventListener("unload", this); - win.removeEventListener("TabOpen", this, true); - - // Don't include URI and domain counts when in private mode. - if (PrivateBrowsingUtils.isWindowPrivate(win.defaultView)) { - return; - } - win.defaultView.gBrowser.tabContainer.removeEventListener(TAB_RESTORING_TOPIC, this); - win.defaultView.gBrowser.removeTabsProgressListener(URICountListener); - }, - - /** - * Updates the tab counts. - * @param {Number} [newTabCount=0] The count of the opened tabs across all windows. This - * is computed manually if not provided. - */ - _onTabOpen(tabCount = 0) { - // Use the provided tab count if available. Otherwise, go on and compute it. - tabCount = tabCount || getOpenTabsAndWinsCounts().tabCount; - // Update the "tab opened" count and its maximum. - Services.telemetry.scalarAdd(TAB_OPEN_EVENT_COUNT_SCALAR_NAME, 1); - Services.telemetry.scalarSetMaximum(MAX_TAB_COUNT_SCALAR_NAME, tabCount); - }, - - /** - * Tracks the window count and registers the listeners for the tab count. - * @param{Object} win The window object. - */ - _onWindowOpen(win) { - // Make sure to have a |nsIDOMWindow|. - if (!(win instanceof Ci.nsIDOMWindow)) { - return; - } - - let onLoad = () => { - win.removeEventListener("load", onLoad, false); - - // Ignore non browser windows. - if (win.document.documentElement.getAttribute("windowtype") != "navigator:browser") { - return; - } - - this._registerWindow(win); - // Track the window open event and check the maximum. - const counts = getOpenTabsAndWinsCounts(); - Services.telemetry.scalarAdd(WINDOW_OPEN_EVENT_COUNT_SCALAR_NAME, 1); - Services.telemetry.scalarSetMaximum(MAX_WINDOW_COUNT_SCALAR_NAME, counts.winCount); - - // We won't receive the "TabOpen" event for the first tab within a new window. - // Account for that. - this._onTabOpen(counts.tabCount); - }; - win.addEventListener("load", onLoad, false); - }, -}; diff --git a/basilisk/modules/ContentCrashHandlers.jsm b/basilisk/modules/ContentCrashHandlers.jsm index 488cc4f..4319c43 100644 --- a/basilisk/modules/ContentCrashHandlers.jsm +++ b/basilisk/modules/ContentCrashHandlers.jsm @@ -86,12 +86,6 @@ this.TabCrashHandler = { let childID = aSubject.get("childID"); let dumpID = aSubject.get("dumpID"); - if (!dumpID) { - Services.telemetry - .getHistogramById("FX_CONTENT_CRASH_DUMP_UNAVAILABLE") - .add(1); - } - if (!this.flushCrashedBrowserQueue(childID)) { this.unseenCrashedChildIDs.push(childID); // The elements in unseenCrashedChildIDs will only be removed if @@ -375,12 +369,6 @@ this.TabCrashHandler = { data.email = this.prefs.getCharPref("email", ""); } - // Make sure to only count once even if there are multiple windows - // that will all show about:tabcrashed. - if (this._crashedTabCount == 1) { - Services.telemetry.getHistogramById("FX_CONTENT_CRASH_PRESENTED").add(1); - } - message.target.sendAsyncMessage("SetCrashReportAvailable", data); }, @@ -402,11 +390,6 @@ this.TabCrashHandler = { let browser = message.target.browser; let childID = this.browserMap.get(browser.permanentKey); - // Make sure to only count once even if there are multiple windows - // that will all show about:tabcrashed. - if (this._crashedTabCount == 0 && childID) { - Services.telemetry.getHistogramById("FX_CONTENT_CRASH_NOT_SUBMITTED").add(1); - } }, /** diff --git a/basilisk/modules/ContentLinkHandler.jsm b/basilisk/modules/ContentLinkHandler.jsm index 443cae2..76822e8 100644 --- a/basilisk/modules/ContentLinkHandler.jsm +++ b/basilisk/modules/ContentLinkHandler.jsm @@ -19,13 +19,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "Feeds", XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils", "resource://gre/modules/BrowserUtils.jsm"); -const SIZES_TELEMETRY_ENUM = { - NO_SIZES: 0, - ANY: 1, - DIMENSION: 2, - INVALID: 3, -}; - this.ContentLinkHandler = { init: function(chromeGlobal) { chromeGlobal.addEventListener("DOMLinkAdded", (event) => { @@ -79,35 +72,6 @@ this.ContentLinkHandler = { if (!uri) break; - // Telemetry probes for measuring the sizes attribute - // usage and available dimensions. - let sizeHistogramTypes = Services.telemetry. - getHistogramById("LINK_ICON_SIZES_ATTR_USAGE"); - let sizeHistogramDimension = Services.telemetry. - getHistogramById("LINK_ICON_SIZES_ATTR_DIMENSION"); - let sizesType; - if (link.sizes.length) { - for (let size of link.sizes) { - if (size.toLowerCase() == "any") { - sizesType = SIZES_TELEMETRY_ENUM.ANY; - break; - } else { - let re = /^([1-9][0-9]*)x[1-9][0-9]*$/i; - let values = re.exec(size); - if (values && values.length > 1) { - sizesType = SIZES_TELEMETRY_ENUM.DIMENSION; - sizeHistogramDimension.add(parseInt(values[1])); - } else { - sizesType = SIZES_TELEMETRY_ENUM.INVALID; - break; - } - } - } - } else { - sizesType = SIZES_TELEMETRY_ENUM.NO_SIZES; - } - sizeHistogramTypes.add(sizesType); - chromeGlobal.sendAsyncMessage( "Link:SetIcon", {url: uri.spec, loadingPrincipal: link.ownerDocument.nodePrincipal}); diff --git a/basilisk/modules/ContentSearch.jsm b/basilisk/modules/ContentSearch.jsm index 91b0b9a..8e10b79 100644 --- a/basilisk/modules/ContentSearch.jsm +++ b/basilisk/modules/ContentSearch.jsm @@ -254,8 +254,6 @@ this.ContentSearch = { }; win.openUILinkIn(submission.uri.spec, where, params); } - win.BrowserSearch.recordSearchInTelemetry(engine, data.healthReportKey, - { selection: data.selection }); return; }, diff --git a/basilisk/modules/PermissionUI.jsm b/basilisk/modules/PermissionUI.jsm index 5c8b944..984f95c 100644 --- a/basilisk/modules/PermissionUI.jsm +++ b/basilisk/modules/PermissionUI.jsm @@ -234,9 +234,7 @@ this.PermissionPromptPrototype = { /** * If the prompt will be shown to the user, this callback will - * be called just before. Subclasses may want to override this - * in order to, for example, bump a counter Telemetry probe for - * how often a particular permission request is seen. + * be called just before. Subclasses may want to override this. */ onBeforeShow() {}, diff --git a/basilisk/modules/PluginContent.jsm b/basilisk/modules/PluginContent.jsm index 622d608..7317b19 100644 --- a/basilisk/modules/PluginContent.jsm +++ b/basilisk/modules/PluginContent.jsm @@ -167,7 +167,6 @@ PluginContent.prototype = { return; } - this._finishRecordingFlashPluginTelemetry(); this.clearPluginCaches(); this.haveShownNotification = false; }, @@ -533,19 +532,11 @@ PluginContent.prototype = { case "PluginInstantiated": let key = this._getPluginInfo(plugin).pluginTag.niceName; - Services.telemetry.getKeyedHistogramById('PLUGIN_ACTIVATION_COUNT').add(key); shouldShowNotification = true; let pluginRect = plugin.getBoundingClientRect(); - if (pluginRect.width <= 5 && pluginRect.height <= 5) { - Services.telemetry.getHistogramById('PLUGIN_TINY_CONTENT').add(1); - } break; } - if (this._getPluginInfo(plugin).mimetype === FLASH_MIME_TYPE) { - this._recordFlashPluginTelemetry(eventType, plugin); - } - // Show the in-content UI if it's not too big. The crashed plugin handler already did this. let overlay = this.getPluginUI(plugin, "main"); if (eventType != "PluginCrashed") { @@ -577,48 +568,6 @@ PluginContent.prototype = { } }, - _recordFlashPluginTelemetry: function (eventType, plugin) { - if (!Services.telemetry.canRecordExtended) { - return; - } - - if (!this.flashPluginStats) { - this.flashPluginStats = { - instancesCount: 0, - plugins: new WeakSet() - }; - } - - if (!this.flashPluginStats.plugins.has(plugin)) { - // Reporting plugin instance and its dimensions only once. - this.flashPluginStats.plugins.add(plugin); - - this.flashPluginStats.instancesCount++; - - let pluginRect = plugin.getBoundingClientRect(); - Services.telemetry.getHistogramById('FLASH_PLUGIN_WIDTH') - .add(pluginRect.width); - Services.telemetry.getHistogramById('FLASH_PLUGIN_HEIGHT') - .add(pluginRect.height); - Services.telemetry.getHistogramById('FLASH_PLUGIN_AREA') - .add(pluginRect.width * pluginRect.height); - - let state = this._getPluginInfo(plugin).fallbackType; - if (state === null) { - state = Ci.nsIObjectLoadingContent.PLUGIN_UNSUPPORTED; - } - Services.telemetry.getHistogramById('FLASH_PLUGIN_STATES') - .add(state); - } - }, - - _finishRecordingFlashPluginTelemetry: function () { - if (this.flashPluginStats) { - Services.telemetry.getHistogramById('FLASH_PLUGIN_INSTANCES_ON_PAGE') - .add(this.flashPluginStats.instancesCount); - delete this.flashPluginStats; - } - }, isKnownPlugin: function (objLoadingContent) { return (objLoadingContent.getContentTypeForMIMEType(objLoadingContent.actualType) == diff --git a/basilisk/modules/ProcessHangMonitor.jsm b/basilisk/modules/ProcessHangMonitor.jsm index 80c506a..1e4c192 100644 --- a/basilisk/modules/ProcessHangMonitor.jsm +++ b/basilisk/modules/ProcessHangMonitor.jsm @@ -364,17 +364,6 @@ var ProcessHangMonitor = { return; } - // On e10s this counts slow-script/hanged-plugin notice only once. - // This code is not reached on non-e10s. - if (report.hangType == report.SLOW_SCRIPT) { - // On non-e10s, SLOW_SCRIPT_NOTICE_COUNT is probed at nsGlobalWindow.cpp - Services.telemetry.getHistogramById("SLOW_SCRIPT_NOTICE_COUNT").add(); - } else if (report.hangType == report.PLUGIN_HANG) { - // On non-e10s we have sufficient plugin telemetry probes, - // so PLUGIN_HANG_NOTICE_COUNT is only probed on e10s. - Services.telemetry.getHistogramById("PLUGIN_HANG_NOTICE_COUNT").add(); - } - this._activeReports.add(report); this.updateWindows(); }, diff --git a/basilisk/modules/moz.build b/basilisk/modules/moz.build index 26661db..881ff98 100644 --- a/basilisk/modules/moz.build +++ b/basilisk/modules/moz.build @@ -7,7 +7,6 @@ EXTRA_JS_MODULES += [ 'AboutHome.jsm', 'AboutNewTab.jsm', 'AttributionCode.jsm', - 'BrowserUsageTelemetry.jsm', 'ContentClick.jsm', 'ContentCrashHandlers.jsm', 'ContentLinkHandler.jsm', diff --git a/platform b/platform -Subproject 7b1e6e182da0b3fd6c4860d86f1d95523ad85a2 +Subproject 84c7a29116f5f94d2074d17e13d7525dab18a70 |