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 |