Index: chrome/browser/net/chrome_url_request_context.cc |
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc |
index 4ec39395e965a626e698bcc73a408d399875ba03..bd3e9c685e469efb5e5f464b8b1401dad24bd1c3 100644 |
--- a/chrome/browser/net/chrome_url_request_context.cc |
+++ b/chrome/browser/net/chrome_url_request_context.cc |
@@ -18,6 +18,7 @@ |
#include "chrome/browser/net/chrome_net_log.h" |
#include "chrome/browser/net/sqlite_persistent_cookie_store.h" |
#include "chrome/browser/net/predictor_api.h" |
+#include "chrome/browser/net/pref_proxy_config_service.h" |
#include "chrome/browser/profile.h" |
#include "chrome/common/chrome_constants.h" |
#include "chrome/common/chrome_switches.h" |
@@ -68,26 +69,25 @@ net::ProxyConfigService* CreateProxyConfigService(Profile* profile) { |
// from the UI thread. |
CheckCurrentlyOnMainThread(); |
- scoped_ptr<net::ProxyConfig> proxy_config(CreateProxyConfig( |
- profile->GetPrefs())); |
+ // Create a baseline service that provides proxy configuration in case nothing |
+ // is configured through prefs (Note: prefs include command line and |
+ // configuration policy). |
+ net::ProxyConfigService* base_service = NULL; |
- if (!proxy_config.get()) { |
- // Use system settings. |
- // TODO(port): the IO and FILE message loops are only used by Linux. Can |
- // that code be moved to chrome/browser instead of being in net, so that it |
- // can use BrowserThread instead of raw MessageLoop pointers? See bug 25354. |
+ // TODO(port): the IO and FILE message loops are only used by Linux. Can |
+ // that code be moved to chrome/browser instead of being in net, so that it |
+ // can use BrowserThread instead of raw MessageLoop pointers? See bug 25354. |
#if defined(OS_CHROMEOS) |
- return new chromeos::ProxyConfigService( |
- profile->GetChromeOSProxyConfigServiceImpl()); |
+ base_service = new chromeos::ProxyConfigService( |
+ profile->GetChromeOSProxyConfigServiceImpl()); |
#else |
- return net::ProxyService::CreateSystemProxyConfigService( |
- g_browser_process->io_thread()->message_loop(), |
- g_browser_process->file_thread()->message_loop()); |
+ base_service = net::ProxyService::CreateSystemProxyConfigService( |
+ g_browser_process->io_thread()->message_loop(), |
+ g_browser_process->file_thread()->message_loop()); |
#endif // defined(OS_CHROMEOS) |
- } |
- // Otherwise use the fixed settings from the command line. |
- return new net::ProxyConfigServiceFixed(*proxy_config.get()); |
+ return new PrefProxyConfigService(profile->GetProxyConfigTracker(), |
+ base_service); |
} |
// Create a proxy service according to the options on command line. |
@@ -982,64 +982,3 @@ void ChromeURLRequestContextFactory::ApplyProfileParametersToContext( |
context->set_browser_file_system_context(browser_file_system_context_); |
context->set_extension_info_map(extension_info_map_); |
} |
- |
-// ---------------------------------------------------------------------------- |
- |
-net::ProxyConfig* CreateProxyConfig(const PrefService* pref_service) { |
- // 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. |
- 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())) { |
- found_enable_proxy_pref = true; |
- break; |
- } |
- } |
- |
- if (!found_enable_proxy_pref && |
- !pref_service->GetBoolean(prefs::kNoProxyServer)) { |
- return NULL; |
- } |
- |
- net::ProxyConfig* proxy_config = new net::ProxyConfig(); |
- if (pref_service->GetBoolean(prefs::kNoProxyServer)) { |
- // Ignore all the other proxy config preferences if the use of a proxy |
- // has been explicitly disabled. |
- return proxy_config; |
- } |
- |
- if (pref_service->HasPrefPath(prefs::kProxyServer)) { |
- std::string proxy_server = pref_service->GetString(prefs::kProxyServer); |
- proxy_config->proxy_rules().ParseFromString(proxy_server); |
- } |
- |
- if (pref_service->HasPrefPath(prefs::kProxyPacUrl)) { |
- std::string proxy_pac = pref_service->GetString(prefs::kProxyPacUrl); |
- proxy_config->set_pac_url(GURL(proxy_pac)); |
- } |
- |
- proxy_config->set_auto_detect(pref_service->GetBoolean( |
- prefs::kProxyAutoDetect)); |
- |
- if (pref_service->HasPrefPath(prefs::kProxyBypassList)) { |
- std::string proxy_bypass = |
- pref_service->GetString(prefs::kProxyBypassList); |
- proxy_config->proxy_rules().bypass_rules.ParseFromString(proxy_bypass); |
- } |
- |
- return proxy_config; |
-} |