1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/password_manager/core/browser/test_password_store.h"
6
7 #include "components/autofill/core/common/password_form.h"
8
9 namespace password_manager {
10
TestPasswordStore()11 TestPasswordStore::TestPasswordStore()
12 : PasswordStore(base::MessageLoopProxy::current(),
13 base::MessageLoopProxy::current()) {
14 }
15
~TestPasswordStore()16 TestPasswordStore::~TestPasswordStore() {}
17
stored_passwords() const18 const TestPasswordStore::PasswordMap& TestPasswordStore::stored_passwords()
19 const {
20 return stored_passwords_;
21 }
22
Clear()23 void TestPasswordStore::Clear() {
24 stored_passwords_.clear();
25 }
26
IsEmpty() const27 bool TestPasswordStore::IsEmpty() const {
28 // The store is empty, if the sum of all stored passwords across all entries
29 // in |stored_passwords_| is 0.
30 size_t number_of_passwords = 0u;
31 for (PasswordMap::const_iterator it = stored_passwords_.begin();
32 !number_of_passwords && it != stored_passwords_.end();
33 ++it) {
34 number_of_passwords += it->second.size();
35 }
36 return number_of_passwords == 0u;
37 }
38
FormsAreEquivalent(const autofill::PasswordForm & lhs,const autofill::PasswordForm & rhs)39 bool TestPasswordStore::FormsAreEquivalent(const autofill::PasswordForm& lhs,
40 const autofill::PasswordForm& rhs) {
41 return lhs.origin == rhs.origin &&
42 lhs.username_element == rhs.username_element &&
43 lhs.username_value == rhs.username_value &&
44 lhs.password_element == rhs.password_element &&
45 lhs.signon_realm == rhs.signon_realm;
46 }
47
WrapModificationTask(ModificationTask task)48 void TestPasswordStore::WrapModificationTask(ModificationTask task) {
49 task.Run();
50 }
51
AddLoginImpl(const autofill::PasswordForm & form)52 PasswordStoreChangeList TestPasswordStore::AddLoginImpl(
53 const autofill::PasswordForm& form) {
54 PasswordStoreChangeList changes;
55 stored_passwords_[form.signon_realm].push_back(form);
56 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form));
57 return changes;
58 }
59
UpdateLoginImpl(const autofill::PasswordForm & form)60 PasswordStoreChangeList TestPasswordStore::UpdateLoginImpl(
61 const autofill::PasswordForm& form) {
62 PasswordStoreChangeList changes;
63 std::vector<autofill::PasswordForm>& forms =
64 stored_passwords_[form.signon_realm];
65 for (std::vector<autofill::PasswordForm>::iterator it = forms.begin();
66 it != forms.end(); ++it) {
67 if (FormsAreEquivalent(form, *it)) {
68 *it = form;
69 changes.push_back(
70 PasswordStoreChange(PasswordStoreChange::UPDATE, form));
71 }
72 }
73 return changes;
74 }
75
RemoveLoginImpl(const autofill::PasswordForm & form)76 PasswordStoreChangeList TestPasswordStore::RemoveLoginImpl(
77 const autofill::PasswordForm& form) {
78 PasswordStoreChangeList changes;
79 std::vector<autofill::PasswordForm>& forms =
80 stored_passwords_[form.signon_realm];
81 std::vector<autofill::PasswordForm>::iterator it = forms.begin();
82 while (it != forms.end()) {
83 if (FormsAreEquivalent(form, *it)) {
84 it = forms.erase(it);
85 changes.push_back(
86 PasswordStoreChange(PasswordStoreChange::REMOVE, form));
87 } else {
88 ++it;
89 }
90 }
91 return changes;
92 }
93
GetLoginsImpl(const autofill::PasswordForm & form,PasswordStore::AuthorizationPromptPolicy prompt_policy,const PasswordStore::ConsumerCallbackRunner & runner)94 void TestPasswordStore::GetLoginsImpl(
95 const autofill::PasswordForm& form,
96 PasswordStore::AuthorizationPromptPolicy prompt_policy,
97 const PasswordStore::ConsumerCallbackRunner& runner) {
98 std::vector<autofill::PasswordForm*> matched_forms;
99 std::vector<autofill::PasswordForm> forms =
100 stored_passwords_[form.signon_realm];
101 for (std::vector<autofill::PasswordForm>::iterator it = forms.begin();
102 it != forms.end(); ++it) {
103 matched_forms.push_back(new autofill::PasswordForm(*it));
104 }
105 runner.Run(matched_forms);
106 }
107
RemoveLoginsCreatedBetweenImpl(base::Time begin,base::Time end)108 PasswordStoreChangeList TestPasswordStore::RemoveLoginsCreatedBetweenImpl(
109 base::Time begin,
110 base::Time end) {
111 PasswordStoreChangeList changes;
112 return changes;
113 }
114
RemoveLoginsSyncedBetweenImpl(base::Time begin,base::Time end)115 PasswordStoreChangeList TestPasswordStore::RemoveLoginsSyncedBetweenImpl(
116 base::Time begin,
117 base::Time end) {
118 PasswordStoreChangeList changes;
119 return changes;
120 }
121
FillAutofillableLogins(std::vector<autofill::PasswordForm * > * forms)122 bool TestPasswordStore::FillAutofillableLogins(
123 std::vector<autofill::PasswordForm*>* forms) {
124 return true;
125 }
126
FillBlacklistLogins(std::vector<autofill::PasswordForm * > * forms)127 bool TestPasswordStore::FillBlacklistLogins(
128 std::vector<autofill::PasswordForm*>* forms) {
129 return true;
130 }
131
132 } // namespace password_manager
133