OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/webdata/logins_table.h" | 5 #include "chrome/browser/webdata/logins_table.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 | 107 |
108 bool LoginsTable::AddLogin(const PasswordForm& form) { | 108 bool LoginsTable::AddLogin(const PasswordForm& form) { |
109 sql::Statement s(db_->GetUniqueStatement( | 109 sql::Statement s(db_->GetUniqueStatement( |
110 "INSERT OR REPLACE INTO logins " | 110 "INSERT OR REPLACE INTO logins " |
111 "(origin_url, action_url, username_element, username_value, " | 111 "(origin_url, action_url, username_element, username_value, " |
112 " password_element, password_value, submit_element, " | 112 " password_element, password_value, submit_element, " |
113 " signon_realm, ssl_valid, preferred, date_created, " | 113 " signon_realm, ssl_valid, preferred, date_created, " |
114 " blacklisted_by_user, scheme) " | 114 " blacklisted_by_user, scheme) " |
115 "VALUES " | 115 "VALUES " |
116 "(?,?,?,?,?,?,?,?,?,?,?,?,?)")); | 116 "(?,?,?,?,?,?,?,?,?,?,?,?,?)")); |
117 if (!s) { | |
118 NOTREACHED() << "Statement prepare failed"; | |
119 return false; | |
120 } | |
121 | 117 |
122 std::string encrypted_password; | 118 std::string encrypted_password; |
123 s.BindString(0, form.origin.spec()); | 119 s.BindString(0, form.origin.spec()); |
124 s.BindString(1, form.action.spec()); | 120 s.BindString(1, form.action.spec()); |
125 s.BindString16(2, form.username_element); | 121 s.BindString16(2, form.username_element); |
126 s.BindString16(3, form.username_value); | 122 s.BindString16(3, form.username_value); |
127 s.BindString16(4, form.password_element); | 123 s.BindString16(4, form.password_element); |
128 Encryptor::EncryptString16(form.password_value, &encrypted_password); | 124 Encryptor::EncryptString16(form.password_value, &encrypted_password); |
129 s.BindBlob(5, encrypted_password.data(), | 125 s.BindBlob(5, encrypted_password.data(), |
130 static_cast<int>(encrypted_password.length())); | 126 static_cast<int>(encrypted_password.length())); |
131 s.BindString16(6, form.submit_element); | 127 s.BindString16(6, form.submit_element); |
132 s.BindString(7, form.signon_realm); | 128 s.BindString(7, form.signon_realm); |
133 s.BindInt(8, form.ssl_valid); | 129 s.BindInt(8, form.ssl_valid); |
134 s.BindInt(9, form.preferred); | 130 s.BindInt(9, form.preferred); |
135 s.BindInt64(10, form.date_created.ToTimeT()); | 131 s.BindInt64(10, form.date_created.ToTimeT()); |
136 s.BindInt(11, form.blacklisted_by_user); | 132 s.BindInt(11, form.blacklisted_by_user); |
137 s.BindInt(12, form.scheme); | 133 s.BindInt(12, form.scheme); |
138 if (!s.Run()) { | 134 |
139 NOTREACHED(); | 135 return s.Run(); |
140 return false; | |
141 } | |
142 return true; | |
143 } | 136 } |
144 | 137 |
145 bool LoginsTable::UpdateLogin(const PasswordForm& form) { | 138 bool LoginsTable::UpdateLogin(const PasswordForm& form) { |
146 sql::Statement s(db_->GetUniqueStatement( | 139 sql::Statement s(db_->GetUniqueStatement( |
147 "UPDATE logins SET " | 140 "UPDATE logins SET " |
148 "action_url = ?, " | 141 "action_url = ?, " |
149 "password_value = ?, " | 142 "password_value = ?, " |
150 "ssl_valid = ?, " | 143 "ssl_valid = ?, " |
151 "preferred = ? " | 144 "preferred = ? " |
152 "WHERE origin_url = ? AND " | 145 "WHERE origin_url = ? AND " |
153 "username_element = ? AND " | 146 "username_element = ? AND " |
154 "username_value = ? AND " | 147 "username_value = ? AND " |
155 "password_element = ? AND " | 148 "password_element = ? AND " |
156 "signon_realm = ?")); | 149 "signon_realm = ?")); |
157 if (!s) { | |
158 NOTREACHED() << "Statement prepare failed"; | |
159 return false; | |
160 } | |
161 | 150 |
162 s.BindString(0, form.action.spec()); | 151 s.BindString(0, form.action.spec()); |
163 std::string encrypted_password; | 152 std::string encrypted_password; |
164 Encryptor::EncryptString16(form.password_value, &encrypted_password); | 153 Encryptor::EncryptString16(form.password_value, &encrypted_password); |
165 s.BindBlob(1, encrypted_password.data(), | 154 s.BindBlob(1, encrypted_password.data(), |
166 static_cast<int>(encrypted_password.length())); | 155 static_cast<int>(encrypted_password.length())); |
167 s.BindInt(2, form.ssl_valid); | 156 s.BindInt(2, form.ssl_valid); |
168 s.BindInt(3, form.preferred); | 157 s.BindInt(3, form.preferred); |
169 s.BindString(4, form.origin.spec()); | 158 s.BindString(4, form.origin.spec()); |
170 s.BindString16(5, form.username_element); | 159 s.BindString16(5, form.username_element); |
171 s.BindString16(6, form.username_value); | 160 s.BindString16(6, form.username_value); |
172 s.BindString16(7, form.password_element); | 161 s.BindString16(7, form.password_element); |
173 s.BindString(8, form.signon_realm); | 162 s.BindString(8, form.signon_realm); |
174 | 163 |
175 if (!s.Run()) { | 164 return s.Run(); |
176 NOTREACHED(); | |
177 return false; | |
178 } | |
179 return true; | |
180 } | 165 } |
181 | 166 |
182 bool LoginsTable::RemoveLogin(const PasswordForm& form) { | 167 bool LoginsTable::RemoveLogin(const PasswordForm& form) { |
183 // Remove a login by UNIQUE-constrained fields. | 168 // Remove a login by UNIQUE-constrained fields. |
184 sql::Statement s(db_->GetUniqueStatement( | 169 sql::Statement s(db_->GetUniqueStatement( |
185 "DELETE FROM logins WHERE " | 170 "DELETE FROM logins WHERE " |
186 "origin_url = ? AND " | 171 "origin_url = ? AND " |
187 "username_element = ? AND " | 172 "username_element = ? AND " |
188 "username_value = ? AND " | 173 "username_value = ? AND " |
189 "password_element = ? AND " | 174 "password_element = ? AND " |
190 "submit_element = ? AND " | 175 "submit_element = ? AND " |
191 "signon_realm = ?")); | 176 "signon_realm = ?")); |
192 if (!s) { | |
193 NOTREACHED() << "Statement prepare failed"; | |
194 return false; | |
195 } | |
196 s.BindString(0, form.origin.spec()); | 177 s.BindString(0, form.origin.spec()); |
197 s.BindString16(1, form.username_element); | 178 s.BindString16(1, form.username_element); |
198 s.BindString16(2, form.username_value); | 179 s.BindString16(2, form.username_value); |
199 s.BindString16(3, form.password_element); | 180 s.BindString16(3, form.password_element); |
200 s.BindString16(4, form.submit_element); | 181 s.BindString16(4, form.submit_element); |
201 s.BindString(5, form.signon_realm); | 182 s.BindString(5, form.signon_realm); |
202 | 183 |
203 if (!s.Run()) { | 184 return s.Run(); |
204 NOTREACHED(); | |
205 return false; | |
206 } | |
207 return true; | |
208 } | 185 } |
209 | 186 |
210 bool LoginsTable::RemoveLoginsCreatedBetween(base::Time delete_begin, | 187 bool LoginsTable::RemoveLoginsCreatedBetween(base::Time delete_begin, |
211 base::Time delete_end) { | 188 base::Time delete_end) { |
212 sql::Statement s1(db_->GetUniqueStatement( | 189 sql::Statement s1(db_->GetUniqueStatement( |
213 "DELETE FROM logins WHERE " | 190 "DELETE FROM logins WHERE " |
214 "date_created >= ? AND date_created < ?")); | 191 "date_created >= ? AND date_created < ?")); |
215 if (!s1) { | |
216 NOTREACHED() << "Statement 1 prepare failed"; | |
217 return false; | |
218 } | |
219 s1.BindInt64(0, delete_begin.ToTimeT()); | 192 s1.BindInt64(0, delete_begin.ToTimeT()); |
220 s1.BindInt64(1, | 193 s1.BindInt64(1, |
221 delete_end.is_null() ? | 194 delete_end.is_null() ? |
222 std::numeric_limits<int64>::max() : | 195 std::numeric_limits<int64>::max() : |
223 delete_end.ToTimeT()); | 196 delete_end.ToTimeT()); |
224 bool success = s1.Run(); | 197 bool success = s1.Run(); |
225 | 198 |
226 #if defined(OS_WIN) | 199 #if defined(OS_WIN) |
227 sql::Statement s2(db_->GetUniqueStatement( | 200 sql::Statement s2(db_->GetUniqueStatement( |
228 "DELETE FROM ie7_logins WHERE date_created >= ? AND date_created < ?")); | 201 "DELETE FROM ie7_logins WHERE date_created >= ? AND date_created < ?")); |
229 if (!s2) { | |
230 NOTREACHED() << "Statement 2 prepare failed"; | |
231 return false; | |
232 } | |
233 s2.BindInt64(0, delete_begin.ToTimeT()); | 202 s2.BindInt64(0, delete_begin.ToTimeT()); |
234 s2.BindInt64(1, | 203 s2.BindInt64(1, |
235 delete_end.is_null() ? | 204 delete_end.is_null() ? |
236 std::numeric_limits<int64>::max() : | 205 std::numeric_limits<int64>::max() : |
237 delete_end.ToTimeT()); | 206 delete_end.ToTimeT()); |
238 success = success && s2.Run(); | 207 success = success && s2.Run(); |
239 #endif | 208 #endif |
240 | 209 |
241 return success; | 210 return success; |
242 } | 211 } |
243 | 212 |
244 bool LoginsTable::GetLogins(const PasswordForm& form, | 213 bool LoginsTable::GetLogins(const PasswordForm& form, |
245 std::vector<PasswordForm*>* forms) { | 214 std::vector<PasswordForm*>* forms) { |
246 DCHECK(forms); | 215 DCHECK(forms); |
247 sql::Statement s(db_->GetUniqueStatement( | 216 sql::Statement s(db_->GetUniqueStatement( |
248 "SELECT origin_url, action_url, " | 217 "SELECT origin_url, action_url, " |
249 "username_element, username_value, " | 218 "username_element, username_value, " |
250 "password_element, password_value, " | 219 "password_element, password_value, " |
251 "submit_element, signon_realm, " | 220 "submit_element, signon_realm, " |
252 "ssl_valid, preferred, " | 221 "ssl_valid, preferred, " |
253 "date_created, blacklisted_by_user, scheme FROM logins " | 222 "date_created, blacklisted_by_user, scheme FROM logins " |
254 "WHERE signon_realm == ?")); | 223 "WHERE signon_realm == ?")); |
255 if (!s) { | |
256 NOTREACHED() << "Statement prepare failed"; | |
257 return false; | |
258 } | |
259 | |
260 s.BindString(0, form.signon_realm); | 224 s.BindString(0, form.signon_realm); |
261 | 225 |
262 while (s.Step()) { | 226 while (s.Step()) { |
263 PasswordForm* new_form = new PasswordForm(); | 227 PasswordForm* new_form = new PasswordForm(); |
264 InitPasswordFormFromStatement(new_form, &s); | 228 InitPasswordFormFromStatement(new_form, &s); |
265 | 229 |
266 forms->push_back(new_form); | 230 forms->push_back(new_form); |
267 } | 231 } |
268 return s.Succeeded(); | 232 return s.Succeeded(); |
269 } | 233 } |
270 | 234 |
271 bool LoginsTable::GetAllLogins(std::vector<PasswordForm*>* forms, | 235 bool LoginsTable::GetAllLogins(std::vector<PasswordForm*>* forms, |
272 bool include_blacklisted) { | 236 bool include_blacklisted) { |
273 DCHECK(forms); | 237 DCHECK(forms); |
274 std::string stmt = "SELECT origin_url, action_url, " | 238 std::string stmt = "SELECT origin_url, action_url, " |
275 "username_element, username_value, " | 239 "username_element, username_value, " |
276 "password_element, password_value, " | 240 "password_element, password_value, " |
277 "submit_element, signon_realm, ssl_valid, preferred, " | 241 "submit_element, signon_realm, ssl_valid, preferred, " |
278 "date_created, blacklisted_by_user, scheme FROM logins "; | 242 "date_created, blacklisted_by_user, scheme FROM logins "; |
279 if (!include_blacklisted) | 243 if (!include_blacklisted) |
280 stmt.append("WHERE blacklisted_by_user == 0 "); | 244 stmt.append("WHERE blacklisted_by_user == 0 "); |
281 stmt.append("ORDER BY origin_url"); | 245 stmt.append("ORDER BY origin_url"); |
282 | 246 |
283 sql::Statement s(db_->GetUniqueStatement(stmt.c_str())); | 247 sql::Statement s(db_->GetUniqueStatement(stmt.c_str())); |
284 if (!s) { | |
285 NOTREACHED() << "Statement prepare failed"; | |
286 return false; | |
287 } | |
288 | 248 |
289 while (s.Step()) { | 249 while (s.Step()) { |
290 PasswordForm* new_form = new PasswordForm(); | 250 PasswordForm* new_form = new PasswordForm(); |
291 InitPasswordFormFromStatement(new_form, &s); | 251 InitPasswordFormFromStatement(new_form, &s); |
292 | 252 |
293 forms->push_back(new_form); | 253 forms->push_back(new_form); |
294 } | 254 } |
295 return s.Succeeded(); | 255 return s.Succeeded(); |
296 } | 256 } |
OLD | NEW |