summaryrefslogtreecommitdiffstats
path: root/chrome/browser/pref_set_observer.cc
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-23 10:57:36 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-23 10:57:36 +0000
commit9a4a34ac02f7317286b5edde3ce98ec9cb35deb5 (patch)
treee6c5bc0a74c2708e703cc6edf086dc4d3bf5d467 /chrome/browser/pref_set_observer.cc
parent5b7a0cfbc0c936545c214e681df783cb7bd81222 (diff)
downloadchromium_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.cc66
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);
+}