diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.cc | 9 | ||||
-rw-r--r-- | chrome/browser/net/chrome_url_request_context.h | 2 | ||||
-rw-r--r-- | chrome/browser/net/pref_proxy_config_service.cc | 50 | ||||
-rw-r--r-- | chrome/browser/net/pref_proxy_config_service.h | 2 | ||||
-rw-r--r-- | chrome/browser/net/pref_proxy_config_service_unittest.cc | 2 | ||||
-rw-r--r-- | chrome/browser/prefs/browser_prefs.cc | 4 |
6 files changed, 54 insertions, 15 deletions
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc index a551857..58b353f 100644 --- a/chrome/browser/net/chrome_url_request_context.cc +++ b/chrome/browser/net/chrome_url_request_context.cc @@ -584,15 +584,6 @@ void ChromeURLRequestContextGetter::ReleaseURLRequestContext() { url_request_context_ = NULL; } -void ChromeURLRequestContextGetter::RegisterUserPrefs( - PrefService* pref_service) { - pref_service->RegisterBooleanPref(prefs::kNoProxyServer, false); - pref_service->RegisterBooleanPref(prefs::kProxyAutoDetect, false); - pref_service->RegisterStringPref(prefs::kProxyServer, ""); - pref_service->RegisterStringPref(prefs::kProxyPacUrl, ""); - pref_service->RegisterStringPref(prefs::kProxyBypassList, ""); -} - net::CookieStore* ChromeURLRequestContextGetter::GetCookieStore() { // If we are running on the IO thread this is real easy. if (BrowserThread::CurrentlyOn(BrowserThread::IO)) diff --git a/chrome/browser/net/chrome_url_request_context.h b/chrome/browser/net/chrome_url_request_context.h index 1815c01..791805d 100644 --- a/chrome/browser/net/chrome_url_request_context.h +++ b/chrome/browser/net/chrome_url_request_context.h @@ -234,8 +234,6 @@ class ChromeURLRequestContextGetter : public URLRequestContextGetter, ChromeURLRequestContextGetter(Profile* profile, ChromeURLRequestContextFactory* factory); - static void RegisterUserPrefs(PrefService* user_prefs); - // Note that GetURLRequestContext() can only be called from the IO // thread (it will assert otherwise). GetCookieStore() and // GetIOMessageLoopProxy however can be called from any thread. diff --git a/chrome/browser/net/pref_proxy_config_service.cc b/chrome/browser/net/pref_proxy_config_service.cc index 27155e6..10ae74b 100644 --- a/chrome/browser/net/pref_proxy_config_service.cc +++ b/chrome/browser/net/pref_proxy_config_service.cc @@ -4,6 +4,7 @@ #include "chrome/browser/net/pref_proxy_config_service.h" +#include "base/values.h" #include "chrome/browser/browser_thread.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prefs/pref_set_observer.h" @@ -12,6 +13,33 @@ #include "chrome/common/notification_type.h" #include "chrome/common/pref_names.h" +namespace { + +const bool kProxyPrefDefaultBoolean = false; +const char kProxyPrefDefaultString[] = ""; + +// Determines if a value of a proxy pref is set to its default. Default values +// have a special role in the proxy pref system, because if all of the proxy +// prefs are set to their defaults, then the system proxy settings are applied. +// TODO(gfeher): Proxy preferences should be refactored to avoid the need +// for such solutions. See crbug.com/65732 +bool IsDefaultValue(const Value* value) { + bool b = false; + std::string s; + if (value->IsType(Value::TYPE_BOOLEAN) && + value->GetAsBoolean(&b)) { + return b == kProxyPrefDefaultBoolean; + } else if (value->IsType(Value::TYPE_STRING) && + value->GetAsString(&s)) { + return s == kProxyPrefDefaultString; + } else { + NOTREACHED() << "Invalid type for a proxy preference."; + return false; + } +} + +} // namespace + PrefProxyConfigTracker::PrefProxyConfigTracker(PrefService* pref_service) : pref_service_(pref_service) { valid_ = ReadPrefConfig(&pref_config_); @@ -97,12 +125,17 @@ bool PrefProxyConfigTracker::ReadPrefConfig(net::ProxyConfig* config) { // are ignored. That's because chrome treats the system settings as the // default values, which should apply if there's no explicit value forced by // policy or the user. + // Preferences that are set to their default values are also ignored, + // regardless of their controlling source. This is because 'use system proxy + // settings' is currently encoded by all the preferences being set to their + // defaults. This will change when crbug.com/65732 is addressed. bool found_enable_proxy_pref = false; for (size_t i = 0; i < arraysize(proxy_prefs); i++) { const PrefService::Preference* pref = pref_service_->FindPreference(proxy_prefs[i]); DCHECK(pref); - if (pref && (!pref->IsUserModifiable() || pref->HasUserSetting())) { + if (pref && (!pref->IsUserModifiable() || pref->HasUserSetting()) && + !IsDefaultValue(pref->GetValue())) { found_enable_proxy_pref = true; break; } @@ -221,3 +254,18 @@ void PrefProxyConfigService::RegisterObservers() { registered_observers_ = true; } } + +// static +void PrefProxyConfigService::RegisterUserPrefs( + PrefService* pref_service) { + pref_service->RegisterBooleanPref(prefs::kNoProxyServer, + kProxyPrefDefaultBoolean); + pref_service->RegisterBooleanPref(prefs::kProxyAutoDetect, + kProxyPrefDefaultBoolean); + pref_service->RegisterStringPref(prefs::kProxyServer, + kProxyPrefDefaultString); + pref_service->RegisterStringPref(prefs::kProxyPacUrl, + kProxyPrefDefaultString); + pref_service->RegisterStringPref(prefs::kProxyBypassList, + kProxyPrefDefaultString); +} diff --git a/chrome/browser/net/pref_proxy_config_service.h b/chrome/browser/net/pref_proxy_config_service.h index f8c7061..a0f6cd0 100644 --- a/chrome/browser/net/pref_proxy_config_service.h +++ b/chrome/browser/net/pref_proxy_config_service.h @@ -103,6 +103,8 @@ class PrefProxyConfigService virtual bool GetLatestProxyConfig(net::ProxyConfig* config); virtual void OnLazyPoll(); + static void RegisterUserPrefs(PrefService* user_prefs); + private: // ProxyConfigService::Observer implementation: virtual void OnProxyConfigChanged(const net::ProxyConfig& config); diff --git a/chrome/browser/net/pref_proxy_config_service_unittest.cc b/chrome/browser/net/pref_proxy_config_service_unittest.cc index e7917b1..fd24dd6 100644 --- a/chrome/browser/net/pref_proxy_config_service_unittest.cc +++ b/chrome/browser/net/pref_proxy_config_service_unittest.cc @@ -67,7 +67,7 @@ class PrefProxyConfigServiceTestBase : public TESTBASE { virtual void SetUp() { ASSERT_TRUE(pref_service_.get()); - ChromeURLRequestContextGetter::RegisterUserPrefs(pref_service_.get()); + PrefProxyConfigService::RegisterUserPrefs(pref_service_.get()); fixed_config_.set_pac_url(GURL(kFixedPacUrl)); delegate_service_ = new TestProxyConfigService(fixed_config_); proxy_config_tracker_ = new PrefProxyConfigTracker(pref_service_.get()); diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 7497dd6..d79981d 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc @@ -29,8 +29,8 @@ #include "chrome/browser/instant/instant_controller.h" #include "chrome/browser/metrics/metrics_log.h" #include "chrome/browser/metrics/metrics_service.h" -#include "chrome/browser/net/chrome_url_request_context.h" #include "chrome/browser/net/predictor_api.h" +#include "chrome/browser/net/pref_proxy_config_service.h" #include "chrome/browser/net/net_pref_observer.h" #include "chrome/browser/notifications/desktop_notification_service.h" #include "chrome/browser/page_info_model.h" @@ -135,7 +135,7 @@ void RegisterUserPrefs(PrefService* user_prefs) { GeolocationContentSettingsMap::RegisterUserPrefs(user_prefs); TranslatePrefs::RegisterUserPrefs(user_prefs); DesktopNotificationService::RegisterUserPrefs(user_prefs); - ChromeURLRequestContextGetter::RegisterUserPrefs(user_prefs); + PrefProxyConfigService::RegisterUserPrefs(user_prefs); #if defined(TOOLKIT_VIEWS) BrowserActionsContainer::RegisterUserPrefs(user_prefs); #elif defined(TOOLKIT_GTK) |