Index: components/password_manager/content/browser/content_credential_manager_dispatcher_unittest.cc |
diff --git a/components/password_manager/content/browser/content_credential_manager_dispatcher_unittest.cc b/components/password_manager/content/browser/content_credential_manager_dispatcher_unittest.cc |
index 42956adc2ad4ae925252aee15b7fbddd86842d7b..8bc72d008c8eba0670a5c7762315e57484a31bfa 100644 |
--- a/components/password_manager/content/browser/content_credential_manager_dispatcher_unittest.cc |
+++ b/components/password_manager/content/browser/content_credential_manager_dispatcher_unittest.cc |
@@ -36,6 +36,7 @@ class TestPasswordManagerClient |
: did_prompt_user_to_save_(false), |
did_prompt_user_to_choose_(false), |
is_off_the_record_(false), |
+ is_zero_click_enabled_(true), |
store_(store) {} |
~TestPasswordManagerClient() override {} |
@@ -75,6 +76,7 @@ class TestPasswordManagerClient |
} |
bool IsOffTheRecord() override { return is_off_the_record_; } |
+ bool IsZeroClickEnabled() override { return is_zero_click_enabled_; } |
bool did_prompt_user_to_save() const { return did_prompt_user_to_save_; } |
bool did_prompt_user_to_choose() const { return did_prompt_user_to_choose_; } |
@@ -87,10 +89,15 @@ class TestPasswordManagerClient |
is_off_the_record_ = off_the_record; |
} |
+ void set_zero_click_enabled(bool zero_click_enabled) { |
+ is_zero_click_enabled_ = zero_click_enabled; |
+ } |
+ |
private: |
bool did_prompt_user_to_save_; |
bool did_prompt_user_to_choose_; |
bool is_off_the_record_; |
+ bool is_zero_click_enabled_; |
password_manager::PasswordStore* store_; |
scoped_ptr<password_manager::PasswordFormManager> manager_; |
}; |
@@ -154,6 +161,13 @@ class CredentialManagerDispatcherTest |
form_.signon_realm = form_.origin.spec(); |
form_.scheme = autofill::PasswordForm::SCHEME_HTML; |
+ form2_.username_value = base::ASCIIToUTF16("Username 2"); |
+ form2_.display_name = base::ASCIIToUTF16("Display Name 2"); |
+ form2_.password_value = base::ASCIIToUTF16("Password 2"); |
+ form2_.origin = web_contents()->GetLastCommittedURL().GetOrigin(); |
+ form2_.signon_realm = form_.origin.spec(); |
+ form2_.scheme = autofill::PasswordForm::SCHEME_HTML; |
+ |
cross_origin_form_.username_value = base::ASCIIToUTF16("Username"); |
cross_origin_form_.display_name = base::ASCIIToUTF16("Display Name"); |
cross_origin_form_.password_value = base::ASCIIToUTF16("Password"); |
@@ -174,6 +188,7 @@ class CredentialManagerDispatcherTest |
protected: |
autofill::PasswordForm form_; |
+ autofill::PasswordForm form2_; |
autofill::PasswordForm cross_origin_form_; |
scoped_refptr<TestPasswordStore> store_; |
scoped_ptr<CredentialManagerDispatcher> dispatcher_; |
@@ -288,6 +303,7 @@ TEST_F(CredentialManagerDispatcherTest, |
TEST_F(CredentialManagerDispatcherTest, |
CredentialManagerOnRequestCredentialWithFullPasswordStore) { |
+ client_->set_zero_click_enabled(false); |
store_->AddLogin(form_); |
std::vector<GURL> federations; |
@@ -302,8 +318,68 @@ TEST_F(CredentialManagerDispatcherTest, |
EXPECT_TRUE(client_->did_prompt_user_to_choose()); |
} |
+TEST_F( |
+ CredentialManagerDispatcherTest, |
+ CredentialManagerOnRequestCredentialWithZeroClickOnlyEmptyPasswordStore) { |
+ std::vector<GURL> federations; |
+ dispatcher()->OnRequestCredential(kRequestId, true, federations); |
+ |
+ RunAllPendingTasks(); |
+ |
+ const uint32 kMsgID = CredentialManagerMsg_SendCredential::ID; |
+ const IPC::Message* message = |
+ process()->sink().GetFirstMessageMatching(kMsgID); |
+ EXPECT_TRUE(message); |
+ EXPECT_FALSE(client_->did_prompt_user_to_choose()); |
+ CredentialManagerMsg_SendCredential::Param send_param; |
+ CredentialManagerMsg_SendCredential::Read(message, &send_param); |
+ EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(send_param).type); |
+} |
+ |
+TEST_F(CredentialManagerDispatcherTest, |
+ CredentialManagerOnRequestCredentialWithZeroClickOnlyFullPasswordStore) { |
+ store_->AddLogin(form_); |
+ |
+ std::vector<GURL> federations; |
+ dispatcher()->OnRequestCredential(kRequestId, true, federations); |
+ |
+ RunAllPendingTasks(); |
+ |
+ const uint32 kMsgID = CredentialManagerMsg_SendCredential::ID; |
+ const IPC::Message* message = |
+ process()->sink().GetFirstMessageMatching(kMsgID); |
+ EXPECT_TRUE(message); |
+ EXPECT_FALSE(client_->did_prompt_user_to_choose()); |
+ CredentialManagerMsg_SendCredential::Param send_param; |
+ CredentialManagerMsg_SendCredential::Read(message, &send_param); |
+ EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_LOCAL, get<1>(send_param).type); |
+} |
+ |
+TEST_F(CredentialManagerDispatcherTest, |
+ CredentialManagerOnRequestCredentialWithZeroClickOnlyTwoPasswordStore) { |
+ store_->AddLogin(form_); |
+ store_->AddLogin(form2_); |
+ |
+ std::vector<GURL> federations; |
+ dispatcher()->OnRequestCredential(kRequestId, true, federations); |
+ |
+ RunAllPendingTasks(); |
+ |
+ const uint32 kMsgID = CredentialManagerMsg_SendCredential::ID; |
+ const IPC::Message* message = |
+ process()->sink().GetFirstMessageMatching(kMsgID); |
+ EXPECT_TRUE(message); |
+ EXPECT_FALSE(client_->did_prompt_user_to_choose()); |
+ CredentialManagerMsg_SendCredential::Param send_param; |
+ CredentialManagerMsg_SendCredential::Read(message, &send_param); |
+ |
+ // With two items in the password store, we shouldn't get credentials back. |
+ EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(send_param).type); |
+} |
+ |
TEST_F(CredentialManagerDispatcherTest, |
CredentialManagerOnRequestCredentialWhileRequestPending) { |
+ client_->set_zero_click_enabled(false); |
store_->AddLogin(form_); |
std::vector<GURL> federations; |