Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(676)

Side by Side Diff: chromeos/network/proxy/proxy_config_service_impl.cc

Issue 2946153002: Fix chromeos::ProxyConfigService starting with the wrong ProxyConfig. (Closed)
Patch Set: Remove incorrect comment Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/network/proxy/proxy_config_service_impl.h" 5 #include "chromeos/network/proxy/proxy_config_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 48
49 } // namespace 49 } // namespace
50 50
51 ProxyConfigServiceImpl::ProxyConfigServiceImpl( 51 ProxyConfigServiceImpl::ProxyConfigServiceImpl(
52 PrefService* profile_prefs, 52 PrefService* profile_prefs,
53 PrefService* local_state_prefs, 53 PrefService* local_state_prefs,
54 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) 54 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
55 : PrefProxyConfigTrackerImpl( 55 : PrefProxyConfigTrackerImpl(
56 profile_prefs ? profile_prefs : local_state_prefs, 56 profile_prefs ? profile_prefs : local_state_prefs,
57 io_task_runner), 57 io_task_runner),
58 active_config_state_(ProxyPrefs::CONFIG_UNSET),
59 profile_prefs_(profile_prefs), 58 profile_prefs_(profile_prefs),
60 local_state_prefs_(local_state_prefs), 59 local_state_prefs_(local_state_prefs),
61 pointer_factory_(this) { 60 pointer_factory_(this) {
62 const base::Closure proxy_change_callback = base::Bind( 61 const base::Closure proxy_change_callback = base::Bind(
63 &ProxyConfigServiceImpl::OnProxyPrefChanged, base::Unretained(this)); 62 &ProxyConfigServiceImpl::OnProxyPrefChanged, base::Unretained(this));
64 63
65 if (profile_prefs) { 64 if (profile_prefs) {
66 profile_pref_registrar_.Init(profile_prefs); 65 profile_pref_registrar_.Init(profile_prefs);
67 profile_pref_registrar_.Add(::onc::prefs::kOpenNetworkConfiguration, 66 profile_pref_registrar_.Add(::onc::prefs::kOpenNetworkConfiguration,
68 proxy_change_callback); 67 proxy_change_callback);
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 248 }
250 } 249 }
251 250
252 // Determine effective proxy config, either from prefs or network. 251 // Determine effective proxy config, either from prefs or network.
253 ProxyPrefs::ConfigState effective_config_state; 252 ProxyPrefs::ConfigState effective_config_state;
254 net::ProxyConfig effective_config; 253 net::ProxyConfig effective_config;
255 GetEffectiveProxyConfig(pref_state, pref_config, network_availability, 254 GetEffectiveProxyConfig(pref_state, pref_config, network_availability,
256 network_config, ignore_proxy, &effective_config_state, 255 network_config, ignore_proxy, &effective_config_state,
257 &effective_config); 256 &effective_config);
258 257
259 bool config_changed = active_config_state_ != effective_config_state || 258 // If effective config is from system (i.e. network), it's considered a
260 (active_config_state_ != ProxyPrefs::CONFIG_UNSET && 259 // special kind of prefs that ranks below policy/extension but above
261 !active_config_.Equals(effective_config)); 260 // others, so bump it up to CONFIG_OTHER_PRECEDE to force its precedence
262 if (config_changed) { // Activate and store new effective config. 261 // when PrefProxyConfigTrackerImpl pushes it to ChromeProxyConfigService.
263 active_config_state_ = effective_config_state; 262 if (effective_config_state == ProxyPrefs::CONFIG_SYSTEM)
264 if (active_config_state_ != ProxyPrefs::CONFIG_UNSET) 263 effective_config_state = ProxyPrefs::CONFIG_OTHER_PRECEDE;
265 active_config_ = effective_config; 264 // If config is manual, add rule to bypass local host.
266 // If effective config is from system (i.e. network), it's considered a 265 if (effective_config.proxy_rules().type !=
267 // special kind of prefs that ranks below policy/extension but above 266 net::ProxyConfig::ProxyRules::TYPE_NO_RULES) {
268 // others, so bump it up to CONFIG_OTHER_PRECEDE to force its precedence 267 effective_config.proxy_rules().bypass_rules.AddRuleToBypassLocal();
269 // when PrefProxyConfigTrackerImpl pushes it to ChromeProxyConfigService. 268 }
270 if (effective_config_state == ProxyPrefs::CONFIG_SYSTEM) 269 PrefProxyConfigTrackerImpl::OnProxyConfigChanged(effective_config_state,
271 effective_config_state = ProxyPrefs::CONFIG_OTHER_PRECEDE; 270 effective_config);
272 // If config is manual, add rule to bypass local host. 271 if (VLOG_IS_ON(1)) {
273 if (effective_config.proxy_rules().type != 272 std::unique_ptr<base::DictionaryValue> config_dict(
274 net::ProxyConfig::ProxyRules::TYPE_NO_RULES) { 273 effective_config.ToValue());
275 effective_config.proxy_rules().bypass_rules.AddRuleToBypassLocal(); 274 VLOG(1) << this << ": Proxy changed: "
276 } 275 << ProxyPrefs::ConfigStateToDebugString(effective_config_state)
277 PrefProxyConfigTrackerImpl::OnProxyConfigChanged(effective_config_state, 276 << ", " << *config_dict;
278 effective_config);
279 if (VLOG_IS_ON(1)) {
280 std::unique_ptr<base::DictionaryValue> config_dict(
281 effective_config.ToValue());
282 VLOG(1) << this << ": Proxy changed: "
283 << ProxyPrefs::ConfigStateToDebugString(active_config_state_)
284 << ", " << *config_dict;
285 }
286 } 277 }
287 } 278 }
288 279
289 } // namespace chromeos 280 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/network/proxy/proxy_config_service_impl.h ('k') | chromeos/network/proxy/proxy_config_service_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698