Commit 44c9ce7c authored by Ed Lee's avatar Ed Lee
Browse files

Bug 1628849 - Collect experiment telemetry related to password import...

Bug 1628849 - Collect experiment telemetry related to password import suggestion r=MattN,sfoster, a=pascalc

Differential Revision: https://phabricator.services.mozilla.com/D73390
parent aec282c2
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -300,7 +300,12 @@ class AutoCompleteParent extends JSWindowActorParent {
    // Add counts by result style to rawExtraData.
    results.reduce((accumulated, r) => {
      // Keys can be a maximum of 15 characters and values must be strings.
      let truncatedStyle = r.style.substring(0, 15);
      // Also treat both "loginWithOrigin" and "login" as "login" as extra_keys
      // is limited to 10.
      let truncatedStyle = r.style.substring(
        0,
        r.style === "loginWithOrigin" ? 5 : 15
      );
      accumulated[truncatedStyle] = (accumulated[truncatedStyle] || 0) + 1;
      return accumulated;
    }, rawExtraData);
+28 −0
Original line number Diff line number Diff line
@@ -233,6 +233,10 @@ class ImportableLoginsAutocompleteItem extends AutocompleteItem {
    this.label = browserId;
    this.comment = hostname;
  }

  removeFromStorage() {
    Services.telemetry.recordEvent("exp_import", "event", "delete", this.label);
  }
}

class LoginsFooterAutocompleteItem extends AutocompleteItem {
@@ -362,6 +366,18 @@ function LoginAutoCompleteResult(
  if (this.matchCount > 0) {
    this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
    this.defaultIndex = 0;
    // For experiment telemetry, record how many importable logins were
    // available when showing the popup and some extra data.
    Services.telemetry.recordEvent(
      "exp_import",
      "impression",
      "popup",
      (importable?.browsers?.length ?? 0) + "",
      {
        loginsCount: logins.length + "",
        searchLength: aSearchString.length + "",
      }
    );
  } else if (hidingFooterOnPWFieldAutoOpened) {
    // We use a failure result so that the empty results aren't re-used for when
    // the user tries to manually open the popup (we want the footer in that case).
@@ -755,11 +771,23 @@ let gAutoCompleteListener = {
          "PasswordManager:OpenMigrationWizard",
          selectedRowComment
        );
        Services.telemetry.recordEvent(
          "exp_import",
          "event",
          "enter",
          selectedRowComment
        );
        break;
      case "loginsFooter":
        loginManager.sendAsyncMessage("PasswordManager:OpenPreferences", {
          entryPoint: "autocomplete",
        });
        Services.telemetry.recordEvent(
          "exp_import",
          "event",
          "enter",
          "loginsFooter"
        );
        break;
    }
  },
+8 −0
Original line number Diff line number Diff line
@@ -88,10 +88,18 @@ this.LoginHelper = {
    this.showAutoCompleteFooter = Services.prefs.getBoolPref(
      "signon.showAutoCompleteFooter"
    );

    // Only enable experiment telemetry for specific pref-controlled branches.
    this.showAutoCompleteImport = Services.prefs.getStringPref(
      "signon.showAutoCompleteImport",
      ""
    );
    if (["control", "import"].includes(this.showAutoCompleteImport)) {
      Services.telemetry.setEventRecordingEnabled("exp_import", true);
    } else {
      Services.telemetry.setEventRecordingEnabled("exp_import", false);
    }

    this.storeWhenAutocompleteOff = Services.prefs.getBoolPref(
      "signon.storeWhenAutocompleteOff"
    );
+14 −1
Original line number Diff line number Diff line
@@ -1998,7 +1998,7 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
      // the insecure form warning.
      if (
        !foundLogins.length &&
        !importable?.browsers &&
        !(importable?.state === "import" && importable?.browsers) &&
        (InsecurePasswordUtils.isFormSecure(form) ||
          !LoginHelper.showInsecureFieldWarning)
      ) {
@@ -2275,6 +2275,19 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
      Cu.reportError(ex);
      throw ex;
    } finally {
      // For experiment telemetry, record how many importable logins were
      // available when filling a login form and some extra data.
      Services.telemetry.recordEvent(
        "exp_import",
        "impression",
        "formfill",
        (importable?.browsers?.length ?? 0) + "",
        {
          autofillResult: autofillResult + "",
          loginsCount: foundLogins.length + "",
        }
      );

      if (autofillResult == -1) {
        // eslint-disable-next-line no-unsafe-finally
        throw new Error("_fillForm: autofillResult must be specified");
+1 −1
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ add_task(async function test_form1_menuitems() {
  is(acEvents.length, 1, "One autocomplete event");
  checkACTelemetryEvent(acEvents[0], uname, {
    "hadPrevious": "0",
    "loginWithOrigin": expectedMenuItems.length + "",
    "login": expectedMenuItems.length + "",
    "loginsFooter": "1"
  });

Loading