| 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();
|
|
|