Chromium Code Reviews| Index: net/proxy/proxy_service.cc |
| diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc |
| index 47673c5b2d359c918d6f645c895fa4c9dc2e273b..60838d601909def9e0d4488bf1462d5f0affb415 100644 |
| --- a/net/proxy/proxy_service.cc |
| +++ b/net/proxy/proxy_service.cc |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| @@ -8,17 +8,23 @@ |
| #include "base/compiler_specific.h" |
| #include "base/logging.h" |
| -#include "base/values.h" |
| #include "base/message_loop.h" |
| #include "base/string_util.h" |
| +#include "base/values.h" |
| #include "googleurl/src/gurl.h" |
| -#include "net/base/net_log.h" |
| #include "net/base/net_errors.h" |
| +#include "net/base/net_log.h" |
| #include "net/base/net_util.h" |
| #include "net/proxy/init_proxy_resolver.h" |
| #include "net/proxy/multi_threaded_proxy_resolver.h" |
| #include "net/proxy/proxy_config_service_fixed.h" |
| +#include "net/proxy/proxy_resolver.h" |
| +#include "net/proxy/proxy_resolver_js_bindings.h" |
| +#include "net/proxy/proxy_resolver_v8.h" |
| #include "net/proxy/proxy_script_fetcher.h" |
| +#include "net/proxy/sync_host_resolver_bridge.h" |
| +#include "net/url_request/url_request_context.h" |
| + |
| #if defined(OS_WIN) |
| #include "net/proxy/proxy_config_service_win.h" |
| #include "net/proxy/proxy_resolver_winhttp.h" |
| @@ -28,11 +34,6 @@ |
| #elif defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| #include "net/proxy/proxy_config_service_linux.h" |
| #endif |
| -#include "net/proxy/proxy_resolver.h" |
| -#include "net/proxy/proxy_resolver_js_bindings.h" |
| -#include "net/proxy/proxy_resolver_v8.h" |
| -#include "net/proxy/sync_host_resolver_bridge.h" |
| -#include "net/url_request/url_request_context.h" |
| using base::TimeDelta; |
| using base::TimeTicks; |
| @@ -89,9 +90,9 @@ class ProxyConfigServiceDirect : public ProxyConfigService { |
| // ProxyConfigService implementation: |
| virtual void AddObserver(Observer* observer) {} |
| virtual void RemoveObserver(Observer* observer) {} |
| - virtual bool GetLatestProxyConfig(ProxyConfig* config) { |
| + virtual ConfigAvailability GetLatestProxyConfig(ProxyConfig* config) { |
| *config = ProxyConfig::CreateDirect(); |
| - return true; |
| + return CONFIG_VALID; |
| } |
| }; |
| @@ -627,9 +628,10 @@ void ProxyService::ApplyProxyConfigIfAvailable() { |
| // If a configuration is not available yet, we will get called back later |
| // by our ProxyConfigService::Observer once it changes. |
| ProxyConfig config; |
| - bool has_config = config_service_->GetLatestProxyConfig(&config); |
| - if (has_config) |
| - OnProxyConfigChanged(config); |
| + ProxyConfigService::ConfigAvailability availability = |
| + config_service_->GetLatestProxyConfig(&config); |
| + if (availability != ProxyConfigService::CONFIG_PENDING) |
| + OnProxyConfigChanged(config, availability); |
| } |
| void ProxyService::OnInitProxyResolverComplete(int result) { |
| @@ -793,11 +795,11 @@ ProxyConfigService* ProxyService::CreateSystemProxyConfigService( |
| return new ProxyConfigServiceMac(io_loop); |
| #elif defined(OS_CHROMEOS) |
| NOTREACHED() << "ProxyConfigService for ChromeOS should be created in " |
| - << "chrome_url_request_context.cc::CreateProxyConfigService."; |
| + << "profile_io_data.cc::CreateProxyConfigService."; |
| return NULL; |
| #elif defined(OS_LINUX) |
| - ProxyConfigServiceLinux* linux_config_service |
| - = new ProxyConfigServiceLinux(); |
| + ProxyConfigServiceLinux* linux_config_service = |
| + new ProxyConfigServiceLinux(); |
| // Assume we got called from the UI loop, which runs the default |
| // glib main loop, so the current thread is where we should be |
| @@ -822,11 +824,30 @@ ProxyConfigService* ProxyService::CreateSystemProxyConfigService( |
| #endif |
| } |
| -void ProxyService::OnProxyConfigChanged(const ProxyConfig& config) { |
| +void ProxyService::OnProxyConfigChanged( |
| + const ProxyConfig& config, |
| + ProxyConfigService::ConfigAvailability availability) { |
| + // Retrieve the current proxy configuration from the ProxyConfigService. |
| + // If a configuration is not available yet, we will get called back later |
| + // by our ProxyConfigService::Observer once it changes. |
| + ProxyConfig effective_config; |
| + switch (availability) { |
| + case ProxyConfigService::CONFIG_PENDING: |
| + // ProxyConfigService implementors should never pass CONFIG_PENDING. |
| + NOTREACHED() << "Proxy config change with CONFIG_PENDING availability!"; |
| + return; |
| + case ProxyConfigService::CONFIG_VALID: |
| + effective_config = config; |
| + break; |
| + case ProxyConfigService::CONFIG_UNSET: |
| + effective_config = ProxyConfig::CreateAutoDetect(); |
|
eroman
2011/03/30 21:42:31
Please default to Direct() instead.
Mattias Nissler (ping if slow)
2011/03/31 14:04:47
Done.
|
| + break; |
| + } |
| + |
| // Emit the proxy settings change to the NetLog stream. |
| if (net_log_) { |
| scoped_refptr<NetLog::EventParameters> params( |
| - new ProxyConfigChangedNetLogParam(fetched_config_, config)); |
| + new ProxyConfigChangedNetLogParam(fetched_config_, effective_config)); |
| net_log_->AddEntry(net::NetLog::TYPE_PROXY_CONFIG_CHANGED, |
| base::TimeTicks::Now(), |
| NetLog::Source(), |
| @@ -835,7 +856,7 @@ void ProxyService::OnProxyConfigChanged(const ProxyConfig& config) { |
| } |
| // Set the new configuration as the most recently fetched one. |
| - fetched_config_ = config; |
| + fetched_config_ = effective_config; |
| fetched_config_.set_id(1); // Needed for a later DCHECK of is_valid(). |
| InitializeUsingLastFetchedConfig(); |