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

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

Issue 2265103002: LoginDatabase::Init: rollback before closing a DB (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CreateUniqueTempDir Created 4 years, 4 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 <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
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_, &current_version); 573 bool migration_success = FixVersionIfNeeded(&db_, &current_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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698