From 9a4a34ac02f7317286b5edde3ce98ec9cb35deb5 Mon Sep 17 00:00:00 2001 From: "mnissler@chromium.org" Date: Fri, 23 Jul 2010 10:57:36 +0000 Subject: 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 --- chrome/browser/pref_set_observer.cc | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 chrome/browser/pref_set_observer.cc (limited to 'chrome/browser/pref_set_observer.cc') 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); +} -- cgit v1.1