• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_SETTINGS_H_
6 #define CHROME_BROWSER_CHROMEOS_CROS_SETTINGS_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/hash_tables.h"
13 #include "base/memory/singleton.h"
14 #include "base/observer_list.h"
15 #include "base/threading/non_thread_safe.h"
16 #include "chrome/browser/chromeos/cros_settings_names.h"
17 #include "content/common/notification_observer.h"
18 
19 namespace base {
20 template <typename T> struct DefaultLazyInstanceTraits;
21 }
22 
23 class Value;
24 
25 namespace chromeos {
26 
27 class CrosSettingsProvider;
28 
29 // A class manages per-device/global settings.
30 class CrosSettings : public base::NonThreadSafe {
31  public:
32   // Class factory.
33   static CrosSettings* Get();
34 
35   // Helper function to test if given path is a value cros settings name.
36   static bool IsCrosSettings(const std::string& path);
37 
38   // Sets |in_value| to given |path| in cros settings.
39   // Note that this takes ownership of |in_value|.
40   void Set(const std::string& path, Value* in_value);
41 
42   // Fires system setting change notification.
43   void FireObservers(const char* path);
44 
45   // Gets settings value of given |path| to |out_value|.
46   // Note that the caller owns |out_value| returned.
47   bool Get(const std::string& path, Value** out_value) const;
48 
49   // Convenience forms of Set().  These methods will replace any existing
50   // value at that path, even if it has a different type.
51   void SetBoolean(const std::string& path, bool in_value);
52   void SetInteger(const std::string& path, int in_value);
53   void SetDouble(const std::string& path, double in_value);
54   void SetString(const std::string& path, const std::string& in_value);
55 
56   // These are convenience forms of Get().  The value will be retrieved
57   // and the return value will be true if the path is valid and the value at
58   // the end of the path can be returned in the form specified.
59   bool GetBoolean(const std::string& path, bool* out_value) const;
60   bool GetInteger(const std::string& path, int* out_value) const;
61   bool GetDouble(const std::string& path, double* out_value) const;
62   bool GetString(const std::string& path, std::string* out_value) const;
63 
64   // adding/removing of providers
65   bool AddSettingsProvider(CrosSettingsProvider* provider);
66   bool RemoveSettingsProvider(CrosSettingsProvider* provider);
67 
68   // If the pref at the given path changes, we call the observer's Observe
69   // method with PREF_CHANGED.
70   void AddSettingsObserver(const char* path, NotificationObserver* obs);
71   void RemoveSettingsObserver(const char* path, NotificationObserver* obs);
72 
73  private:
74   // List of ChromeOS system settings providers.
75   std::vector<CrosSettingsProvider*> providers_;
76 
77   // A map from settings names to a list of observers. Observers get fired in
78   // the order they are added.
79   typedef ObserverList<NotificationObserver> NotificationObserverList;
80   typedef base::hash_map<std::string, NotificationObserverList*>
81       SettingsObserverMap;
82   SettingsObserverMap settings_observers_;
83 
84   CrosSettings();
85   ~CrosSettings();
86   CrosSettingsProvider* GetProvider(const std::string& path) const;
87   friend struct base::DefaultLazyInstanceTraits<CrosSettings>;
88 
89   DISALLOW_COPY_AND_ASSIGN(CrosSettings);
90 };
91 
92 }  // namespace chromeos
93 
94 #endif  // CHROME_BROWSER_CHROMEOS_CROS_SETTINGS_H_
95