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

Side by Side Diff: components/password_manager/core/browser/login_database.cc

Issue 1192493005: Encrypt password values in LoginDatabase on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 5 years, 6 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 2014 The Chromium Authors. All rights reserved. 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 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 "components/password_manager/core/browser/login_database.h" 5 #include "components/password_manager/core/browser/login_database.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 192
193 bool CreateIndexOnSignonRealm(sql::Connection* db, const char* table_name) { 193 bool CreateIndexOnSignonRealm(sql::Connection* db, const char* table_name) {
194 std::string query = base::StringPrintf( 194 std::string query = base::StringPrintf(
195 "CREATE INDEX logins_signon ON %s (signon_realm)", table_name); 195 "CREATE INDEX logins_signon ON %s (signon_realm)", table_name);
196 return db->Execute(query.c_str()); 196 return db->Execute(query.c_str());
197 } 197 }
198 198
199 } // namespace 199 } // namespace
200 200
201 LoginDatabase::LoginDatabase(const base::FilePath& db_path) 201 LoginDatabase::LoginDatabase(const base::FilePath& db_path)
202 : db_path_(db_path) { 202 : db_path_(db_path), clear_password_values_(false) {
203 } 203 }
204 204
205 LoginDatabase::~LoginDatabase() { 205 LoginDatabase::~LoginDatabase() {
206 } 206 }
207 207
208 bool LoginDatabase::Init() { 208 bool LoginDatabase::Init() {
209 // Set pragmas for a small, private database (based on WebDatabase). 209 // Set pragmas for a small, private database (based on WebDatabase).
210 db_.set_page_size(2048); 210 db_.set_page_size(2048);
211 db_.set_cache_size(32); 211 db_.set_cache_size(32);
212 db_.set_exclusive_locking(); 212 db_.set_exclusive_locking();
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 "PasswordManager.EmptyUsernames.WithoutCorrespondingNonempty", 527 "PasswordManager.EmptyUsernames.WithoutCorrespondingNonempty",
528 num_entries); 528 num_entries);
529 } 529 }
530 } 530 }
531 531
532 PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) { 532 PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) {
533 PasswordStoreChangeList list; 533 PasswordStoreChangeList list;
534 if (!DoesMatchConstraints(form)) 534 if (!DoesMatchConstraints(form))
535 return list; 535 return list;
536 std::string encrypted_password; 536 std::string encrypted_password;
537 if (EncryptedString(form.password_value, &encrypted_password) != 537 if (EncryptedString(
538 ENCRYPTION_RESULT_SUCCESS) 538 clear_password_values_ ? base::string16() : form.password_value,
539 &encrypted_password) != ENCRYPTION_RESULT_SUCCESS)
539 return list; 540 return list;
540 541
541 // You *must* change LoginTableColumns if this query changes. 542 // You *must* change LoginTableColumns if this query changes.
542 sql::Statement s(db_.GetCachedStatement( 543 sql::Statement s(db_.GetCachedStatement(
543 SQL_FROM_HERE, 544 SQL_FROM_HERE,
544 "INSERT INTO logins " 545 "INSERT INTO logins "
545 "(origin_url, action_url, username_element, username_value, " 546 "(origin_url, action_url, username_element, username_value, "
546 " password_element, password_value, submit_element, " 547 " password_element, password_value, submit_element, "
547 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 548 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
548 " scheme, password_type, possible_usernames, times_used, form_data, " 549 " scheme, password_type, possible_usernames, times_used, form_data, "
(...skipping 22 matching lines...) Expand all
571 BindAddStatement(form, encrypted_password, &s); 572 BindAddStatement(form, encrypted_password, &s);
572 if (s.Run()) { 573 if (s.Run()) {
573 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); 574 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
574 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); 575 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form));
575 } 576 }
576 return list; 577 return list;
577 } 578 }
578 579
579 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { 580 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
580 std::string encrypted_password; 581 std::string encrypted_password;
581 if (EncryptedString(form.password_value, &encrypted_password) != 582 if (EncryptedString(
582 ENCRYPTION_RESULT_SUCCESS) 583 clear_password_values_ ? base::string16() : form.password_value,
584 &encrypted_password) != ENCRYPTION_RESULT_SUCCESS)
583 return PasswordStoreChangeList(); 585 return PasswordStoreChangeList();
584 586
585 // Replacement is necessary to deal with updating imported credentials. See 587 // Replacement is necessary to deal with updating imported credentials. See
586 // crbug.com/349138 for details. 588 // crbug.com/349138 for details.
587 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, 589 sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
588 "UPDATE OR REPLACE logins SET " 590 "UPDATE OR REPLACE logins SET "
589 "action_url = ?, " 591 "action_url = ?, "
590 "password_value = ?, " 592 "password_value = ?, "
591 "ssl_valid = ?, " 593 "ssl_valid = ?, "
592 "preferred = ?, " 594 "preferred = ?, "
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 UMA_HISTOGRAM_ENUMERATION("PasswordManager.PslDomainMatchTriggering", 957 UMA_HISTOGRAM_ENUMERATION("PasswordManager.PslDomainMatchTriggering",
956 psl_domain_match_metric, PSL_DOMAIN_MATCH_COUNT); 958 psl_domain_match_metric, PSL_DOMAIN_MATCH_COUNT);
957 } 959 }
958 960
959 if (!statement->Succeeded()) 961 if (!statement->Succeeded())
960 return false; 962 return false;
961 return true; 963 return true;
962 } 964 }
963 965
964 } // namespace password_manager 966 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698