| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 result.back() = ')'; | 514 result.back() = ')'; |
| 515 for (size_t i = 1; i < 2 * count + 1; i += 2) { | 515 for (size_t i = 1; i < 2 * count + 1; i += 2) { |
| 516 result[i] = '?'; | 516 result[i] = '?'; |
| 517 } | 517 } |
| 518 return result; | 518 return result; |
| 519 } | 519 } |
| 520 | 520 |
| 521 } // namespace | 521 } // namespace |
| 522 | 522 |
| 523 LoginDatabase::LoginDatabase(const base::FilePath& db_path) | 523 LoginDatabase::LoginDatabase(const base::FilePath& db_path) |
| 524 : db_path_(db_path), clear_password_values_(false) { | 524 : db_path_(db_path) {} |
| 525 } | |
| 526 | 525 |
| 527 LoginDatabase::~LoginDatabase() { | 526 LoginDatabase::~LoginDatabase() { |
| 528 } | 527 } |
| 529 | 528 |
| 530 bool LoginDatabase::Init() { | 529 bool LoginDatabase::Init() { |
| 531 // Set pragmas for a small, private database (based on WebDatabase). | 530 // Set pragmas for a small, private database (based on WebDatabase). |
| 532 db_.set_page_size(2048); | 531 db_.set_page_size(2048); |
| 533 db_.set_cache_size(32); | 532 db_.set_cache_size(32); |
| 534 db_.set_exclusive_locking(); | 533 db_.set_exclusive_locking(); |
| 535 db_.set_restrict_to_user(); | 534 db_.set_restrict_to_user(); |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 | 806 |
| 808 for (const auto& password_to_realms : passwords_to_realms) | 807 for (const auto& password_to_realms : passwords_to_realms) |
| 809 LogPasswordReuseMetrics(password_to_realms.second); | 808 LogPasswordReuseMetrics(password_to_realms.second); |
| 810 } | 809 } |
| 811 | 810 |
| 812 PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) { | 811 PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) { |
| 813 PasswordStoreChangeList list; | 812 PasswordStoreChangeList list; |
| 814 if (!DoesMatchConstraints(form)) | 813 if (!DoesMatchConstraints(form)) |
| 815 return list; | 814 return list; |
| 816 std::string encrypted_password; | 815 std::string encrypted_password; |
| 817 if (EncryptedString( | 816 if (EncryptedString(form.password_value, &encrypted_password) != |
| 818 clear_password_values_ ? base::string16() : form.password_value, | 817 ENCRYPTION_RESULT_SUCCESS) |
| 819 &encrypted_password) != ENCRYPTION_RESULT_SUCCESS) | |
| 820 return list; | 818 return list; |
| 821 | 819 |
| 822 DCHECK(!add_statement_.empty()); | 820 DCHECK(!add_statement_.empty()); |
| 823 sql::Statement s( | 821 sql::Statement s( |
| 824 db_.GetCachedStatement(SQL_FROM_HERE, add_statement_.c_str())); | 822 db_.GetCachedStatement(SQL_FROM_HERE, add_statement_.c_str())); |
| 825 BindAddStatement(form, encrypted_password, &s); | 823 BindAddStatement(form, encrypted_password, &s); |
| 826 db_.set_error_callback(base::Bind(&AddCallback)); | 824 db_.set_error_callback(base::Bind(&AddCallback)); |
| 827 const bool success = s.Run(); | 825 const bool success = s.Run(); |
| 828 db_.reset_error_callback(); | 826 db_.reset_error_callback(); |
| 829 if (success) { | 827 if (success) { |
| 830 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); | 828 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); |
| 831 return list; | 829 return list; |
| 832 } | 830 } |
| 833 // Repeat the same statement but with REPLACE semantic. | 831 // Repeat the same statement but with REPLACE semantic. |
| 834 DCHECK(!add_replace_statement_.empty()); | 832 DCHECK(!add_replace_statement_.empty()); |
| 835 s.Assign( | 833 s.Assign( |
| 836 db_.GetCachedStatement(SQL_FROM_HERE, add_replace_statement_.c_str())); | 834 db_.GetCachedStatement(SQL_FROM_HERE, add_replace_statement_.c_str())); |
| 837 BindAddStatement(form, encrypted_password, &s); | 835 BindAddStatement(form, encrypted_password, &s); |
| 838 if (s.Run()) { | 836 if (s.Run()) { |
| 839 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); | 837 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); |
| 840 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); | 838 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); |
| 841 } | 839 } |
| 842 return list; | 840 return list; |
| 843 } | 841 } |
| 844 | 842 |
| 845 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { | 843 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { |
| 846 std::string encrypted_password; | 844 std::string encrypted_password; |
| 847 if (EncryptedString( | 845 if (EncryptedString(form.password_value, &encrypted_password) != |
| 848 clear_password_values_ ? base::string16() : form.password_value, | 846 ENCRYPTION_RESULT_SUCCESS) |
| 849 &encrypted_password) != ENCRYPTION_RESULT_SUCCESS) | |
| 850 return PasswordStoreChangeList(); | 847 return PasswordStoreChangeList(); |
| 851 | 848 |
| 852 #if defined(OS_IOS) | 849 #if defined(OS_IOS) |
| 853 DeleteEncryptedPassword(form); | 850 DeleteEncryptedPassword(form); |
| 854 #endif | 851 #endif |
| 855 // Replacement is necessary to deal with updating imported credentials. See | 852 // Replacement is necessary to deal with updating imported credentials. See |
| 856 // crbug.com/349138 for details. | 853 // crbug.com/349138 for details. |
| 857 DCHECK(!update_statement_.empty()); | 854 DCHECK(!update_statement_.empty()); |
| 858 sql::Statement s( | 855 sql::Statement s( |
| 859 db_.GetCachedStatement(SQL_FROM_HERE, update_statement_.c_str())); | 856 db_.GetCachedStatement(SQL_FROM_HERE, update_statement_.c_str())); |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 DCHECK(blacklisted_statement_.empty()); | 1373 DCHECK(blacklisted_statement_.empty()); |
| 1377 blacklisted_statement_ = | 1374 blacklisted_statement_ = |
| 1378 "SELECT " + all_column_names + | 1375 "SELECT " + all_column_names + |
| 1379 " FROM logins WHERE blacklisted_by_user == ? ORDER BY origin_url"; | 1376 " FROM logins WHERE blacklisted_by_user == ? ORDER BY origin_url"; |
| 1380 DCHECK(encrypted_statement_.empty()); | 1377 DCHECK(encrypted_statement_.empty()); |
| 1381 encrypted_statement_ = | 1378 encrypted_statement_ = |
| 1382 "SELECT password_value FROM logins WHERE " + all_unique_key_column_names; | 1379 "SELECT password_value FROM logins WHERE " + all_unique_key_column_names; |
| 1383 } | 1380 } |
| 1384 | 1381 |
| 1385 } // namespace password_manager | 1382 } // namespace password_manager |
| OLD | NEW |