| Index: components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| index ab770b2ddab0329bac1acb1d6c147486c237d77b..6c4f03d9124f9ac48ab09562e3efdc64caf86abd 100644
|
| --- a/components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| +++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc
|
| @@ -13,7 +13,6 @@
|
| #include "base/location.h"
|
| #include "base/single_thread_task_runner.h"
|
| #include "base/values.h"
|
| -#include "components/pref_registry/pref_registry_syncable.h"
|
| #include "components/prefs/pref_registry_simple.h"
|
| #include "components/prefs/pref_service.h"
|
| #include "components/proxy_config/proxy_config_dictionary.h"
|
| @@ -132,7 +131,10 @@ PrefProxyConfigTrackerImpl::PrefProxyConfigTrackerImpl(
|
| : pref_service_(pref_service),
|
| proxy_config_service_impl_(NULL),
|
| io_task_runner_(io_task_runner) {
|
| - config_state_ = ReadPrefConfig(pref_service_, &pref_config_);
|
| + pref_config_state_ = ReadPrefConfig(pref_service_, &pref_config_);
|
| + active_config_state_ = pref_config_state_;
|
| + active_config_ = pref_config_;
|
| +
|
| proxy_prefs_.Init(pref_service);
|
| proxy_prefs_.Add(proxy_config::prefs::kProxy,
|
| base::Bind(&PrefProxyConfigTrackerImpl::OnProxyPrefChanged,
|
| @@ -148,7 +150,7 @@ PrefProxyConfigTrackerImpl::CreateTrackingProxyConfigService(
|
| std::unique_ptr<net::ProxyConfigService> base_service) {
|
| DCHECK(!proxy_config_service_impl_);
|
| proxy_config_service_impl_ = new ProxyConfigServiceImpl(
|
| - std::move(base_service), config_state_, pref_config_);
|
| + std::move(base_service), active_config_state_, active_config_);
|
| VLOG(1) << this << ": set chrome proxy config service to "
|
| << proxy_config_service_impl_;
|
|
|
| @@ -212,13 +214,12 @@ void PrefProxyConfigTrackerImpl::RegisterPrefs(PrefRegistrySimple* registry) {
|
|
|
| // static
|
| void PrefProxyConfigTrackerImpl::RegisterProfilePrefs(
|
| - user_prefs::PrefRegistrySyncable* pref_service) {
|
| + PrefRegistrySimple* registry) {
|
| std::unique_ptr<base::DictionaryValue> default_settings =
|
| ProxyConfigDictionary::CreateSystem();
|
| - pref_service->RegisterDictionaryPref(proxy_config::prefs::kProxy,
|
| - std::move(default_settings));
|
| - pref_service->RegisterBooleanPref(proxy_config::prefs::kUseSharedProxies,
|
| - false);
|
| + registry->RegisterDictionaryPref(proxy_config::prefs::kProxy,
|
| + std::move(default_settings));
|
| + registry->RegisterBooleanPref(proxy_config::prefs::kUseSharedProxies, false);
|
| }
|
|
|
| // static
|
| @@ -257,14 +258,25 @@ ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig(
|
| ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::GetProxyConfig(
|
| net::ProxyConfig* config) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - if (config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| + if (pref_config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| *config = pref_config_;
|
| - return config_state_;
|
| + return pref_config_state_;
|
| }
|
|
|
| void PrefProxyConfigTrackerImpl::OnProxyConfigChanged(
|
| ProxyPrefs::ConfigState config_state,
|
| const net::ProxyConfig& config) {
|
| + // If the configuration hasn't changed, do nothing.
|
| + if (active_config_state_ == config_state &&
|
| + (active_config_state_ == ProxyPrefs::CONFIG_UNSET ||
|
| + active_config_.Equals(config))) {
|
| + return;
|
| + }
|
| +
|
| + active_config_state_ = config_state;
|
| + if (active_config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| + active_config_ = config;
|
| +
|
| if (!proxy_config_service_impl_)
|
| return;
|
| io_task_runner_->PostTask(
|
| @@ -339,11 +351,11 @@ void PrefProxyConfigTrackerImpl::OnProxyPrefChanged() {
|
| net::ProxyConfig new_config;
|
| ProxyPrefs::ConfigState config_state =
|
| ReadPrefConfig(pref_service_, &new_config);
|
| - if (config_state_ != config_state ||
|
| - (config_state_ != ProxyPrefs::CONFIG_UNSET &&
|
| + if (pref_config_state_ != config_state ||
|
| + (pref_config_state_ != ProxyPrefs::CONFIG_UNSET &&
|
| !pref_config_.Equals(new_config))) {
|
| - config_state_ = config_state;
|
| - if (config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| + pref_config_state_ = config_state;
|
| + if (pref_config_state_ != ProxyPrefs::CONFIG_UNSET)
|
| pref_config_ = new_config;
|
| OnProxyConfigChanged(config_state, new_config);
|
| }
|
|
|