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

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: Comments addressed 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 8c367193b74ed78834dcdb97f7908d63d6f48a47..165d3b66af5f8375d870793dc087088ac301c503 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -44,6 +44,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(
@@ -78,7 +80,7 @@ class MockPasswordManagerClient : public StubPasswordManagerClient {
MOCK_METHOD0(GetPrefs, PrefService*());
MOCK_METHOD0(GetDriver, PasswordManagerDriver*());
MOCK_CONST_METHOD0(IsUpdatePasswordUIEnabled, bool());
- MOCK_CONST_METHOD0(GetStoreResultFilter, const CredentialsFilter*());
+ MOCK_CONST_METHOD0(GetStoreResultFilter, const MockStoreResultFilter*());
// Workaround for std::unique_ptr<> lacking a copy constructor.
bool PromptUserToSaveOrUpdatePassword(
@@ -240,7 +242,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_;
@@ -597,6 +599,35 @@ 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(*client_.GetStoreResultFilter(), 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