Skip to content

Commit

Permalink
[Merge-M103][Passwords] NewlySavedPasswordHasEmptyUsername metric
Browse files Browse the repository at this point in the history
I want to measure the necessity of username editing in a generation
confirmation bubble/infobar.

(cherry picked from commit 1b1a0fb,
the merge conflict with crrev.com/c/3649663 is resolved)

Bug: 1328798
Change-Id: I266109df5e550f990561a27c94268d8a4880e257
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3663286
Reviewed-by: Ioana Pandele <ioanap@chromium.org>
Commit-Queue: Maxim Kolosovskiy <kolos@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1008196}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3673067
Cr-Commit-Position: refs/branch-heads/5060@{#383}
Cr-Branched-From: b83393d-refs/heads/main@{#1002911}
  • Loading branch information
Maxim Kolosovskiy authored and Chromium LUCI CQ committed May 30, 2022
1 parent 9682bbb commit 83a2ef2
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 8 deletions.
1 change: 1 addition & 0 deletions components/password_manager/core/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,7 @@ source_set("unit_tests") {
"password_manager_client_helper_unittest.cc",
"password_manager_features_util_unittest.cc",
"password_manager_metrics_recorder_unittest.cc",
"password_manager_metrics_util_unittest.cc",
"password_manager_unittest.cc",
"password_manager_util_unittest.cc",
"password_notes_table_unittest.cc",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,15 +283,25 @@ void LogDeleteUndecryptableLoginsReturnValue(
"PasswordManager.DeleteUndecryptableLoginsReturnValue", result);
}

void LogNewlySavedPasswordIsGenerated(
bool value,
void LogNewlySavedPasswordMetrics(
bool is_generated_password,
bool is_username_empty,
PasswordAccountStorageUsageLevel account_storage_usage_level) {
base::UmaHistogramBoolean("PasswordManager.NewlySavedPasswordIsGenerated",
value);
is_generated_password);
std::string suffix = GetPasswordAccountStorageUsageLevelHistogramSuffix(
account_storage_usage_level);
base::UmaHistogramBoolean(
"PasswordManager.NewlySavedPasswordIsGenerated." + suffix, value);
"PasswordManager.NewlySavedPasswordIsGenerated." + suffix,
is_generated_password);

base::UmaHistogramBoolean(
"PasswordManager.NewlySavedPasswordHasEmptyUsername.Overall",
is_username_empty);
base::UmaHistogramBoolean(
base::StrCat({"PasswordManager.NewlySavedPasswordHasEmptyUsername.",
is_generated_password ? "AutoGenerated" : "UserCreated"}),
is_username_empty);
}

void LogGenerationDialogChoice(GenerationDialogChoice choice,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -663,9 +663,11 @@ void LogPasswordSettingsReauthResult(ReauthResult result);
void LogDeleteUndecryptableLoginsReturnValue(
DeleteCorruptedPasswordsResult result);

// Log whether a saved password was generated.
void LogNewlySavedPasswordIsGenerated(
bool value,
// Log metrics about a newly saved password (e.g. whether a saved password was
// generated).
void LogNewlySavedPasswordMetrics(
bool is_generated_password,
bool is_username_empty,
PasswordAccountStorageUsageLevel account_storage_usage_level);

// Log whether the generated password was accepted or rejected for generation of
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/password_manager/core/browser/password_manager_metrics_util.h"

#include "base/test/metrics/histogram_tester.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace password_manager::metrics_util {

TEST(PasswordManagerMetricsUtil, LogNewlySavedPasswordMetrics) {
base::HistogramTester histogram_tester;

constexpr bool kIsGeneratedPassword = true;
constexpr bool kIsUsernameEmpty = true;
LogNewlySavedPasswordMetrics(
/*is_generated_password=*/true, /*is_username_empty=*/true,
PasswordAccountStorageUsageLevel::kNotUsingAccountStorage);

histogram_tester.ExpectUniqueSample(
"PasswordManager.NewlySavedPasswordIsGenerated", kIsGeneratedPassword, 1);
histogram_tester.ExpectUniqueSample(
"PasswordManager.NewlySavedPasswordIsGenerated.NotUsingAccountStorage",
kIsGeneratedPassword, 1);
histogram_tester.ExpectTotalCount(
"PasswordManager.NewlySavedPasswordIsGenerated.UsingAccountStorage", 0);
histogram_tester.ExpectTotalCount(
"PasswordManager.NewlySavedPasswordIsGenerated.Syncing", 0);

histogram_tester.ExpectUniqueSample(
"PasswordManager.NewlySavedPasswordHasEmptyUsername.Overall",
kIsUsernameEmpty, 1);
histogram_tester.ExpectUniqueSample(
"PasswordManager.NewlySavedPasswordHasEmptyUsername.AutoGenerated",
kIsUsernameEmpty, 1);
histogram_tester.ExpectTotalCount(
"PasswordManager.NewlySavedPasswordHasEmptyUsername.UserCreated", 0);
}

} // namespace password_manager::metrics_util
Original file line number Diff line number Diff line change
Expand Up @@ -780,8 +780,9 @@ void PasswordSaveManagerImpl::UploadVotesAndMetrics(
#endif // !BUILDFLAG(IS_ANDROID)

if (IsNewLogin()) {
metrics_util::LogNewlySavedPasswordIsGenerated(
metrics_util::LogNewlySavedPasswordMetrics(
pending_credentials_.type == PasswordForm::Type::kGenerated,
pending_credentials_.username_value.empty(),
client_->GetPasswordFeatureManager()
->ComputePasswordAccountStorageUsageLevel());
// Don't send votes if there was no observed form.
Expand Down
12 changes: 12 additions & 0 deletions tools/metrics/histograms/metadata/password/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1897,6 +1897,18 @@ chromium-metrics-reviews@google.com.
</summary>
</histogram>

<histogram
name="PasswordManager.NewlySavedPasswordHasEmptyUsername.{PasswordType}"
enum="Boolean" expires_after="2022-10-23">
<owner>khamutov@google.com</owner>
<owner>kolos@chromium.org</owner>
<summary>
Whether a newly saved password has an empty username. Recorded right before
a new credential is commited to the store.
</summary>
<token key="PasswordType" variants="PasswordType"/>
</histogram>

<histogram name="PasswordManager.NewlySavedPasswordIsGenerated"
enum="BooleanNewlySavedPasswordIsGenerated" expires_after="2022-10-23">
<owner>nepper@chromium.org</owner>
Expand Down

0 comments on commit 83a2ef2

Please sign in to comment.