// Copyright 2013 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. #ifndef CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_ #define CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_ #include <string> #include "base/callback.h" #include "chromeos/chromeos_export.h" namespace base { class Value; } namespace chromeos { class CHROMEOS_EXPORT CrosSettingsProvider { public: // The callback type that is called to notify the CrosSettings observers // about a setting change. typedef base::Callback<void(const std::string&)> NotifyObserversCallback; // Possible results of a trusted check. enum TrustedStatus { // The trusted values were populated in the cache and can be accessed // until the next iteration of the message loop. TRUSTED, // Either a store or a load operation is in progress. The provided // callback will be invoked once the verification has finished. TEMPORARILY_UNTRUSTED, // The verification of the trusted store has failed permanently. The // client should assume this state final and further checks for // trustedness will fail at least until the browser restarts. PERMANENTLY_UNTRUSTED, }; // Creates a new provider instance. |notify_cb| will be used to notify // about setting changes. explicit CrosSettingsProvider(const NotifyObserversCallback& notify_cb); virtual ~CrosSettingsProvider(); // Sets |in_value| to given |path| in cros settings. void Set(const std::string& path, const base::Value& in_value); // Gets settings value of given |path| to |out_value|. virtual const base::Value* Get(const std::string& path) const = 0; // Requests the provider to fetch its values from a trusted store, if it // hasn't done so yet. Returns TRUSTED if the values returned by this provider // are trusted during the current loop cycle. Otherwise returns // TEMPORARILY_UNTRUSTED, and |callback| will be invoked later when trusted // values become available, PrepareTrustedValues() should be tried again in // that case. Returns PERMANENTLY_UNTRUSTED if a permanent error has occurred. virtual TrustedStatus PrepareTrustedValues( const base::Closure& callback) = 0; // Gets the namespace prefix provided by this provider. virtual bool HandlesSetting(const std::string& path) const = 0; void SetNotifyObserversCallback(const NotifyObserversCallback& notify_cb); protected: // Notifies the observers about a setting change. void NotifyObservers(const std::string& path); private: // Does the real job for Set(). virtual void DoSet(const std::string& path, const base::Value& in_value) = 0; // Callback used to notify about setting changes. NotifyObserversCallback notify_cb_; }; } // namespace chromeos #endif // CHROMEOS_SETTINGS_CROS_SETTINGS_PROVIDER_H_