OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/net/pref_proxy_config_tracker_impl.h" | 5 #include "chrome/browser/net/pref_proxy_config_tracker_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/prefs/pref_registry_simple.h" | 8 #include "base/prefs/pref_registry_simple.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 } | 122 } |
123 } | 123 } |
124 | 124 |
125 //========================= PrefProxyConfigTrackerImpl ========================= | 125 //========================= PrefProxyConfigTrackerImpl ========================= |
126 | 126 |
127 PrefProxyConfigTrackerImpl::PrefProxyConfigTrackerImpl( | 127 PrefProxyConfigTrackerImpl::PrefProxyConfigTrackerImpl( |
128 PrefService* pref_service) | 128 PrefService* pref_service) |
129 : pref_service_(pref_service), | 129 : pref_service_(pref_service), |
130 chrome_proxy_config_service_(NULL), | 130 chrome_proxy_config_service_(NULL), |
131 update_pending_(true) { | 131 update_pending_(true) { |
132 config_state_ = ReadPrefConfig(&pref_config_); | 132 config_state_ = ReadPrefConfig(pref_service_, &pref_config_); |
133 proxy_prefs_.Init(pref_service); | 133 proxy_prefs_.Init(pref_service); |
134 proxy_prefs_.Add(prefs::kProxy, | 134 proxy_prefs_.Add(prefs::kProxy, |
135 base::Bind(&PrefProxyConfigTrackerImpl::OnProxyPrefChanged, | 135 base::Bind(&PrefProxyConfigTrackerImpl::OnProxyPrefChanged, |
136 base::Unretained(this))); | 136 base::Unretained(this))); |
137 } | 137 } |
138 | 138 |
139 PrefProxyConfigTrackerImpl::~PrefProxyConfigTrackerImpl() { | 139 PrefProxyConfigTrackerImpl::~PrefProxyConfigTrackerImpl() { |
140 DCHECK(pref_service_ == NULL); | 140 DCHECK(pref_service_ == NULL); |
141 } | 141 } |
142 | 142 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 // static | 205 // static |
206 void PrefProxyConfigTrackerImpl::RegisterUserPrefs( | 206 void PrefProxyConfigTrackerImpl::RegisterUserPrefs( |
207 user_prefs::PrefRegistrySyncable* pref_service) { | 207 user_prefs::PrefRegistrySyncable* pref_service) { |
208 DictionaryValue* default_settings = ProxyConfigDictionary::CreateSystem(); | 208 DictionaryValue* default_settings = ProxyConfigDictionary::CreateSystem(); |
209 pref_service->RegisterDictionaryPref( | 209 pref_service->RegisterDictionaryPref( |
210 prefs::kProxy, | 210 prefs::kProxy, |
211 default_settings, | 211 default_settings, |
212 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 212 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
213 } | 213 } |
214 | 214 |
| 215 // static |
| 216 ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig( |
| 217 const PrefService* pref_service, |
| 218 net::ProxyConfig* config) { |
| 219 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 220 |
| 221 // Clear the configuration and source. |
| 222 *config = net::ProxyConfig(); |
| 223 ProxyPrefs::ConfigState config_state = ProxyPrefs::CONFIG_UNSET; |
| 224 |
| 225 const PrefService::Preference* pref = |
| 226 pref_service->FindPreference(prefs::kProxy); |
| 227 DCHECK(pref); |
| 228 |
| 229 const DictionaryValue* dict = pref_service->GetDictionary(prefs::kProxy); |
| 230 DCHECK(dict); |
| 231 ProxyConfigDictionary proxy_dict(dict); |
| 232 |
| 233 if (PrefConfigToNetConfig(proxy_dict, config)) { |
| 234 if (!pref->IsUserModifiable() || pref->HasUserSetting()) { |
| 235 if (pref->IsManaged()) |
| 236 config_state = ProxyPrefs::CONFIG_POLICY; |
| 237 else if (pref->IsExtensionControlled()) |
| 238 config_state = ProxyPrefs::CONFIG_EXTENSION; |
| 239 else |
| 240 config_state = ProxyPrefs::CONFIG_OTHER_PRECEDE; |
| 241 } else { |
| 242 config_state = ProxyPrefs::CONFIG_FALLBACK; |
| 243 } |
| 244 } |
| 245 |
| 246 return config_state; |
| 247 } |
| 248 |
215 ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::GetProxyConfig( | 249 ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::GetProxyConfig( |
216 net::ProxyConfig* config) { | 250 net::ProxyConfig* config) { |
217 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
218 if (config_state_ != ProxyPrefs::CONFIG_UNSET) | 252 if (config_state_ != ProxyPrefs::CONFIG_UNSET) |
219 *config = pref_config_; | 253 *config = pref_config_; |
220 return config_state_; | 254 return config_state_; |
221 } | 255 } |
222 | 256 |
223 void PrefProxyConfigTrackerImpl::OnProxyConfigChanged( | 257 void PrefProxyConfigTrackerImpl::OnProxyConfigChanged( |
224 ProxyPrefs::ConfigState config_state, | 258 ProxyPrefs::ConfigState config_state, |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 // Fall through to NOTREACHED(). | 328 // Fall through to NOTREACHED(). |
295 } | 329 } |
296 } | 330 } |
297 NOTREACHED() << "Unknown proxy mode, falling back to system settings."; | 331 NOTREACHED() << "Unknown proxy mode, falling back to system settings."; |
298 return false; | 332 return false; |
299 } | 333 } |
300 | 334 |
301 void PrefProxyConfigTrackerImpl::OnProxyPrefChanged() { | 335 void PrefProxyConfigTrackerImpl::OnProxyPrefChanged() { |
302 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
303 net::ProxyConfig new_config; | 337 net::ProxyConfig new_config; |
304 ProxyPrefs::ConfigState config_state = ReadPrefConfig(&new_config); | 338 ProxyPrefs::ConfigState config_state = ReadPrefConfig(pref_service_, |
| 339 &new_config); |
305 if (config_state_ != config_state || | 340 if (config_state_ != config_state || |
306 (config_state_ != ProxyPrefs::CONFIG_UNSET && | 341 (config_state_ != ProxyPrefs::CONFIG_UNSET && |
307 !pref_config_.Equals(new_config))) { | 342 !pref_config_.Equals(new_config))) { |
308 config_state_ = config_state; | 343 config_state_ = config_state; |
309 if (config_state_ != ProxyPrefs::CONFIG_UNSET) | 344 if (config_state_ != ProxyPrefs::CONFIG_UNSET) |
310 pref_config_ = new_config; | 345 pref_config_ = new_config; |
311 update_pending_ = true; | 346 update_pending_ = true; |
312 } | 347 } |
313 if (update_pending_) | 348 if (update_pending_) |
314 OnProxyConfigChanged(config_state, new_config); | 349 OnProxyConfigChanged(config_state, new_config); |
315 } | 350 } |
316 | |
317 ProxyPrefs::ConfigState PrefProxyConfigTrackerImpl::ReadPrefConfig( | |
318 net::ProxyConfig* config) { | |
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
320 | |
321 // Clear the configuration and source. | |
322 *config = net::ProxyConfig(); | |
323 ProxyPrefs::ConfigState config_state = ProxyPrefs::CONFIG_UNSET; | |
324 | |
325 const PrefService::Preference* pref = | |
326 pref_service_->FindPreference(prefs::kProxy); | |
327 DCHECK(pref); | |
328 | |
329 const DictionaryValue* dict = pref_service_->GetDictionary(prefs::kProxy); | |
330 DCHECK(dict); | |
331 ProxyConfigDictionary proxy_dict(dict); | |
332 | |
333 if (PrefConfigToNetConfig(proxy_dict, config)) { | |
334 if (!pref->IsUserModifiable() || pref->HasUserSetting()) { | |
335 if (pref->IsManaged()) | |
336 config_state = ProxyPrefs::CONFIG_POLICY; | |
337 else if (pref->IsExtensionControlled()) | |
338 config_state = ProxyPrefs::CONFIG_EXTENSION; | |
339 else | |
340 config_state = ProxyPrefs::CONFIG_OTHER_PRECEDE; | |
341 } else { | |
342 config_state = ProxyPrefs::CONFIG_FALLBACK; | |
343 } | |
344 } | |
345 | |
346 return config_state; | |
347 } | |
OLD | NEW |