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

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

Issue 866983003: GetLoginsRequest: Use ScopedVector to express ownership of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@324291_scopedvector
Patch Set: Rebased 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) 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 19 matching lines...) Expand all
30 using password_manager::LoginDatabase; 30 using password_manager::LoginDatabase;
31 using password_manager::PasswordStore; 31 using password_manager::PasswordStore;
32 using password_manager::PasswordStoreConsumer; 32 using password_manager::PasswordStoreConsumer;
33 using testing::_; 33 using testing::_;
34 using testing::DoAll; 34 using testing::DoAll;
35 using testing::Invoke; 35 using testing::Invoke;
36 using testing::WithArg; 36 using testing::WithArg;
37 37
38 namespace { 38 namespace {
39 39
40 ACTION(STLDeleteElements0) {
41 STLDeleteContainerPointers(arg0.begin(), arg0.end());
42 }
43
44 ACTION(QuitUIMessageLoop) { 40 ACTION(QuitUIMessageLoop) {
45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
46 base::MessageLoop::current()->Quit(); 42 base::MessageLoop::current()->Quit();
47 } 43 }
48 44
49 class MockPasswordStoreConsumer : public PasswordStoreConsumer { 45 class MockPasswordStoreConsumer : public PasswordStoreConsumer {
50 public: 46 public:
51 MOCK_METHOD1(OnGetPasswordStoreResults, 47 MOCK_METHOD0(OnGetPasswordStoreResults, void());
52 void(const std::vector<autofill::PasswordForm*>&));
53
54 void CopyElements(const std::vector<autofill::PasswordForm*>& forms) {
55 last_result.clear();
56 for (size_t i = 0; i < forms.size(); ++i) {
57 last_result.push_back(*forms[i]);
58 }
59 }
60 48
61 // Runs the current thread's message loop until OnGetPasswordStoreResults() 49 // Runs the current thread's message loop until OnGetPasswordStoreResults()
62 // is posted to it. This method should be called immediately after GetLogins, 50 // is posted to it. This method should be called immediately after GetLogins,
63 // without pumping the message loop in-between. 51 // without pumping the message loop in-between.
64 void WaitOnGetPasswordStoreResults() { 52 void WaitOnGetPasswordStoreResults() {
65 EXPECT_CALL(*this, OnGetPasswordStoreResults(_)).WillOnce(DoAll( 53 EXPECT_CALL(*this, OnGetPasswordStoreResults())
66 WithArg<0>(Invoke(this, &MockPasswordStoreConsumer::CopyElements)), 54 .WillOnce(QuitUIMessageLoop());
67 WithArg<0>(STLDeleteElements0()),
68 QuitUIMessageLoop()));
69 base::MessageLoop::current()->Run(); 55 base::MessageLoop::current()->Run();
70 } 56 }
71
72 std::vector<PasswordForm> last_result;
73 }; 57 };
74 58
75 class MockPasswordStoreObserver : public PasswordStore::Observer { 59 class MockPasswordStoreObserver : public PasswordStore::Observer {
76 public: 60 public:
77 MOCK_METHOD1(OnLoginsChanged, 61 MOCK_METHOD1(OnLoginsChanged,
78 void(const password_manager::PasswordStoreChangeList& changes)); 62 void(const password_manager::PasswordStoreChangeList& changes));
79 }; 63 };
80 64
81 // A mock LoginDatabase that simulates a failing Init() method. 65 // A mock LoginDatabase that simulates a failing Init() method.
82 class BadLoginDatabase : public password_manager::LoginDatabase { 66 class BadLoginDatabase : public password_manager::LoginDatabase {
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 owned_keychain_adapter.AddPassword(*www_form); 1254 owned_keychain_adapter.AddPassword(*www_form);
1271 1255
1272 // 2. Get a password for m.facebook.com. 1256 // 2. Get a password for m.facebook.com.
1273 PasswordForm m_form(*www_form); 1257 PasswordForm m_form(*www_form);
1274 m_form.signon_realm = "http://m.facebook.com"; 1258 m_form.signon_realm = "http://m.facebook.com";
1275 m_form.origin = GURL("http://m.facebook.com/index.html"); 1259 m_form.origin = GURL("http://m.facebook.com/index.html");
1276 1260
1277 MockPasswordStoreConsumer consumer; 1261 MockPasswordStoreConsumer consumer;
1278 store_->GetLogins(m_form, PasswordStore::ALLOW_PROMPT, &consumer); 1262 store_->GetLogins(m_form, PasswordStore::ALLOW_PROMPT, &consumer);
1279 consumer.WaitOnGetPasswordStoreResults(); 1263 consumer.WaitOnGetPasswordStoreResults();
1280 EXPECT_EQ(1u, consumer.last_result.size()); 1264 EXPECT_EQ(1u, consumer.results()->size());
1281 1265
1282 // 3. Add the returned password for m.facebook.com. 1266 // 3. Add the returned password for m.facebook.com.
1283 login_db()->AddLogin(consumer.last_result[0]); 1267 login_db()->AddLogin(*(*consumer.results())[0]);
1284 owned_keychain_adapter.AddPassword(m_form); 1268 owned_keychain_adapter.AddPassword(m_form);
1285 1269
1286 // 4. Remove both passwords. 1270 // 4. Remove both passwords.
1287 store_->RemoveLogin(*www_form); 1271 store_->RemoveLogin(*www_form);
1288 store_->RemoveLogin(m_form); 1272 store_->RemoveLogin(m_form);
1289 FinishAsyncProcessing(); 1273 FinishAsyncProcessing();
1290 1274
1291 // No trace of www.facebook.com. 1275 // No trace of www.facebook.com.
1292 ScopedVector<autofill::PasswordForm> matching_items = 1276 ScopedVector<autofill::PasswordForm> matching_items =
1293 owned_keychain_adapter.PasswordsFillingForm(www_form->signon_realm, 1277 owned_keychain_adapter.PasswordsFillingForm(www_form->signon_realm,
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1509 scoped_ptr<PasswordForm> form(CreatePasswordFormFromData(www_form_data)); 1493 scoped_ptr<PasswordForm> form(CreatePasswordFormFromData(www_form_data));
1510 store()->AddLogin(*form); 1494 store()->AddLogin(*form);
1511 1495
1512 MockPasswordStoreConsumer mock_consumer; 1496 MockPasswordStoreConsumer mock_consumer;
1513 store()->GetLogins(*form, PasswordStore::ALLOW_PROMPT, &mock_consumer); 1497 store()->GetLogins(*form, PasswordStore::ALLOW_PROMPT, &mock_consumer);
1514 1498
1515 // Now the read/write tasks are scheduled, let the DB initialization proceed. 1499 // Now the read/write tasks are scheduled, let the DB initialization proceed.
1516 event.Signal(); 1500 event.Signal();
1517 1501
1518 mock_consumer.WaitOnGetPasswordStoreResults(); 1502 mock_consumer.WaitOnGetPasswordStoreResults();
1519 EXPECT_EQ(1u, mock_consumer.last_result.size()); 1503 EXPECT_EQ(1u, mock_consumer.results()->size());
1520 EXPECT_TRUE(login_db()); 1504 EXPECT_TRUE(login_db());
1521 } 1505 }
1522 1506
1523 // Verify that operations on a PasswordStore with a bad database cause no 1507 // Verify that operations on a PasswordStore with a bad database cause no
1524 // explosions, but fail without side effect, return no data and trigger no 1508 // explosions, but fail without side effect, return no data and trigger no
1525 // notifications. 1509 // notifications.
1526 TEST_F(PasswordStoreMacTest, OperationsOnABadDatabaseSilentlyFail) { 1510 TEST_F(PasswordStoreMacTest, OperationsOnABadDatabaseSilentlyFail) {
1527 ClosePasswordStore(); 1511 ClosePasswordStore();
1528 CreateAndInitPasswordStore( 1512 CreateAndInitPasswordStore(
1529 make_scoped_ptr<password_manager::LoginDatabase>(new BadLoginDatabase)); 1513 make_scoped_ptr<password_manager::LoginDatabase>(new BadLoginDatabase));
(...skipping 15 matching lines...) Expand all
1545 blacklisted_form->action = GURL("http://foo.example.com/action"); 1529 blacklisted_form->action = GURL("http://foo.example.com/action");
1546 blacklisted_form->blacklisted_by_user = true; 1530 blacklisted_form->blacklisted_by_user = true;
1547 store()->AddLogin(*form); 1531 store()->AddLogin(*form);
1548 store()->AddLogin(*blacklisted_form); 1532 store()->AddLogin(*blacklisted_form);
1549 FinishAsyncProcessing(); 1533 FinishAsyncProcessing();
1550 1534
1551 // Get all logins; autofillable logins; blacklisted logins. 1535 // Get all logins; autofillable logins; blacklisted logins.
1552 MockPasswordStoreConsumer mock_consumer; 1536 MockPasswordStoreConsumer mock_consumer;
1553 store()->GetLogins(*form, PasswordStore::DISALLOW_PROMPT, &mock_consumer); 1537 store()->GetLogins(*form, PasswordStore::DISALLOW_PROMPT, &mock_consumer);
1554 mock_consumer.WaitOnGetPasswordStoreResults(); 1538 mock_consumer.WaitOnGetPasswordStoreResults();
1555 EXPECT_TRUE(mock_consumer.last_result.empty()); 1539 EXPECT_TRUE(mock_consumer.results()->empty());
1556 store()->GetAutofillableLogins(&mock_consumer); 1540 store()->GetAutofillableLogins(&mock_consumer);
1557 mock_consumer.WaitOnGetPasswordStoreResults(); 1541 mock_consumer.WaitOnGetPasswordStoreResults();
1558 EXPECT_TRUE(mock_consumer.last_result.empty()); 1542 EXPECT_TRUE(mock_consumer.results()->empty());
1559 store()->GetBlacklistLogins(&mock_consumer); 1543 store()->GetBlacklistLogins(&mock_consumer);
1560 mock_consumer.WaitOnGetPasswordStoreResults(); 1544 mock_consumer.WaitOnGetPasswordStoreResults();
1561 EXPECT_TRUE(mock_consumer.last_result.empty()); 1545 EXPECT_TRUE(mock_consumer.results()->empty());
1562 1546
1563 // Report metrics. 1547 // Report metrics.
1564 store()->ReportMetrics("Test Username", true); 1548 store()->ReportMetrics("Test Username", true);
1565 FinishAsyncProcessing(); 1549 FinishAsyncProcessing();
1566 1550
1567 // Change the login. 1551 // Change the login.
1568 form->password_value = base::ASCIIToUTF16("a different password"); 1552 form->password_value = base::ASCIIToUTF16("a different password");
1569 store()->UpdateLogin(*form); 1553 store()->UpdateLogin(*form);
1570 FinishAsyncProcessing(); 1554 FinishAsyncProcessing();
1571 1555
1572 // Delete one login; a range of logins. 1556 // Delete one login; a range of logins.
1573 store()->RemoveLogin(*form); 1557 store()->RemoveLogin(*form);
1574 store()->RemoveLoginsCreatedBetween(base::Time(), base::Time::Max()); 1558 store()->RemoveLoginsCreatedBetween(base::Time(), base::Time::Max());
1575 store()->RemoveLoginsSyncedBetween(base::Time(), base::Time::Max()); 1559 store()->RemoveLoginsSyncedBetween(base::Time(), base::Time::Max());
1576 FinishAsyncProcessing(); 1560 FinishAsyncProcessing();
1577 1561
1578 // Verify no notifications are fired during shutdown either. 1562 // Verify no notifications are fired during shutdown either.
1579 ClosePasswordStore(); 1563 ClosePasswordStore();
1580 } 1564 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698