| 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 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 LOG(ERROR) << "Unable to start a transaction."; | 533 LOG(ERROR) << "Unable to start a transaction."; |
| 534 db_.Close(); | 534 db_.Close(); |
| 535 return false; | 535 return false; |
| 536 } | 536 } |
| 537 | 537 |
| 538 // Check the database version. | 538 // Check the database version. |
| 539 if (!meta_table_.Init(&db_, kCurrentVersionNumber, | 539 if (!meta_table_.Init(&db_, kCurrentVersionNumber, |
| 540 kCompatibleVersionNumber)) { | 540 kCompatibleVersionNumber)) { |
| 541 LogDatabaseInitError(META_TABLE_INIT_ERROR); | 541 LogDatabaseInitError(META_TABLE_INIT_ERROR); |
| 542 LOG(ERROR) << "Unable to create the meta table."; | 542 LOG(ERROR) << "Unable to create the meta table."; |
| 543 transaction.Rollback(); |
| 543 db_.Close(); | 544 db_.Close(); |
| 544 return false; | 545 return false; |
| 545 } | 546 } |
| 546 if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { | 547 if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { |
| 547 LogDatabaseInitError(INCOMPATIBLE_VERSION); | 548 LogDatabaseInitError(INCOMPATIBLE_VERSION); |
| 548 LOG(ERROR) << "Password store database is too new, kCurrentVersionNumber=" | 549 LOG(ERROR) << "Password store database is too new, kCurrentVersionNumber=" |
| 549 << kCurrentVersionNumber << ", GetCompatibleVersionNumber=" | 550 << kCurrentVersionNumber << ", GetCompatibleVersionNumber=" |
| 550 << meta_table_.GetCompatibleVersionNumber(); | 551 << meta_table_.GetCompatibleVersionNumber(); |
| 552 transaction.Rollback(); |
| 551 db_.Close(); | 553 db_.Close(); |
| 552 return false; | 554 return false; |
| 553 } | 555 } |
| 554 | 556 |
| 555 SQLTableBuilder builder; | 557 SQLTableBuilder builder; |
| 556 InitializeBuilder(&builder); | 558 InitializeBuilder(&builder); |
| 557 InitializeStatementStrings(builder); | 559 InitializeStatementStrings(builder); |
| 558 | 560 |
| 559 if (!db_.DoesTableExist("logins")) { | 561 if (!db_.DoesTableExist("logins")) { |
| 560 if (!builder.CreateTable(&db_)) { | 562 if (!builder.CreateTable(&db_)) { |
| 561 VLOG(0) << "Failed to create the 'logins' table"; | 563 VLOG(0) << "Failed to create the 'logins' table"; |
| 564 transaction.Rollback(); |
| 562 db_.Close(); | 565 db_.Close(); |
| 563 return false; | 566 return false; |
| 564 } | 567 } |
| 565 } | 568 } |
| 566 | 569 |
| 567 stats_table_.Init(&db_); | 570 stats_table_.Init(&db_); |
| 568 | 571 |
| 569 int current_version = meta_table_.GetVersionNumber(); | 572 int current_version = meta_table_.GetVersionNumber(); |
| 570 bool migration_success = FixVersionIfNeeded(&db_, ¤t_version); | 573 bool migration_success = FixVersionIfNeeded(&db_, ¤t_version); |
| 571 DCHECK_LE(current_version, kCurrentVersionNumber); | 574 DCHECK_LE(current_version, kCurrentVersionNumber); |
| 572 | 575 |
| 573 // If the file on disk is an older database version, bring it up to date. | 576 // If the file on disk is an older database version, bring it up to date. |
| 574 if (migration_success && current_version < kCurrentVersionNumber) { | 577 if (migration_success && current_version < kCurrentVersionNumber) { |
| 575 migration_success = MigrateLogins( | 578 migration_success = MigrateLogins( |
| 576 base::checked_cast<unsigned>(current_version), &builder, &db_); | 579 base::checked_cast<unsigned>(current_version), &builder, &db_); |
| 577 } | 580 } |
| 578 if (migration_success && current_version <= 15) { | 581 if (migration_success && current_version <= 15) { |
| 579 migration_success = stats_table_.MigrateToVersion(16); | 582 migration_success = stats_table_.MigrateToVersion(16); |
| 580 } | 583 } |
| 581 if (migration_success) { | 584 if (migration_success) { |
| 582 meta_table_.SetCompatibleVersionNumber(kCompatibleVersionNumber); | 585 meta_table_.SetCompatibleVersionNumber(kCompatibleVersionNumber); |
| 583 meta_table_.SetVersionNumber(kCurrentVersionNumber); | 586 meta_table_.SetVersionNumber(kCurrentVersionNumber); |
| 584 } else { | 587 } else { |
| 585 LogDatabaseInitError(MIGRATION_ERROR); | 588 LogDatabaseInitError(MIGRATION_ERROR); |
| 586 UMA_HISTOGRAM_SPARSE_SLOWLY("PasswordManager.LoginDatabaseFailedVersion", | 589 UMA_HISTOGRAM_SPARSE_SLOWLY("PasswordManager.LoginDatabaseFailedVersion", |
| 587 meta_table_.GetVersionNumber()); | 590 meta_table_.GetVersionNumber()); |
| 588 LOG(ERROR) << "Unable to migrate database from " | 591 LOG(ERROR) << "Unable to migrate database from " |
| 589 << meta_table_.GetVersionNumber() << " to " | 592 << meta_table_.GetVersionNumber() << " to " |
| 590 << kCurrentVersionNumber; | 593 << kCurrentVersionNumber; |
| 594 transaction.Rollback(); |
| 591 db_.Close(); | 595 db_.Close(); |
| 592 return false; | 596 return false; |
| 593 } | 597 } |
| 594 | 598 |
| 595 if (!stats_table_.CreateTableIfNecessary()) { | 599 if (!stats_table_.CreateTableIfNecessary()) { |
| 596 LogDatabaseInitError(INIT_STATS_ERROR); | 600 LogDatabaseInitError(INIT_STATS_ERROR); |
| 597 LOG(ERROR) << "Unable to create the stats table."; | 601 LOG(ERROR) << "Unable to create the stats table."; |
| 602 transaction.Rollback(); |
| 598 db_.Close(); | 603 db_.Close(); |
| 599 return false; | 604 return false; |
| 600 } | 605 } |
| 601 | 606 |
| 602 if (!transaction.Commit()) { | 607 if (!transaction.Commit()) { |
| 603 LogDatabaseInitError(COMMIT_TRANSACTION_ERROR); | 608 LogDatabaseInitError(COMMIT_TRANSACTION_ERROR); |
| 604 LOG(ERROR) << "Unable to commit a transaction."; | 609 LOG(ERROR) << "Unable to commit a transaction."; |
| 605 db_.Close(); | 610 db_.Close(); |
| 606 return false; | 611 return false; |
| 607 } | 612 } |
| (...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1298 DCHECK(blacklisted_statement_.empty()); | 1303 DCHECK(blacklisted_statement_.empty()); |
| 1299 blacklisted_statement_ = | 1304 blacklisted_statement_ = |
| 1300 "SELECT " + all_column_names + | 1305 "SELECT " + all_column_names + |
| 1301 " FROM logins WHERE blacklisted_by_user == ? ORDER BY origin_url"; | 1306 " FROM logins WHERE blacklisted_by_user == ? ORDER BY origin_url"; |
| 1302 DCHECK(encrypted_statement_.empty()); | 1307 DCHECK(encrypted_statement_.empty()); |
| 1303 encrypted_statement_ = | 1308 encrypted_statement_ = |
| 1304 "SELECT password_value FROM logins WHERE " + all_unique_key_column_names; | 1309 "SELECT password_value FROM logins WHERE " + all_unique_key_column_names; |
| 1305 } | 1310 } |
| 1306 | 1311 |
| 1307 } // namespace password_manager | 1312 } // namespace password_manager |
| OLD | NEW |