Bug 1408339 - measure onboarding devtools user detection with telemetry;r=ochameau, datareview=francois
MozReview-Commit-ID: G3edBYlyH8f
--- a/devtools/shim/devtools-startup-prefs.js
+++ b/devtools/shim/devtools-startup-prefs.js
@@ -19,8 +19,11 @@ sticky_pref("devtools.theme", "light");
#endif
// Should the devtools toolbar be opened on startup
pref("devtools.toolbar.visible", false);
// Flag to drive the devtools onboarding flow experiment. Forces devtools.enabled to true
// when false.
pref("devtools.onboarding.experiment", false);
+
+// Flag to check if we already logged the devtools onboarding related probe.
+pref("devtools.onboarding.telemetry.logged", false);
--- a/devtools/shim/devtools-startup.js
+++ b/devtools/shim/devtools-startup.js
@@ -243,26 +243,52 @@ DevToolsStartup.prototype = {
this.hookWindow(window);
if (Services.prefs.getBoolPref(TOOLBAR_VISIBLE_PREF, false)) {
// Loading devtools-browser will open the developer toolbar by also checking this
// pref.
this.initDevTools();
}
- if (this.devtoolsFlag) {
- this.handleDevToolsFlag(window);
- // This listener is called for all Firefox windows, but we want to execute
- // that command only once.
- this.devtoolsFlag = false;
+ // This listener is called for all Firefox windows, but we want to execute some code
+ // only once.
+ if (!this._firstWindowReadyReceived) {
+ this.onFirstWindowReady(window);
+ this._firstWindowReadyReceived = true;
}
JsonView.initialize();
},
+ onFirstWindowReady(window) {
+ if (this.devtoolsFlag) {
+ this.handleDevToolsFlag(window);
+ }
+
+ // Wait until we get a window before sending a ping to telemetry to avoid slowing down
+ // the startup phase.
+ this.pingOnboardingTelemetry();
+ },
+
+ /**
+ * Check if the user is being flagged as DevTools users or not. This probe should only
+ * be logged once per profile.
+ */
+ pingOnboardingTelemetry() {
+ // Only ping telemetry once per profile.
+ let alreadyLoggedPref = "devtools.onboarding.telemetry.logged";
+ if (Services.prefs.getBoolPref(alreadyLoggedPref)) {
+ return;
+ }
+
+ let scalarId = "devtools.onboarding.is_devtools_user";
+ Services.telemetry.scalarSet(scalarId, this.isDevToolsUser());
+ Services.prefs.setBoolPref(alreadyLoggedPref, true);
+ },
+
/**
* Register listeners to all possible entry points for Developer Tools.
* But instead of implementing the actual actions, defer to DevTools codebase.
* In most cases, it only needs to call this.initDevTools which handles the rest.
* We do that to prevent loading any DevTools module until the user intent to use them.
*/
hookWindow(window) {
// Key Shortcuts need to be added on all the created windows.
--- a/toolkit/components/telemetry/Scalars.yaml
+++ b/toolkit/components/telemetry/Scalars.yaml
@@ -951,16 +951,29 @@ devtools.aboutdevtools:
Number of times the user left about:devtools without enabling devtools.
expires: "60"
kind: uint
notification_emails:
- dev-developer-tools@lists.mozilla.org, jdescottes@mozilla.com
record_in_processes:
- 'main'
+devtools.onboarding:
+ is_devtools_user:
+ bug_numbers:
+ - 1408339
+ description: >
+ How many users are flagged as existing devtools users.
+ expires: "60"
+ kind: boolean
+ notification_emails:
+ - dev-developer-tools@lists.mozilla.org, jdescottes@mozilla.com
+ record_in_processes:
+ - 'main'
+
navigator.storage:
estimate_count:
bug_numbers:
- 1359708
description: >
Number of times navigator.storage.estimate has been used.
expires: "60"
kind: uint