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 fae21edf9a35621600e7520d5f286c74ea26833f..737afff282531f82d86b7836b18c0887d75a9d7d 100644 |
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.cc |
@@ -68,10 +68,14 @@ void BindResourceRowToStatement(const ResourceRow& row, |
statement->BindBlob(2, &proto_buffer[0], size); |
} |
-bool StepAndInitializeResourceRow(Statement* statement, ResourceRow* row) { |
+bool StepAndInitializeResourceRow(Statement* statement, |
+ ResourceRow* row, |
+ std::string* primary_key) { |
if (!statement->Step()) |
return false; |
+ *primary_key = statement->ColumnString(0); |
+ |
int size = statement->ColumnByteLength(2); |
const void* data = statement->ColumnBlob(2); |
DCHECK(data); |
@@ -79,8 +83,9 @@ bool StepAndInitializeResourceRow(Statement* statement, ResourceRow* row) { |
proto.ParseFromArray(data, size); |
ResourceRow::FromProto(proto, row); |
- row->primary_key = statement->ColumnString(0); |
- row->resource_url = GURL(statement->ColumnString(1)); |
+ GURL resource_url(statement->ColumnString(1)); |
+ DCHECK(resource_url == row->resource_url); |
+ |
return true; |
} |
@@ -88,9 +93,6 @@ bool StepAndInitializeResourceRow(Statement* statement, ResourceRow* row) { |
namespace predictors { |
-// static |
-const size_t ResourcePrefetchPredictorTables::kMaxStringLength = 1024; |
- |
ResourceRow::ResourceRow() |
: resource_type(content::RESOURCE_TYPE_LAST_TYPE), |
number_of_hits(0), |
@@ -103,8 +105,7 @@ ResourceRow::ResourceRow() |
score(0.0) {} |
ResourceRow::ResourceRow(const ResourceRow& other) |
- : primary_key(other.primary_key), |
- resource_url(other.resource_url), |
+ : resource_url(other.resource_url), |
resource_type(other.resource_type), |
number_of_hits(other.number_of_hits), |
number_of_misses(other.number_of_misses), |
@@ -115,8 +116,7 @@ ResourceRow::ResourceRow(const ResourceRow& other) |
always_revalidate(other.always_revalidate), |
score(other.score) {} |
-ResourceRow::ResourceRow(const std::string& i_primary_key, |
- const std::string& i_resource_url, |
+ResourceRow::ResourceRow(const std::string& i_resource_url, |
content::ResourceType i_resource_type, |
int i_number_of_hits, |
int i_number_of_misses, |
@@ -125,8 +125,7 @@ ResourceRow::ResourceRow(const std::string& i_primary_key, |
net::RequestPriority i_priority, |
bool i_has_validators, |
bool i_always_revalidate) |
- : primary_key(i_primary_key), |
- resource_url(i_resource_url), |
+ : resource_url(i_resource_url), |
resource_type(i_resource_type), |
number_of_hits(i_number_of_hits), |
number_of_misses(i_number_of_misses), |
@@ -159,7 +158,7 @@ void ResourceRow::UpdateScore() { |
} |
bool ResourceRow::operator==(const ResourceRow& rhs) const { |
- return primary_key == rhs.primary_key && resource_url == rhs.resource_url && |
+ return resource_url == rhs.resource_url && |
resource_type == rhs.resource_type && |
number_of_hits == rhs.number_of_hits && |
number_of_misses == rhs.number_of_misses && |
@@ -173,7 +172,6 @@ void ResourceRow::ToProto(ResourceData* resource_data) const { |
using chrome_browser_predictors::ResourceData_Priority; |
using chrome_browser_predictors::ResourceData_ResourceType; |
- resource_data->set_primary_key(primary_key); |
resource_data->set_resource_url(resource_url.spec()); |
resource_data->set_resource_type( |
static_cast<ResourceData_ResourceType>(resource_type)); |
@@ -188,8 +186,6 @@ void ResourceRow::ToProto(ResourceData* resource_data) const { |
// static |
void ResourceRow::FromProto(const ResourceData& proto, ResourceRow* row) { |
- DCHECK(proto.has_primary_key()); |
- row->primary_key = proto.primary_key(); |
row->resource_url = GURL(proto.resource_url()); |
row->resource_type = |
static_cast<content::ResourceType>(proto.resource_type()); |
@@ -200,6 +196,7 @@ void ResourceRow::FromProto(const ResourceData& proto, ResourceRow* row) { |
row->priority = static_cast<net::RequestPriority>(proto.priority()); |
row->has_validators = proto.has_validators(); |
row->always_revalidate = proto.always_revalidate(); |
+ row->UpdateScore(); |
} |
// static |
@@ -303,18 +300,14 @@ void ResourcePrefetchPredictorTables::DeleteAllData() { |
if (CantAccessDatabase()) |
return; |
- Statement deleter(DB()->GetUniqueStatement( |
- base::StringPrintf("DELETE FROM %s", kUrlResourceTableName).c_str())); |
- deleter.Run(); |
- deleter.Assign(DB()->GetUniqueStatement( |
- base::StringPrintf("DELETE FROM %s", kUrlMetadataTableName).c_str())); |
- deleter.Run(); |
- deleter.Assign(DB()->GetUniqueStatement( |
- base::StringPrintf("DELETE FROM %s", kHostResourceTableName).c_str())); |
- deleter.Run(); |
- deleter.Assign(DB()->GetUniqueStatement( |
- base::StringPrintf("DELETE FROM %s", kHostMetadataTableName).c_str())); |
- deleter.Run(); |
+ Statement deleter; |
+ for (const char* table_name : |
+ {kUrlResourceTableName, kUrlMetadataTableName, kHostResourceTableName, |
+ kHostMetadataTableName}) { |
+ deleter.Assign(DB()->GetUniqueStatement( |
+ base::StringPrintf("DELETE FROM %s", table_name).c_str())); |
+ deleter.Run(); |
+ } |
} |
ResourcePrefetchPredictorTables::ResourcePrefetchPredictorTables() |
@@ -337,12 +330,8 @@ void ResourcePrefetchPredictorTables::GetAllDataHelper( |
base::StringPrintf("SELECT * FROM %s", resource_table_name).c_str())); |
ResourceRow row; |
- while (StepAndInitializeResourceRow(&resource_reader, &row)) { |
- row.UpdateScore(); |
- std::string primary_key = row.primary_key; |
- // Don't need to store primary key since the data is grouped by primary key. |
- row.primary_key.clear(); |
- |
+ std::string primary_key; |
+ while (StepAndInitializeResourceRow(&resource_reader, &row, &primary_key)) { |
PrefetchDataMap::iterator it = data_map->find(primary_key); |
if (it == data_map->end()) { |
it = data_map->insert(std::make_pair( |
@@ -399,8 +388,7 @@ bool ResourcePrefetchPredictorTables::UpdateDataHelper( |
return false; |
// Add the new data to the tables. |
- const ResourceRows& resources = data.resources; |
- for (const ResourceRow& resource : resources) { |
+ for (const ResourceRow& resource : data.resources) { |
std::unique_ptr<Statement> resource_inserter( |
data.is_host() ? GetHostResourceUpdateStatement() |
: GetUrlResourceUpdateStatement()); |
@@ -426,29 +414,28 @@ void ResourcePrefetchPredictorTables::DeleteDataHelper( |
const std::vector<std::string>& keys) { |
bool is_host = key_type == PREFETCH_KEY_TYPE_HOST; |
- for (std::vector<std::string>::const_iterator it = keys.begin(); |
- it != keys.end(); ++it) { |
+ for (const std::string& key : keys) { |
std::unique_ptr<Statement> deleter(is_host |
? GetHostResourceDeleteStatement() |
: GetUrlResourceDeleteStatement()); |
- deleter->BindString(0, *it); |
+ deleter->BindString(0, key); |
deleter->Run(); |
deleter.reset(is_host ? GetHostMetadataDeleteStatement() : |
GetUrlMetadataDeleteStatement()); |
- deleter->BindString(0, *it); |
+ deleter->BindString(0, key); |
deleter->Run(); |
} |
} |
+// static |
bool ResourcePrefetchPredictorTables::StringsAreSmallerThanDBLimit( |
- const PrefetchData& data) const { |
+ const PrefetchData& data) { |
if (data.primary_key.length() > kMaxStringLength) |
return false; |
- for (ResourceRows::const_iterator it = data.resources.begin(); |
- it != data.resources.end(); ++it) { |
- if (it->resource_url.spec().length() > kMaxStringLength) |
+ for (const ResourceRow& row : data.resources) { |
+ if (row.resource_url.spec().length() > kMaxStringLength) |
return false; |
} |
return true; |