Index: components/precache/content/precache_manager.cc |
diff --git a/components/precache/content/precache_manager.cc b/components/precache/content/precache_manager.cc |
index a03277c9095da8835296b5708ebf2941f4a94041..f3f2efce9ec60bbebe419290cb22d23426e1c935 100644 |
--- a/components/precache/content/precache_manager.cc |
+++ b/components/precache/content/precache_manager.cc |
@@ -59,6 +59,18 @@ PrecacheManager::PrecacheManager( |
PrecacheManager::~PrecacheManager() {} |
+bool PrecacheManager::ShouldRun() const { |
+ // Verify IsPrecachingAllowed() before calling IsPrecachingEnabled(). This is |
+ // because field trials are only assigned when requested. This allows us to |
+ // create Control and Experiment groups that are limited to users for whom |
+ // IsPrecachingAllowed() is true, thus accentuating the impact of precaching. |
+ return IsPrecachingAllowed() && IsPrecachingEnabled(); |
+} |
+ |
+bool PrecacheManager::WouldRun() const { |
+ return IsPrecachingAllowed(); |
+} |
+ |
// static |
bool PrecacheManager::IsPrecachingEnabled() { |
return base::FieldTrialList::FindFullName(kPrecacheFieldTrialName) == |
@@ -67,7 +79,8 @@ bool PrecacheManager::IsPrecachingEnabled() { |
switches::kEnablePrecache); |
} |
-bool PrecacheManager::IsPrecachingAllowed() { |
+bool PrecacheManager::IsPrecachingAllowed() const { |
+ // SyncService delegates to SyncPrefs, which must be called on the UI thread. |
return sync_service_ && |
sync_service_->GetActiveDataTypes().Has(syncer::SESSIONS) && |
!sync_service_->GetEncryptedDataTypes().Has(syncer::SESSIONS); |
@@ -85,19 +98,23 @@ void PrecacheManager::StartPrecaching( |
} |
is_precaching_ = true; |
- BrowserThread::PostTask( |
- BrowserThread::DB, FROM_HERE, |
- base::Bind(&PrecacheDatabase::DeleteExpiredPrecacheHistory, |
- precache_database_, base::Time::Now())); |
- |
precache_completion_callback_ = precache_completion_callback; |
- // Request NumTopHosts() top hosts. Note that PrecacheFetcher is further bound |
- // by the value of PrecacheConfigurationSettings.top_sites_count, as retrieved |
- // from the server. |
- history_service.TopHosts( |
- NumTopHosts(), |
- base::Bind(&PrecacheManager::OnHostsReceived, AsWeakPtr())); |
+ if (ShouldRun()) { |
bengr
2015/08/07 17:21:45
Maybe do:
if (!ShouldRun()) {
OnDone();
retur
twifkak
2015/08/07 17:57:08
I'm not a fan of it (see https://codereview.chromi
|
+ BrowserThread::PostTask( |
+ BrowserThread::DB, FROM_HERE, |
+ base::Bind(&PrecacheDatabase::DeleteExpiredPrecacheHistory, |
+ precache_database_, base::Time::Now())); |
+ |
+ // Request NumTopHosts() top hosts. Note that PrecacheFetcher is further |
+ // bound by the value of PrecacheConfigurationSettings.top_sites_count, as |
+ // retrieved from the server. |
+ history_service.TopHosts( |
+ NumTopHosts(), |
+ base::Bind(&PrecacheManager::OnHostsReceived, AsWeakPtr())); |
+ } else { |
+ OnDone(); |
+ } |
} |
void PrecacheManager::CancelPrecaching() { |