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

Unified Diff: chrome/browser/net/predictor.cc

Issue 360733005: Poll CanPredictNetworkActions in Predictor class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 6 years, 5 months 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
« no previous file with comments | « chrome/browser/net/predictor.h ('k') | chrome/browser/net/predictor_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/net/predictor.cc
diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc
index 3c4381e5a51dcd197c78a4d73bcba314ac23eb2e..4e9c45309c70f99073eaac8e6d6d04adb6399e57 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_)) {
if (preconnectable && !is_new_host_request) {
++consecutive_omnibox_preconnect_count_;
// The omnibox suggests a search URL (for which we can preconnect) after
@@ -299,10 +304,18 @@ 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_ ||
!url.is_valid() || !url.has_host())
return;
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ if (!chrome_browser_net::CanPredictNetworkActionsUI(user_prefs_))
+ return;
+ } else {
+ if (!chrome_browser_net::CanPredictNetworkActionsIO(profile_io_data_))
+ return;
+ }
+
UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED);
const int kConnectionsNeeded = 1;
PreconnectUrl(CanonicalizeUrl(url), first_party_for_cookies,
@@ -481,7 +494,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 +693,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 +787,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);
battre 2014/07/10 09:01:59 This is actually a pretty serious bug that existed
Bernhard Bauer 2014/07/10 09:59:02 I think in this particular case, we're okay. The o
if (BrowserThread::CurrentlyOn(BrowserThread::IO)) {
SaveDnsPrefetchStateForNextStartupAndTrimOnIOThread(
@@ -825,26 +841,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 +945,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 +966,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 +1304,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.
}
« no previous file with comments | « chrome/browser/net/predictor.h ('k') | chrome/browser/net/predictor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698