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

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor_tables.cc

Issue 2738613003: predictors: Add Manifest table to ResourcePrefetchPredictor. (Closed)
Patch Set: Add caution message. Created 3 years, 9 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: 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 7d5515e805c5560554a8c988d7bee1a96b1b9b2f..ae833342805bffb4fa49147a24b892918843308e 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc
@@ -24,6 +24,7 @@ const char kUrlRedirectTableName[] = "resource_prefetch_predictor_url_redirect";
const char kHostResourceTableName[] = "resource_prefetch_predictor_host";
const char kHostRedirectTableName[] =
"resource_prefetch_predictor_host_redirect";
+const char kManifestTableName[] = "resource_prefetch_predictor_manifest";
const char kCreateGlobalMetadataStatementTemplate[] =
"CREATE TABLE %s ( "
@@ -112,7 +113,8 @@ void ResourcePrefetchPredictorTables::GetAllData(
PrefetchDataMap* url_data_map,
PrefetchDataMap* host_data_map,
RedirectDataMap* url_redirect_data_map,
- RedirectDataMap* host_redirect_data_map) {
+ RedirectDataMap* host_redirect_data_map,
+ ManifestDataMap* manifest_map) {
TRACE_EVENT0("browser", "ResourcePrefetchPredictor::GetAllData");
DCHECK_CURRENTLY_ON(BrowserThread::DB);
if (CantAccessDatabase())
@@ -126,11 +128,13 @@ void ResourcePrefetchPredictorTables::GetAllData(
host_data_map->clear();
url_redirect_data_map->clear();
host_redirect_data_map->clear();
+ manifest_map->clear();
GetAllResourceDataHelper(PREFETCH_KEY_TYPE_URL, url_data_map);
GetAllResourceDataHelper(PREFETCH_KEY_TYPE_HOST, host_data_map);
GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_URL, url_redirect_data_map);
GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_HOST, host_redirect_data_map);
+ GetAllManifestDataHelper(manifest_map);
}
void ResourcePrefetchPredictorTables::UpdateData(
@@ -168,6 +172,23 @@ void ResourcePrefetchPredictorTables::UpdateData(
DB()->CommitTransaction();
}
+void ResourcePrefetchPredictorTables::UpdateManifestData(
+ const std::string& host,
+ const precache::PrecacheManifest& manifest_data) {
+ 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();
+}
+
void ResourcePrefetchPredictorTables::DeleteResourceData(
const std::vector<std::string>& urls,
const std::vector<std::string>& hosts) {
@@ -218,6 +239,15 @@ void ResourcePrefetchPredictorTables::DeleteSingleRedirectDataPoint(
DeleteDataHelper(key_type, PrefetchDataType::REDIRECT, {key});
}
+void ResourcePrefetchPredictorTables::DeleteManifestData(
+ const std::vector<std::string>& hosts) {
+ DCHECK_CURRENTLY_ON(BrowserThread::DB);
+ if (CantAccessDatabase())
+ return;
+
+ DeleteDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, hosts);
+}
+
void ResourcePrefetchPredictorTables::DeleteAllData() {
DCHECK_CURRENTLY_ON(BrowserThread::DB);
if (CantAccessDatabase())
@@ -226,7 +256,7 @@ void ResourcePrefetchPredictorTables::DeleteAllData() {
sql::Statement deleter;
for (const char* table_name :
{kUrlResourceTableName, kUrlRedirectTableName, kHostResourceTableName,
- kHostRedirectTableName}) {
+ kHostRedirectTableName, kManifestTableName}) {
deleter.Assign(DB()->GetUniqueStatement(
base::StringPrintf("DELETE FROM %s", table_name).c_str()));
deleter.Run();
@@ -274,6 +304,18 @@ void ResourcePrefetchPredictorTables::GetAllRedirectDataHelper(
}
}
+void ResourcePrefetchPredictorTables::GetAllManifestDataHelper(
+ ManifestDataMap* manifest_map) {
+ sql::Statement manifest_reader(DB()->GetUniqueStatement(
+ base::StringPrintf("SELECT * FROM %s", kManifestTableName).c_str()));
+
+ precache::PrecacheManifest data;
+ std::string key;
+ while (StepAndInitializeProtoData(&manifest_reader, &key, &data)) {
+ manifest_map->insert(std::make_pair(key, data));
+ }
+}
+
bool ResourcePrefetchPredictorTables::UpdateDataHelper(
PrefetchKeyType key_type,
PrefetchDataType data_type,
@@ -367,8 +409,8 @@ bool ResourcePrefetchPredictorTables::DropTablesIfOutdated(
if (incompatible_version) {
for (const char* table_name :
{kMetadataTableName, kUrlResourceTableName, kHostResourceTableName,
- kUrlRedirectTableName, kHostRedirectTableName, kUrlMetadataTableName,
- kHostMetadataTableName}) {
+ kUrlRedirectTableName, kHostRedirectTableName, kManifestTableName,
+ kUrlMetadataTableName, kHostMetadataTableName}) {
success =
success &&
db->Execute(base::StringPrintf("DROP TABLE IF EXISTS %s", table_name)
@@ -425,7 +467,7 @@ void ResourcePrefetchPredictorTables::CreateTableIfNonExistent() {
for (const char* table_name :
{kUrlResourceTableName, kHostResourceTableName, kUrlRedirectTableName,
- kHostRedirectTableName}) {
+ kHostRedirectTableName, kManifestTableName}) {
success = success &&
(db->DoesTableExist(table_name) ||
db->Execute(base::StringPrintf(
@@ -468,7 +510,7 @@ ResourcePrefetchPredictorTables::GetTableUpdateStatement(
PrefetchDataType data_type,
TableOperationType op_type) {
sql::StatementID id(__FILE__, key_type | (static_cast<int>(data_type) << 1) |
- (static_cast<int>(op_type) << 2));
+ (static_cast<int>(op_type) << 3));
const char* statement_template = (op_type == TableOperationType::REMOVE
? kDeleteProtoTableStatementTemplate
: kInsertProtoTableStatementTemplate);
@@ -487,6 +529,8 @@ const char* ResourcePrefetchPredictorTables::GetTableName(
return is_host ? kHostResourceTableName : kUrlResourceTableName;
case PrefetchDataType::REDIRECT:
return is_host ? kHostRedirectTableName : kUrlRedirectTableName;
+ case PrefetchDataType::MANIFEST:
+ return kManifestTableName;
}
NOTREACHED();

Powered by Google App Engine
This is Rietveld 408576698