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

Unified Diff: components/offline_pages/core/background/request_queue_store_sql.cc

Issue 2713013002: Track original URL when downloading a redirected page (Closed)
Patch Set: A little update Created 3 years, 10 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
Index: components/offline_pages/core/background/request_queue_store_sql.cc
diff --git a/components/offline_pages/core/background/request_queue_store_sql.cc b/components/offline_pages/core/background/request_queue_store_sql.cc
index 5e5672a595fc1cc2765463c8c8cc905a35c544e0..099f774180f61ad384ae829e21623ab7d434421f 100644
--- a/components/offline_pages/core/background/request_queue_store_sql.cc
+++ b/components/offline_pages/core/background/request_queue_store_sql.cc
@@ -42,26 +42,63 @@ bool CreateRequestQueueTable(sql::Connection* db) {
" state INTEGER NOT NULL DEFAULT 0,"
" url VARCHAR NOT NULL,"
" client_namespace VARCHAR NOT NULL,"
- " client_id VARCHAR NOT NULL"
+ " client_id VARCHAR NOT NULL,"
+ " original_url VARCHAR NOT NULL DEFAULT ''"
")";
return db->Execute(kSql);
}
+bool UpgradeWithQuery(sql::Connection* db, const char* upgrade_sql) {
+ if (!db->Execute("ALTER TABLE " REQUEST_QUEUE_TABLE_NAME
+ " RENAME TO temp_" REQUEST_QUEUE_TABLE_NAME)) {
+ return false;
+ }
+ if (!CreateRequestQueueTable(db))
+ return false;
+ if (!db->Execute(upgrade_sql))
+ return false;
+ return db->Execute("DROP TABLE IF EXISTS temp_" REQUEST_QUEUE_TABLE_NAME);
+}
+
+bool UpgradeFrom57(sql::Connection* db) {
+ const char kSql[] =
+ "INSERT INTO " REQUEST_QUEUE_TABLE_NAME
+ " (request_id, creation_time, activation_time, last_attempt_time, "
+ "started_attempt_count, completed_attempt_count, state, url, "
+ "client_namespace, client_id) "
+ "SELECT "
+ "request_id, creation_time, activation_time, last_attempt_time, "
+ "started_attempt_count, completed_attempt_count, state, url, "
+ "client_namespace, client_id "
+ "FROM temp_" REQUEST_QUEUE_TABLE_NAME;
+ return UpgradeWithQuery(db, kSql);
+}
+
bool CreateSchema(sql::Connection* db) {
+ sql::Transaction transaction(db);
+ if (!transaction.Begin())
+ return false;
+
+ if (!db->DoesTableExist(REQUEST_QUEUE_TABLE_NAME)) {
+ if (!CreateRequestQueueTable(db))
+ return false;
+ }
+
// If there is not already a state column, we need to drop the old table. We
// are choosing to drop instead of upgrade since the feature is not yet
- // released, so we don't use a transaction to protect existing data, or try to
- // migrate it.
+ // released, so we don't try to migrate it.
if (!db->DoesColumnExist(REQUEST_QUEUE_TABLE_NAME, "state")) {
if (!db->Execute("DROP TABLE IF EXISTS " REQUEST_QUEUE_TABLE_NAME))
return false;
}
- if (!CreateRequestQueueTable(db))
- return false;
+ if (!db->DoesColumnExist(REQUEST_QUEUE_TABLE_NAME, "original_url")) {
+ if (!UpgradeFrom57(db))
+ return false;
+ }
// TODO(fgorski): Add indices here.
- return true;
+ return transaction.Commit();
}
// Create a save page request from a SQL result. Expects complete rows with
@@ -83,11 +120,12 @@ std::unique_ptr<SavePageRequest> MakeSavePageRequest(
const GURL url(statement.ColumnString(7));
const ClientId client_id(statement.ColumnString(8),
statement.ColumnString(9));
+ const GURL original_url(statement.ColumnString(10));
DVLOG(2) << "making save page request - id " << id << " url " << url
<< " client_id " << client_id.name_space << "-" << client_id.id
<< " creation time " << creation_time << " user requested "
- << kUserRequested;
+ << kUserRequested << " original_url " << original_url;
std::unique_ptr<SavePageRequest> request(new SavePageRequest(
id, url, client_id, creation_time, activation_time, kUserRequested));
@@ -95,6 +133,7 @@ std::unique_ptr<SavePageRequest> MakeSavePageRequest(
request->set_started_attempt_count(started_attempt_count);
request->set_completed_attempt_count(completed_attempt_count);
request->set_request_state(state);
+ request->set_original_url(original_url);
return request;
}
@@ -104,7 +143,7 @@ std::unique_ptr<SavePageRequest> GetOneRequest(sql::Connection* db,
const char kSql[] =
"SELECT request_id, creation_time, activation_time,"
" last_attempt_time, started_attempt_count, completed_attempt_count,"
- " state, url, client_namespace, client_id"
+ " state, url, client_namespace, client_id, original_url"
" FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?";
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
@@ -132,9 +171,9 @@ ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) {
"INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME
" (request_id, creation_time, activation_time,"
" last_attempt_time, started_attempt_count, completed_attempt_count,"
- " state, url, client_namespace, client_id)"
+ " state, url, client_namespace, client_id, original_url)"
" VALUES "
- " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
statement.BindInt64(0, request.request_id());
@@ -147,6 +186,7 @@ ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) {
statement.BindString(7, request.url().spec());
statement.BindString(8, request.client_id().name_space);
statement.BindString(9, request.client_id().id);
+ statement.BindString(10, request.original_url().spec());
if (!statement.Run())
return ItemActionStatus::STORE_ERROR;
@@ -160,7 +200,7 @@ ItemActionStatus Update(sql::Connection* db, const SavePageRequest& request) {
"UPDATE OR IGNORE " REQUEST_QUEUE_TABLE_NAME
" SET creation_time = ?, activation_time = ?, last_attempt_time = ?,"
" started_attempt_count = ?, completed_attempt_count = ?, state = ?,"
- " url = ?, client_namespace = ?, client_id = ?"
+ " url = ?, client_namespace = ?, client_id = ?, original_url = ?"
" WHERE request_id = ?";
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
@@ -173,7 +213,8 @@ ItemActionStatus Update(sql::Connection* db, const SavePageRequest& request) {
statement.BindString(6, request.url().spec());
statement.BindString(7, request.client_id().name_space);
statement.BindString(8, request.client_id().id);
- statement.BindInt64(9, request.request_id());
+ statement.BindString(9, request.original_url().spec());
+ statement.BindInt64(10, request.request_id());
if (!statement.Run())
return ItemActionStatus::STORE_ERROR;
@@ -236,7 +277,7 @@ void GetRequestsSync(sql::Connection* db,
const char kSql[] =
"SELECT request_id, creation_time, activation_time,"
" last_attempt_time, started_attempt_count, completed_attempt_count,"
- " state, url, client_namespace, client_id"
+ " state, url, client_namespace, client_id, original_url"
" FROM " REQUEST_QUEUE_TABLE_NAME;
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));

Powered by Google App Engine
This is Rietveld 408576698