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

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

Issue 9365030: More SQL statement usage regularization. Back-touch some (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix log messages Created 8 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 | Annotate | Revision Log
OLDNEW
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/password_manager/login_database.h" 5 #include "chrome/browser/password_manager/login_database.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 return false; 131 return false;
132 } 132 }
133 } 133 }
134 return true; 134 return true;
135 } 135 }
136 136
137 void LoginDatabase::ReportMetrics() { 137 void LoginDatabase::ReportMetrics() {
138 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 138 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
139 "SELECT signon_realm, COUNT(username_value) FROM logins " 139 "SELECT signon_realm, COUNT(username_value) FROM logins "
140 "GROUP BY signon_realm")); 140 "GROUP BY signon_realm"));
141 if (!s) {
Scott Hess - ex-Googler 2012/02/13 22:04:04 I'd leave the test, or guard the final histogram w
Greg Billock 2012/02/13 22:48:59 Sounds good. I was thinking in terms of return val
142 NOTREACHED() << "Statement prepare failed";
143 return;
144 }
145 141
146 int total_accounts = 0; 142 int total_accounts = 0;
147 while (s.Step()) { 143 while (s.Step()) {
148 int accounts_per_site = s.ColumnInt(1); 144 int accounts_per_site = s.ColumnInt(1);
149 total_accounts += accounts_per_site; 145 total_accounts += accounts_per_site;
150 UMA_HISTOGRAM_CUSTOM_COUNTS("PasswordManager.AccountsPerSite", 146 UMA_HISTOGRAM_CUSTOM_COUNTS("PasswordManager.AccountsPerSite",
151 accounts_per_site, 0, 32, 6); 147 accounts_per_site, 0, 32, 6);
152 } 148 }
153 UMA_HISTOGRAM_CUSTOM_COUNTS("PasswordManager.TotalAccounts", 149 UMA_HISTOGRAM_CUSTOM_COUNTS("PasswordManager.TotalAccounts",
154 total_accounts, 0, 32, 6); 150 total_accounts, 0, 32, 6);
155
156 return;
157 } 151 }
158 152
159 bool LoginDatabase::AddLogin(const PasswordForm& form) { 153 bool LoginDatabase::AddLogin(const PasswordForm& form) {
160 // You *must* change LoginTableColumns if this query changes. 154 // You *must* change LoginTableColumns if this query changes.
161 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 155 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
162 "INSERT OR REPLACE INTO logins " 156 "INSERT OR REPLACE INTO logins "
163 "(origin_url, action_url, username_element, username_value, " 157 "(origin_url, action_url, username_element, username_value, "
164 " password_element, password_value, submit_element, " 158 " password_element, password_value, submit_element, "
165 " signon_realm, ssl_valid, preferred, date_created, " 159 " signon_realm, ssl_valid, preferred, date_created, "
166 " blacklisted_by_user, scheme) " 160 " blacklisted_by_user, scheme) "
167 "VALUES " 161 "VALUES "
168 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); 162 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
169 if (!s) {
170 NOTREACHED() << "Statement prepare failed";
171 return false;
172 }
173
174 s.BindString(COLUMN_ORIGIN_URL, form.origin.spec()); 163 s.BindString(COLUMN_ORIGIN_URL, form.origin.spec());
175 s.BindString(COLUMN_ACTION_URL, form.action.spec()); 164 s.BindString(COLUMN_ACTION_URL, form.action.spec());
176 s.BindString16(COLUMN_USERNAME_ELEMENT, form.username_element); 165 s.BindString16(COLUMN_USERNAME_ELEMENT, form.username_element);
177 s.BindString16(COLUMN_USERNAME_VALUE, form.username_value); 166 s.BindString16(COLUMN_USERNAME_VALUE, form.username_value);
178 s.BindString16(COLUMN_PASSWORD_ELEMENT, form.password_element); 167 s.BindString16(COLUMN_PASSWORD_ELEMENT, form.password_element);
179 std::string encrypted_password = EncryptedString(form.password_value); 168 std::string encrypted_password = EncryptedString(form.password_value);
180 s.BindBlob(COLUMN_PASSWORD_VALUE, encrypted_password.data(), 169 s.BindBlob(COLUMN_PASSWORD_VALUE, encrypted_password.data(),
181 static_cast<int>(encrypted_password.length())); 170 static_cast<int>(encrypted_password.length()));
182 s.BindString16(COLUMN_SUBMIT_ELEMENT, form.submit_element); 171 s.BindString16(COLUMN_SUBMIT_ELEMENT, form.submit_element);
183 s.BindString(COLUMN_SIGNON_REALM, form.signon_realm); 172 s.BindString(COLUMN_SIGNON_REALM, form.signon_realm);
184 s.BindInt(COLUMN_SSL_VALID, form.ssl_valid); 173 s.BindInt(COLUMN_SSL_VALID, form.ssl_valid);
185 s.BindInt(COLUMN_PREFERRED, form.preferred); 174 s.BindInt(COLUMN_PREFERRED, form.preferred);
186 s.BindInt64(COLUMN_DATE_CREATED, form.date_created.ToTimeT()); 175 s.BindInt64(COLUMN_DATE_CREATED, form.date_created.ToTimeT());
187 s.BindInt(COLUMN_BLACKLISTED_BY_USER, form.blacklisted_by_user); 176 s.BindInt(COLUMN_BLACKLISTED_BY_USER, form.blacklisted_by_user);
188 s.BindInt(COLUMN_SCHEME, form.scheme); 177 s.BindInt(COLUMN_SCHEME, form.scheme);
189 if (!s.Run()) { 178
190 NOTREACHED(); 179 return s.Run();
191 return false;
192 }
193 return true;
194 } 180 }
195 181
196 bool LoginDatabase::UpdateLogin(const PasswordForm& form, int* items_changed) { 182 bool LoginDatabase::UpdateLogin(const PasswordForm& form, int* items_changed) {
197 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 183 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
198 "UPDATE logins SET " 184 "UPDATE logins SET "
199 "action_url = ?, " 185 "action_url = ?, "
200 "password_value = ?, " 186 "password_value = ?, "
201 "ssl_valid = ?, " 187 "ssl_valid = ?, "
202 "preferred = ? " 188 "preferred = ? "
203 "WHERE origin_url = ? AND " 189 "WHERE origin_url = ? AND "
204 "username_element = ? AND " 190 "username_element = ? AND "
205 "username_value = ? AND " 191 "username_value = ? AND "
206 "password_element = ? AND " 192 "password_element = ? AND "
207 "signon_realm = ?")); 193 "signon_realm = ?"));
208 if (!s) {
209 NOTREACHED() << "Statement prepare failed";
210 return false;
211 }
212
213 s.BindString(0, form.action.spec()); 194 s.BindString(0, form.action.spec());
214 std::string encrypted_password = EncryptedString(form.password_value); 195 std::string encrypted_password = EncryptedString(form.password_value);
215 s.BindBlob(1, encrypted_password.data(), 196 s.BindBlob(1, encrypted_password.data(),
216 static_cast<int>(encrypted_password.length())); 197 static_cast<int>(encrypted_password.length()));
217 s.BindInt(2, form.ssl_valid); 198 s.BindInt(2, form.ssl_valid);
218 s.BindInt(3, form.preferred); 199 s.BindInt(3, form.preferred);
219 s.BindString(4, form.origin.spec()); 200 s.BindString(4, form.origin.spec());
220 s.BindString16(5, form.username_element); 201 s.BindString16(5, form.username_element);
221 s.BindString16(6, form.username_value); 202 s.BindString16(6, form.username_value);
222 s.BindString16(7, form.password_element); 203 s.BindString16(7, form.password_element);
223 s.BindString(8, form.signon_realm); 204 s.BindString(8, form.signon_realm);
224 205
225 if (!s.Run()) { 206 if (!s.Run())
226 NOTREACHED();
227 return false; 207 return false;
228 } 208
229 if (items_changed) { 209 if (items_changed)
230 *items_changed = db_.GetLastChangeCount(); 210 *items_changed = db_.GetLastChangeCount();
231 } 211
232 return true; 212 return true;
233 } 213 }
234 214
235 bool LoginDatabase::RemoveLogin(const PasswordForm& form) { 215 bool LoginDatabase::RemoveLogin(const PasswordForm& form) {
236 // Remove a login by UNIQUE-constrained fields. 216 // Remove a login by UNIQUE-constrained fields.
237 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 217 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
238 "DELETE FROM logins WHERE " 218 "DELETE FROM logins WHERE "
239 "origin_url = ? AND " 219 "origin_url = ? AND "
240 "username_element = ? AND " 220 "username_element = ? AND "
241 "username_value = ? AND " 221 "username_value = ? AND "
242 "password_element = ? AND " 222 "password_element = ? AND "
243 "submit_element = ? AND " 223 "submit_element = ? AND "
244 "signon_realm = ? ")); 224 "signon_realm = ? "));
245 if (!s) {
246 NOTREACHED() << "Statement prepare failed";
247 return false;
248 }
249
250 s.BindString(0, form.origin.spec()); 225 s.BindString(0, form.origin.spec());
251 s.BindString16(1, form.username_element); 226 s.BindString16(1, form.username_element);
252 s.BindString16(2, form.username_value); 227 s.BindString16(2, form.username_value);
253 s.BindString16(3, form.password_element); 228 s.BindString16(3, form.password_element);
254 s.BindString16(4, form.submit_element); 229 s.BindString16(4, form.submit_element);
255 s.BindString(5, form.signon_realm); 230 s.BindString(5, form.signon_realm);
256 231
257 if (!s.Run()) { 232 return s.Run();
258 NOTREACHED();
259 return false;
260 }
261 return true;
262 } 233 }
263 234
264 bool LoginDatabase::RemoveLoginsCreatedBetween(const base::Time delete_begin, 235 bool LoginDatabase::RemoveLoginsCreatedBetween(const base::Time delete_begin,
265 const base::Time delete_end) { 236 const base::Time delete_end) {
266 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 237 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
267 "DELETE FROM logins WHERE " 238 "DELETE FROM logins WHERE "
268 "date_created >= ? AND date_created < ?")); 239 "date_created >= ? AND date_created < ?"));
269 if (!s) {
270 NOTREACHED() << "Statement prepare failed";
271 return false;
272 }
273 s.BindInt64(0, delete_begin.ToTimeT()); 240 s.BindInt64(0, delete_begin.ToTimeT());
274 s.BindInt64(1, delete_end.is_null() ? std::numeric_limits<int64>::max() 241 s.BindInt64(1, delete_end.is_null() ? std::numeric_limits<int64>::max()
275 : delete_end.ToTimeT()); 242 : delete_end.ToTimeT());
276 243
277 return s.Run(); 244 return s.Run();
278 } 245 }
279 246
280 void LoginDatabase::InitPasswordFormFromStatement(PasswordForm* form, 247 void LoginDatabase::InitPasswordFormFromStatement(PasswordForm* form,
281 sql::Statement& s) const { 248 sql::Statement& s) const {
282 std::string tmp = s.ColumnString(COLUMN_ORIGIN_URL); 249 std::string tmp = s.ColumnString(COLUMN_ORIGIN_URL);
(...skipping 23 matching lines...) Expand all
306 std::vector<PasswordForm*>* forms) const { 273 std::vector<PasswordForm*>* forms) const {
307 DCHECK(forms); 274 DCHECK(forms);
308 // You *must* change LoginTableColumns if this query changes. 275 // You *must* change LoginTableColumns if this query changes.
309 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 276 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
310 "SELECT origin_url, action_url, " 277 "SELECT origin_url, action_url, "
311 "username_element, username_value, " 278 "username_element, username_value, "
312 "password_element, password_value, " 279 "password_element, password_value, "
313 "submit_element, signon_realm, ssl_valid, preferred, " 280 "submit_element, signon_realm, ssl_valid, preferred, "
314 "date_created, blacklisted_by_user, scheme FROM logins " 281 "date_created, blacklisted_by_user, scheme FROM logins "
315 "WHERE signon_realm == ? ")); 282 "WHERE signon_realm == ? "));
316 if (!s) {
317 NOTREACHED() << "Statement prepare failed";
318 return false;
319 }
320
321 s.BindString(0, form.signon_realm); 283 s.BindString(0, form.signon_realm);
322 284
323 while (s.Step()) { 285 while (s.Step()) {
324 PasswordForm* new_form = new PasswordForm(); 286 PasswordForm* new_form = new PasswordForm();
325 InitPasswordFormFromStatement(new_form, s); 287 InitPasswordFormFromStatement(new_form, s);
326 288
327 forms->push_back(new_form); 289 forms->push_back(new_form);
328 } 290 }
329 return s.Succeeded(); 291 return s.Succeeded();
330 } 292 }
331 293
332 bool LoginDatabase::GetLoginsCreatedBetween( 294 bool LoginDatabase::GetLoginsCreatedBetween(
333 const base::Time begin, 295 const base::Time begin,
334 const base::Time end, 296 const base::Time end,
335 std::vector<webkit::forms::PasswordForm*>* forms) const { 297 std::vector<webkit::forms::PasswordForm*>* forms) const {
336 DCHECK(forms); 298 DCHECK(forms);
337 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 299 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
338 "SELECT origin_url, action_url, " 300 "SELECT origin_url, action_url, "
339 "username_element, username_value, " 301 "username_element, username_value, "
340 "password_element, password_value, " 302 "password_element, password_value, "
341 "submit_element, signon_realm, ssl_valid, preferred, " 303 "submit_element, signon_realm, ssl_valid, preferred, "
342 "date_created, blacklisted_by_user, scheme FROM logins " 304 "date_created, blacklisted_by_user, scheme FROM logins "
343 "WHERE date_created >= ? AND date_created < ?" 305 "WHERE date_created >= ? AND date_created < ?"
344 "ORDER BY origin_url")); 306 "ORDER BY origin_url"));
345
346 if (!s) {
347 NOTREACHED() << "Statement prepare failed";
348 return false;
349 }
350 s.BindInt64(0, begin.ToTimeT()); 307 s.BindInt64(0, begin.ToTimeT());
351 s.BindInt64(1, end.is_null() ? std::numeric_limits<int64>::max() 308 s.BindInt64(1, end.is_null() ? std::numeric_limits<int64>::max()
352 : end.ToTimeT()); 309 : end.ToTimeT());
353 310
354 while (s.Step()) { 311 while (s.Step()) {
355 PasswordForm* new_form = new PasswordForm(); 312 PasswordForm* new_form = new PasswordForm();
356 InitPasswordFormFromStatement(new_form, s); 313 InitPasswordFormFromStatement(new_form, s);
357 314
358 forms->push_back(new_form); 315 forms->push_back(new_form);
359 } 316 }
(...skipping 15 matching lines...) Expand all
375 DCHECK(forms); 332 DCHECK(forms);
376 // You *must* change LoginTableColumns if this query changes. 333 // You *must* change LoginTableColumns if this query changes.
377 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 334 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
378 "SELECT origin_url, action_url, " 335 "SELECT origin_url, action_url, "
379 "username_element, username_value, " 336 "username_element, username_value, "
380 "password_element, password_value, " 337 "password_element, password_value, "
381 "submit_element, signon_realm, ssl_valid, preferred, " 338 "submit_element, signon_realm, ssl_valid, preferred, "
382 "date_created, blacklisted_by_user, scheme FROM logins " 339 "date_created, blacklisted_by_user, scheme FROM logins "
383 "WHERE blacklisted_by_user == ? " 340 "WHERE blacklisted_by_user == ? "
384 "ORDER BY origin_url")); 341 "ORDER BY origin_url"));
385
386 if (!s) {
387 NOTREACHED() << "Statement prepare failed";
388 return false;
389 }
390 s.BindInt(0, blacklisted ? 1 : 0); 342 s.BindInt(0, blacklisted ? 1 : 0);
391 343
392 while (s.Step()) { 344 while (s.Step()) {
393 PasswordForm* new_form = new PasswordForm(); 345 PasswordForm* new_form = new PasswordForm();
394 InitPasswordFormFromStatement(new_form, s); 346 InitPasswordFormFromStatement(new_form, s);
395 347
396 forms->push_back(new_form); 348 forms->push_back(new_form);
397 } 349 }
398 return s.Succeeded(); 350 return s.Succeeded();
399 } 351 }
400 352
401 bool LoginDatabase::DeleteAndRecreateDatabaseFile() { 353 bool LoginDatabase::DeleteAndRecreateDatabaseFile() {
402 DCHECK(db_.is_open()); 354 DCHECK(db_.is_open());
403 meta_table_.Reset(); 355 meta_table_.Reset();
404 db_.Close(); 356 db_.Close();
405 file_util::Delete(db_path_, false); 357 file_util::Delete(db_path_, false);
406 return Init(db_path_); 358 return Init(db_path_);
407 } 359 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698