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

Unified Diff: chrome/browser/history/download_database.cc

Issue 319703002: Add mime type information to the download database (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix DownloadUIController_HistoryDownload test failure Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/history/download_database.h ('k') | chrome/browser/history/download_row.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/history/download_database.cc
diff --git a/chrome/browser/history/download_database.cc b/chrome/browser/history/download_database.cc
index ae63f63273c142a93c8f34b7e64eefeca8410d57..4fa418e1b5cbaf33389a074d3244fa46c303d346 100644
--- a/chrome/browser/history/download_database.cc
+++ b/chrome/browser/history/download_database.cc
@@ -38,35 +38,6 @@ enum DroppedReason {
DROPPED_REASON_MAX
};
-static const char kSchema[] =
- "CREATE TABLE downloads ("
- "id INTEGER PRIMARY KEY," // Primary key.
- "current_path LONGVARCHAR NOT NULL," // Current disk location
- "target_path LONGVARCHAR NOT NULL," // Final disk location
- "start_time INTEGER NOT NULL," // When the download was started.
- "received_bytes INTEGER NOT NULL," // Total size downloaded.
- "total_bytes INTEGER NOT NULL," // Total size of the download.
- "state INTEGER NOT NULL," // 1=complete, 4=interrupted
- "danger_type INTEGER NOT NULL, " // Danger type, validated.
- "interrupt_reason INTEGER NOT NULL," // content::DownloadInterruptReason
- "end_time INTEGER NOT NULL," // When the download completed.
- "opened INTEGER NOT NULL," // 1 if it has ever been opened else 0
- "referrer VARCHAR NOT NULL," // HTTP Referrer
- "by_ext_id VARCHAR NOT NULL," // ID of extension that started the
- // download
- "by_ext_name VARCHAR NOT NULL," // name of extension
- "etag VARCHAR NOT NULL," // ETag
- "last_modified VARCHAR NOT NULL)"; // Last-Modified header
-
-static const char kUrlChainSchema[] =
- "CREATE TABLE downloads_url_chains ("
- "id INTEGER NOT NULL," // downloads.id.
- "chain_index INTEGER NOT NULL," // Index of url in chain
- // 0 is initial target,
- // MAX is target after redirects.
- "url LONGVARCHAR NOT NULL, " // URL.
- "PRIMARY KEY (id, chain_index) )";
-
#if defined(OS_POSIX)
// Binds/reads the given file path to the given column of the given statement.
@@ -213,6 +184,13 @@ bool DownloadDatabase::EnsureColumnExists(
GetDB().Execute(add_col.c_str());
}
+bool DownloadDatabase::MigrateMimeType() {
+ return EnsureColumnExists("mime_type", "VARCHAR(255) NOT NULL"
+ " DEFAULT \"\"") &&
+ EnsureColumnExists("original_mime_type", "VARCHAR(255) NOT NULL"
+ " DEFAULT \"\"");
+}
+
bool DownloadDatabase::MigrateDownloadsState() {
sql::Statement statement(GetDB().GetUniqueStatement(
"UPDATE downloads SET state=? WHERE state=?"));
@@ -227,8 +205,32 @@ bool DownloadDatabase::MigrateDownloadsReasonPathsAndDangerType() {
if (!GetDB().Execute("ALTER TABLE downloads RENAME TO downloads_tmp"))
return false;
+ const char kReasonPathDangerSchema[] =
+ "CREATE TABLE downloads ("
+ "id INTEGER PRIMARY KEY,"
+ "current_path LONGVARCHAR NOT NULL,"
+ "target_path LONGVARCHAR NOT NULL,"
+ "start_time INTEGER NOT NULL,"
+ "received_bytes INTEGER NOT NULL,"
+ "total_bytes INTEGER NOT NULL,"
+ "state INTEGER NOT NULL,"
+ "danger_type INTEGER NOT NULL,"
+ "interrupt_reason INTEGER NOT NULL,"
+ "end_time INTEGER NOT NULL,"
+ "opened INTEGER NOT NULL)";
+
+ static const char kReasonPathDangerUrlChainSchema[] =
+ "CREATE TABLE downloads_url_chains ("
+ "id INTEGER NOT NULL," // downloads.id.
+ "chain_index INTEGER NOT NULL," // Index of url in chain
+ // 0 is initial target,
+ // MAX is target after redirects.
+ "url LONGVARCHAR NOT NULL, " // URL.
+ "PRIMARY KEY (id, chain_index) )";
+
+
// Recreate main table.
- if (!GetDB().Execute(kSchema))
+ if (!GetDB().Execute(kReasonPathDangerSchema))
return false;
// Populate it. As we do so, we transform the time values from time_t
@@ -238,8 +240,7 @@ bool DownloadDatabase::MigrateDownloadsReasonPathsAndDangerType() {
sql::Statement statement_populate(GetDB().GetUniqueStatement(
"INSERT INTO downloads "
"( id, current_path, target_path, start_time, received_bytes, "
- " total_bytes, state, danger_type, interrupt_reason, end_time, opened, "
- " referrer, by_ext_id, by_ext_name, etag, last_modified ) "
+ " total_bytes, state, danger_type, interrupt_reason, end_time, opened ) "
"SELECT id, full_path, full_path, "
" CASE start_time WHEN 0 THEN 0 ELSE "
" (start_time + 11644473600) * 1000000 END, "
@@ -247,7 +248,7 @@ bool DownloadDatabase::MigrateDownloadsReasonPathsAndDangerType() {
" state, ?, ?, "
" CASE end_time WHEN 0 THEN 0 ELSE "
" (end_time + 11644473600) * 1000000 END, "
- " opened, \"\", \"\", \"\", \"\", \"\" "
+ " opened "
"FROM downloads_tmp"));
statement_populate.BindInt(0, content::DOWNLOAD_INTERRUPT_REASON_NONE);
statement_populate.BindInt(1, kDangerTypeNotDangerous);
@@ -255,7 +256,7 @@ bool DownloadDatabase::MigrateDownloadsReasonPathsAndDangerType() {
return false;
// Create new chain table and populate it.
- if (!GetDB().Execute(kUrlChainSchema))
+ if (!GetDB().Execute(kReasonPathDangerUrlChainSchema))
return false;
if (!GetDB().Execute("INSERT INTO downloads_url_chains "
@@ -285,6 +286,38 @@ bool DownloadDatabase::MigrateDownloadValidators() {
}
bool DownloadDatabase::InitDownloadTable() {
+ const char kSchema[] =
+ "CREATE TABLE downloads ("
+ "id INTEGER PRIMARY KEY," // Primary key.
+ "current_path LONGVARCHAR NOT NULL," // Current disk location
+ "target_path LONGVARCHAR NOT NULL," // Final disk location
+ "start_time INTEGER NOT NULL," // When the download was started.
+ "received_bytes INTEGER NOT NULL," // Total size downloaded.
+ "total_bytes INTEGER NOT NULL," // Total size of the download.
+ "state INTEGER NOT NULL," // 1=complete, 4=interrupted
+ "danger_type INTEGER NOT NULL," // Danger type, validated.
+ "interrupt_reason INTEGER NOT NULL," // content::DownloadInterruptReason
+ "end_time INTEGER NOT NULL," // When the download completed.
+ "opened INTEGER NOT NULL," // 1 if it has ever been opened
+ // else 0
+ "referrer VARCHAR NOT NULL," // HTTP Referrer
+ "by_ext_id VARCHAR NOT NULL," // ID of extension that started the
+ // download
+ "by_ext_name VARCHAR NOT NULL," // name of extension
+ "etag VARCHAR NOT NULL," // ETag
+ "last_modified VARCHAR NOT NULL," // Last-Modified header
+ "mime_type VARCHAR(255) NOT NULL," // MIME type.
+ "original_mime_type VARCHAR(255) NOT NULL)"; // Original MIME type.
+
+ const char kUrlChainSchema[] =
+ "CREATE TABLE downloads_url_chains ("
+ "id INTEGER NOT NULL," // downloads.id.
+ "chain_index INTEGER NOT NULL," // Index of url in chain
+ // 0 is initial target,
+ // MAX is target after redirects.
+ "url LONGVARCHAR NOT NULL, " // URL.
+ "PRIMARY KEY (id, chain_index) )";
+
if (GetDB().DoesTableExist("downloads")) {
return EnsureColumnExists("end_time", "INTEGER NOT NULL DEFAULT 0") &&
EnsureColumnExists("opened", "INTEGER NOT NULL DEFAULT 0");
@@ -327,7 +360,9 @@ void DownloadDatabase::QueryDownloads(
std::map<uint32, DownloadRow*> info_map;
sql::Statement statement_main(GetDB().GetCachedStatement(SQL_FROM_HERE,
- "SELECT id, current_path, target_path, start_time, received_bytes, "
+ "SELECT id, current_path, target_path, "
+ "mime_type, original_mime_type, "
+ "start_time, received_bytes, "
"total_bytes, state, danger_type, interrupt_reason, end_time, opened, "
"referrer, by_ext_id, by_ext_name, etag, last_modified "
"FROM downloads ORDER BY start_time"));
@@ -343,6 +378,8 @@ void DownloadDatabase::QueryDownloads(
info->id = static_cast<uint32>(signed_id);
info->current_path = ColumnFilePath(statement_main, column++);
info->target_path = ColumnFilePath(statement_main, column++);
+ info->mime_type = statement_main.ColumnString(column++);
+ info->original_mime_type = statement_main.ColumnString(column++);
info->start_time = base::Time::FromInternalValue(
statement_main.ColumnInt64(column++));
info->received_bytes = statement_main.ColumnInt64(column++);
@@ -463,13 +500,17 @@ bool DownloadDatabase::UpdateDownload(const DownloadRow& data) {
sql::Statement statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
"UPDATE downloads "
- "SET current_path=?, target_path=?, received_bytes=?, state=?, "
+ "SET current_path=?, target_path=?, "
+ "mime_type=?, original_mime_type=?, "
+ "received_bytes=?, state=?, "
"danger_type=?, interrupt_reason=?, end_time=?, total_bytes=?, "
"opened=?, by_ext_id=?, by_ext_name=?, etag=?, last_modified=? "
"WHERE id=?"));
int column = 0;
BindFilePath(statement, data.current_path, column++);
BindFilePath(statement, data.target_path, column++);
+ statement.BindString(column++, data.mime_type);
+ statement.BindString(column++, data.original_mime_type);
statement.BindInt64(column++, data.received_bytes);
statement.BindInt(column++, state);
statement.BindInt(column++, danger_type);
@@ -519,16 +560,20 @@ bool DownloadDatabase::CreateDownload(const DownloadRow& info) {
sql::Statement statement_insert(GetDB().GetCachedStatement(
SQL_FROM_HERE,
"INSERT INTO downloads "
- "(id, current_path, target_path, start_time, "
+ "(id, current_path, target_path, "
+ " mime_type, original_mime_type, "
+ " start_time, "
" received_bytes, total_bytes, state, danger_type, interrupt_reason, "
" end_time, opened, referrer, by_ext_id, by_ext_name, etag, "
" last_modified) "
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
int column = 0;
statement_insert.BindInt(column++, info.id);
BindFilePath(statement_insert, info.current_path, column++);
BindFilePath(statement_insert, info.target_path, column++);
+ statement_insert.BindString(column++, info.mime_type);
+ statement_insert.BindString(column++, info.original_mime_type);
statement_insert.BindInt64(column++, info.start_time.ToInternalValue());
statement_insert.BindInt64(column++, info.received_bytes);
statement_insert.BindInt64(column++, info.total_bytes);
« no previous file with comments | « chrome/browser/history/download_database.h ('k') | chrome/browser/history/download_row.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698