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

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_state_unittest.cc

Issue 993513006: Introduce ManagePasswordsState class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 5 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/passwords/manage_passwords_state.h"
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "components/password_manager/content/common/credential_manager_types.h"
9 #include "components/password_manager/core/browser/password_form_manager.h"
10 #include "components/password_manager/core/browser/stub_password_manager_client. h"
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 using ::testing::_;
15 using ::testing::Contains;
16 using ::testing::ElementsAre;
17 using ::testing::IsEmpty;
18 using ::testing::Not;
19 using ::testing::Pointee;
20 using ::testing::UnorderedElementsAre;
21
22 namespace {
23
24 class ManagePasswordsStateTest : public testing::Test {
25 public:
26 ManagePasswordsStateTest() = default;
27
28 void SetUp() override {
29 test_local_form_.origin = GURL("http://example.com");
30 test_local_form_.username_value = base::ASCIIToUTF16("username");
31 test_local_form_.password_value = base::ASCIIToUTF16("12345");
32
33 test_submitted_form_ = test_local_form_;
34 test_submitted_form_.username_value = base::ASCIIToUTF16("new one");
35 test_submitted_form_.password_value = base::ASCIIToUTF16("asdfjkl;");
36
37 test_federated_form_.origin = GURL("https://idp.com");
38 test_federated_form_.username_value = base::ASCIIToUTF16("username");
39 }
40
41 autofill::PasswordForm& test_local_form() { return test_local_form_; }
42 autofill::PasswordForm& test_submitted_form() { return test_submitted_form_; }
43 autofill::PasswordForm& test_federated_form() { return test_federated_form_; }
44 ManagePasswordsState& passwords_data() { return passwords_data_; }
45
46 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager();
47
48 MOCK_METHOD1(OnChooseCredential,
49 void(const password_manager::CredentialInfo&));
50
51 private:
52 password_manager::StubPasswordManagerClient client_;
53
54 ManagePasswordsState passwords_data_;
55 autofill::PasswordForm test_local_form_;
56 autofill::PasswordForm test_submitted_form_;
57 autofill::PasswordForm test_federated_form_;
58
59 DISALLOW_COPY_AND_ASSIGN(ManagePasswordsStateTest);
60 };
61
62 scoped_ptr<password_manager::PasswordFormManager>
63 ManagePasswordsStateTest::CreateFormManager() {
64 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
65 new password_manager::PasswordFormManager(
66 nullptr, &client_,
67 base::WeakPtr<password_manager::PasswordManagerDriver>(),
68 test_local_form(), false));
69 test_form_manager->SimulateFetchMatchingLoginsFromPasswordStore();
70 ScopedVector<autofill::PasswordForm> stored_forms;
71 stored_forms.push_back(new autofill::PasswordForm(test_local_form()));
72 test_form_manager->OnGetPasswordStoreResults(stored_forms.Pass());
73 EXPECT_EQ(1u, test_form_manager->best_matches().size());
74 EXPECT_EQ(test_local_form(),
75 *test_form_manager->best_matches().begin()->second);
76 return test_form_manager.Pass();
77 }
78
79 TEST_F(ManagePasswordsStateTest, DefaultState) {
80 EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
81 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
82 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
83 EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
84 EXPECT_FALSE(passwords_data().form_manager());
85 }
86
87 TEST_F(ManagePasswordsStateTest, PasswordSubmitted) {
88 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
89 CreateFormManager());
90 test_form_manager->ProvisionallySave(
91 test_submitted_form(),
92 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
93 passwords_data().OnPendingPassword(test_form_manager.Pass());
94
95 EXPECT_THAT(passwords_data().GetCurrentForms(),
96 ElementsAre(Pointee(test_local_form())));
97 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
98 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
99 passwords_data().state());
100 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
101 ASSERT_TRUE(passwords_data().form_manager());
102 EXPECT_EQ(test_submitted_form(),
103 passwords_data().form_manager()->pending_credentials());
104 }
105
106 TEST_F(ManagePasswordsStateTest, PasswordSaved) {
107 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
108 CreateFormManager());
109 test_form_manager->ProvisionallySave(
110 test_submitted_form(),
111 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
112 passwords_data().OnPendingPassword(test_form_manager.Pass());
113 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
114 passwords_data().state());
115
116 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
117 EXPECT_THAT(passwords_data().GetCurrentForms(),
118 ElementsAre(Pointee(test_local_form())));
119 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
120 EXPECT_EQ(password_manager::ui::MANAGE_STATE,
121 passwords_data().state());
122 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
123 }
124
125 TEST_F(ManagePasswordsStateTest, OnRequestCredentials) {
126 ScopedVector<autofill::PasswordForm> local_credentials;
127 local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
128 ScopedVector<autofill::PasswordForm> federated_credentials;
129 federated_credentials.push_back(
130 new autofill::PasswordForm(test_federated_form()));
131 const GURL origin = test_local_form().origin;
132 passwords_data().OnRequestCredentials(local_credentials.Pass(),
133 federated_credentials.Pass(), origin);
134 passwords_data().set_credentials_callback(
135 base::Bind(&ManagePasswordsStateTest::OnChooseCredential,
136 base::Unretained(this)));
137 EXPECT_THAT(passwords_data().GetCurrentForms(),
138 ElementsAre(Pointee(test_local_form())));
139 EXPECT_THAT(passwords_data().federated_credentials_forms(),
140 ElementsAre(Pointee(test_federated_form())));
141 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
142 passwords_data().state());
143 EXPECT_EQ(origin, passwords_data().origin());
144
145 password_manager::CredentialInfo credential_info(
146 test_local_form(),
147 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL);
148 EXPECT_CALL(*this, OnChooseCredential(_))
149 .WillOnce(testing::SaveArg<0>(&credential_info));
150 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
151 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY,
152 credential_info.type);
153 EXPECT_TRUE(passwords_data().credentials_callback().is_null());
154 EXPECT_THAT(passwords_data().GetCurrentForms(),
155 ElementsAre(Pointee(test_local_form())));
156 EXPECT_THAT(passwords_data().federated_credentials_forms(),
157 ElementsAre(Pointee(test_federated_form())));
158 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
159 EXPECT_EQ(origin, passwords_data().origin());
160 }
161
162 TEST_F(ManagePasswordsStateTest, AutoSignin) {
163 ScopedVector<autofill::PasswordForm> local_credentials;
164 local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
165 passwords_data().OnAutoSignin(local_credentials.Pass());
166 EXPECT_THAT(passwords_data().GetCurrentForms(),
167 ElementsAre(Pointee(test_local_form())));
168 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
169 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, passwords_data().state());
170 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
171
172 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
173 EXPECT_THAT(passwords_data().GetCurrentForms(),
174 ElementsAre(Pointee(test_local_form())));
175 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
176 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
177 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
178 }
179
180 TEST_F(ManagePasswordsStateTest, AutomaticPasswordSave) {
181 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
182 CreateFormManager());
183 test_form_manager->ProvisionallySave(
184 test_submitted_form(),
185 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
186
187 passwords_data().OnAutomaticPasswordSave(test_form_manager.Pass());
188 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, passwords_data().state());
189 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
190 ASSERT_TRUE(passwords_data().form_manager());
191 EXPECT_EQ(test_submitted_form(),
192 passwords_data().form_manager()->pending_credentials());
193
194 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
195 EXPECT_THAT(passwords_data().GetCurrentForms(),
196 UnorderedElementsAre(Pointee(test_local_form()),
197 Pointee(test_submitted_form())));
198 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
199 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
200 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
201 }
202
203 TEST_F(ManagePasswordsStateTest, PasswordBlacklisted) {
204 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
205 CreateFormManager());
206 test_form_manager->ProvisionallySave(
207 test_submitted_form(),
208 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
209 passwords_data().OnPendingPassword(test_form_manager.Pass());
210 passwords_data().TransitionToState(password_manager::ui::BLACKLIST_STATE);
211 EXPECT_THAT(passwords_data().GetCurrentForms(),
212 ElementsAre(Pointee(test_local_form())));
213 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
214 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
215 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
216 }
217
218 TEST_F(ManagePasswordsStateTest, PasswordAutofilled) {
219 autofill::PasswordFormMap password_form_map;
220 password_form_map[test_local_form().username_value] = &test_local_form();
221 passwords_data().OnPasswordAutofilled(password_form_map);
222
223 EXPECT_THAT(passwords_data().GetCurrentForms(),
224 ElementsAre(Pointee(test_local_form())));
225 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
226 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
227 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
228
229 // |passwords_data| should hold a separate copy of test_local_form().
230 EXPECT_THAT(passwords_data().GetCurrentForms(),
231 Not(Contains(&test_local_form())));
232 }
233
234 TEST_F(ManagePasswordsStateTest, InactiveOnPSLMatched) {
235 autofill::PasswordForm psl_matched_test_form = test_local_form();
236 psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com";
237 autofill::PasswordFormMap password_form_map;
238 password_form_map[psl_matched_test_form.username_value] =
239 &psl_matched_test_form;
240 passwords_data().OnPasswordAutofilled(password_form_map);
241
242 EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
243 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
244 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
245 EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
246 EXPECT_FALSE(passwords_data().form_manager());
247 }
248
249 TEST_F(ManagePasswordsStateTest, BlacklistBlockedAutofill) {
250 test_local_form().blacklisted_by_user = true;
251 autofill::PasswordFormMap password_form_map;
252 password_form_map[test_local_form().username_value] = &test_local_form();
253 passwords_data().OnBlacklistBlockedAutofill(password_form_map);
254
255 EXPECT_THAT(passwords_data().GetCurrentForms(),
256 ElementsAre(Pointee(test_local_form())));
257 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
258 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
259 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
260
261 // |passwords_data| should hold a separate copy of test_local_form().
262 EXPECT_THAT(passwords_data().GetCurrentForms(),
263 Not(Contains(&test_local_form())));
264 }
265
266 TEST_F(ManagePasswordsStateTest, Unblacklist) {
267 autofill::PasswordFormMap password_form_map;
268 password_form_map[test_local_form().username_value] = &test_local_form();
269 passwords_data().OnBlacklistBlockedAutofill(password_form_map);
270 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
271 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
272
273 EXPECT_THAT(passwords_data().GetCurrentForms(),
274 ElementsAre(Pointee(test_local_form())));
275 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
276 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
277 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
278 }
279
280 TEST_F(ManagePasswordsStateTest, OnInactive) {
281 scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
282 CreateFormManager());
283 test_form_manager->ProvisionallySave(
284 test_submitted_form(),
285 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
286 passwords_data().OnPendingPassword(test_form_manager.Pass());
287 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
288 passwords_data().state());
289 passwords_data().OnInactive();
290 EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
291 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
292 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
293 EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
294 EXPECT_FALSE(passwords_data().form_manager());
295 }
296
297 TEST_F(ManagePasswordsStateTest, BackgroundAutofilledToBlacklisted) {
298 autofill::PasswordFormMap password_form_map;
299 password_form_map[test_local_form().username_value] = &test_local_form();
300 passwords_data().OnPasswordAutofilled(password_form_map);
301 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
302
303 autofill::PasswordForm blacklisted = test_local_form();
304 blacklisted.blacklisted_by_user = true;
305 blacklisted.username_value = base::string16();
vabr (Chromium) 2015/03/10 12:26:22 optional nit: Calling clear() is shorter and might
306 password_manager::PasswordStoreChange change(
307 password_manager::PasswordStoreChange::ADD, blacklisted);
308 password_manager::PasswordStoreChangeList list(1, change);
309 passwords_data().ProcessLoginsChanged(list);
310 EXPECT_THAT(passwords_data().GetCurrentForms(),
311 UnorderedElementsAre(Pointee(test_local_form()),
312 Pointee(blacklisted)));
313 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
314 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
315 EXPECT_EQ(test_local_form().origin, passwords_data().origin());
316 }
317
318 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698