1 // Copyright 2013 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 CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_ 6 #define CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_ 7 8 #include <string> 9 10 #include "base/callback.h" 11 #include "chromeos/chromeos_export.h" 12 13 namespace base { 14 class Value; 15 } 16 17 namespace chromeos { 18 19 class CHROMEOS_EXPORT CrosSettingsProvider { 20 public: 21 // The callback type that is called to notify the CrosSettings observers 22 // about a setting change. 23 typedef base::Callback<void(const std::string&)> NotifyObserversCallback; 24 25 // Possible results of a trusted check. 26 enum TrustedStatus { 27 // The trusted values were populated in the cache and can be accessed 28 // until the next iteration of the message loop. 29 TRUSTED, 30 // Either a store or a load operation is in progress. The provided 31 // callback will be invoked once the verification has finished. 32 TEMPORARILY_UNTRUSTED, 33 // The verification of the trusted store has failed permanently. The 34 // client should assume this state final and further checks for 35 // trustedness will fail at least until the browser restarts. 36 PERMANENTLY_UNTRUSTED, 37 }; 38 39 // Creates a new provider instance. |notify_cb| will be used to notify 40 // about setting changes. 41 explicit CrosSettingsProvider(const NotifyObserversCallback& notify_cb); 42 virtual ~CrosSettingsProvider(); 43 44 // Sets |in_value| to given |path| in cros settings. 45 void Set(const std::string& path, const base::Value& in_value); 46 47 // Gets settings value of given |path| to |out_value|. 48 virtual const base::Value* Get(const std::string& path) const = 0; 49 50 // Requests the provider to fetch its values from a trusted store, if it 51 // hasn't done so yet. Returns TRUSTED if the values returned by this provider 52 // are trusted during the current loop cycle. Otherwise returns 53 // TEMPORARILY_UNTRUSTED, and |callback| will be invoked later when trusted 54 // values become available, PrepareTrustedValues() should be tried again in 55 // that case. Returns PERMANENTLY_UNTRUSTED if a permanent error has occurred. 56 virtual TrustedStatus PrepareTrustedValues( 57 const base::Closure& callback) = 0; 58 59 // Gets the namespace prefix provided by this provider. 60 virtual bool HandlesSetting(const std::string& path) const = 0; 61 62 void SetNotifyObserversCallback(const NotifyObserversCallback& notify_cb); 63 64 protected: 65 // Notifies the observers about a setting change. 66 void NotifyObservers(const std::string& path); 67 68 private: 69 // Does the real job for Set(). 70 virtual void DoSet(const std::string& path, 71 const base::Value& in_value) = 0; 72 73 // Callback used to notify about setting changes. 74 NotifyObserversCallback notify_cb_; 75 }; 76 77 } // namespace chromeos 78 79 #endif // CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_ 80