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

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

Issue 2762673002: predictors: Pass manifests from Bork to store in ResourcePrefetchPredictor. (Closed)
Patch Set: Add delegate tests for PrecacheFetcher. 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..ad3e824f5ea5adadb37ada20bb5fbf40412e3ae5 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -49,6 +49,7 @@ const char* kFontMimeTypes[] = {"font/woff2",
"application/font-sfnt",
"application/font-ttf"};
+const size_t kMaxManifestByteSize = 16 * 1024;
const size_t kNumSampleHosts = 50;
const size_t kReportReadinessThreshold = 50;
@@ -1087,6 +1088,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();
+ });
+
+ 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 +1444,34 @@ 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()) > 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