Index: chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
index e0872bfd438d783f60b13fb7c160828e022e94f3..710325c29397cc661d42149b1af184cdff8f8472 100644 |
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
@@ -165,73 +165,51 @@ void ResourcePrefetchPredictorTables::GetAllData( |
GetAllOriginDataHelper(origin_data_map); |
} |
-void ResourcePrefetchPredictorTables::UpdateData( |
- const PrefetchData& url_data, |
- const PrefetchData& host_data, |
- const RedirectData& url_redirect_data, |
- const RedirectData& host_redirect_data) { |
- TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateData"); |
+void ResourcePrefetchPredictorTables::UpdateResourceData( |
+ const PrefetchData& data, |
+ PrefetchKeyType key_type) { |
+ TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateResourceData"); |
DCHECK_CURRENTLY_ON(BrowserThread::DB); |
if (CantAccessDatabase()) |
return; |
- DCHECK(url_data.has_primary_key() || host_data.has_primary_key() || |
- url_redirect_data.has_primary_key() || |
- host_redirect_data.has_primary_key()); |
+ UpdateDataHelper(key_type, PrefetchDataType::RESOURCE, data.primary_key(), |
+ data); |
+} |
- DB()->BeginTransaction(); |
+void ResourcePrefetchPredictorTables::UpdateRedirectData( |
+ const RedirectData& data, |
+ PrefetchKeyType key_type) { |
+ TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateRedirectData"); |
+ DCHECK_CURRENTLY_ON(BrowserThread::DB); |
+ if (CantAccessDatabase()) |
+ return; |
- bool success = |
- (!url_data.has_primary_key() || |
- UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::RESOURCE, |
- url_data.primary_key(), url_data)) && |
- (!host_data.has_primary_key() || |
- UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::RESOURCE, |
- host_data.primary_key(), host_data)) && |
- (!url_redirect_data.has_primary_key() || |
- UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::REDIRECT, |
- url_redirect_data.primary_key(), url_redirect_data)) && |
- (!host_redirect_data.has_primary_key() || |
- UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::REDIRECT, |
- host_redirect_data.primary_key(), host_redirect_data)); |
- if (!success) |
- DB()->RollbackTransaction(); |
- else |
- DB()->CommitTransaction(); |
+ UpdateDataHelper(key_type, PrefetchDataType::REDIRECT, data.primary_key(), |
+ data); |
} |
void ResourcePrefetchPredictorTables::UpdateManifestData( |
const std::string& host, |
const precache::PrecacheManifest& manifest_data) { |
+ TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateManifestData"); |
DCHECK_CURRENTLY_ON(BrowserThread::DB); |
if (CantAccessDatabase()) |
return; |
- DB()->BeginTransaction(); |
- bool success = UpdateDataHelper( |
- PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host, manifest_data); |
- |
- if (!success) |
- DB()->RollbackTransaction(); |
- else |
- DB()->CommitTransaction(); |
+ UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host, |
+ manifest_data); |
} |
void ResourcePrefetchPredictorTables::UpdateOriginData( |
const OriginData& origin_data) { |
+ TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateOriginData"); |
DCHECK_CURRENTLY_ON(BrowserThread::DB); |
if (CantAccessDatabase()) |
return; |
- std::string host = origin_data.host(); |
- DB()->BeginTransaction(); |
- bool success = UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, |
- PrefetchDataType::ORIGIN, host, origin_data); |
- |
- if (!success) |
- DB()->RollbackTransaction(); |
- else |
- DB()->CommitTransaction(); |
+ UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::ORIGIN, |
+ origin_data.host(), origin_data); |
} |
void ResourcePrefetchPredictorTables::DeleteResourceData( |
@@ -385,23 +363,31 @@ void ResourcePrefetchPredictorTables::GetAllOriginDataHelper( |
} |
} |
-bool ResourcePrefetchPredictorTables::UpdateDataHelper( |
+void ResourcePrefetchPredictorTables::UpdateDataHelper( |
PrefetchKeyType key_type, |
PrefetchDataType data_type, |
const std::string& key, |
const MessageLite& data) { |
+ DB()->BeginTransaction(); |
+ |
// Delete the older data from the table. |
std::unique_ptr<sql::Statement> deleter( |
GetTableUpdateStatement(key_type, data_type, TableOperationType::REMOVE)); |
deleter->BindString(0, key); |
- if (!deleter->Run()) |
- return false; |
+ bool success = deleter->Run(); |
+ |
+ if (success) { |
+ // Add the new data to the table. |
+ std::unique_ptr<sql::Statement> inserter(GetTableUpdateStatement( |
+ key_type, data_type, TableOperationType::INSERT)); |
+ BindProtoDataToStatement(key, data, inserter.get()); |
+ success = inserter->Run(); |
+ } |
- // Add the new data to the table. |
- std::unique_ptr<sql::Statement> inserter( |
- GetTableUpdateStatement(key_type, data_type, TableOperationType::INSERT)); |
- BindProtoDataToStatement(key, data, inserter.get()); |
- return inserter->Run(); |
+ if (!success) |
+ DB()->RollbackTransaction(); |
+ else |
+ DB()->CommitTransaction(); |
} |
void ResourcePrefetchPredictorTables::DeleteDataHelper( |