Index: chrome/browser/webdata/web_database.cc |
diff --git a/chrome/browser/webdata/web_database.cc b/chrome/browser/webdata/web_database.cc |
deleted file mode 100644 |
index 7464ffeb05731c2977b9029e0e50b90aa9db1e8e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/webdata/web_database.cc |
+++ /dev/null |
@@ -1,173 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/webdata/web_database.h" |
- |
-#include <algorithm> |
- |
-#include "base/stl_util.h" |
-#include "content/public/browser/notification_service.h" |
-#include "sql/statement.h" |
-#include "sql/transaction.h" |
- |
-// Current version number. Note: when changing the current version number, |
-// corresponding changes must happen in the unit tests, and new migration test |
-// added. See |WebDatabaseMigrationTest::kCurrentTestedVersionNumber|. |
-// static |
-const int WebDatabase::kCurrentVersionNumber = 49; |
- |
-namespace { |
- |
-const int kCompatibleVersionNumber = 48; |
- |
-// Change the version number and possibly the compatibility version of |
-// |meta_table_|. |
-void ChangeVersion(sql::MetaTable* meta_table, |
- int version_num, |
- bool update_compatible_version_num) { |
- meta_table->SetVersionNumber(version_num); |
- if (update_compatible_version_num) { |
- meta_table->SetCompatibleVersionNumber( |
- std::min(version_num, kCompatibleVersionNumber)); |
- } |
-} |
- |
-// Outputs the failed version number as a warning and always returns |
-// |sql::INIT_FAILURE|. |
-sql::InitStatus FailedMigrationTo(int version_num) { |
- LOG(WARNING) << "Unable to update web database to version " |
- << version_num << "."; |
- NOTREACHED(); |
- return sql::INIT_FAILURE; |
-} |
- |
-} // namespace |
- |
-WebDatabase::WebDatabase() {} |
- |
-WebDatabase::~WebDatabase() { |
-} |
- |
-void WebDatabase::AddTable(WebDatabaseTable* table) { |
- tables_[table->GetTypeKey()] = table; |
-} |
- |
-WebDatabaseTable* WebDatabase::GetTable(WebDatabaseTable::TypeKey key) { |
- return tables_[key]; |
-} |
- |
-void WebDatabase::BeginTransaction() { |
- db_.BeginTransaction(); |
-} |
- |
-void WebDatabase::CommitTransaction() { |
- db_.CommitTransaction(); |
-} |
- |
-sql::Connection* WebDatabase::GetSQLConnection() { |
- return &db_; |
-} |
- |
-sql::InitStatus WebDatabase::Init(const base::FilePath& db_name) { |
- // When running in unit tests, there is already a NotificationService object. |
- // Since only one can exist at a time per thread, check first. |
- if (!content::NotificationService::current()) |
- notification_service_.reset(content::NotificationService::Create()); |
- |
- db_.set_error_histogram_name("Sqlite.Web.Error"); |
- |
- // We don't store that much data in the tables so use a small page size. |
- // This provides a large benefit for empty tables (which is very likely with |
- // the tables we create). |
- db_.set_page_size(2048); |
- |
- // We shouldn't have much data and what access we currently have is quite |
- // infrequent. So we go with a small cache size. |
- db_.set_cache_size(32); |
- |
- // Run the database in exclusive mode. Nobody else should be accessing the |
- // database while we're running, and this will give somewhat improved perf. |
- db_.set_exclusive_locking(); |
- |
- if (!db_.Open(db_name)) |
- return sql::INIT_FAILURE; |
- |
- // Initialize various tables |
- sql::Transaction transaction(&db_); |
- if (!transaction.Begin()) |
- return sql::INIT_FAILURE; |
- |
- // Version check. |
- if (!meta_table_.Init(&db_, kCurrentVersionNumber, kCompatibleVersionNumber)) |
- return sql::INIT_FAILURE; |
- if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { |
- LOG(WARNING) << "Web database is too new."; |
- return sql::INIT_TOO_NEW; |
- } |
- |
- // Initialize the tables. |
- for (TableMap::iterator it = tables_.begin(); |
- it != tables_.end(); |
- ++it) { |
- if (!it->second->Init(&db_, &meta_table_)) { |
- LOG(WARNING) << "Unable to initialize the web database."; |
- return sql::INIT_FAILURE; |
- } |
- } |
- |
- // If the file on disk is an older database version, bring it up to date. |
- // If the migration fails we return an error to caller and do not commit |
- // the migration. |
- sql::InitStatus migration_status = MigrateOldVersionsAsNeeded(); |
- if (migration_status != sql::INIT_OK) |
- return migration_status; |
- |
- return transaction.Commit() ? sql::INIT_OK : sql::INIT_FAILURE; |
-} |
- |
-sql::InitStatus WebDatabase::MigrateOldVersionsAsNeeded() { |
- // Some malware used to lower the version number, causing migration to |
- // fail. Ensure the version number is at least as high as the compatible |
- // version number. |
- int current_version = std::max(meta_table_.GetVersionNumber(), |
- meta_table_.GetCompatibleVersionNumber()); |
- if (current_version > meta_table_.GetVersionNumber()) |
- ChangeVersion(&meta_table_, current_version, false); |
- |
- if (current_version < 20) { |
- // Versions 1 - 19 are unhandled. Version numbers greater than |
- // kCurrentVersionNumber should have already been weeded out by the caller. |
- // |
- // When the version is too old, we return failure error code. The schema |
- // is too out of date to migrate. |
- // |
- // There should not be a released product that makes a database too old to |
- // migrate. If we do encounter such a legacy database, we will need a |
- // better solution to handle it (i.e., pop up a dialog to tell the user, |
- // erase all their prefs and start over, etc.). |
- LOG(WARNING) << "Web database version " << current_version << |
- " is too old to handle."; |
- NOTREACHED(); |
- return sql::INIT_FAILURE; |
- } |
- |
- for (int next_version = current_version + 1; |
- next_version <= kCurrentVersionNumber; |
- ++next_version) { |
- // Give each table a chance to migrate to this version. |
- for (TableMap::iterator it = tables_.begin(); |
- it != tables_.end(); |
- ++it) { |
- // Any of the tables may set this to true, but by default it is false. |
- bool update_compatible_version = false; |
- if (!it->second->MigrateToVersion(next_version, |
- &update_compatible_version)) { |
- return FailedMigrationTo(next_version); |
- } |
- |
- ChangeVersion(&meta_table_, next_version, update_compatible_version); |
- } |
- } |
- return sql::INIT_OK; |
-} |