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

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

Issue 2220423002: Fix sync-credential-related metrics (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Non-null driver + removing a forgotten LOG statement Created 4 years, 4 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_manager_unittest.cc
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index b12936639e74c398f54818306ff628c698747801..5cc6d9789f52d245bf8803f9da3404ea43e10324 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -43,6 +43,8 @@ class MockStoreResultFilter : public CredentialsFilter {
MOCK_CONST_METHOD1(FilterResultsPtr,
void(ScopedVector<autofill::PasswordForm>* results));
MOCK_CONST_METHOD1(ShouldSave, bool(const autofill::PasswordForm& form));
+ MOCK_CONST_METHOD1(ReportFormLoginSuccess,
+ void(const PasswordFormManager& form_manager));
// GMock cannot handle move-only arguments.
ScopedVector<autofill::PasswordForm> FilterResults(
@@ -251,7 +253,7 @@ class PasswordManagerTest : public testing::Test {
base::MessageLoop message_loop_;
scoped_refptr<MockPasswordStore> store_;
- MockPasswordManagerClient client_;
+ testing::NiceMock<MockPasswordManagerClient> client_;
MockPasswordManagerDriver driver_;
std::unique_ptr<PasswordAutofillManager> password_autofill_manager_;
std::unique_ptr<PasswordManager> manager_;
@@ -608,6 +610,37 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) {
manager()->OnPasswordFormsRendered(&driver_, observed, true);
}
+// On a successful login with an updated password,
+// CredentialsFilter::ReportFormLoginSuccess should be called.
+TEST_F(PasswordManagerTest, ReportFormLoginSuccessCalled) {
+ PasswordForm form(MakeSimpleForm());
+
+ std::vector<PasswordForm> observed;
+ observed.push_back(form);
+ EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+ // Simulate that |form| is already in the store, making this an update.
+ EXPECT_CALL(*store_, GetLogins(_, _))
+ .WillRepeatedly(WithArg<1>(InvokeConsumer(form)));
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ // Submit form and finish navigation.
+ EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr));
+ manager()->ProvisionallySavePassword(form);
+
+ // Chrome should recognise the successful login and call
+ // ReportFormLoginSuccess.
+ EXPECT_CALL(*static_cast<const MockStoreResultFilter*>(
+ client_.GetStoreResultFilter()),
vasilii 2016/08/08 15:34:24 I think returning const MockStoreResultFilter* fro
vabr (Chromium) 2016/08/09 12:19:52 Thanks to you, Vasilii, for teaching me that the r
+ ReportFormLoginSuccess(_));
+ EXPECT_CALL(*store_, UpdateLogin(_));
+ observed.clear();
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+}
+
// When there is a sync password saved, and the user successfully uses the
// stored version of it, PasswordManager should not drop that password.
TEST_F(PasswordManagerTest, SyncCredentialsNotDroppedIfUpToDate) {

Powered by Google App Engine
This is Rietveld 408576698