OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
6 #include "chrome/browser/password_manager/chrome_password_manager_client.h" | 6 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
9 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" | 9 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
10 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 | 115 |
116 content::WebContents* SetupTabWithTestController(Browser* browser); | 116 content::WebContents* SetupTabWithTestController(Browser* browser); |
117 | 117 |
118 TestManagePasswordsUIController* controller() const { return controller_; } | 118 TestManagePasswordsUIController* controller() const { return controller_; } |
119 | 119 |
120 ChromePasswordManagerClient* client() const { | 120 ChromePasswordManagerClient* client() const { |
121 return ChromePasswordManagerClient::FromWebContents( | 121 return ChromePasswordManagerClient::FromWebContents( |
122 browser()->tab_strip_model()->GetActiveWebContents()); | 122 browser()->tab_strip_model()->GetActiveWebContents()); |
123 } | 123 } |
124 | 124 |
125 MOCK_METHOD1(OnChooseCredential, | 125 MOCK_METHOD1(OnChooseCredential, void(const autofill::PasswordForm*)); |
126 void(const password_manager::CredentialInfo&)); | |
127 | 126 |
128 private: | 127 private: |
129 TestManagePasswordsUIController* controller_; | 128 TestManagePasswordsUIController* controller_; |
130 }; | 129 }; |
131 | 130 |
132 void PasswordDialogViewTest::SetUpOnMainThread() { | 131 void PasswordDialogViewTest::SetUpOnMainThread() { |
133 SetupTabWithTestController(browser()); | 132 SetupTabWithTestController(browser()); |
134 } | 133 } |
135 | 134 |
136 void PasswordDialogViewTest::SetupChooseCredentials( | 135 void PasswordDialogViewTest::SetupChooseCredentials( |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher, | 188 NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
190 base::Unretained(&url_callback))); | 189 base::Unretained(&url_callback))); |
191 factory.SetFakeResponse(icon_url, std::string(), net::HTTP_OK, | 190 factory.SetFakeResponse(icon_url, std::string(), net::HTTP_OK, |
192 net::URLRequestStatus::FAILED); | 191 net::URLRequestStatus::FAILED); |
193 EXPECT_CALL(url_callback, OnRequestDone(icon_url)); | 192 EXPECT_CALL(url_callback, OnRequestDone(icon_url)); |
194 | 193 |
195 SetupChooseCredentials(std::move(local_credentials), | 194 SetupChooseCredentials(std::move(local_credentials), |
196 ScopedVector<autofill::PasswordForm>(), origin); | 195 ScopedVector<autofill::PasswordForm>(), origin); |
197 ASSERT_TRUE(controller()->current_account_chooser()); | 196 ASSERT_TRUE(controller()->current_account_chooser()); |
198 AccountChooserDialogView* dialog = controller()->current_account_chooser(); | 197 AccountChooserDialogView* dialog = controller()->current_account_chooser(); |
199 EXPECT_CALL(*this, | 198 EXPECT_CALL(*this, OnChooseCredential(nullptr)); |
200 OnChooseCredential(Field( | |
201 &password_manager::CredentialInfo::type, | |
202 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY))); | |
203 EXPECT_CALL(*controller(), OnDialogClosed()); | 199 EXPECT_CALL(*controller(), OnDialogClosed()); |
204 dialog->GetWidget()->Close(); | 200 dialog->GetWidget()->Close(); |
205 | 201 |
206 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 202 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
207 } | 203 } |
208 | 204 |
209 IN_PROC_BROWSER_TEST_F( | 205 IN_PROC_BROWSER_TEST_F( |
210 PasswordDialogViewTest, | 206 PasswordDialogViewTest, |
211 PopupAccountChooserWithMultipleCredentialsReturnNonEmpty) { | 207 PopupAccountChooserWithMultipleCredentialsReturnNonEmpty) { |
212 GURL origin("https://example.com"); | 208 GURL origin("https://example.com"); |
(...skipping 10 matching lines...) Expand all Loading... |
223 form.federation_origin = url::Origin(GURL("https://google.com/federation")); | 219 form.federation_origin = url::Origin(GURL("https://google.com/federation")); |
224 local_credentials.push_back(new autofill::PasswordForm(form)); | 220 local_credentials.push_back(new autofill::PasswordForm(form)); |
225 | 221 |
226 SetupChooseCredentials(std::move(local_credentials), | 222 SetupChooseCredentials(std::move(local_credentials), |
227 ScopedVector<autofill::PasswordForm>(), origin); | 223 ScopedVector<autofill::PasswordForm>(), origin); |
228 ASSERT_TRUE(controller()->current_account_chooser()); | 224 ASSERT_TRUE(controller()->current_account_chooser()); |
229 | 225 |
230 // After picking a credential, we should pass it back to the caller via the | 226 // After picking a credential, we should pass it back to the caller via the |
231 // callback, but we should not pop up the autosignin prompt as there were | 227 // callback, but we should not pop up the autosignin prompt as there were |
232 // multiple credentials available. | 228 // multiple credentials available. |
233 EXPECT_CALL( | 229 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
234 *this, OnChooseCredential(Field( | |
235 &password_manager::CredentialInfo::type, | |
236 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED))); | |
237 EXPECT_TRUE( | 230 EXPECT_TRUE( |
238 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 231 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
239 browser()->profile()->GetPrefs())); | 232 browser()->profile()->GetPrefs())); |
240 controller()->ChooseCredential( | 233 controller()->ChooseCredential( |
241 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 234 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
242 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 235 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
243 } | 236 } |
244 | 237 |
245 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 238 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
246 PopupAccountChooserWithSingleCredentialReturnEmpty) { | 239 PopupAccountChooserWithSingleCredentialReturnEmpty) { |
247 GURL origin("https://example.com"); | 240 GURL origin("https://example.com"); |
248 ScopedVector<autofill::PasswordForm> local_credentials; | 241 ScopedVector<autofill::PasswordForm> local_credentials; |
249 autofill::PasswordForm form; | 242 autofill::PasswordForm form; |
250 form.origin = origin; | 243 form.origin = origin; |
251 form.display_name = base::ASCIIToUTF16("Peter"); | 244 form.display_name = base::ASCIIToUTF16("Peter"); |
252 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 245 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
253 local_credentials.push_back(new autofill::PasswordForm(form)); | 246 local_credentials.push_back(new autofill::PasswordForm(form)); |
254 | 247 |
255 SetupChooseCredentials(std::move(local_credentials), | 248 SetupChooseCredentials(std::move(local_credentials), |
256 ScopedVector<autofill::PasswordForm>(), origin); | 249 ScopedVector<autofill::PasswordForm>(), origin); |
257 | 250 |
258 EXPECT_TRUE(controller()->current_account_chooser()); | 251 EXPECT_TRUE(controller()->current_account_chooser()); |
259 AccountChooserDialogView* dialog = controller()->current_account_chooser(); | 252 AccountChooserDialogView* dialog = controller()->current_account_chooser(); |
260 EXPECT_CALL(*this, | 253 EXPECT_CALL(*this, OnChooseCredential(nullptr)); |
261 OnChooseCredential(Field( | |
262 &password_manager::CredentialInfo::type, | |
263 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY))); | |
264 EXPECT_CALL(*controller(), OnDialogClosed()); | 254 EXPECT_CALL(*controller(), OnDialogClosed()); |
265 dialog->GetWidget()->Close(); | 255 dialog->GetWidget()->Close(); |
266 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 256 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
267 } | 257 } |
268 | 258 |
269 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 259 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
270 PopupAccountChooserWithSingleCredentialReturnNonEmpty) { | 260 PopupAccountChooserWithSingleCredentialReturnNonEmpty) { |
271 GURL origin("https://example.com"); | 261 GURL origin("https://example.com"); |
272 ScopedVector<autofill::PasswordForm> local_credentials; | 262 ScopedVector<autofill::PasswordForm> local_credentials; |
273 autofill::PasswordForm form; | 263 autofill::PasswordForm form; |
274 form.origin = origin; | 264 form.origin = origin; |
275 form.display_name = base::ASCIIToUTF16("Peter"); | 265 form.display_name = base::ASCIIToUTF16("Peter"); |
276 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 266 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
277 local_credentials.push_back(new autofill::PasswordForm(form)); | 267 local_credentials.push_back(new autofill::PasswordForm(form)); |
278 | 268 |
279 SetupChooseCredentials(std::move(local_credentials), | 269 SetupChooseCredentials(std::move(local_credentials), |
280 ScopedVector<autofill::PasswordForm>(), origin); | 270 ScopedVector<autofill::PasswordForm>(), origin); |
281 | 271 |
282 EXPECT_TRUE(controller()->current_account_chooser()); | 272 EXPECT_TRUE(controller()->current_account_chooser()); |
283 | 273 |
284 // After picking a credential, we should pass it back to the caller via the | 274 // After picking a credential, we should pass it back to the caller via the |
285 // callback, and pop up the autosignin prompt iff we should show it. | 275 // callback, and pop up the autosignin prompt iff we should show it. |
286 EXPECT_CALL(*this, | 276 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
287 OnChooseCredential(Field( | |
288 &password_manager::CredentialInfo::type, | |
289 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
290 EXPECT_TRUE( | 277 EXPECT_TRUE( |
291 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 278 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
292 browser()->profile()->GetPrefs())); | 279 browser()->profile()->GetPrefs())); |
293 controller()->ChooseCredential( | 280 controller()->ChooseCredential( |
294 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 281 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
295 | 282 |
296 EXPECT_TRUE(controller()->current_autosignin_prompt()); | 283 EXPECT_TRUE(controller()->current_autosignin_prompt()); |
297 } | 284 } |
298 | 285 |
299 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 286 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
300 PopupAccountChooserWithDisabledAutoSignin) { | 287 PopupAccountChooserWithDisabledAutoSignin) { |
301 EXPECT_TRUE( | 288 EXPECT_TRUE( |
302 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 289 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
303 browser()->profile()->GetPrefs())); | 290 browser()->profile()->GetPrefs())); |
304 GURL origin("https://example.com"); | 291 GURL origin("https://example.com"); |
305 ScopedVector<autofill::PasswordForm> local_credentials; | 292 ScopedVector<autofill::PasswordForm> local_credentials; |
306 autofill::PasswordForm form; | 293 autofill::PasswordForm form; |
307 form.origin = origin; | 294 form.origin = origin; |
308 form.display_name = base::ASCIIToUTF16("Peter"); | 295 form.display_name = base::ASCIIToUTF16("Peter"); |
309 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 296 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
310 local_credentials.push_back(new autofill::PasswordForm(form)); | 297 local_credentials.push_back(new autofill::PasswordForm(form)); |
311 | 298 |
312 SetupChooseCredentials(std::move(local_credentials), | 299 SetupChooseCredentials(std::move(local_credentials), |
313 ScopedVector<autofill::PasswordForm>(), origin); | 300 ScopedVector<autofill::PasswordForm>(), origin); |
314 | 301 |
315 EXPECT_TRUE(controller()->current_account_chooser()); | 302 EXPECT_TRUE(controller()->current_account_chooser()); |
316 | 303 |
317 // After picking a credential, we should pass it back to the caller via the | 304 // After picking a credential, we should pass it back to the caller via the |
318 // callback, and pop up the autosignin prompt iff we should show it. | 305 // callback, and pop up the autosignin prompt iff we should show it. |
319 EXPECT_CALL(*this, | 306 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
320 OnChooseCredential(Field( | |
321 &password_manager::CredentialInfo::type, | |
322 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
323 browser()->profile()->GetPrefs()->SetBoolean( | 307 browser()->profile()->GetPrefs()->SetBoolean( |
324 password_manager::prefs::kCredentialsEnableAutosignin, false); | 308 password_manager::prefs::kCredentialsEnableAutosignin, false); |
325 controller()->ChooseCredential( | 309 controller()->ChooseCredential( |
326 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 310 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
327 | 311 |
328 // The first run experience isn't shown because the setting is off. | 312 // The first run experience isn't shown because the setting is off. |
329 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 313 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
330 } | 314 } |
331 | 315 |
332 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 316 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
(...skipping 17 matching lines...) Expand all Loading... |
350 ChromePasswordManagerClient* client = | 334 ChromePasswordManagerClient* client = |
351 ChromePasswordManagerClient::FromWebContents(tab); | 335 ChromePasswordManagerClient::FromWebContents(tab); |
352 client->PromptUserToChooseCredentials( | 336 client->PromptUserToChooseCredentials( |
353 std::move(local_credentials), ScopedVector<autofill::PasswordForm>(), | 337 std::move(local_credentials), ScopedVector<autofill::PasswordForm>(), |
354 origin, | 338 origin, |
355 base::Bind(&PasswordDialogViewTest::OnChooseCredential, this)); | 339 base::Bind(&PasswordDialogViewTest::OnChooseCredential, this)); |
356 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 340 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
357 controller()->GetState()); | 341 controller()->GetState()); |
358 EXPECT_TRUE(controller()->current_account_chooser()); | 342 EXPECT_TRUE(controller()->current_account_chooser()); |
359 | 343 |
360 EXPECT_CALL(*this, | 344 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
361 OnChooseCredential(Field( | |
362 &password_manager::CredentialInfo::type, | |
363 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
364 controller()->ChooseCredential( | 345 controller()->ChooseCredential( |
365 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 346 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
366 | 347 |
367 // The first run experience isn't shown because of Incognito. | 348 // The first run experience isn't shown because of Incognito. |
368 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 349 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
369 } | 350 } |
370 | 351 |
371 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) { | 352 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) { |
372 EXPECT_TRUE( | 353 EXPECT_TRUE( |
373 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 354 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 password_manager::prefs::kCredentialsEnableAutosignin, true); | 409 password_manager::prefs::kCredentialsEnableAutosignin, true); |
429 | 410 |
430 // Successful login with the same form after block will prompt: | 411 // Successful login with the same form after block will prompt: |
431 blocked_form.reset(new autofill::PasswordForm(form)); | 412 blocked_form.reset(new autofill::PasswordForm(form)); |
432 client()->NotifyUserCouldBeAutoSignedIn(std::move(blocked_form)); | 413 client()->NotifyUserCouldBeAutoSignedIn(std::move(blocked_form)); |
433 client()->NotifySuccessfulLoginWithExistingPassword(form); | 414 client()->NotifySuccessfulLoginWithExistingPassword(form); |
434 ASSERT_TRUE(controller()->current_autosignin_prompt()); | 415 ASSERT_TRUE(controller()->current_autosignin_prompt()); |
435 } | 416 } |
436 | 417 |
437 } // namespace | 418 } // namespace |
OLD | NEW |