Chromium Code Reviews| 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..55d153e4fcc8842a43457c7d44dd48d90c82d75e 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 |
| } |
| +void ResourcePrefetchPredictor::CheckForHistoryService() { |
| + // Register for HistoryServiceLoading if it is not ready. |
| + HistoryService* history_service = |
| + HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| + if (!history_service) |
| + return; |
| + if (history_service->BackendLoaded()) { |
| + // HistoryService is already loaded. Continue with Initialization. |
| + OnHistoryAndCacheLoaded(); |
| + return; |
| + } |
| + DCHECK(!history_service_observer_.IsObserving(history_service)); |
| + history_service_observer_.Add(history_service); |
| + return; |
| +} |
| + |
| +void ResourcePrefetchPredictor::OnHistoryServiceLoaded( |
|
brettw
2014/11/14 21:13:06
This should match the order in the header.
nshaik
2014/11/15 07:04:15
Done.
|
| + HistoryService* history_service) { |
| + OnHistoryAndCacheLoaded(); |
| + history_service_observer_.Remove(history_service); |
| +} |
| + |
| } // namespace predictors |