Chromium Code Reviews| 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() { |