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

Side by Side Diff: chrome/browser/password_manager/password_manager_unittest.cc

Issue 106053008: [Mac] Passwords: Don't always prompt to access passwords saved by other browsers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix yet another compile failure. Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <vector> 5 #include <vector>
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/password_manager/mock_password_store.h" 10 #include "chrome/browser/password_manager/mock_password_store.h"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 form.password_element == arg.password_element && 193 form.password_element == arg.password_element &&
194 form.password_autocomplete_set == 194 form.password_autocomplete_set ==
195 arg.password_autocomplete_set && 195 arg.password_autocomplete_set &&
196 form.submit_element == arg.submit_element; 196 form.submit_element == arg.submit_element;
197 } 197 }
198 198
199 TEST_F(PasswordManagerTest, FormSubmitEmptyStore) { 199 TEST_F(PasswordManagerTest, FormSubmitEmptyStore) {
200 // Test that observing a newly submitted form shows the save password bar. 200 // Test that observing a newly submitted form shows the save password bar.
201 std::vector<PasswordForm*> result; // Empty password store. 201 std::vector<PasswordForm*> result; // Empty password store.
202 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 202 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
203 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 203 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
204 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 204 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
205 std::vector<PasswordForm> observed; 205 std::vector<PasswordForm> observed;
206 PasswordForm form(MakeSimpleForm()); 206 PasswordForm form(MakeSimpleForm());
207 observed.push_back(form); 207 observed.push_back(form);
208 manager()->OnPasswordFormsParsed(observed); // The initial load. 208 manager()->OnPasswordFormsParsed(observed); // The initial load.
209 manager()->OnPasswordFormsRendered(observed); // The initial layout. 209 manager()->OnPasswordFormsRendered(observed); // The initial layout.
210 210
211 // And the form submit contract is to call ProvisionallySavePassword. 211 // And the form submit contract is to call ProvisionallySavePassword.
212 manager()->ProvisionallySavePassword(form); 212 manager()->ProvisionallySavePassword(form);
213 213
214 scoped_ptr<PasswordFormManager> form_to_save; 214 scoped_ptr<PasswordFormManager> form_to_save;
(...skipping 10 matching lines...) Expand all
225 225
226 // Simulate saving the form, as if the info bar was accepted. 226 // Simulate saving the form, as if the info bar was accepted.
227 form_to_save->Save(); 227 form_to_save->Save();
228 } 228 }
229 229
230 TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) { 230 TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) {
231 // This test is the same FormSubmitEmptyStore, except that it simulates the 231 // This test is the same FormSubmitEmptyStore, except that it simulates the
232 // user generating the password through the browser. 232 // user generating the password through the browser.
233 std::vector<PasswordForm*> result; // Empty password store. 233 std::vector<PasswordForm*> result; // Empty password store.
234 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 234 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
235 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 235 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
236 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 236 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
237 std::vector<PasswordForm> observed; 237 std::vector<PasswordForm> observed;
238 PasswordForm form(MakeSimpleForm()); 238 PasswordForm form(MakeSimpleForm());
239 observed.push_back(form); 239 observed.push_back(form);
240 manager()->OnPasswordFormsParsed(observed); // The initial load. 240 manager()->OnPasswordFormsParsed(observed); // The initial load.
241 manager()->OnPasswordFormsRendered(observed); // The initial layout. 241 manager()->OnPasswordFormsRendered(observed); // The initial layout.
242 242
243 // Simulate the user generating the password and submitting the form. 243 // Simulate the user generating the password and submitting the form.
244 manager()->SetFormHasGeneratedPassword(form); 244 manager()->SetFormHasGeneratedPassword(form);
245 manager()->ProvisionallySavePassword(form); 245 manager()->ProvisionallySavePassword(form);
246 246
(...skipping 12 matching lines...) Expand all
259 259
260 TEST_F(PasswordManagerTest, FormSubmitNoGoodMatch) { 260 TEST_F(PasswordManagerTest, FormSubmitNoGoodMatch) {
261 // Same as above, except with an existing form for the same signon realm, 261 // Same as above, except with an existing form for the same signon realm,
262 // but different origin. Detailed cases like this are covered by 262 // but different origin. Detailed cases like this are covered by
263 // PasswordFormManagerTest. 263 // PasswordFormManagerTest.
264 std::vector<PasswordForm*> result; 264 std::vector<PasswordForm*> result;
265 PasswordForm* existing_different = new PasswordForm(MakeSimpleForm()); 265 PasswordForm* existing_different = new PasswordForm(MakeSimpleForm());
266 existing_different->username_value = ASCIIToUTF16("google2"); 266 existing_different->username_value = ASCIIToUTF16("google2");
267 result.push_back(existing_different); 267 result.push_back(existing_different);
268 EXPECT_CALL(delegate_, FillPasswordForm(_)); 268 EXPECT_CALL(delegate_, FillPasswordForm(_));
269 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 269 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
270 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 270 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
271 271
272 std::vector<PasswordForm> observed; 272 std::vector<PasswordForm> observed;
273 PasswordForm form(MakeSimpleForm()); 273 PasswordForm form(MakeSimpleForm());
274 observed.push_back(form); 274 observed.push_back(form);
275 manager()->OnPasswordFormsParsed(observed); // The initial load. 275 manager()->OnPasswordFormsParsed(observed); // The initial load.
276 manager()->OnPasswordFormsRendered(observed); // The initial layout. 276 manager()->OnPasswordFormsRendered(observed); // The initial layout.
277 manager()->ProvisionallySavePassword(form); 277 manager()->ProvisionallySavePassword(form);
278 278
279 // We still expect an add, since we didn't have a good match. 279 // We still expect an add, since we didn't have a good match.
280 scoped_ptr<PasswordFormManager> form_to_save; 280 scoped_ptr<PasswordFormManager> form_to_save;
281 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)) 281 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_))
282 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save))); 282 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
283 283
284 // Now the password manager waits for the navigation to complete. 284 // Now the password manager waits for the navigation to complete.
285 observed.clear(); 285 observed.clear();
286 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 286 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
287 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 287 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
288 288
289 ASSERT_TRUE(form_to_save.get()); 289 ASSERT_TRUE(form_to_save.get());
290 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))); 290 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
291 291
292 // Simulate saving the form. 292 // Simulate saving the form.
293 form_to_save->Save(); 293 form_to_save->Save();
294 } 294 }
295 295
296 TEST_F(PasswordManagerTest, FormSeenThenLeftPage) { 296 TEST_F(PasswordManagerTest, FormSeenThenLeftPage) {
297 std::vector<PasswordForm*> result; // Empty password store. 297 std::vector<PasswordForm*> result; // Empty password store.
298 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 298 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
299 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 299 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
300 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 300 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
301 std::vector<PasswordForm> observed; 301 std::vector<PasswordForm> observed;
302 PasswordForm form(MakeSimpleForm()); 302 PasswordForm form(MakeSimpleForm());
303 observed.push_back(form); 303 observed.push_back(form);
304 manager()->OnPasswordFormsParsed(observed); // The initial load. 304 manager()->OnPasswordFormsParsed(observed); // The initial load.
305 manager()->OnPasswordFormsRendered(observed); // The initial layout. 305 manager()->OnPasswordFormsRendered(observed); // The initial layout.
306 306
307 // No message from the renderer that a password was submitted. No 307 // No message from the renderer that a password was submitted. No
308 // expected calls. 308 // expected calls.
309 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)).Times(0); 309 EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)).Times(0);
310 observed.clear(); 310 observed.clear();
311 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 311 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
312 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 312 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
313 } 313 }
314 314
315 TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) { 315 TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) {
316 // Test that navigating a subframe does not prevent us from showing the save 316 // Test that navigating a subframe does not prevent us from showing the save
317 // password infobar. 317 // password infobar.
318 std::vector<PasswordForm*> result; // Empty password store. 318 std::vector<PasswordForm*> result; // Empty password store.
319 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 319 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
320 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 320 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
321 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 321 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
322 std::vector<PasswordForm> observed; 322 std::vector<PasswordForm> observed;
323 PasswordForm form(MakeSimpleForm()); 323 PasswordForm form(MakeSimpleForm());
324 observed.push_back(form); 324 observed.push_back(form);
325 manager()->OnPasswordFormsParsed(observed); // The initial load. 325 manager()->OnPasswordFormsParsed(observed); // The initial load.
326 manager()->OnPasswordFormsRendered(observed); // The initial layout. 326 manager()->OnPasswordFormsRendered(observed); // The initial layout.
327 327
328 // Simulate navigating a sub-frame. 328 // Simulate navigating a sub-frame.
329 content::LoadCommittedDetails details; 329 content::LoadCommittedDetails details;
330 content::FrameNavigateParams params; 330 content::FrameNavigateParams params;
331 manager()->DidNavigateAnyFrame(details, params); 331 manager()->DidNavigateAnyFrame(details, params);
(...skipping 14 matching lines...) Expand all
346 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))); 346 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
347 347
348 // Simulate saving the form, as if the info bar was accepted. 348 // Simulate saving the form, as if the info bar was accepted.
349 form_to_save->Save(); 349 form_to_save->Save();
350 } 350 }
351 351
352 // This test verifies a fix for http://crbug.com/236673 352 // This test verifies a fix for http://crbug.com/236673
353 TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) { 353 TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) {
354 std::vector<PasswordForm*> result; // Empty password store. 354 std::vector<PasswordForm*> result; // Empty password store.
355 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 355 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
356 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 356 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
357 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 357 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
358 PasswordForm first_form(MakeSimpleForm()); 358 PasswordForm first_form(MakeSimpleForm());
359 first_form.origin = GURL("http://www.nytimes.com/"); 359 first_form.origin = GURL("http://www.nytimes.com/");
360 first_form.action = GURL("https://myaccount.nytimes.com/auth/login"); 360 first_form.action = GURL("https://myaccount.nytimes.com/auth/login");
361 first_form.signon_realm = "http://www.nytimes.com/"; 361 first_form.signon_realm = "http://www.nytimes.com/";
362 PasswordForm second_form(MakeSimpleForm()); 362 PasswordForm second_form(MakeSimpleForm());
363 second_form.origin = GURL("https://myaccount.nytimes.com/auth/login"); 363 second_form.origin = GURL("https://myaccount.nytimes.com/auth/login");
364 second_form.action = GURL("https://myaccount.nytimes.com/auth/login"); 364 second_form.action = GURL("https://myaccount.nytimes.com/auth/login");
365 second_form.signon_realm = "https://myaccount.nytimes.com/"; 365 second_form.signon_realm = "https://myaccount.nytimes.com/";
366 366
367 // Pretend that the form is hidden on the first page. 367 // Pretend that the form is hidden on the first page.
(...skipping 30 matching lines...) Expand all
398 ASSERT_TRUE(form_to_save.get()); 398 ASSERT_TRUE(form_to_save.get());
399 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(second_form))); 399 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(second_form)));
400 400
401 // Simulate saving the form, as if the info bar was accepted. 401 // Simulate saving the form, as if the info bar was accepted.
402 form_to_save->Save(); 402 form_to_save->Save();
403 } 403 }
404 404
405 TEST_F(PasswordManagerTest, FormSubmitFailedLogin) { 405 TEST_F(PasswordManagerTest, FormSubmitFailedLogin) {
406 std::vector<PasswordForm*> result; // Empty password store. 406 std::vector<PasswordForm*> result; // Empty password store.
407 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 407 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
408 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 408 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
409 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 409 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
410 std::vector<PasswordForm> observed; 410 std::vector<PasswordForm> observed;
411 PasswordForm form(MakeSimpleForm()); 411 PasswordForm form(MakeSimpleForm());
412 observed.push_back(form); 412 observed.push_back(form);
413 manager()->OnPasswordFormsParsed(observed); // The initial load. 413 manager()->OnPasswordFormsParsed(observed); // The initial load.
414 manager()->OnPasswordFormsRendered(observed); // The initial layout. 414 manager()->OnPasswordFormsRendered(observed); // The initial layout.
415 415
416 manager()->ProvisionallySavePassword(form); 416 manager()->ProvisionallySavePassword(form);
417 417
418 // The form reappears, and is visible in the layout: 418 // The form reappears, and is visible in the layout:
419 // No expected calls to the PasswordStore... 419 // No expected calls to the PasswordStore...
420 manager()->OnPasswordFormsParsed(observed); 420 manager()->OnPasswordFormsParsed(observed);
421 manager()->OnPasswordFormsRendered(observed); 421 manager()->OnPasswordFormsRendered(observed);
422 } 422 }
423 423
424 TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) { 424 TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) {
425 // Tests fix of issue 28911: if the login form reappears on the subsequent 425 // Tests fix of issue 28911: if the login form reappears on the subsequent
426 // page, but is invisible, it shouldn't count as a failed login. 426 // page, but is invisible, it shouldn't count as a failed login.
427 std::vector<PasswordForm*> result; // Empty password store. 427 std::vector<PasswordForm*> result; // Empty password store.
428 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 428 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
429 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 429 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
430 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 430 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
431 std::vector<PasswordForm> observed; 431 std::vector<PasswordForm> observed;
432 PasswordForm form(MakeSimpleForm()); 432 PasswordForm form(MakeSimpleForm());
433 observed.push_back(form); 433 observed.push_back(form);
434 manager()->OnPasswordFormsParsed(observed); // The initial load. 434 manager()->OnPasswordFormsParsed(observed); // The initial load.
435 manager()->OnPasswordFormsRendered(observed); // The initial layout. 435 manager()->OnPasswordFormsRendered(observed); // The initial layout.
436 436
437 manager()->ProvisionallySavePassword(form); 437 manager()->ProvisionallySavePassword(form);
438 438
439 // Expect info bar to appear: 439 // Expect info bar to appear:
440 scoped_ptr<PasswordFormManager> form_to_save; 440 scoped_ptr<PasswordFormManager> form_to_save;
(...skipping 11 matching lines...) Expand all
452 // Simulate saving the form. 452 // Simulate saving the form.
453 form_to_save->Save(); 453 form_to_save->Save();
454 } 454 }
455 455
456 TEST_F(PasswordManagerTest, InitiallyInvisibleForm) { 456 TEST_F(PasswordManagerTest, InitiallyInvisibleForm) {
457 // Make sure an invisible login form still gets autofilled. 457 // Make sure an invisible login form still gets autofilled.
458 std::vector<PasswordForm*> result; 458 std::vector<PasswordForm*> result;
459 PasswordForm* existing = new PasswordForm(MakeSimpleForm()); 459 PasswordForm* existing = new PasswordForm(MakeSimpleForm());
460 result.push_back(existing); 460 result.push_back(existing);
461 EXPECT_CALL(delegate_, FillPasswordForm(_)); 461 EXPECT_CALL(delegate_, FillPasswordForm(_));
462 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 462 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
463 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 463 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
464 std::vector<PasswordForm> observed; 464 std::vector<PasswordForm> observed;
465 PasswordForm form(MakeSimpleForm()); 465 PasswordForm form(MakeSimpleForm());
466 observed.push_back(form); 466 observed.push_back(form);
467 manager()->OnPasswordFormsParsed(observed); // The initial load. 467 manager()->OnPasswordFormsParsed(observed); // The initial load.
468 observed.clear(); 468 observed.clear();
469 manager()->OnPasswordFormsRendered(observed); // The initial layout. 469 manager()->OnPasswordFormsRendered(observed); // The initial layout.
470 470
471 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 471 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
472 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 472 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
473 } 473 }
(...skipping 13 matching lines...) Expand all
487 TEST_F(PasswordManagerTest, FillPasswordsOnDisabledManager) { 487 TEST_F(PasswordManagerTest, FillPasswordsOnDisabledManager) {
488 // Test fix for issue 158296: Passwords must be filled even if the password 488 // Test fix for issue 158296: Passwords must be filled even if the password
489 // manager is disabled. 489 // manager is disabled.
490 std::vector<PasswordForm*> result; 490 std::vector<PasswordForm*> result;
491 PasswordForm* existing = new PasswordForm(MakeSimpleForm()); 491 PasswordForm* existing = new PasswordForm(MakeSimpleForm());
492 result.push_back(existing); 492 result.push_back(existing);
493 TestingPrefServiceSyncable* prefService = profile()->GetTestingPrefService(); 493 TestingPrefServiceSyncable* prefService = profile()->GetTestingPrefService();
494 prefService->SetUserPref(prefs::kPasswordManagerEnabled, 494 prefService->SetUserPref(prefs::kPasswordManagerEnabled,
495 Value::CreateBooleanValue(false)); 495 Value::CreateBooleanValue(false));
496 EXPECT_CALL(delegate_, FillPasswordForm(_)); 496 EXPECT_CALL(delegate_, FillPasswordForm(_));
497 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 497 EXPECT_CALL(*store_.get(),
498 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 498 GetLogins(_, testing::Eq(PasswordStore::DISALLOW_PROMPT), _))
499 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
499 std::vector<PasswordForm> observed; 500 std::vector<PasswordForm> observed;
500 PasswordForm form(MakeSimpleForm()); 501 PasswordForm form(MakeSimpleForm());
501 observed.push_back(form); 502 observed.push_back(form);
502 manager()->OnPasswordFormsParsed(observed); 503 manager()->OnPasswordFormsParsed(observed);
503 } 504 }
504 505
505 TEST_F(PasswordManagerTest, FormNotSavedAutocompleteOff) { 506 TEST_F(PasswordManagerTest, FormNotSavedAutocompleteOff) {
506 // Test password form with non-generated password will not be saved if 507 // Test password form with non-generated password will not be saved if
507 // autocomplete=off. 508 // autocomplete=off.
508 std::vector<PasswordForm*> result; // Empty password store. 509 std::vector<PasswordForm*> result; // Empty password store.
509 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 510 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
510 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 511 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
511 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 512 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
512 std::vector<PasswordForm> observed; 513 std::vector<PasswordForm> observed;
513 PasswordForm form(MakeSimpleForm()); 514 PasswordForm form(MakeSimpleForm());
514 form.password_autocomplete_set = false; 515 form.password_autocomplete_set = false;
515 observed.push_back(form); 516 observed.push_back(form);
516 manager()->OnPasswordFormsParsed(observed); // The initial load. 517 manager()->OnPasswordFormsParsed(observed); // The initial load.
517 manager()->OnPasswordFormsRendered(observed); // The initial layout. 518 manager()->OnPasswordFormsRendered(observed); // The initial layout.
518 519
519 // And the form submit contract is to call ProvisionallySavePassword. 520 // And the form submit contract is to call ProvisionallySavePassword.
520 manager()->ProvisionallySavePassword(form); 521 manager()->ProvisionallySavePassword(form);
521 522
522 // Password form should not be saved. 523 // Password form should not be saved.
523 EXPECT_CALL(delegate_, 524 EXPECT_CALL(delegate_,
524 AddSavePasswordInfoBarIfPermitted(_)).Times(Exactly(0)); 525 AddSavePasswordInfoBarIfPermitted(_)).Times(Exactly(0));
525 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))).Times(Exactly(0)); 526 EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))).Times(Exactly(0));
526 527
527 // Now the password manager waits for the navigation to complete. 528 // Now the password manager waits for the navigation to complete.
528 observed.clear(); 529 observed.clear();
529 manager()->OnPasswordFormsParsed(observed); // The post-navigation load. 530 manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
530 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. 531 manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
531 } 532 }
532 533
533 TEST_F(PasswordManagerTest, GeneratedPasswordFormSavedAutocompleteOff) { 534 TEST_F(PasswordManagerTest, GeneratedPasswordFormSavedAutocompleteOff) {
534 // Test password form with generated password will still be saved if 535 // Test password form with generated password will still be saved if
535 // autocomplete=off. 536 // autocomplete=off.
536 std::vector<PasswordForm*> result; // Empty password store. 537 std::vector<PasswordForm*> result; // Empty password store.
537 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); 538 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
538 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 539 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
539 .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 540 .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
540 std::vector<PasswordForm> observed; 541 std::vector<PasswordForm> observed;
541 PasswordForm form(MakeSimpleForm()); 542 PasswordForm form(MakeSimpleForm());
542 form.password_autocomplete_set = false; 543 form.password_autocomplete_set = false;
543 observed.push_back(form); 544 observed.push_back(form);
544 manager()->OnPasswordFormsParsed(observed); // The initial load. 545 manager()->OnPasswordFormsParsed(observed); // The initial load.
545 manager()->OnPasswordFormsRendered(observed); // The initial layout. 546 manager()->OnPasswordFormsRendered(observed); // The initial layout.
546 547
547 // Simulate the user generating the password and submitting the form. 548 // Simulate the user generating the password and submitting the form.
548 manager()->SetFormHasGeneratedPassword(form); 549 manager()->SetFormHasGeneratedPassword(form);
549 manager()->ProvisionallySavePassword(form); 550 manager()->ProvisionallySavePassword(form);
(...skipping 18 matching lines...) Expand all
568 EXPECT_TRUE(FormsAreEqual(form, submitted_form_)); 569 EXPECT_TRUE(FormsAreEqual(form, submitted_form_));
569 } 570 }
570 571
571 TEST_F(PasswordManagerTest, PasswordFormReappearance) { 572 TEST_F(PasswordManagerTest, PasswordFormReappearance) {
572 // Test the heuristic to know if a password form reappears. 573 // Test the heuristic to know if a password form reappears.
573 // We assume that if we send our credentials and there 574 // We assume that if we send our credentials and there
574 // is at least one visible password form in the next page that 575 // is at least one visible password form in the next page that
575 // means that our previous login attempt failed. 576 // means that our previous login attempt failed.
576 std::vector<PasswordForm*> result; // Empty password store. 577 std::vector<PasswordForm*> result; // Empty password store.
577 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(0); 578 EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(0);
578 EXPECT_CALL(*store_.get(), GetLogins(_, _)) 579 EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
579 .WillRepeatedly(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1))); 580 .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return(1)));
580 std::vector<PasswordForm> observed; 581 std::vector<PasswordForm> observed;
581 PasswordForm login_form(MakeTwitterLoginForm()); 582 PasswordForm login_form(MakeTwitterLoginForm());
582 observed.push_back(login_form); 583 observed.push_back(login_form);
583 manager()->OnPasswordFormsParsed(observed); // The initial load. 584 manager()->OnPasswordFormsParsed(observed); // The initial load.
584 manager()->OnPasswordFormsRendered(observed); // The initial layout. 585 manager()->OnPasswordFormsRendered(observed); // The initial layout.
585 586
586 manager()->ProvisionallySavePassword(login_form); 587 manager()->ProvisionallySavePassword(login_form);
587 588
588 PasswordForm failed_login_form(MakeTwitterFailedLoginForm()); 589 PasswordForm failed_login_form(MakeTwitterFailedLoginForm());
589 observed.clear(); 590 observed.clear();
590 observed.push_back(failed_login_form); 591 observed.push_back(failed_login_form);
591 // A PasswordForm appears, and is visible in the layout: 592 // A PasswordForm appears, and is visible in the layout:
592 // No expected calls to the PasswordStore... 593 // No expected calls to the PasswordStore...
593 manager()->OnPasswordFormsParsed(observed); 594 manager()->OnPasswordFormsParsed(observed);
594 manager()->OnPasswordFormsRendered(observed); 595 manager()->OnPasswordFormsRendered(observed);
595 } 596 }
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/password_manager.cc ('k') | chrome/browser/password_manager/password_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698