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

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

Issue 906973007: PasswordStore: Clean up expectations about rewriting vectors of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Just rebased 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
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 "chrome/browser/password_manager/password_store_mac.h" 5 #include "chrome/browser/password_manager/password_store_mac.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/scoped_observer.h" 9 #include "base/scoped_observer.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 owned_keychain_adapter.SetFindsOnlyOwnedItems(true); 484 owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
485 for (unsigned int i = 0; i < arraysize(test_data); ++i) { 485 for (unsigned int i = 0; i < arraysize(test_data); ++i) {
486 scoped_ptr<PasswordForm> query_form = 486 scoped_ptr<PasswordForm> query_form =
487 CreatePasswordFormFromDataForTesting(test_data[i].data); 487 CreatePasswordFormFromDataForTesting(test_data[i].data);
488 488
489 // Check matches treating the form as a fill target. 489 // Check matches treating the form as a fill target.
490 ScopedVector<autofill::PasswordForm> matching_items = 490 ScopedVector<autofill::PasswordForm> matching_items =
491 keychain_adapter.PasswordsFillingForm(query_form->signon_realm, 491 keychain_adapter.PasswordsFillingForm(query_form->signon_realm,
492 query_form->scheme); 492 query_form->scheme);
493 EXPECT_EQ(test_data[i].expected_fill_matches, matching_items.size()); 493 EXPECT_EQ(test_data[i].expected_fill_matches, matching_items.size());
494 matching_items.clear();
495 494
496 // Check matches treating the form as a merging target. 495 // Check matches treating the form as a merging target.
497 EXPECT_EQ(test_data[i].expected_merge_matches > 0, 496 EXPECT_EQ(test_data[i].expected_merge_matches > 0,
498 keychain_adapter.HasPasswordsMergeableWithForm(*query_form)); 497 keychain_adapter.HasPasswordsMergeableWithForm(*query_form));
499 std::vector<SecKeychainItemRef> keychain_items; 498 std::vector<SecKeychainItemRef> keychain_items;
500 std::vector<internal_keychain_helpers::ItemFormPair> item_form_pairs = 499 std::vector<internal_keychain_helpers::ItemFormPair> item_form_pairs =
501 internal_keychain_helpers:: 500 internal_keychain_helpers::
502 ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items, 501 ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items,
503 *keychain_); 502 *keychain_);
504 matching_items = 503 matching_items =
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 keychain_adapter.PasswordsFillingForm(query_form->signon_realm, 1239 keychain_adapter.PasswordsFillingForm(query_form->signon_realm,
1241 query_form->scheme); 1240 query_form->scheme);
1242 if (updates[i].password) { 1241 if (updates[i].password) {
1243 EXPECT_GT(matching_items.size(), 0U) << "iteration " << i; 1242 EXPECT_GT(matching_items.size(), 0U) << "iteration " << i;
1244 if (matching_items.size() >= 1) 1243 if (matching_items.size() >= 1)
1245 EXPECT_EQ(ASCIIToUTF16(updates[i].password), 1244 EXPECT_EQ(ASCIIToUTF16(updates[i].password),
1246 matching_items[0]->password_value) << "iteration " << i; 1245 matching_items[0]->password_value) << "iteration " << i;
1247 } else { 1246 } else {
1248 EXPECT_EQ(0U, matching_items.size()) << "iteration " << i; 1247 EXPECT_EQ(0U, matching_items.size()) << "iteration " << i;
1249 } 1248 }
1250 matching_items.clear();
1251 1249
1252 login_db()->GetLogins(*query_form, &matching_items); 1250 EXPECT_TRUE(login_db()->GetLogins(*query_form, &matching_items));
1253 EXPECT_EQ(updates[i].password ? 1U : 0U, matching_items.size()) 1251 EXPECT_EQ(updates[i].password ? 1U : 0U, matching_items.size())
1254 << "iteration " << i; 1252 << "iteration " << i;
1255 } 1253 }
1256 } 1254 }
1257 1255
1258 TEST_F(PasswordStoreMacTest, TestDBKeychainAssociation) { 1256 TEST_F(PasswordStoreMacTest, TestDBKeychainAssociation) {
1259 // Tests that association between the keychain and login database parts of a 1257 // Tests that association between the keychain and login database parts of a
1260 // password added by fuzzy (PSL) matching works. 1258 // password added by fuzzy (PSL) matching works.
1261 // 1. Add a password for www.facebook.com 1259 // 1. Add a password for www.facebook.com
1262 // 2. Get a password for m.facebook.com. This fuzzy matches and returns the 1260 // 2. Get a password for m.facebook.com. This fuzzy matches and returns the
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 // 4. Remove both passwords. 1303 // 4. Remove both passwords.
1306 store_->RemoveLogin(*www_form); 1304 store_->RemoveLogin(*www_form);
1307 store_->RemoveLogin(m_form); 1305 store_->RemoveLogin(m_form);
1308 FinishAsyncProcessing(); 1306 FinishAsyncProcessing();
1309 1307
1310 // No trace of www.facebook.com. 1308 // No trace of www.facebook.com.
1311 ScopedVector<autofill::PasswordForm> matching_items = 1309 ScopedVector<autofill::PasswordForm> matching_items =
1312 owned_keychain_adapter.PasswordsFillingForm(www_form->signon_realm, 1310 owned_keychain_adapter.PasswordsFillingForm(www_form->signon_realm,
1313 www_form->scheme); 1311 www_form->scheme);
1314 EXPECT_EQ(0u, matching_items.size()); 1312 EXPECT_EQ(0u, matching_items.size());
1315 login_db()->GetLogins(*www_form, &matching_items); 1313 EXPECT_TRUE(login_db()->GetLogins(*www_form, &matching_items));
1316 EXPECT_EQ(0u, matching_items.size()); 1314 EXPECT_EQ(0u, matching_items.size());
1317 // No trace of m.facebook.com. 1315 // No trace of m.facebook.com.
1318 matching_items = owned_keychain_adapter.PasswordsFillingForm( 1316 matching_items = owned_keychain_adapter.PasswordsFillingForm(
1319 m_form.signon_realm, m_form.scheme); 1317 m_form.signon_realm, m_form.scheme);
1320 EXPECT_EQ(0u, matching_items.size()); 1318 EXPECT_EQ(0u, matching_items.size());
1321 login_db()->GetLogins(m_form, &matching_items); 1319 EXPECT_TRUE(login_db()->GetLogins(m_form, &matching_items));
1322 EXPECT_EQ(0u, matching_items.size()); 1320 EXPECT_EQ(0u, matching_items.size());
1323 } 1321 }
1324 1322
1325 namespace { 1323 namespace {
1326 1324
1327 class PasswordsChangeObserver : 1325 class PasswordsChangeObserver :
1328 public password_manager::PasswordStore::Observer { 1326 public password_manager::PasswordStore::Observer {
1329 public: 1327 public:
1330 PasswordsChangeObserver(TestPasswordStoreMac* store) : observer_(this) { 1328 PasswordsChangeObserver(TestPasswordStoreMac* store) : observer_(this) {
1331 observer_.Add(store); 1329 observer_.Add(store);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 // Add a password from the current profile. 1477 // Add a password from the current profile.
1480 PasswordFormData www_form_data2 = { 1478 PasswordFormData www_form_data2 = {
1481 PasswordForm::SCHEME_HTML, "http://www.facebook.com/", 1479 PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
1482 "http://www.facebook.com/index.html", "login", L"username", L"password", 1480 "http://www.facebook.com/index.html", "login", L"username", L"password",
1483 L"submit", L"not_joe_user", L"12345", true, false, 1 }; 1481 L"submit", L"not_joe_user", L"12345", true, false, 1 };
1484 www_form = CreatePasswordFormFromDataForTesting(www_form_data2); 1482 www_form = CreatePasswordFormFromDataForTesting(www_form_data2);
1485 store_->AddLogin(*www_form); 1483 store_->AddLogin(*www_form);
1486 FinishAsyncProcessing(); 1484 FinishAsyncProcessing();
1487 1485
1488 ScopedVector<PasswordForm> matching_items; 1486 ScopedVector<PasswordForm> matching_items;
1489 login_db()->GetLogins(*www_form, &matching_items); 1487 EXPECT_TRUE(login_db()->GetLogins(*www_form, &matching_items));
1490 EXPECT_EQ(1u, matching_items.size()); 1488 EXPECT_EQ(1u, matching_items.size());
1491 matching_items.clear();
1492 1489
1493 store_->RemoveLoginsCreatedBetween(base::Time(), base::Time()); 1490 store_->RemoveLoginsCreatedBetween(base::Time(), base::Time());
1494 FinishAsyncProcessing(); 1491 FinishAsyncProcessing();
1495 1492
1496 // Check the second facebook form is gone. 1493 // Check the second facebook form is gone.
1497 login_db()->GetLogins(*www_form, &matching_items); 1494 EXPECT_TRUE(login_db()->GetLogins(*www_form, &matching_items));
1498 EXPECT_EQ(0u, matching_items.size()); 1495 EXPECT_EQ(0u, matching_items.size());
1499 1496
1500 // Check the first facebook form is still there. 1497 // Check the first facebook form is still there.
1501 matching_items = owned_keychain_adapter.PasswordsFillingForm( 1498 matching_items = owned_keychain_adapter.PasswordsFillingForm(
1502 www_form->signon_realm, www_form->scheme); 1499 www_form->signon_realm, www_form->scheme);
1503 ASSERT_EQ(1u, matching_items.size()); 1500 ASSERT_EQ(1u, matching_items.size());
1504 EXPECT_EQ(ASCIIToUTF16("joe_user"), matching_items[0]->username_value); 1501 EXPECT_EQ(ASCIIToUTF16("joe_user"), matching_items[0]->username_value);
1505 matching_items.clear();
1506 1502
1507 // Check the third-party password is still there. 1503 // Check the third-party password is still there.
1508 owned_keychain_adapter.SetFindsOnlyOwnedItems(false); 1504 owned_keychain_adapter.SetFindsOnlyOwnedItems(false);
1509 matching_items = owned_keychain_adapter.PasswordsFillingForm( 1505 matching_items = owned_keychain_adapter.PasswordsFillingForm(
1510 "http://some.domain.com/insecure.html", PasswordForm::SCHEME_HTML); 1506 "http://some.domain.com/insecure.html", PasswordForm::SCHEME_HTML);
1511 ASSERT_EQ(1u, matching_items.size()); 1507 ASSERT_EQ(1u, matching_items.size());
1512 } 1508 }
1513 1509
1514 // Open the store and immediately write to it and try to read it back, without 1510 // Open the store and immediately write to it and try to read it back, without
1515 // first waiting for the initialization to finish. If tasks are processed in 1511 // first waiting for the initialization to finish. If tasks are processed in
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 .WillByDefault(QuitUIMessageLoop()); 1630 .WillByDefault(QuitUIMessageLoop());
1635 EXPECT_CALL(mock_observer, OnLoginsChanged(_)).Times(0); 1631 EXPECT_CALL(mock_observer, OnLoginsChanged(_)).Times(0);
1636 // The PSL-matched form isn't returned because there is no actual password in 1632 // The PSL-matched form isn't returned because there is no actual password in
1637 // the keychain. 1633 // the keychain.
1638 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty())); 1634 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty()));
1639 store_->GetLogins(m_form, PasswordStore::ALLOW_PROMPT, &consumer); 1635 store_->GetLogins(m_form, PasswordStore::ALLOW_PROMPT, &consumer);
1640 base::MessageLoop::current()->Run(); 1636 base::MessageLoop::current()->Run();
1641 ScopedVector<autofill::PasswordForm> all_forms; 1637 ScopedVector<autofill::PasswordForm> all_forms;
1642 EXPECT_TRUE(login_db()->GetAutofillableLogins(&all_forms)); 1638 EXPECT_TRUE(login_db()->GetAutofillableLogins(&all_forms));
1643 EXPECT_EQ(1u, all_forms.size()); 1639 EXPECT_EQ(1u, all_forms.size());
1644 all_forms.clear();
1645 ::testing::Mock::VerifyAndClearExpectations(&mock_observer); 1640 ::testing::Mock::VerifyAndClearExpectations(&mock_observer);
1646 1641
1647 // 3. Get a password for www.facebook.com. The form is implicitly removed and 1642 // 3. Get a password for www.facebook.com. The form is implicitly removed and
1648 // the observer is notified. 1643 // the observer is notified.
1649 password_manager::PasswordStoreChangeList list; 1644 password_manager::PasswordStoreChangeList list;
1650 list.push_back(password_manager::PasswordStoreChange( 1645 list.push_back(password_manager::PasswordStoreChange(
1651 password_manager::PasswordStoreChange::REMOVE, *www_form)); 1646 password_manager::PasswordStoreChange::REMOVE, *www_form));
1652 EXPECT_CALL(mock_observer, OnLoginsChanged(list)); 1647 EXPECT_CALL(mock_observer, OnLoginsChanged(list));
1653 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty())); 1648 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(IsEmpty()));
1654 store_->GetLogins(*www_form, PasswordStore::ALLOW_PROMPT, &consumer); 1649 store_->GetLogins(*www_form, PasswordStore::ALLOW_PROMPT, &consumer);
(...skipping 27 matching lines...) Expand all
1682 query_form.password_value.clear(); 1677 query_form.password_value.clear();
1683 query_form.username_value.clear(); 1678 query_form.username_value.clear();
1684 EXPECT_CALL(mock_consumer, OnGetPasswordStoreResultsConstRef(SizeIs(1u))) 1679 EXPECT_CALL(mock_consumer, OnGetPasswordStoreResultsConstRef(SizeIs(1u)))
1685 .WillOnce( 1680 .WillOnce(
1686 DoAll(SaveACopyOfFirstForm(&returned_form), QuitUIMessageLoop())); 1681 DoAll(SaveACopyOfFirstForm(&returned_form), QuitUIMessageLoop()));
1687 store()->GetLogins(query_form, PasswordStore::ALLOW_PROMPT, &mock_consumer); 1682 store()->GetLogins(query_form, PasswordStore::ALLOW_PROMPT, &mock_consumer);
1688 base::MessageLoop::current()->Run(); 1683 base::MessageLoop::current()->Run();
1689 ::testing::Mock::VerifyAndClearExpectations(&mock_consumer); 1684 ::testing::Mock::VerifyAndClearExpectations(&mock_consumer);
1690 EXPECT_EQ(form, returned_form); 1685 EXPECT_EQ(form, returned_form);
1691 } 1686 }
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/password_store_mac.cc ('k') | chrome/browser/password_manager/password_store_x.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698