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

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor.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.cc
diff --git a/chrome/browser/predictors/resource_prefetch_predictor.cc b/chrome/browser/predictors/resource_prefetch_predictor.cc
index f25f57d7fa2905a2d799962ab483c2e2245bb39b..b3e5453c80cbe4e99348edcae0fc2768844a6668 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/profiles/profile.h"
#include "components/history/core/browser/history_database.h"
#include "components/history/core/browser/history_service.h"
+#include "components/history/core/browser/url_utils.h"
#include "components/mime_util/mime_util.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/resource_request_info.h"
@@ -503,6 +504,7 @@ void ResourcePrefetchPredictor::StartInitialization() {
auto host_data_map = base::MakeUnique<PrefetchDataMap>();
auto url_redirect_data_map = base::MakeUnique<RedirectDataMap>();
auto host_redirect_data_map = base::MakeUnique<RedirectDataMap>();
+ auto manifest_data_map = base::MakeUnique<ManifestDataMap>();
// Get raw pointers to pass to the first task. Ownership of the unique_ptrs
// will be passed to the reply task.
@@ -510,16 +512,18 @@ void ResourcePrefetchPredictor::StartInitialization() {
auto* host_data_map_ptr = host_data_map.get();
auto* url_redirect_data_map_ptr = url_redirect_data_map.get();
auto* host_redirect_data_map_ptr = host_redirect_data_map.get();
+ auto* manifest_data_map_ptr = manifest_data_map.get();
BrowserThread::PostTaskAndReply(
BrowserThread::DB, FROM_HERE,
base::Bind(&ResourcePrefetchPredictorTables::GetAllData, tables_,
url_data_map_ptr, host_data_map_ptr, url_redirect_data_map_ptr,
- host_redirect_data_map_ptr),
+ host_redirect_data_map_ptr, manifest_data_map_ptr),
base::Bind(&ResourcePrefetchPredictor::CreateCaches, AsWeakPtr(),
base::Passed(&url_data_map), base::Passed(&host_data_map),
base::Passed(&url_redirect_data_map),
- base::Passed(&host_redirect_data_map)));
+ base::Passed(&host_redirect_data_map),
+ base::Passed(&manifest_data_map)));
}
void ResourcePrefetchPredictor::RecordURLRequest(
@@ -860,7 +864,8 @@ void ResourcePrefetchPredictor::CreateCaches(
std::unique_ptr<PrefetchDataMap> url_data_map,
std::unique_ptr<PrefetchDataMap> host_data_map,
std::unique_ptr<RedirectDataMap> url_redirect_data_map,
- std::unique_ptr<RedirectDataMap> host_redirect_data_map) {
+ std::unique_ptr<RedirectDataMap> host_redirect_data_map,
+ std::unique_ptr<ManifestDataMap> manifest_data_map) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
DCHECK_EQ(INITIALIZING, initialization_state_);
@@ -868,12 +873,14 @@ void ResourcePrefetchPredictor::CreateCaches(
DCHECK(!host_table_cache_);
DCHECK(!url_redirect_table_cache_);
DCHECK(!host_redirect_table_cache_);
+ DCHECK(!manifest_table_cache_);
DCHECK(inflight_navigations_.empty());
url_table_cache_ = std::move(url_data_map);
host_table_cache_ = std::move(host_data_map);
url_redirect_table_cache_ = std::move(url_redirect_data_map);
host_redirect_table_cache_ = std::move(host_redirect_data_map);
+ manifest_table_cache_ = std::move(manifest_data_map);
ConnectToHistoryService();
}
@@ -943,6 +950,7 @@ void ResourcePrefetchPredictor::DeleteAllUrls() {
host_table_cache_->clear();
url_redirect_table_cache_->clear();
host_redirect_table_cache_->clear();
+ manifest_table_cache_->clear();
BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
base::Bind(&ResourcePrefetchPredictorTables::DeleteAllData, tables_));
@@ -953,6 +961,7 @@ void ResourcePrefetchPredictor::DeleteUrls(const history::URLRows& urls) {
// in the cache.
std::vector<std::string> urls_to_delete, hosts_to_delete;
std::vector<std::string> url_redirects_to_delete, host_redirects_to_delete;
+ std::vector<std::string> manifest_hosts_to_delete;
for (const auto& it : urls) {
const std::string& url_spec = it.url().spec();
@@ -978,6 +987,13 @@ void ResourcePrefetchPredictor::DeleteUrls(const history::URLRows& urls) {
host_redirects_to_delete.push_back(host);
host_redirect_table_cache_->erase(host);
}
+
+ std::string manifest_host = history::HostForTopHosts(it.url());
+ if (manifest_table_cache_->find(manifest_host) !=
+ manifest_table_cache_->end()) {
+ manifest_hosts_to_delete.push_back(manifest_host);
+ manifest_table_cache_->erase(manifest_host);
+ }
}
if (!urls_to_delete.empty() || !hosts_to_delete.empty()) {
@@ -993,6 +1009,13 @@ void ResourcePrefetchPredictor::DeleteUrls(const history::URLRows& urls) {
base::Bind(&ResourcePrefetchPredictorTables::DeleteRedirectData,
tables_, url_redirects_to_delete, host_redirects_to_delete));
}
+
+ if (!manifest_hosts_to_delete.empty()) {
+ BrowserThread::PostTask(
+ BrowserThread::DB, FROM_HERE,
+ base::Bind(&ResourcePrefetchPredictorTables::DeleteManifestData,
+ tables_, manifest_hosts_to_delete));
+ }
}
void ResourcePrefetchPredictor::RemoveOldestEntryInPrefetchDataMap(

Powered by Google App Engine
This is Rietveld 408576698