| Index: components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| diff --git a/chrome/browser/net/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| similarity index 83%
|
| rename from chrome/browser/net/pref_proxy_config_tracker_impl.cc
|
| rename to components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| index 6de119ea7f9ca9223fe181e13166b5775ee8dceb..bc89c49017cf69b7fcb6e33e1e802772b91e509e 100644
|
| --- a/chrome/browser/net/pref_proxy_config_tracker_impl.cc
|
| +++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| @@ -2,25 +2,22 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/net/pref_proxy_config_tracker_impl.h"
|
| +#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/location.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/prefs/pref_registry_simple.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/single_thread_task_runner.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/values.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/common/pref_names.h"
|
| #include "components/pref_registry/pref_registry_syncable.h"
|
| #include "components/proxy_config/proxy_config_dictionary.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/notification_details.h"
|
| -#include "content/public/browser/notification_source.h"
|
| +#include "components/proxy_config/proxy_config_pref_names.h"
|
| #include "net/proxy/proxy_list.h"
|
| #include "net/proxy/proxy_server.h"
|
| -
|
| -using content::BrowserThread;
|
| +#include "url/gurl.h"
|
|
|
| namespace {
|
|
|
| @@ -86,34 +83,37 @@ void RemoveGooglezipDataReductionProxies(
|
|
|
| } // namespace
|
|
|
| -//============================= ChromeProxyConfigService =======================
|
| +//============================= ProxyConfigServiceImpl =======================
|
|
|
| -ChromeProxyConfigService::ChromeProxyConfigService(
|
| +ProxyConfigServiceImpl::ProxyConfigServiceImpl(
|
| net::ProxyConfigService* base_service)
|
| : base_service_(base_service),
|
| pref_config_state_(ProxyPrefs::CONFIG_UNSET),
|
| pref_config_read_pending_(true),
|
| registered_observer_(false) {
|
| + // ProxyConfigServiceImpl is created on the UI thread, but used on the network
|
| + // thread.
|
| + thread_checker_.DetachFromThread();
|
| }
|
|
|
| -ChromeProxyConfigService::~ChromeProxyConfigService() {
|
| +ProxyConfigServiceImpl::~ProxyConfigServiceImpl() {
|
| if (registered_observer_ && base_service_.get())
|
| base_service_->RemoveObserver(this);
|
| }
|
|
|
| -void ChromeProxyConfigService::AddObserver(
|
| +void ProxyConfigServiceImpl::AddObserver(
|
| net::ProxyConfigService::Observer* observer) {
|
| RegisterObserver();
|
| observers_.AddObserver(observer);
|
| }
|
|
|
| -void ChromeProxyConfigService::RemoveObserver(
|
| +void ProxyConfigServiceImpl::RemoveObserver(
|
| net::ProxyConfigService::Observer* observer) {
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| net::ProxyConfigService::ConfigAvailability
|
| - ChromeProxyConfigService::GetLatestProxyConfig(net::ProxyConfig* config) {
|
| +ProxyConfigServiceImpl::GetLatestProxyConfig(net::ProxyConfig* config) {
|
| RegisterObserver();
|
|
|
| if (pref_config_read_pending_)
|
| @@ -128,21 +128,19 @@ net::ProxyConfigService::ConfigAvailability
|
|
|
| ProxyPrefs::ConfigState config_state;
|
| return PrefProxyConfigTrackerImpl::GetEffectiveProxyConfig(
|
| - pref_config_state_, pref_config_,
|
| - system_availability, system_config, false,
|
| - &config_state, config);
|
| + pref_config_state_, pref_config_, system_availability, system_config,
|
| + false, &config_state, config);
|
| }
|
|
|
| -void ChromeProxyConfigService::OnLazyPoll() {
|
| +void ProxyConfigServiceImpl::OnLazyPoll() {
|
| if (base_service_.get())
|
| base_service_->OnLazyPoll();
|
| }
|
|
|
| -void ChromeProxyConfigService::UpdateProxyConfig(
|
| +void ProxyConfigServiceImpl::UpdateProxyConfig(
|
| ProxyPrefs::ConfigState config_state,
|
| const net::ProxyConfig& config) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| -
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| pref_config_read_pending_ = false;
|
| pref_config_state_ = config_state;
|
| pref_config_ = config;
|
| @@ -166,10 +164,10 @@ void ChromeProxyConfigService::UpdateProxyConfig(
|
| }
|
| }
|
|
|
| -void ChromeProxyConfigService::OnProxyConfigChanged(
|
| +void ProxyConfigServiceImpl::OnProxyConfigChanged(
|
| const net::ProxyConfig& config,
|
| ConfigAvailability availability) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| // Check whether there is a proxy configuration defined by preferences. In
|
| // this case that proxy configuration takes precedence and the change event
|
| @@ -182,8 +180,8 @@ void ChromeProxyConfigService::OnProxyConfigChanged(
|
| }
|
| }
|
|
|
| -void ChromeProxyConfigService::RegisterObserver() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +void ProxyConfigServiceImpl::RegisterObserver() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| if (!registered_observer_ && base_service_.get()) {
|
| base_service_->AddObserver(this);
|
| registered_observer_ = true;
|
| @@ -193,13 +191,15 @@ void ChromeProxyConfigService::RegisterObserver() {
|
| //========================= PrefProxyConfigTrackerImpl =========================
|
|
|
| PrefProxyConfigTrackerImpl::PrefProxyConfigTrackerImpl(
|
| - PrefService* pref_service)
|
| + PrefService* pref_service,
|
| + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
|
| : pref_service_(pref_service),
|
| - chrome_proxy_config_service_(NULL),
|
| - update_pending_(true) {
|
| + proxy_config_service_impl_(NULL),
|
| + update_pending_(true),
|
| + io_task_runner_(io_task_runner) {
|
| config_state_ = ReadPrefConfig(pref_service_, &pref_config_);
|
| proxy_prefs_.Init(pref_service);
|
| - proxy_prefs_.Add(prefs::kProxy,
|
| + proxy_prefs_.Add(proxy_config::prefs::kProxy,
|
| base::Bind(&PrefProxyConfigTrackerImpl::OnProxyPrefChanged,
|
| base::Unretained(this)));
|
| }
|
| @@ -211,22 +211,22 @@ PrefProxyConfigTrackerImpl::~PrefProxyConfigTrackerImpl() {
|
| scoped_ptr<net::ProxyConfigService>
|
| PrefProxyConfigTrackerImpl::CreateTrackingProxyConfigService(
|
| scoped_ptr<net::ProxyConfigService> base_service) {
|
| - chrome_proxy_config_service_ =
|
| - new ChromeProxyConfigService(base_service.release());
|
| + proxy_config_service_impl_ =
|
| + new ProxyConfigServiceImpl(base_service.release());
|
| VLOG(1) << this << ": set chrome proxy config service to "
|
| - << chrome_proxy_config_service_;
|
| - if (chrome_proxy_config_service_ && update_pending_)
|
| + << proxy_config_service_impl_;
|
| + if (proxy_config_service_impl_ && update_pending_)
|
| OnProxyConfigChanged(config_state_, pref_config_);
|
|
|
| - return scoped_ptr<net::ProxyConfigService>(chrome_proxy_config_service_);
|
| + return scoped_ptr<net::ProxyConfigService>(proxy_config_service_impl_);
|
| }
|
|
|
| void PrefProxyConfigTrackerImpl::DetachFromPrefService() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| // Stop notifications.
|
| proxy_prefs_.RemoveAll();
|
| pref_service_ = NULL;
|
| - chrome_proxy_config_service_ = NULL;
|
| + proxy_config_service_impl_ = NULL;
|
| }
|
|
|
| // static
|
| @@ -284,7 +284,8 @@ net::ProxyConfigService::ConfigAvailability
|
| void PrefProxyConfigTrackerImpl::RegisterPrefs(PrefRegistrySimple* registry) {
|
| base::DictionaryValue* default_settings =
|
| ProxyConfigDictionary::CreateSystem();
|
| - registry->RegisterDictionaryPref(prefs::kProxy, default_settings);
|
| + registry->RegisterDictionaryPref(proxy_config::prefs::kProxy,
|
| + default_settings);
|
| }
|
|
|
| // static
|
| @@ -292,25 +293,24 @@ void PrefProxyConfigTrackerImpl::RegisterProfilePrefs(
|
| user_prefs::PrefRegistrySyncable* pref_service) {
|
| base::DictionaryValue* default_settings =
|
| ProxyConfigDictionary::CreateSystem();
|
| - pref_service->RegisterDictionaryPref(prefs::kProxy, default_settings);
|
| + pref_service->RegisterDictionaryPref(proxy_config::prefs::kProxy,
|
| + default_settings);
|
| }
|
|
|
| // static
|
| ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig(
|
| const PrefService* pref_service,
|
| net::ProxyConfig* config) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| -
|
| // Clear the configuration and source.
|
| *config = net::ProxyConfig();
|
| ProxyPrefs::ConfigState config_state = ProxyPrefs::CONFIG_UNSET;
|
|
|
| const PrefService::Preference* pref =
|
| - pref_service->FindPreference(prefs::kProxy);
|
| + pref_service->FindPreference(proxy_config::prefs::kProxy);
|
| DCHECK(pref);
|
|
|
| const base::DictionaryValue* dict =
|
| - pref_service->GetDictionary(prefs::kProxy);
|
| + pref_service->GetDictionary(proxy_config::prefs::kProxy);
|
| DCHECK(dict);
|
| ProxyConfigDictionary proxy_dict(dict);
|
|
|
| @@ -322,7 +322,7 @@ ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig(
|
| config_state = ProxyPrefs::CONFIG_EXTENSION;
|
| else
|
| config_state = ProxyPrefs::CONFIG_OTHER_PRECEDE;
|
| - } else {
|
| + } else {
|
| config_state = ProxyPrefs::CONFIG_FALLBACK;
|
| }
|
| }
|
| @@ -332,7 +332,7 @@ ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig(
|
|
|
| ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::GetProxyConfig(
|
| net::ProxyConfig* config) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| if (config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| *config = pref_config_;
|
| return config_state_;
|
| @@ -341,16 +341,15 @@ ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::GetProxyConfig(
|
| void PrefProxyConfigTrackerImpl::OnProxyConfigChanged(
|
| ProxyPrefs::ConfigState config_state,
|
| const net::ProxyConfig& config) {
|
| - if (!chrome_proxy_config_service_) {
|
| + if (!proxy_config_service_impl_) {
|
| VLOG(1) << "No chrome proxy config service to push to UpdateProxyConfig";
|
| update_pending_ = true;
|
| return;
|
| }
|
| - update_pending_ = !BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&ChromeProxyConfigService::UpdateProxyConfig,
|
| - base::Unretained(chrome_proxy_config_service_),
|
| - config_state, config));
|
| + update_pending_ = !io_task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&ProxyConfigServiceImpl::UpdateProxyConfig,
|
| + base::Unretained(proxy_config_service_impl_),
|
| + config_state, config));
|
| VLOG(1) << this << (update_pending_ ? ": Error" : ": Done")
|
| << " pushing proxy to UpdateProxyConfig";
|
| }
|
| @@ -417,10 +416,10 @@ bool PrefProxyConfigTrackerImpl::PrefConfigToNetConfig(
|
| }
|
|
|
| void PrefProxyConfigTrackerImpl::OnProxyPrefChanged() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| net::ProxyConfig new_config;
|
| - ProxyPrefs::ConfigState config_state = ReadPrefConfig(pref_service_,
|
| - &new_config);
|
| + ProxyPrefs::ConfigState config_state =
|
| + ReadPrefConfig(pref_service_, &new_config);
|
| if (config_state_ != config_state ||
|
| (config_state_ != ProxyPrefs::CONFIG_UNSET &&
|
| !pref_config_.Equals(new_config))) {
|
|
|