1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be
33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file.
43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#ifndef CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <set>
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/basictypes.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/pref_service.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Observes the state of a set of preferences and allows to query their combined
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// managed bits.
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass PrefSetObserver : public NotificationObserver {
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Initialize with an empty set of preferences.
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PrefSetObserver(PrefService* pref_service,
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                  NotificationObserver* observer);
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual ~PrefSetObserver();
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Add a |pref| to the set of preferences to observe.
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void AddPref(const std::string& pref);
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Remove |pref| from the set of observed peferences.
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void RemovePref(const std::string& pref);
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Check whether |pref| is in the set of observed preferences.
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool IsObserved(const std::string& pref);
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Check whether any of the observed preferences has the managed bit set.
333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool IsManaged();
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Create a pref set observer for all preferences relevant to proxies.
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static PrefSetObserver* CreateProxyPrefSetObserver(
373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      PrefService* pref_service,
383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NotificationObserver* observer);
393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Create a pref set observer for all preferences relevant to default search.
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static PrefSetObserver* CreateDefaultSearchPrefSetObserver(
423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      PrefService* pref_service,
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      NotificationObserver* observer);
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Overridden from NotificationObserver.
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void Observe(NotificationType type,
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                       const NotificationSource& source,
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                       const NotificationDetails& details);
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  typedef std::set<std::string> PrefSet;
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PrefSet prefs_;
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PrefService* pref_service_;
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PrefChangeRegistrar registrar_;
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  NotificationObserver* observer_;
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DISALLOW_COPY_AND_ASSIGN(PrefSetObserver);
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif  // CHROME_BROWSER_PREFS_PREF_SET_OBSERVER_H_
62