Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(492)

Unified Diff: components/password_manager/core/browser/password_form_manager_unittest.cc

Issue 2912783002: Measure how often PSL and same-organization name credentials are suppressed. (Closed)
Patch Set: Addressed comments from kolos@. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/password_manager/core/browser/password_form_manager_unittest.cc
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 5a56528b47c67a2f7de94364b6d4cb850b128b54..e4ed9f70800446feb8141ee565fbee0a998aad22 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -713,6 +713,92 @@ class PasswordFormManagerTest : public testing::Test {
// To spare typing for PasswordFormManager instances which need no driver.
const base::WeakPtr<PasswordManagerDriver> kNoDriver;
+ protected:
+ enum class SimulatedManagerAction { NONE, AUTOFILLED, OFFERED, OFFERED_PSL };
+ enum class SimulatedSubmitResult { NONE, PASSED, FAILED };
+ enum class SuppressedFormType { HTTPS, PSL_MATCH, SAME_ORGANIZATION_NAME };
+
+ PasswordForm CreateSuppressedForm(SuppressedFormType suppression_type,
+ const char* username,
+ const char* password,
+ PasswordForm::Type manual_or_generated) {
+ PasswordForm form = *saved_match();
+ switch (suppression_type) {
+ case SuppressedFormType::HTTPS:
+ form.origin = GURL("https://accounts.google.com/a/LoginAuth");
+ form.signon_realm = "https://accounts.google.com/";
+ break;
+ case SuppressedFormType::PSL_MATCH:
+ form.origin = GURL("http://other.google.com/");
+ form.signon_realm = "http://other.google.com/";
+ break;
+ case SuppressedFormType::SAME_ORGANIZATION_NAME:
+ form.origin = GURL("https://may-or-may-not-be.google.appspot.com/");
+ form.signon_realm = "https://may-or-may-not-be.google.appspot.com/";
+ break;
+ }
+ form.type = manual_or_generated;
+ form.username_value = ASCIIToUTF16(username);
+ form.password_value = ASCIIToUTF16(password);
+ return form;
+ }
+
+ void SimulateActionsOnHTTPObservedForm(
+ FakeFormFetcher* fetcher,
+ SimulatedManagerAction manager_action,
+ SimulatedSubmitResult submit_result,
+ const char* filled_username,
+ const char* filled_password,
+ const char* submitted_password = nullptr) {
+ PasswordFormManager form_manager(
+ password_manager(), client(), client()->driver(), *observed_form(),
+ base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher);
+
+ EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
+ StartUploadRequest(_, _, _, _, _))
+ .Times(::testing::AnyNumber());
+
+ PasswordForm http_stored_form = *saved_match();
+ http_stored_form.username_value = base::ASCIIToUTF16(filled_username);
+ http_stored_form.password_value = base::ASCIIToUTF16(filled_password);
+ if (manager_action == SimulatedManagerAction::OFFERED_PSL)
+ http_stored_form.is_public_suffix_match = true;
+
+ std::vector<const PasswordForm*> matches;
+ if (manager_action != SimulatedManagerAction::NONE)
+ matches.push_back(&http_stored_form);
+
+ // Extra mile: kUserActionChoose is only recorded if there were multiple
+ // logins available and the preferred one was changed.
+ PasswordForm http_stored_form2 = http_stored_form;
+ if (manager_action == SimulatedManagerAction::OFFERED) {
+ http_stored_form.preferred = false;
+ http_stored_form2.username_value = ASCIIToUTF16("user-other@gmail.com");
+ matches.push_back(&http_stored_form2);
+ }
+
+ fetcher->Fetch();
+ fetcher->SetNonFederated(matches, 0u);
+
+ if (submit_result != SimulatedSubmitResult::NONE) {
+ PasswordForm submitted_form(*observed_form());
+ submitted_form.preferred = true;
+ submitted_form.username_value = base::ASCIIToUTF16(filled_username);
+ submitted_form.password_value =
+ submitted_password ? base::ASCIIToUTF16(submitted_password)
+ : base::ASCIIToUTF16(filled_password);
+
+ form_manager.ProvisionallySave(
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ if (submit_result == SimulatedSubmitResult::PASSED) {
+ form_manager.LogSubmitPassed();
+ form_manager.Save();
+ } else {
+ form_manager.LogSubmitFailed();
+ }
+ }
+ }
+
private:
// Necessary for callbacks, and for TestAutofillDriver.
base::MessageLoop message_loop_;
@@ -3182,46 +3268,11 @@ TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) {
form_manager.Save();
}
-// If the frame containing the login form is served over HTTPS, no histograms
-// should be recorded.
-TEST_F(PasswordFormManagerTest,
- SuppressedHTTPSFormsHistogram_NotRecordedOnHTTPSLoginForms) {
- base::HistogramTester histogram_tester;
-
- PasswordForm https_observed_form = *observed_form();
- https_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
- https_observed_form.signon_realm = "https://accounts.google.com/";
-
- // Only the scheme of the frame containing the login form maters, not the
- // scheme of the main frame.
- ASSERT_FALSE(client()->IsMainFrameSecure());
-
- // Even if there are suppressed results, they are ignored (but there should be
- // none in production in this case, though).
- FakeFormFetcher fetcher;
- fetcher.set_suppressed_https_forms({saved_match()});
- fetcher.set_did_complete_querying_suppressed_https_forms(true);
- fetcher.Fetch();
-
- std::unique_ptr<PasswordFormManager> form_manager =
- base::MakeUnique<PasswordFormManager>(
- password_manager(), client(), client()->driver(), https_observed_form,
- base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
- fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
- form_manager.reset();
-
- histogram_tester.ExpectTotalCount(
- "PasswordManager.QueryingSuppressedAccountsFinished", 0);
- const auto sample_counts = histogram_tester.GetTotalCountsForPrefix(
- "PasswordManager.SuppressedAccount.");
- EXPECT_THAT(sample_counts, IsEmpty());
-}
-
TEST_F(PasswordFormManagerTest,
SuppressedHTTPSFormsHistogram_NotRecordedIfStoreWasTooSlow) {
base::HistogramTester histogram_tester;
- fake_form_fetcher()->set_did_complete_querying_suppressed_https_forms(false);
+ fake_form_fetcher()->set_did_complete_querying_suppressed_forms(false);
fake_form_fetcher()->Fetch();
std::unique_ptr<PasswordFormManager> form_manager =
base::MakeUnique<PasswordFormManager>(
@@ -3237,49 +3288,52 @@ TEST_F(PasswordFormManagerTest,
EXPECT_THAT(sample_counts, IsEmpty());
}
-TEST_F(PasswordFormManagerTest,
- SuppressedHTTPSFormsHistogram_RecordedForHTTPPages) {
- const char kUsernameAlpha[] = "user-alpha@gmail.com";
- const char kPasswordAlpha[] = "password-alpha";
- const char kUsernameBeta[] = "user-beta@gmail.com";
- const char kPasswordBeta[] = "password-beta";
-
- const auto CreateHTTPSSuppressedForm = [this](const char* username,
- const char* password,
- PasswordForm::Type type) {
- PasswordForm form = *saved_match();
- form.origin = GURL("https://accounts.google.com/a/LoginAuth");
- form.signon_realm = "https://accounts.google.com/";
- form.type = type;
- form.username_value = ASCIIToUTF16(username);
- form.password_value = ASCIIToUTF16(password);
- return form;
+TEST_F(PasswordFormManagerTest, SuppressedFormsHistograms) {
+ static constexpr const struct {
+ SuppressedFormType type;
+ const char* expected_histogram_suffix;
+ void (FakeFormFetcher::*suppressed_forms_setter_func)(
+ const std::vector<const autofill::PasswordForm*>&);
+ } kSuppressedFormTypeParams[] = {
+ {SuppressedFormType::HTTPS, "HTTPSNotHTTP",
+ &FakeFormFetcher::set_suppressed_https_forms},
+ {SuppressedFormType::PSL_MATCH, "PSLMatching",
+ &FakeFormFetcher::set_suppressed_psl_matching_forms},
+ {SuppressedFormType::SAME_ORGANIZATION_NAME, "SameOrganizationName",
+ &FakeFormFetcher::set_suppressed_same_organization_name_forms}};
+
+ struct SuppressedFormData {
+ const char* username_value;
+ const char* password_value;
+ PasswordForm::Type manual_or_generated;
};
- const PasswordForm kSuppressedGeneratedForm = CreateHTTPSSuppressedForm(
- kUsernameAlpha, kPasswordAlpha, PasswordForm::TYPE_GENERATED);
- const PasswordForm kOtherSuppressedGeneratedForm = CreateHTTPSSuppressedForm(
- kUsernameBeta, kPasswordBeta, PasswordForm::TYPE_GENERATED);
- const PasswordForm kSuppressedManualForm = CreateHTTPSSuppressedForm(
- kUsernameAlpha, kPasswordBeta, PasswordForm::TYPE_MANUAL);
+ static constexpr const char kUsernameAlpha[] = "user-alpha@gmail.com";
+ static constexpr const char kPasswordAlpha[] = "password-alpha";
+ static constexpr const char kUsernameBeta[] = "user-beta@gmail.com";
+ static constexpr const char kPasswordBeta[] = "password-beta";
- const std::vector<const PasswordForm*> kSuppressedFormsNone;
- const std::vector<const PasswordForm*> kSuppressedFormsOneGenerated = {
+ static constexpr const SuppressedFormData kSuppressedGeneratedForm = {
+ kUsernameAlpha, kPasswordAlpha, PasswordForm::TYPE_GENERATED};
+ static constexpr const SuppressedFormData kOtherSuppressedGeneratedForm = {
+ kUsernameBeta, kPasswordBeta, PasswordForm::TYPE_GENERATED};
+ static constexpr const SuppressedFormData kSuppressedManualForm = {
+ kUsernameAlpha, kPasswordBeta, PasswordForm::TYPE_MANUAL};
+
+ const std::vector<const SuppressedFormData*> kSuppressedFormsNone;
+ const std::vector<const SuppressedFormData*> kSuppressedFormsOneGenerated = {
&kSuppressedGeneratedForm};
- const std::vector<const PasswordForm*> kSuppressedFormsTwoGenerated = {
+ const std::vector<const SuppressedFormData*> kSuppressedFormsTwoGenerated = {
&kSuppressedGeneratedForm, &kOtherSuppressedGeneratedForm};
- const std::vector<const PasswordForm*> kSuppressedFormsOneManual = {
+ const std::vector<const SuppressedFormData*> kSuppressedFormsOneManual = {
&kSuppressedManualForm};
- const std::vector<const PasswordForm*> kSuppressedFormsTwoMixed = {
+ const std::vector<const SuppressedFormData*> kSuppressedFormsTwoMixed = {
&kSuppressedGeneratedForm, &kSuppressedManualForm};
- enum class ManagerAction { NONE, AUTOFILLED, OFFERED, OFFERED_PSL };
- enum class SubmitResult { NONE, PASSED, FAILED };
-
const struct {
- std::vector<const PasswordForm*> simulated_suppressed_forms;
- ManagerAction simulate_manager_action;
- SubmitResult simulate_submit_result;
+ std::vector<const SuppressedFormData*> simulated_suppressed_forms;
+ SimulatedManagerAction simulate_manager_action;
+ SimulatedSubmitResult simulate_submit_result;
const char* filled_username;
const char* filled_password;
int expected_histogram_sample_generated;
@@ -3288,144 +3342,157 @@ TEST_F(PasswordFormManagerTest,
} kTestCases[] = {
// See PasswordManagerSuppressedAccountCrossActionsTaken in enums.xml.
//
- // Legend: (SuppressAccountType, SubmitResult, ManagerAction, UserAction)
+ // Legend: (SuppressAccountType, SubmitResult, SimulatedManagerAction,
+ // UserAction)
// 24 = (None, Passed, None, OverrideUsernameAndPassword)
- {kSuppressedFormsNone, ManagerAction::NONE, SubmitResult::PASSED,
- kUsernameAlpha, kPasswordAlpha, 24, 24},
+ {kSuppressedFormsNone, SimulatedManagerAction::NONE,
+ SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 24, 24},
// 5 = (None, NotSubmitted, Autofilled, None)
- {kSuppressedFormsNone, ManagerAction::AUTOFILLED, SubmitResult::NONE,
- kUsernameAlpha, kPasswordAlpha, 5, 5},
+ {kSuppressedFormsNone, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 5, 5},
// 15 = (None, Failed, Autofilled, None)
- {kSuppressedFormsNone, ManagerAction::AUTOFILLED, SubmitResult::FAILED,
- kUsernameAlpha, kPasswordAlpha, 15, 15},
+ {kSuppressedFormsNone, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::FAILED, kUsernameAlpha, kPasswordAlpha, 15, 15},
// 35 = (Exists, NotSubmitted, Autofilled, None)
- {kSuppressedFormsOneGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 35, 5},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::NONE, kUsernameAlpha, kPasswordAlpha, 35, 5},
// 145 = (ExistsSameUsernameAndPassword, Passed, Autofilled, None)
// 25 = (None, Passed, Autofilled, None)
- {kSuppressedFormsOneGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
// 104 = (ExistsSameUsername, Failed, None, OverrideUsernameAndPassword)
// 14 = (None, Failed, None, OverrideUsernameAndPassword)
- {kSuppressedFormsOneGenerated, ManagerAction::NONE, SubmitResult::FAILED,
- kUsernameAlpha, kPasswordBeta, 104, 14},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::NONE,
+ SimulatedSubmitResult::FAILED, kUsernameAlpha, kPasswordBeta, 104, 14},
// 84 = (ExistsDifferentUsername, Passed, None,
// OverrideUsernameAndPassword)
- {kSuppressedFormsOneGenerated, ManagerAction::NONE, SubmitResult::PASSED,
- kUsernameBeta, kPasswordAlpha, 84, 24},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::NONE,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 84, 24},
// 144 = (ExistsSameUsernameAndPassword, Passed, None,
// OverrideUsernameAndPassword)
- {kSuppressedFormsOneManual, ManagerAction::NONE, SubmitResult::PASSED,
- kUsernameAlpha, kPasswordBeta, 24, 144},
- {kSuppressedFormsTwoMixed, ManagerAction::NONE, SubmitResult::PASSED,
- kUsernameBeta, kPasswordAlpha, 84, 84},
+ {kSuppressedFormsOneManual, SimulatedManagerAction::NONE,
+ SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 24, 144},
+ {kSuppressedFormsTwoMixed, SimulatedManagerAction::NONE,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 84, 84},
// 115 = (ExistsSameUsername, Passed, Autofilled, None)
- {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
- {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 115, 25},
- {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 115, 25},
- {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameBeta, kPasswordBeta, 145, 25},
+ {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordAlpha, 145, 25},
+ {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameAlpha, kPasswordBeta, 115, 25},
+ {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 115, 25},
+ {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordBeta, 145, 25},
// 86 = (ExistsDifferentUsername, Passed, Autofilled, Choose)
// 26 = (None, Passed, Autofilled, Choose)
- {kSuppressedFormsOneGenerated, ManagerAction::OFFERED,
- SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 86, 26},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::OFFERED,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 86, 26},
// 72 = (ExistsDifferentUsername, Failed, None, ChoosePSL)
// 12 = (None, Failed, None, ChoosePSL)
- {kSuppressedFormsOneGenerated, ManagerAction::OFFERED_PSL,
- SubmitResult::FAILED, kUsernameBeta, kPasswordAlpha, 72, 12},
+ {kSuppressedFormsOneGenerated, SimulatedManagerAction::OFFERED_PSL,
+ SimulatedSubmitResult::FAILED, kUsernameBeta, kPasswordAlpha, 72, 12},
// 148 = (ExistsSameUsernameAndPassword, Passed, Autofilled,
// OverridePassword)
// 28 = (None, Passed, Autofilled, OverridePassword)
- {kSuppressedFormsTwoGenerated, ManagerAction::AUTOFILLED,
- SubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 148, 28,
+ {kSuppressedFormsTwoGenerated, SimulatedManagerAction::AUTOFILLED,
+ SimulatedSubmitResult::PASSED, kUsernameBeta, kPasswordAlpha, 148, 28,
kPasswordBeta},
};
- EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
- StartUploadRequest(_, _, _, _, _))
- .Times(::testing::AtLeast(0));
-
- for (const auto& test_case : kTestCases) {
- SCOPED_TRACE(test_case.expected_histogram_sample_manual);
- SCOPED_TRACE(test_case.expected_histogram_sample_generated);
-
- base::HistogramTester histogram_tester;
-
- const base::string16 filled_username =
- ASCIIToUTF16(test_case.filled_username);
- const base::string16 filled_password =
- ASCIIToUTF16(test_case.filled_password);
+ for (const auto& suppression_params : kSuppressedFormTypeParams) {
+ for (const auto& test_case : kTestCases) {
+ SCOPED_TRACE(suppression_params.expected_histogram_suffix);
+ SCOPED_TRACE(test_case.expected_histogram_sample_manual);
+ SCOPED_TRACE(test_case.expected_histogram_sample_generated);
- FakeFormFetcher fetcher;
- std::unique_ptr<PasswordFormManager> form_manager =
- base::MakeUnique<PasswordFormManager>(
- password_manager(), client(), client()->driver(), *observed_form(),
- base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
+ base::HistogramTester histogram_tester;
- PasswordForm http_stored_form = *saved_match();
- http_stored_form.username_value = filled_username;
- http_stored_form.password_value = filled_password;
- if (test_case.simulate_manager_action == ManagerAction::OFFERED_PSL)
- http_stored_form.is_public_suffix_match = true;
+ std::vector<PasswordForm> suppressed_forms;
+ for (const auto* form_data : test_case.simulated_suppressed_forms) {
+ suppressed_forms.push_back(CreateSuppressedForm(
+ suppression_params.type, form_data->username_value,
+ form_data->password_value, form_data->manual_or_generated));
+ }
- std::vector<const PasswordForm*> matches;
- if (test_case.simulate_manager_action != ManagerAction::NONE)
- matches.push_back(&http_stored_form);
+ std::vector<const PasswordForm*> suppressed_forms_ptrs;
+ for (const auto& form : suppressed_forms)
+ suppressed_forms_ptrs.push_back(&form);
- // Extra mile: kUserActionChoose is only recorded if there were multiple
- // logins available and the preferred one was changed.
- PasswordForm http_stored_form2 = http_stored_form;
- if (test_case.simulate_manager_action == ManagerAction::OFFERED) {
- http_stored_form.preferred = false;
- http_stored_form2.username_value = ASCIIToUTF16("user-other@gmail.com");
- matches.push_back(&http_stored_form2);
+ FakeFormFetcher fetcher;
+ fetcher.set_did_complete_querying_suppressed_forms(true);
+
+ (&fetcher->*suppression_params.suppressed_forms_setter_func)(
+ suppressed_forms_ptrs);
+
+ SimulateActionsOnHTTPObservedForm(
+ &fetcher, test_case.simulate_manager_action,
+ test_case.simulate_submit_result, test_case.filled_username,
+ test_case.filled_password, test_case.submitted_password);
+
+ histogram_tester.ExpectUniqueSample(
+ "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
+
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples(
+ "PasswordManager.SuppressedAccount.Generated." +
+ std::string(suppression_params.expected_histogram_suffix)),
+ ::testing::ElementsAre(
+ base::Bucket(test_case.expected_histogram_sample_generated, 1)));
+ EXPECT_THAT(
+ histogram_tester.GetAllSamples(
+ "PasswordManager.SuppressedAccount.Manual." +
+ std::string(suppression_params.expected_histogram_suffix)),
+ ::testing::ElementsAre(
+ base::Bucket(test_case.expected_histogram_sample_manual, 1)));
}
+ }
+}
- fetcher.set_did_complete_querying_suppressed_https_forms(true);
- fetcher.set_suppressed_https_forms(test_case.simulated_suppressed_forms);
- fetcher.Fetch();
- fetcher.SetNonFederated(matches, 0u);
+// If the frame containing the login form is served over HTTPS, no histograms on
+// supressed HTTPS forms should be recorded. Everything else should still be.
+TEST_F(PasswordFormManagerTest, SuppressedHTTPSFormsHistogram_NotRecordedFor) {
+ base::HistogramTester histogram_tester;
- if (test_case.simulate_submit_result != SubmitResult::NONE) {
- PasswordForm submitted_form(*observed_form());
- submitted_form.preferred = true;
- submitted_form.username_value = filled_username;
- submitted_form.password_value =
- test_case.submitted_password
- ? ASCIIToUTF16(test_case.submitted_password)
- : filled_password;
+ PasswordForm https_observed_form = *observed_form();
+ https_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
+ https_observed_form.signon_realm = "https://accounts.google.com/";
- form_manager->ProvisionallySave(
- submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
- if (test_case.simulate_submit_result == SubmitResult::PASSED) {
- form_manager->LogSubmitPassed();
- form_manager->Save();
- } else {
- form_manager->LogSubmitFailed();
- }
- }
+ // Only the scheme of the frame containing the login form maters, not the
+ // scheme of the main frame.
+ ASSERT_FALSE(client()->IsMainFrameSecure());
- form_manager.reset();
+ // Even if there were any suppressed HTTPS forms, they should be are ignored
+ // (but there should be none in production in this case).
+ FakeFormFetcher fetcher;
+ fetcher.set_suppressed_https_forms({saved_match()});
+ fetcher.set_did_complete_querying_suppressed_forms(true);
+ fetcher.Fetch();
- histogram_tester.ExpectUniqueSample(
- "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
+ std::unique_ptr<PasswordFormManager> form_manager =
+ base::MakeUnique<PasswordFormManager>(
+ password_manager(), client(), client()->driver(), https_observed_form,
+ base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
+ fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+ form_manager.reset();
- EXPECT_THAT(histogram_tester.GetAllSamples(
- "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP"),
- ::testing::ElementsAre(base::Bucket(
- test_case.expected_histogram_sample_generated, 1)));
- EXPECT_THAT(histogram_tester.GetAllSamples(
- "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP"),
- ::testing::ElementsAre(base::Bucket(
- test_case.expected_histogram_sample_manual, 1)));
- }
+ histogram_tester.ExpectUniqueSample(
+ "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP", 0);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP", 0);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Generated.PSLMatching", 1);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Manual.PSLMatching", 1);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Generated.SameOrganizationName", 1);
+ histogram_tester.ExpectTotalCount(
+ "PasswordManager.SuppressedAccount.Manual.SameOrganizationName", 1);
}
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698