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

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

Issue 825773003: PasswordStore: Use ScopedVector to express ownership of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use assignment instead of construction Created 5 years, 10 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
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 <stdarg.h> 5 #include <stdarg.h>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 PasswordForm target_form; 403 PasswordForm target_form;
404 target_form.origin = url; 404 target_form.origin = url;
405 target_form.signon_realm = url.spec(); 405 target_form.signon_realm = url.spec();
406 if (scheme != PasswordForm::SCHEME_HTML) { 406 if (scheme != PasswordForm::SCHEME_HTML) {
407 // For non-HTML forms, the realm used for authentication 407 // For non-HTML forms, the realm used for authentication
408 // (http://tools.ietf.org/html/rfc1945#section-10.2) is appended to the 408 // (http://tools.ietf.org/html/rfc1945#section-10.2) is appended to the
409 // signon_realm. Just use a default value for now. 409 // signon_realm. Just use a default value for now.
410 target_form.signon_realm.append("Realm"); 410 target_form.signon_realm.append("Realm");
411 target_form.scheme = scheme; 411 target_form.scheme = scheme;
412 } 412 }
413 std::vector<PasswordForm*> form_list; 413 ScopedVector<autofill::PasswordForm> form_list;
414 backend.GetLogins(target_form, &form_list); 414 backend.GetLogins(target_form, &form_list);
415 415
416 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 416 EXPECT_EQ(1u, global_mock_libsecret_items.size());
417 if (global_mock_libsecret_items.size() > 0) 417 if (global_mock_libsecret_items.size() > 0)
418 CheckMockSecretItem(global_mock_libsecret_items[0], credentials, 418 CheckMockSecretItem(global_mock_libsecret_items[0], credentials,
419 "chrome-321"); 419 "chrome-321");
420 ClearMockObjects(); 420 ClearMockObjects();
421 421
422 if (form_list.empty()) 422 if (form_list.empty())
423 return false; 423 return false;
424 EXPECT_EQ(1u, form_list.size()); 424 EXPECT_EQ(1u, form_list.size());
425 if (result) 425 if (result)
426 *result = *form_list[0]; 426 *result = *form_list[0];
427 STLDeleteElements(&form_list);
428 return true; 427 return true;
429 } 428 }
430 429
431 // Test that updating does not use PSL matching: Add a www.facebook.com 430 // Test that updating does not use PSL matching: Add a www.facebook.com
432 // password, then use PSL matching to get a copy of it for m.facebook.com, and 431 // password, then use PSL matching to get a copy of it for m.facebook.com, and
433 // add that copy as well. Now update the www.facebook.com password -- the 432 // add that copy as well. Now update the www.facebook.com password -- the
434 // m.facebook.com password should not get updated. Depending on the argument, 433 // m.facebook.com password should not get updated. Depending on the argument,
435 // the credential update is done via UpdateLogin or AddLogin. 434 // the credential update is done via UpdateLogin or AddLogin.
436 void CheckPSLUpdate(UpdateType update_type) { 435 void CheckPSLUpdate(UpdateType update_type) {
437 NativeBackendLibsecret backend(321); 436 NativeBackendLibsecret backend(321);
438 437
439 backend.AddLogin(form_facebook_); 438 backend.AddLogin(form_facebook_);
440 439
441 // Get the PSL-matched copy of the saved login for m.facebook. 440 // Get the PSL-matched copy of the saved login for m.facebook.
442 const GURL kMobileURL("http://m.facebook.com/"); 441 const GURL kMobileURL("http://m.facebook.com/");
443 PasswordForm m_facebook_lookup; 442 PasswordForm m_facebook_lookup;
444 m_facebook_lookup.origin = kMobileURL; 443 m_facebook_lookup.origin = kMobileURL;
445 m_facebook_lookup.signon_realm = kMobileURL.spec(); 444 m_facebook_lookup.signon_realm = kMobileURL.spec();
446 std::vector<PasswordForm*> form_list; 445 ScopedVector<autofill::PasswordForm> form_list;
447 backend.GetLogins(m_facebook_lookup, &form_list); 446 backend.GetLogins(m_facebook_lookup, &form_list);
448 447
449 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 448 EXPECT_EQ(1u, global_mock_libsecret_items.size());
450 EXPECT_EQ(1u, form_list.size()); 449 EXPECT_EQ(1u, form_list.size());
451 PasswordForm m_facebook = *form_list[0]; 450 PasswordForm m_facebook = *form_list[0];
452 STLDeleteElements(&form_list); 451 form_list.clear();
453 EXPECT_EQ(kMobileURL, m_facebook.origin); 452 EXPECT_EQ(kMobileURL, m_facebook.origin);
454 EXPECT_EQ(kMobileURL.spec(), m_facebook.signon_realm); 453 EXPECT_EQ(kMobileURL.spec(), m_facebook.signon_realm);
455 454
456 // Add the PSL-matched copy to saved logins. 455 // Add the PSL-matched copy to saved logins.
457 backend.AddLogin(m_facebook); 456 backend.AddLogin(m_facebook);
458 EXPECT_EQ(2u, global_mock_libsecret_items.size()); 457 EXPECT_EQ(2u, global_mock_libsecret_items.size());
459 458
460 // Update www.facebook.com login. 459 // Update www.facebook.com login.
461 PasswordForm new_facebook(form_facebook_); 460 PasswordForm new_facebook(form_facebook_);
462 const base::string16 kOldPassword(form_facebook_.password_value); 461 const base::string16 kOldPassword(form_facebook_.password_value);
(...skipping 16 matching lines...) Expand all
479 backend.GetLogins(m_facebook_lookup, &form_list); 478 backend.GetLogins(m_facebook_lookup, &form_list);
480 479
481 // There should be two results -- the exact one, and the PSL-matched one. 480 // There should be two results -- the exact one, and the PSL-matched one.
482 EXPECT_EQ(2u, form_list.size()); 481 EXPECT_EQ(2u, form_list.size());
483 size_t index_non_psl = 0; 482 size_t index_non_psl = 0;
484 if (!form_list[index_non_psl]->original_signon_realm.empty()) 483 if (!form_list[index_non_psl]->original_signon_realm.empty())
485 index_non_psl = 1; 484 index_non_psl = 1;
486 EXPECT_EQ(kMobileURL, form_list[index_non_psl]->origin); 485 EXPECT_EQ(kMobileURL, form_list[index_non_psl]->origin);
487 EXPECT_EQ(kMobileURL.spec(), form_list[index_non_psl]->signon_realm); 486 EXPECT_EQ(kMobileURL.spec(), form_list[index_non_psl]->signon_realm);
488 EXPECT_EQ(kOldPassword, form_list[index_non_psl]->password_value); 487 EXPECT_EQ(kOldPassword, form_list[index_non_psl]->password_value);
489 STLDeleteElements(&form_list); 488 form_list.clear();
490 489
491 // Check that www.facebook.com login was modified by the update. 490 // Check that www.facebook.com login was modified by the update.
492 backend.GetLogins(form_facebook_, &form_list); 491 backend.GetLogins(form_facebook_, &form_list);
493 // There should be two results -- the exact one, and the PSL-matched one. 492 // There should be two results -- the exact one, and the PSL-matched one.
494 EXPECT_EQ(2u, form_list.size()); 493 EXPECT_EQ(2u, form_list.size());
495 index_non_psl = 0; 494 index_non_psl = 0;
496 if (!form_list[index_non_psl]->original_signon_realm.empty()) 495 if (!form_list[index_non_psl]->original_signon_realm.empty())
497 index_non_psl = 1; 496 index_non_psl = 1;
498 EXPECT_EQ(form_facebook_.origin, form_list[index_non_psl]->origin); 497 EXPECT_EQ(form_facebook_.origin, form_list[index_non_psl]->origin);
499 EXPECT_EQ(form_facebook_.signon_realm, 498 EXPECT_EQ(form_facebook_.signon_realm,
500 form_list[index_non_psl]->signon_realm); 499 form_list[index_non_psl]->signon_realm);
501 EXPECT_EQ(kNewPassword, form_list[index_non_psl]->password_value); 500 EXPECT_EQ(kNewPassword, form_list[index_non_psl]->password_value);
502 STLDeleteElements(&form_list); 501 form_list.clear();
503 } 502 }
504 503
505 // Checks various types of matching for forms with a non-HTML |scheme|. 504 // Checks various types of matching for forms with a non-HTML |scheme|.
506 void CheckMatchingWithScheme(const PasswordForm::Scheme& scheme) { 505 void CheckMatchingWithScheme(const PasswordForm::Scheme& scheme) {
507 ASSERT_NE(PasswordForm::SCHEME_HTML, scheme); 506 ASSERT_NE(PasswordForm::SCHEME_HTML, scheme);
508 other_auth_.scheme = scheme; 507 other_auth_.scheme = scheme;
509 508
510 // Don't match a non-HTML form with an HTML form. 509 // Don't match a non-HTML form with an HTML form.
511 EXPECT_FALSE( 510 EXPECT_FALSE(
512 CheckCredentialAvailability(other_auth_, GURL("http://www.example.com"), 511 CheckCredentialAvailability(other_auth_, GURL("http://www.example.com"),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 if (global_mock_libsecret_items.size() > 0) 592 if (global_mock_libsecret_items.size() > 0)
594 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 593 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
595 "chrome-42"); 594 "chrome-42");
596 } 595 }
597 596
598 TEST_F(NativeBackendLibsecretTest, BasicListLogins) { 597 TEST_F(NativeBackendLibsecretTest, BasicListLogins) {
599 NativeBackendLibsecret backend(42); 598 NativeBackendLibsecret backend(42);
600 599
601 backend.AddLogin(form_google_); 600 backend.AddLogin(form_google_);
602 601
603 std::vector<PasswordForm*> form_list; 602 ScopedVector<autofill::PasswordForm> form_list;
604 backend.GetAutofillableLogins(&form_list); 603 backend.GetAutofillableLogins(&form_list);
605 604
606 // Quick check that we got something back. 605 // Quick check that we got something back.
607 EXPECT_EQ(1u, form_list.size()); 606 EXPECT_EQ(1u, form_list.size());
608 STLDeleteElements(&form_list); 607 form_list.clear();
609 608
610 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 609 EXPECT_EQ(1u, global_mock_libsecret_items.size());
611 if (global_mock_libsecret_items.size() > 0) 610 if (global_mock_libsecret_items.size() > 0)
612 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 611 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
613 "chrome-42"); 612 "chrome-42");
614 } 613 }
615 614
616 // Save a password for www.facebook.com and see it suggested for m.facebook.com. 615 // Save a password for www.facebook.com and see it suggested for m.facebook.com.
617 TEST_F(NativeBackendLibsecretTest, PSLMatchingPositive) { 616 TEST_F(NativeBackendLibsecretTest, PSLMatchingPositive) {
618 PasswordForm result; 617 PasswordForm result;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 723
725 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 724 EXPECT_EQ(1u, global_mock_libsecret_items.size());
726 if (global_mock_libsecret_items.size() > 0) 725 if (global_mock_libsecret_items.size() > 0)
727 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 726 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
728 "chrome-42"); 727 "chrome-42");
729 728
730 // Attempt to remove a login that doesn't exist. 729 // Attempt to remove a login that doesn't exist.
731 backend.RemoveLogin(form_isc_); 730 backend.RemoveLogin(form_isc_);
732 731
733 // Make sure we can still get the first form back. 732 // Make sure we can still get the first form back.
734 std::vector<PasswordForm*> form_list; 733 ScopedVector<autofill::PasswordForm> form_list;
735 backend.GetAutofillableLogins(&form_list); 734 backend.GetAutofillableLogins(&form_list);
736 735
737 // Quick check that we got something back. 736 // Quick check that we got something back.
738 EXPECT_EQ(1u, form_list.size()); 737 EXPECT_EQ(1u, form_list.size());
739 STLDeleteElements(&form_list); 738 form_list.clear();
740 739
741 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 740 EXPECT_EQ(1u, global_mock_libsecret_items.size());
742 if (global_mock_libsecret_items.size() > 0) 741 if (global_mock_libsecret_items.size() > 0)
743 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 742 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
744 "chrome-42"); 743 "chrome-42");
745 } 744 }
746 745
747 TEST_F(NativeBackendLibsecretTest, UpdateNonexistentLogin) { 746 TEST_F(NativeBackendLibsecretTest, UpdateNonexistentLogin) {
748 NativeBackendLibsecret backend(42); 747 NativeBackendLibsecret backend(42);
749 748
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 789 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
791 "chrome-42"); 790 "chrome-42");
792 } 791 }
793 792
794 TEST_F(NativeBackendLibsecretTest, ListLoginsAppends) { 793 TEST_F(NativeBackendLibsecretTest, ListLoginsAppends) {
795 NativeBackendLibsecret backend(42); 794 NativeBackendLibsecret backend(42);
796 795
797 backend.AddLogin(form_google_); 796 backend.AddLogin(form_google_);
798 797
799 // Send the same request twice with the same list both times. 798 // Send the same request twice with the same list both times.
800 std::vector<PasswordForm*> form_list; 799 ScopedVector<autofill::PasswordForm> form_list;
801 backend.GetAutofillableLogins(&form_list); 800 backend.GetAutofillableLogins(&form_list);
802 backend.GetAutofillableLogins(&form_list); 801 backend.GetAutofillableLogins(&form_list);
803 802
804 // Quick check that we got two results back. 803 // Quick check that we got two results back.
805 EXPECT_EQ(2u, form_list.size()); 804 EXPECT_EQ(2u, form_list.size());
806 STLDeleteElements(&form_list); 805 form_list.clear();
807 806
808 EXPECT_EQ(1u, global_mock_libsecret_items.size()); 807 EXPECT_EQ(1u, global_mock_libsecret_items.size());
809 if (global_mock_libsecret_items.size() > 0) 808 if (global_mock_libsecret_items.size() > 0)
810 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_, 809 CheckMockSecretItem(global_mock_libsecret_items[0], form_google_,
811 "chrome-42"); 810 "chrome-42");
812 } 811 }
813 812
814 TEST_F(NativeBackendLibsecretTest, RemoveLoginsCreatedBetween) { 813 TEST_F(NativeBackendLibsecretTest, RemoveLoginsCreatedBetween) {
815 CheckRemoveLoginsBetween(CREATED); 814 CheckRemoveLoginsBetween(CREATED);
816 } 815 }
817 816
818 TEST_F(NativeBackendLibsecretTest, RemoveLoginsSyncedBetween) { 817 TEST_F(NativeBackendLibsecretTest, RemoveLoginsSyncedBetween) {
819 CheckRemoveLoginsBetween(SYNCED); 818 CheckRemoveLoginsBetween(SYNCED);
820 } 819 }
821 820
822 // TODO(mdm): add more basic tests here at some point. 821 // TODO(mdm): add more basic tests here at some point.
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/native_backend_libsecret.cc ('k') | chrome/browser/password_manager/password_store_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698