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 a250707d2b0f8c2fc9924598c2abf8e86a56da92..ea57e75e1a98e65d9068756c32100ae298095ba8 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -437,9 +437,12 @@ class PasswordFormManagerTest : public testing::Test { |
.WillByDefault(Return(std::vector<InteractionsStats*>())); |
client_.reset(new TestPasswordManagerClient(mock_store_.get())); |
password_manager_.reset(new PasswordManager(client_.get())); |
+ EXPECT_CALL(*mock_store_, |
+ GetLogins(PasswordStore::FormDigest(observed_form_), _)); |
form_manager_.reset(new PasswordFormManager( |
password_manager_.get(), client_.get(), client_.get()->driver(), |
observed_form_, base::WrapUnique(new NiceMock<MockFormSaver>()))); |
+ Mock::VerifyAndClearExpectations(mock_store_.get()); |
} |
void TearDown() override { |
@@ -451,9 +454,6 @@ class PasswordFormManagerTest : public testing::Test { |
void SimulateMatchingPhase(PasswordFormManager* p, |
ResultOfSimulatedMatchingMask result) { |
- EXPECT_CALL(*mock_store(), |
- GetLogins(PasswordStore::FormDigest(p->observed_form()), p)); |
- p->FetchDataFromPasswordStore(); |
if (result == RESULT_NO_MATCH) { |
p->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
return; |
@@ -502,7 +502,6 @@ class PasswordFormManagerTest : public testing::Test { |
? result[0]->username_element |
: base::string16(); |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
std::string expected_login_signature; |
autofill::FormStructure observed_structure(observed_form_data); |
@@ -693,7 +692,6 @@ class PasswordFormManagerTest : public testing::Test { |
base::WrapUnique(new NiceMock<MockFormSaver>())); |
ScopedVector<PasswordForm> result; |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
autofill::ServerFieldTypeSet expected_available_field_types; |
@@ -873,7 +871,6 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) { |
PasswordFormManager form_manager(password_manager(), client(), |
client()->driver(), *observed_form(), |
base::WrapUnique(new MockFormSaver())); |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
// Doesn't match because of PSL. |
PasswordForm blacklisted_psl = *observed_form(); |
@@ -934,8 +931,6 @@ TEST_F(PasswordFormManagerTest, AutofillBlacklisted) { |
result.push_back(new PasswordForm(saved_form)); |
result.push_back(new PasswordForm(blacklisted)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
- |
autofill::PasswordFormFillData fill_data; |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) |
.WillOnce(SaveArg<0>(&fill_data)); |
@@ -1147,7 +1142,6 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) { |
saved_form.action = GURL("https://accounts.google.com/a/OtherLogin"); |
ScopedVector<PasswordForm> result; |
result.push_back(new PasswordForm(saved_form)); |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
// Different paths for action / origin are okay. |
@@ -1168,7 +1162,6 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_IgnoredCredentials) { |
PasswordForm saved_form = observed; |
ScopedVector<PasswordForm> result; |
result.push_back(new PasswordForm(saved_form)); |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
// Results should be ignored if the client requests it. |
@@ -1231,7 +1224,6 @@ TEST_F(PasswordFormManagerTest, TestAlternateUsername_NoChange) { |
ScopedVector<PasswordForm> result; |
result.push_back(new PasswordForm(saved_form)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(std::move(result)); |
// The saved match has the right username already. |
@@ -1268,7 +1260,6 @@ TEST_F(PasswordFormManagerTest, TestAlternateUsername_OtherUsername) { |
ScopedVector<PasswordForm> result; |
result.push_back(new PasswordForm(saved_form)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(std::move(result)); |
// The saved match has the right username already. |
@@ -1303,7 +1294,6 @@ TEST_F(PasswordFormManagerTest, TestSendNotBlacklistedMessage_NoCredentials) { |
// "not blacklisted" message. |
EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
.Times(1); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
} |
@@ -1313,7 +1303,6 @@ TEST_F(PasswordFormManagerTest, TestSendNotBlacklistedMessage_Credentials) { |
// should be called to send the "not blacklisted" message. |
EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
.Times(1); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
ScopedVector<PasswordForm> simulated_results; |
simulated_results.push_back(CreateSavedMatch(false)); |
form_manager()->OnGetPasswordStoreResults(std::move(simulated_results)); |
@@ -1332,7 +1321,6 @@ TEST_F(PasswordFormManagerTest, |
base::WrapUnique(new MockFormSaver())); |
EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
.Times(1); |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
ScopedVector<PasswordForm> simulated_results; |
simulated_results.push_back(CreateSavedMatch(false)); |
form_manager.OnGetPasswordStoreResults(std::move(simulated_results)); |
@@ -1344,7 +1332,6 @@ TEST_F(PasswordFormManagerTest, |
// password store, but they are blacklisted. AllowPasswordGenerationForForm |
// is still called. |
EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
ScopedVector<PasswordForm> simulated_results; |
simulated_results.push_back(CreateSavedMatch(true)); |
form_manager()->OnGetPasswordStoreResults(std::move(simulated_results)); |
@@ -1376,8 +1363,6 @@ TEST_F(PasswordFormManagerTest, TestBestCredentialsByEachUsernameAreIncluded) { |
auto username2 = simulated_results[0]->username_value + ASCIIToUTF16("2"); |
simulated_results[4]->username_value = username2; |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
- |
autofill::PasswordFormFillData fill_data; |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) |
.WillOnce(SaveArg<0>(&fill_data)); |
@@ -1410,7 +1395,6 @@ TEST_F(PasswordFormManagerTest, |
simulated_results[0]->password_element = ASCIIToUTF16("signup_password"); |
simulated_results[0]->username_element = ASCIIToUTF16("signup_username"); |
simulated_results[0]->type = PasswordForm::TYPE_GENERATED; |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
autofill::PasswordFormFillData fill_data; |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) |
@@ -1424,7 +1408,6 @@ TEST_F(PasswordFormManagerTest, |
TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernames) { |
const base::string16 kUsernameOther = ASCIIToUTF16("other username"); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
PasswordForm credentials(*observed_form()); |
@@ -1455,7 +1438,6 @@ TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernamesDuplicates) { |
const base::string16 kUsernameDuplicate = ASCIIToUTF16("duplicate"); |
const base::string16 kUsernameRandom = ASCIIToUTF16("random"); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
PasswordForm credentials(*observed_form()); |
@@ -1499,11 +1481,6 @@ TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) { |
client()->driver(), encountered_form, |
base::WrapUnique(new MockFormSaver())); |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(encountered_form), &form_manager)); |
- form_manager.FetchDataFromPasswordStore(); |
- |
// Password store only has these incomplete credentials. |
std::unique_ptr<PasswordForm> incomplete_form(new PasswordForm()); |
incomplete_form->origin = GURL("http://accounts.google.com/LoginAuth"); |
@@ -1559,7 +1536,6 @@ TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) { |
GURL("http://accounts.google.com/a/ServiceLoginAuth2"); |
simulated_results[1]->action = |
GURL("http://accounts.google.com/a/ServiceLogin2"); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
autofill::PasswordFormFillData fill_data; |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) |
@@ -1593,7 +1569,6 @@ TEST_F(PasswordFormManagerTest, AndroidCredentialsAreAutofilled) { |
ScopedVector<PasswordForm> simulated_results; |
simulated_results.push_back(new PasswordForm(android_login)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(std::move(simulated_results)); |
EXPECT_TRUE(fill_data.additional_logins.empty()); |
EXPECT_FALSE(fill_data.wait_for_username); |
@@ -1661,7 +1636,6 @@ TEST_F(PasswordFormManagerTest, AndroidCredentialsAreProtected) { |
autofill::PasswordFormFillData fill_data; |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) |
.WillOnce(SaveArg<0>(&fill_data)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(std::move(simulated_results)); |
EXPECT_FALSE(fill_data.wait_for_username); |
@@ -1802,7 +1776,6 @@ TEST_F(PasswordFormManagerTest, CorrectlyUpdatePasswordsWithSameUsername) { |
ScopedVector<PasswordForm> result; |
result.push_back(new PasswordForm(first)); |
result.push_back(new PasswordForm(second)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(std::move(result)); |
// We always take the first credential with a particular username, regardless |
@@ -1912,7 +1885,6 @@ TEST_F(PasswordFormManagerTest, UploadPasswordForm) { |
TEST_F(PasswordFormManagerTest, CorrectlySavePasswordWithoutUsernameFields) { |
EXPECT_CALL(*client()->mock_driver(), AllowPasswordGenerationForForm(_)); |
- form_manager()->SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager()->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
PasswordForm login(*observed_form()); |
@@ -1956,10 +1928,6 @@ TEST_F(PasswordFormManagerTest, DriverDeletedBeforeStoreDone) { |
client()->driver(), *form, |
base::WrapUnique(new MockFormSaver())); |
- EXPECT_CALL(*mock_store(), |
- GetLogins(PasswordStore::FormDigest(*form), &form_manager)); |
- form_manager.FetchDataFromPasswordStore(); |
- |
// Suddenly, the frame and its driver disappear. |
client()->KillDriver(); |
@@ -1970,11 +1938,6 @@ TEST_F(PasswordFormManagerTest, DriverDeletedBeforeStoreDone) { |
TEST_F(PasswordFormManagerTest, PreferredMatchIsUpToDate) { |
// Check that preferred_match() is always a member of best_matches(). |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(*observed_form()), form_manager())); |
- form_manager()->FetchDataFromPasswordStore(); |
- |
ScopedVector<PasswordForm> simulated_results; |
std::unique_ptr<PasswordForm> form(new PasswordForm(*observed_form())); |
form->username_value = ASCIIToUTF16("username"); |
@@ -2104,7 +2067,6 @@ TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) { |
PasswordFormManager manager_creds( |
password_manager(), client(), client()->driver(), |
observed_change_password_form, base::WrapUnique(new MockFormSaver())); |
- manager_creds.SimulateFetchMatchingLoginsFromPasswordStore(); |
ScopedVector<PasswordForm> simulated_results; |
simulated_results.push_back(CreateSavedMatch(false)); |
@@ -2254,10 +2216,8 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) { |
PasswordFormManager form_manager(password_manager(), client(), |
client()->driver(), form, |
base::WrapUnique(new MockFormSaver())); |
- |
- // Do not notify the store observer after this GetLogins call. |
- EXPECT_CALL(*mock_store(), GetLogins(_, _)); |
- form_manager.FetchDataFromPasswordStore(); |
+ // The creation of |form_manager| caused a GetLogins call. This test does not |
+ // provide the callback for that call back to |form_manager| on purpose. |
PasswordForm submitted_form(form); |
submitted_form.password_value += ASCIIToUTF16("add stuff, make it different"); |
@@ -2273,11 +2233,6 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) { |
} |
TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) { |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(*observed_form()), form_manager())); |
- form_manager()->FetchDataFromPasswordStore(); |
- |
std::unique_ptr<PasswordForm> generated_form( |
new PasswordForm(*observed_form())); |
generated_form->type = PasswordForm::TYPE_GENERATED; |
@@ -2306,11 +2261,6 @@ TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) { |
TEST_F(PasswordFormManagerTest, GenerationStatusNotUpdatedIfPasswordUnchanged) { |
base::HistogramTester histogram_tester; |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(*observed_form()), form_manager())); |
- form_manager()->FetchDataFromPasswordStore(); |
- |
std::unique_ptr<PasswordForm> generated_form( |
new PasswordForm(*observed_form())); |
generated_form->type = PasswordForm::TYPE_GENERATED; |
@@ -2339,11 +2289,6 @@ TEST_F(PasswordFormManagerTest, GenerationStatusNotUpdatedIfPasswordUnchanged) { |
TEST_F(PasswordFormManagerTest, |
FetchMatchingLoginsFromPasswordStore_Reentrance) { |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(form_manager()->observed_form()), |
- form_manager())) |
- .Times(2); |
form_manager()->FetchDataFromPasswordStore(); |
form_manager()->FetchDataFromPasswordStore(); |
@@ -2352,6 +2297,11 @@ TEST_F(PasswordFormManagerTest, |
saved_form->username_value = ASCIIToUTF16("a@gmail.com"); |
ScopedVector<PasswordForm> results; |
results.push_back(std::move(saved_form)); |
+ // Expect the additional call for GetLogins after the first response arrives. |
+ EXPECT_CALL( |
+ *mock_store(), |
+ GetLogins(PasswordStore::FormDigest(form_manager()->observed_form()), |
+ form_manager())); |
form_manager()->OnGetPasswordStoreResults(std::move(results)); |
EXPECT_TRUE(form_manager()->best_matches().empty()); |
@@ -2391,12 +2341,8 @@ TEST_F(PasswordFormManagerTest, ProcessFrame_DriverBeforeMatching) { |
EXPECT_CALL(extra_driver, FillPasswordForm(_)); |
- // Ask store for logins, but store should not respond yet. |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(form_manager()->observed_form()), |
- form_manager())); |
- form_manager()->FetchDataFromPasswordStore(); |
+ // The PasswordStore was asked store for logins when |form_manager()| was |
+ // created, but should not respond yet. |
// Now add the extra driver. |
form_manager()->ProcessFrame(extra_driver.AsWeakPtr()); |
@@ -2411,6 +2357,7 @@ TEST_F(PasswordFormManagerTest, ProcessFrame_DriverBeforeMatching) { |
TEST_F(PasswordFormManagerTest, ProcessFrame_StoreUpdatesCausesAutofill) { |
EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)).Times(2); |
SimulateMatchingPhase(form_manager(), RESULT_SAVED_MATCH); |
+ form_manager()->FetchDataFromPasswordStore(); |
SimulateMatchingPhase(form_manager(), RESULT_SAVED_MATCH); |
} |
@@ -2620,9 +2567,6 @@ TEST_F(PasswordFormManagerTest, FetchStatistics) { |
stats.origin_domain = observed_form()->origin.GetOrigin(); |
stats.username_value = saved_match()->username_value; |
stats.dismissal_count = 5; |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(*observed_form()), form_manager())); |
std::vector<InteractionsStats*> db_stats; |
db_stats.push_back(new InteractionsStats(stats)); |
EXPECT_CALL(*mock_store(), GetSiteStatsMock(stats.origin_domain)) |
@@ -2635,6 +2579,10 @@ TEST_F(PasswordFormManagerTest, FetchStatistics) { |
} |
#else |
TEST_F(PasswordFormManagerTest, DontFetchStatistics) { |
+ // Because |form_manager()| is currently waiting for a PasswordStore response, |
+ // the response needs to be faked in order to be able to re-request another |
+ // one below. |
+ form_manager()->OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
EXPECT_CALL( |
*mock_store(), |
GetLogins(PasswordStore::FormDigest(*observed_form()), form_manager())); |
@@ -2859,7 +2807,6 @@ TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) { |
form_manager.SaveGenerationFieldDetectedByClassifier(base::string16()); |
ScopedVector<PasswordForm> result; |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
autofill::FormStructure form_structure(submitted_form.form_data); |
@@ -2890,7 +2837,6 @@ TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) { |
password_manager(), client(), client()->driver(), form, |
base::WrapUnique(new NiceMock<MockFormSaver>())); |
ScopedVector<PasswordForm> result; |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
form_manager.OnGetPasswordStoreResults(std::move(result)); |
DCHECK_EQ(3U, form.form_data.fields.size()); |
@@ -2959,12 +2905,6 @@ TEST_F(PasswordFormManagerTest, FederatedCredentialsFiltered) { |
federated.federation_origin = |
url::Origin(GURL("https://accounts.google.com")); |
- EXPECT_CALL( |
- *mock_store(), |
- GetLogins(PasswordStore::FormDigest(form_manager()->observed_form()), |
- form_manager())); |
- form_manager()->FetchDataFromPasswordStore(); |
- |
ScopedVector<PasswordForm> results; |
results.push_back(new PasswordForm(federated)); |
results.push_back(new PasswordForm(*saved_match())); |
@@ -2991,7 +2931,6 @@ TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) { |
form_to_save.password_value = saved_match()->password_value; |
form_to_save.does_look_like_signup_form = true; |
- form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
ScopedVector<PasswordForm> result; |
form_manager.OnGetPasswordStoreResults(std::move(result)); |