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

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

Issue 573553004: Eliminate NOTIFICATION_HISTORY_LOADED notification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up of code in ResourcePrefetchPredictor Created 6 years, 1 month 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 a34dda4078af1aaafbaee27b0064d55a9bb19db9..e76723f2a2ec3f66d3fca29afb16c3d4cd4a72a2 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor.cc
@@ -305,9 +305,10 @@ ResourcePrefetchPredictor::ResourcePrefetchPredictor(
: profile_(profile),
config_(config),
initialization_state_(NOT_INITIALIZED),
- tables_(PredictorDatabaseFactory::GetForProfile(
- profile)->resource_prefetch_tables()),
- results_map_deleter_(&results_map_) {
+ tables_(PredictorDatabaseFactory::GetForProfile(profile)
+ ->resource_prefetch_tables()),
+ results_map_deleter_(&results_map_),
+ history_service_observer_(this) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
// Some form of learning has to be enabled.
@@ -398,15 +399,6 @@ void ResourcePrefetchPredictor::Observe(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
switch (type) {
- case chrome::NOTIFICATION_HISTORY_LOADED: {
- DCHECK_EQ(initialization_state_, INITIALIZING);
- notification_registrar_.Remove(this,
- chrome::NOTIFICATION_HISTORY_LOADED,
- content::Source<Profile>(profile_));
- OnHistoryAndCacheLoaded();
- break;
- }
-
case chrome::NOTIFICATION_HISTORY_URLS_DELETED: {
DCHECK_EQ(initialization_state_, INITIALIZED);
const content::Details<const history::URLsDeletedDetails>
@@ -694,15 +686,7 @@ void ResourcePrefetchPredictor::CreateCaches(
UMA_HISTOGRAM_COUNTS("ResourcePrefetchPredictor.HostTableHostCount",
host_table_cache_->size());
- // Add notifications for history loading if it is not ready.
- HistoryService* history_service = HistoryServiceFactory::GetForProfile(
- profile_, Profile::EXPLICIT_ACCESS);
- if (!history_service) {
- notification_registrar_.Add(this, chrome::NOTIFICATION_HISTORY_LOADED,
- content::Source<Profile>(profile_));
- } else {
- OnHistoryAndCacheLoaded();
- }
+ CheckForHistoryService();
}
void ResourcePrefetchPredictor::OnHistoryAndCacheLoaded() {
@@ -719,6 +703,7 @@ void ResourcePrefetchPredictor::OnHistoryAndCacheLoaded() {
this, config_, profile_->GetRequestContext());
}
+ history_service_observer_.RemoveAll();
initialization_state_ = INITIALIZED;
}
@@ -1221,4 +1206,26 @@ void ResourcePrefetchPredictor::ReportPredictedAccuracyStatsHelper(
#undef RPP_PREDICTED_HISTOGRAM_COUNTS
}
+bool ResourcePrefetchPredictor::CheckForHistoryService() {
sdefresne 2014/11/04 14:12:29 nit: you never use the return value, so you can ch
nshaik 2014/11/04 21:20:27 Done.
+ // Register for HistoryServiceLoading if it is not ready.
+ HistoryService* history_service =
+ HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
+ if (!history_service)
+ return false;
+ if (history_service->BackendLoaded()) {
+ // HistoryService is already loaded. Continue with Initialization.
+ OnHistoryAndCacheLoaded();
+ return true;
+ }
+ DCHECK(!history_service_observer_.IsObserving(history_service));
+ history_service_observer_.Add(history_service);
+ return false;
+}
+
+void ResourcePrefetchPredictor::OnHistoryServiceLoaded(
+ HistoryService* history_service) {
+ OnHistoryAndCacheLoaded();
+ history_service_observer_.Remove(history_service);
+}
+
} // namespace predictors

Powered by Google App Engine
This is Rietveld 408576698