Chromium Code Reviews| Index: chrome/browser/net/pref_proxy_config_service.cc |
| diff --git a/chrome/browser/net/pref_proxy_config_service.cc b/chrome/browser/net/pref_proxy_config_service.cc |
| index 10ae74bcf051865345eed98f63b2d97285a5b09e..92bf5ea0419266bd3b8d70a7af78063373f37048 100644 |
| --- a/chrome/browser/net/pref_proxy_config_service.cc |
| +++ b/chrome/browser/net/pref_proxy_config_service.cc |
| @@ -8,38 +8,12 @@ |
| #include "chrome/browser/browser_thread.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/prefs/pref_set_observer.h" |
| +#include "chrome/browser/prefs/proxy_prefs.h" |
| #include "chrome/common/notification_details.h" |
| #include "chrome/common/notification_source.h" |
| #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_); |
| @@ -112,65 +86,47 @@ bool PrefProxyConfigTracker::ReadPrefConfig(net::ProxyConfig* config) { |
| // Clear the configuration. |
| *config = net::ProxyConfig(); |
| - // Scan for all "enable" type proxy switches. |
| - static const char* proxy_prefs[] = { |
| - prefs::kProxyPacUrl, |
| - prefs::kProxyServer, |
| - prefs::kProxyBypassList, |
| - prefs::kProxyAutoDetect |
| - }; |
| - |
| - // Check whether the preference system holds a valid proxy configuration. Note |
| - // that preferences coming from a lower-priority source than the user settings |
| - // 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()) && |
| - !IsDefaultValue(pref->GetValue())) { |
| - found_enable_proxy_pref = true; |
| - break; |
| - } |
| - } |
| - |
| - if (!found_enable_proxy_pref && |
| - !pref_service_->GetBoolean(prefs::kNoProxyServer)) { |
| + ProxyPrefs::ProxyServerMode mode; |
| + if (!ProxyPrefs::IntToProxyMode( |
| + pref_service_->GetInteger(prefs::kProxyServerMode), |
|
danno
2010/12/17 14:21:11
nit: indentation is wrong.
gfeher
2010/12/17 15:44:17
Done.
|
| + &mode)) { |
| + // Fall back to system settings if the mode preference is invalid. |
| return false; |
| } |
| - if (pref_service_->GetBoolean(prefs::kNoProxyServer)) { |
| - // Ignore all the other proxy config preferences if the use of a proxy |
| - // has been explicitly disabled. |
| - return true; |
| - } |
| - |
| - if (pref_service_->HasPrefPath(prefs::kProxyServer)) { |
| - std::string proxy_server = pref_service_->GetString(prefs::kProxyServer); |
| - config->proxy_rules().ParseFromString(proxy_server); |
| - } |
| - |
| - if (pref_service_->HasPrefPath(prefs::kProxyPacUrl)) { |
| - std::string proxy_pac = pref_service_->GetString(prefs::kProxyPacUrl); |
| - config->set_pac_url(GURL(proxy_pac)); |
| + switch (mode) { |
| + case ProxyPrefs::SYSTEM: |
| + // Use system settings. |
| + return false; |
| + case ProxyPrefs::DISABLED: |
| + // Ignore all the other proxy config preferences if the use of a proxy |
| + // has been explicitly disabled. |
| + return true; |
| + case ProxyPrefs::MANUAL: // fall through |
| + case ProxyPrefs::AUTO_DETECT: |
| + if (pref_service_->HasPrefPath(prefs::kProxyServer)) { |
| + std::string proxy_server = |
| + pref_service_->GetString(prefs::kProxyServer); |
| + config->proxy_rules().ParseFromString(proxy_server); |
| + } |
| + |
| + if (pref_service_->HasPrefPath(prefs::kProxyPacUrl)) { |
| + std::string proxy_pac = pref_service_->GetString(prefs::kProxyPacUrl); |
| + config->set_pac_url(GURL(proxy_pac)); |
| + } |
| + |
| + config->set_auto_detect(mode == ProxyPrefs::AUTO_DETECT); |
| + |
| + if (pref_service_->HasPrefPath(prefs::kProxyBypassList)) { |
| + std::string proxy_bypass = |
| + pref_service_->GetString(prefs::kProxyBypassList); |
| + config->proxy_rules().bypass_rules.ParseFromString(proxy_bypass); |
| + } |
| + return true; |
| + default: |
| + NOTREACHED() << "Unknown proxy mode."; |
| + return false; |
| } |
| - |
| - config->set_auto_detect(pref_service_->GetBoolean(prefs::kProxyAutoDetect)); |
| - |
| - if (pref_service_->HasPrefPath(prefs::kProxyBypassList)) { |
| - std::string proxy_bypass = |
| - pref_service_->GetString(prefs::kProxyBypassList); |
| - config->proxy_rules().bypass_rules.ParseFromString(proxy_bypass); |
| - } |
| - |
| - return true; |
| } |
| PrefProxyConfigService::PrefProxyConfigService( |
| @@ -258,14 +214,9 @@ void PrefProxyConfigService::RegisterObservers() { |
| // 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); |
| + pref_service->RegisterIntegerPref(prefs::kProxyServerMode, |
| + ProxyPrefs::SYSTEM); |
| + pref_service->RegisterStringPref(prefs::kProxyServer, ""); |
| + pref_service->RegisterStringPref(prefs::kProxyPacUrl, ""); |
| + pref_service->RegisterStringPref(prefs::kProxyBypassList, ""); |
| } |