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

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

Issue 2762673002: predictors: Pass manifests from Bork to store in ResourcePrefetchPredictor. (Closed)
Patch Set: Rename PrecacheManifestDelegate to PrecacheManager::Delegate. 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.cc
diff --git a/chrome/browser/predictors/resource_prefetch_predictor.cc b/chrome/browser/predictors/resource_prefetch_predictor.cc
index 920674e28eb4cb03054289fee6a3e9749e466e4f..dd91ff4a216bb4886348e2074f452e6dff453caa 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -1087,6 +1087,26 @@ void ResourcePrefetchPredictor::RemoveOldestEntryInRedirectDataMap(
tables_, key_to_delete, key_type));
}
+void ResourcePrefetchPredictor::RemoveOldestEntryInManifestDataMap(
+ ManifestDataMap* data_map) {
+ if (data_map->empty())
+ return;
+
+ auto oldest_entry = std::min_element(
+ data_map->begin(), data_map->end(),
+ [](const std::pair<const std::string, precache::PrecacheManifest>& lhs,
+ const std::pair<const std::string, precache::PrecacheManifest>& rhs) {
+ return lhs.second.id().id() < rhs.second.id().id();
Benoit L 2017/03/21 13:24:15 This means that there is now a constraint that the
alexilin 2017/03/21 15:32:13 ID = creation time. So yes, it's always increasing
+ });
+
+ std::string key_to_delete = oldest_entry->first;
+ data_map->erase(oldest_entry);
+ BrowserThread::PostTask(
+ BrowserThread::DB, FROM_HERE,
+ base::Bind(&ResourcePrefetchPredictorTables::DeleteManifestData, tables_,
+ std::vector<std::string>({key_to_delete})));
+}
+
void ResourcePrefetchPredictor::OnVisitCountLookup(
size_t url_visit_count,
const PageRequestSummary& summary) {
@@ -1423,6 +1443,35 @@ void ResourcePrefetchPredictor::OnHistoryServiceLoaded(
}
}
+void ResourcePrefetchPredictor::OnManifestFetched(
+ const std::string& host,
+ const precache::PrecacheManifest& manifest) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ if (initialization_state_ != INITIALIZED)
+ return;
+
+ if (host.length() > ResourcePrefetchPredictorTables::kMaxStringLength ||
+ static_cast<uint32_t>(manifest.ByteSize()) >
+ ResourcePrefetchPredictorTables::kMaxManifestByteSize) {
+ return;
+ }
+
+ auto cache_entry = manifest_table_cache_->find(host);
+ if (cache_entry == manifest_table_cache_->end()) {
+ if (manifest_table_cache_->size() >= config_.max_hosts_to_track)
+ RemoveOldestEntryInManifestDataMap(manifest_table_cache_.get());
+ cache_entry =
+ manifest_table_cache_->insert(std::make_pair(host, manifest)).first;
+ } else {
+ cache_entry->second = manifest;
+ }
+
+ BrowserThread::PostTask(
+ BrowserThread::DB, FROM_HERE,
+ base::Bind(&ResourcePrefetchPredictorTables::UpdateManifestData, tables_,
+ host, cache_entry->second));
+}
+
void ResourcePrefetchPredictor::ConnectToHistoryService() {
// Register for HistoryServiceLoading if it is not ready.
history::HistoryService* history_service =

Powered by Google App Engine
This is Rietveld 408576698