Chromium Code Reviews| Index: chrome/browser/net/predictor.cc |
| diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc |
| index 3c4381e5a51dcd197c78a4d73bcba314ac23eb2e..7a426f72bf1a65736ef742a92ee0bdfd63fd0d67 100644 |
| --- a/chrome/browser/net/predictor.cc |
| +++ b/chrome/browser/net/predictor.cc |
| @@ -26,8 +26,10 @@ |
| #include "base/values.h" |
| #include "chrome/browser/io_thread.h" |
| #include "chrome/browser/net/preconnect.h" |
| +#include "chrome/browser/net/prediction_options.h" |
| #include "chrome/browser/net/spdyproxy/proxy_advisor.h" |
| #include "chrome/browser/prefs/session_startup_pref.h" |
| +#include "chrome/browser/profiles/profile_io_data.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/pref_names.h" |
| #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings.h" |
| @@ -133,9 +135,11 @@ class Predictor::LookupRequest { |
| DISALLOW_COPY_AND_ASSIGN(LookupRequest); |
| }; |
| -Predictor::Predictor(bool preconnect_enabled) |
| +Predictor::Predictor(bool preconnect_enabled, bool predictor_enabled) |
| : url_request_context_getter_(NULL), |
| - predictor_enabled_(true), |
| + predictor_enabled_(predictor_enabled), |
| + user_prefs_(NULL), |
| + profile_io_data_(NULL), |
| peak_pending_lookups_(0), |
| shutdown_(false), |
| max_concurrent_dns_lookups_(g_max_parallel_resolves), |
| @@ -160,10 +164,11 @@ Predictor::~Predictor() { |
| // static |
| Predictor* Predictor::CreatePredictor(bool preconnect_enabled, |
| + bool predictor_enabled, |
| bool simple_shutdown) { |
| if (simple_shutdown) |
| - return new SimplePredictor(preconnect_enabled); |
| - return new Predictor(preconnect_enabled); |
| + return new SimplePredictor(preconnect_enabled, predictor_enabled); |
| + return new Predictor(preconnect_enabled, predictor_enabled); |
| } |
| void Predictor::RegisterProfilePrefs( |
| @@ -179,12 +184,11 @@ void Predictor::RegisterProfilePrefs( |
| void Predictor::InitNetworkPredictor(PrefService* user_prefs, |
| PrefService* local_state, |
| IOThread* io_thread, |
| - net::URLRequestContextGetter* getter) { |
| + net::URLRequestContextGetter* getter, |
| + ProfileIOData* profile_io_data) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - bool predictor_enabled = |
| - user_prefs->GetBoolean(prefs::kNetworkPredictionEnabled); |
| - |
| + user_prefs_ = user_prefs; |
| url_request_context_getter_ = getter; |
| // Gather the list of hostnames to prefetch on startup. |
| @@ -220,7 +224,7 @@ void Predictor::InitNetworkPredictor(PrefService* user_prefs, |
| &Predictor::FinalizeInitializationOnIOThread, |
| base::Unretained(this), |
| urls, referral_list, |
| - io_thread, predictor_enabled)); |
| + io_thread, profile_io_data)); |
| } |
| void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) { |
| @@ -236,7 +240,8 @@ void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) { |
| UrlInfo::ResolutionMotivation motivation(UrlInfo::OMNIBOX_MOTIVATED); |
| base::TimeTicks now = base::TimeTicks::Now(); |
| - if (preconnect_enabled()) { |
| + if (preconnect_enabled_ && |
| + chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_)) { |
|
battre
2014/07/01 08:27:48
This approach looks a little bit strange to me. Th
|
| if (preconnectable && !is_new_host_request) { |
| ++consecutive_omnibox_preconnect_count_; |
| // The omnibox suggests a search URL (for which we can preconnect) after |
| @@ -299,7 +304,8 @@ void Predictor::PreconnectUrlAndSubresources(const GURL& url, |
| const GURL& first_party_for_cookies) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || |
| BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - if (!predictor_enabled_ || !preconnect_enabled() || |
| + if (!predictor_enabled_ || !preconnect_enabled_ || |
| + !chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_) || |
| !url.is_valid() || !url.has_host()) |
| return; |
| @@ -481,7 +487,9 @@ void Predictor::PredictorGetHtmlInfo(Predictor* predictor, |
| // We'd like the following no-cache... but it doesn't work. |
| // "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">" |
| "</head><body>"); |
| - if (predictor && predictor->predictor_enabled()) { |
| + if (predictor && predictor->predictor_enabled() && |
| + chrome_browser_net::CanPredictNetworkActionsIO( |
| + predictor->profile_io_data())) { |
| predictor->GetHtmlInfo(output); |
| } else { |
| output->append("DNS pre-resolution and TCP pre-connection is disabled."); |
| @@ -678,10 +686,10 @@ void Predictor::FinalizeInitializationOnIOThread( |
| const UrlList& startup_urls, |
| base::ListValue* referral_list, |
| IOThread* io_thread, |
| - bool predictor_enabled) { |
| + ProfileIOData* profile_io_data) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - predictor_enabled_ = predictor_enabled; |
| + profile_io_data_ = profile_io_data; |
| initial_observer_.reset(new InitialObserver()); |
| host_resolver_ = io_thread->globals()->host_resolver.get(); |
| @@ -772,14 +780,15 @@ static void SaveDnsPrefetchStateForNextStartupAndTrimOnIOThread( |
| startup_list, referral_list, completion); |
| } |
| -void Predictor::SaveStateForNextStartupAndTrim(PrefService* prefs) { |
| +void Predictor::SaveStateForNextStartupAndTrim() { |
| if (!predictor_enabled_) |
| return; |
| base::WaitableEvent completion(true, false); |
| - ListPrefUpdate update_startup_list(prefs, prefs::kDnsPrefetchingStartupList); |
| - ListPrefUpdate update_referral_list(prefs, |
| + ListPrefUpdate update_startup_list(user_prefs_, |
| + prefs::kDnsPrefetchingStartupList); |
| + ListPrefUpdate update_referral_list(user_prefs_, |
| prefs::kDnsPrefetchingHostReferralList); |
| if (BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| SaveDnsPrefetchStateForNextStartupAndTrimOnIOThread( |
| @@ -825,26 +834,6 @@ void Predictor::SaveDnsPrefetchStateForNextStartupAndTrim( |
| completion->Signal(); |
| } |
| -void Predictor::EnablePredictor(bool enable) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || |
| - BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - |
| - if (BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| - EnablePredictorOnIOThread(enable); |
| - } else { |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, |
| - FROM_HERE, |
| - base::Bind(&Predictor::EnablePredictorOnIOThread, |
| - base::Unretained(this), enable)); |
| - } |
| -} |
| - |
| -void Predictor::EnablePredictorOnIOThread(bool enable) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - predictor_enabled_ = enable; |
| -} |
| - |
| void Predictor::PreconnectUrl(const GURL& url, |
| const GURL& first_party_for_cookies, |
| UrlInfo::ResolutionMotivation motivation, |
| @@ -949,7 +938,8 @@ void Predictor::PrepareFrameSubresources(const GURL& original_url, |
| // size of the list with all the "Leaf" nodes in the tree (nodes that don't |
| // load any subresources). If we learn about this resource, we will instead |
| // provide a more carefully estimated preconnection count. |
| - if (preconnect_enabled_) { |
| + if (preconnect_enabled_ && |
| + chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_)) { |
| PreconnectUrlOnIOThread(url, first_party_for_cookies, |
| UrlInfo::SELF_REFERAL_MOTIVATED, 2); |
| } |
| @@ -969,6 +959,7 @@ void Predictor::PrepareFrameSubresources(const GURL& original_url, |
| 10, 5000, 50); |
| future_url->second.ReferrerWasObserved(); |
| if (preconnect_enabled_ && |
| + chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_) && |
| connection_expectation > kPreconnectWorthyExpectedValue) { |
| evalution = PRECONNECTION; |
| future_url->second.IncrementPreconnectionCount(); |
| @@ -1306,7 +1297,8 @@ void SimplePredictor::InitNetworkPredictor( |
| PrefService* user_prefs, |
| PrefService* local_state, |
| IOThread* io_thread, |
| - net::URLRequestContextGetter* getter) { |
| + net::URLRequestContextGetter* getter, |
| + ProfileIOData* profile_io_data) { |
| // Empty function for unittests. |
| } |