diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-23 10:57:36 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-23 10:57:36 +0000 |
commit | 9a4a34ac02f7317286b5edde3ce98ec9cb35deb5 (patch) | |
tree | e6c5bc0a74c2708e703cc6edf086dc4d3bf5d467 /chrome/browser/pref_set_observer.cc | |
parent | 5b7a0cfbc0c936545c214e681df783cb7bd81222 (diff) | |
download | chromium_src-9a4a34ac02f7317286b5edde3ce98ec9cb35deb5.zip chromium_src-9a4a34ac02f7317286b5edde3ce98ec9cb35deb5.tar.gz chromium_src-9a4a34ac02f7317286b5edde3ce98ec9cb35deb5.tar.bz2 |
Disable proxy config button and show banner if proxy prefs are managed.
Preferences.xib changes: Connect Enabled of the proxies configuration button to
a getter in PreferencesWindowController.
BUG=49538
TEST=Unit test in pref_set_observer_unittest.cc, manually configure proxy policies, check advanced options page.
Review URL: http://codereview.chromium.org/3038013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53457 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/pref_set_observer.cc')
-rw-r--r-- | chrome/browser/pref_set_observer.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/chrome/browser/pref_set_observer.cc b/chrome/browser/pref_set_observer.cc new file mode 100644 index 0000000..1e9f904 --- /dev/null +++ b/chrome/browser/pref_set_observer.cc @@ -0,0 +1,66 @@ +// Copyright (c) 2010 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. + +#include "chrome/browser/pref_set_observer.h" + +#include "chrome/common/notification_type.h" +#include "chrome/common/pref_names.h" + +PrefSetObserver::PrefSetObserver(PrefService* pref_service, + NotificationObserver* observer) + : pref_service_(pref_service), + observer_(observer) { +} + +PrefSetObserver::~PrefSetObserver() { + for (PrefSet::const_iterator i(prefs_.begin()); i != prefs_.end(); ++i) + pref_service_->RemovePrefObserver(i->c_str(), this); +} + +void PrefSetObserver::AddPref(const std::wstring& pref) { + if (!prefs_.count(pref) && pref_service_->FindPreference(pref.c_str())) { + prefs_.insert(pref); + pref_service_->AddPrefObserver(pref.c_str(), this); + } +} + +void PrefSetObserver::RemovePref(const std::wstring& pref) { + if (prefs_.erase(pref)) + pref_service_->RemovePrefObserver(pref.c_str(), this); +} + +bool PrefSetObserver::IsObserved(const std::wstring& pref) { + return prefs_.count(pref) > 0; +} + +bool PrefSetObserver::IsManaged() { + for (PrefSet::const_iterator i(prefs_.begin()); i != prefs_.end(); ++i) { + const PrefService::Preference* pref = + pref_service_->FindPreference(i->c_str()); + if (pref && pref->IsManaged()) + return true; + } + return false; +} + +// static +PrefSetObserver* PrefSetObserver::CreateProxyPrefSetObserver( + PrefService* pref_service, + NotificationObserver* observer) { + PrefSetObserver* pref_set = new PrefSetObserver(pref_service, observer); + pref_set->AddPref(prefs::kNoProxyServer); + pref_set->AddPref(prefs::kProxyAutoDetect); + pref_set->AddPref(prefs::kProxyServer); + pref_set->AddPref(prefs::kProxyPacUrl); + pref_set->AddPref(prefs::kProxyBypassList); + + return pref_set; +} + +void PrefSetObserver::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + if (observer_) + observer_->Observe(type, source, details); +} |