blob: e773a35eadb6fc0d20a317483bcce13f442ff9fc [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2011 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Darin Petkov30030592010-07-27 13:53:20 -070016
Alex Deymo39910dc2015-11-09 17:04:30 -080017#ifndef UPDATE_ENGINE_COMMON_PREFS_INTERFACE_H_
18#define UPDATE_ENGINE_COMMON_PREFS_INTERFACE_H_
Darin Petkov30030592010-07-27 13:53:20 -070019
Ben Chan9abb7632014-08-07 00:10:53 -070020#include <stdint.h>
21
Darin Petkov30030592010-07-27 13:53:20 -070022#include <string>
Jae Hoon Kimc1f36922020-05-11 18:20:18 -070023#include <vector>
Darin Petkov30030592010-07-27 13:53:20 -070024
25namespace chromeos_update_engine {
26
27// The prefs interface allows access to a persistent preferences
28// store. The two reasons for providing this as an interface are
29// testing as well as easier switching to a new implementation in the
30// future, if necessary.
31
32class PrefsInterface {
33 public:
Alex Deymod6f60072015-10-12 12:22:27 -070034 // Observer class to be notified about key value changes.
35 class ObserverInterface {
36 public:
37 virtual ~ObserverInterface() = default;
38
39 // Called when the value is set for the observed |key|.
40 virtual void OnPrefSet(const std::string& key) = 0;
41
42 // Called when the observed |key| is deleted.
43 virtual void OnPrefDeleted(const std::string& key) = 0;
44 };
45
46 virtual ~PrefsInterface() = default;
Alex Deymo610277e2014-11-11 21:18:11 -080047
Darin Petkov30030592010-07-27 13:53:20 -070048 // Gets a string |value| associated with |key|. Returns true on
49 // success, false on failure (including when the |key| is not
50 // present in the store).
Alex Deymod6f60072015-10-12 12:22:27 -070051 virtual bool GetString(const std::string& key, std::string* value) const = 0;
Darin Petkov30030592010-07-27 13:53:20 -070052
53 // Associates |key| with a string |value|. Returns true on success,
54 // false otherwise.
Kelvin Zhangcf4600e2020-10-27 15:50:33 -040055 virtual bool SetString(const std::string& key, std::string_view value) = 0;
Darin Petkov30030592010-07-27 13:53:20 -070056
Ben Chan9abb7632014-08-07 00:10:53 -070057 // Gets an int64_t |value| associated with |key|. Returns true on
Darin Petkov30030592010-07-27 13:53:20 -070058 // success, false on failure (including when the |key| is not
59 // present in the store).
Alex Deymod6f60072015-10-12 12:22:27 -070060 virtual bool GetInt64(const std::string& key, int64_t* value) const = 0;
Darin Petkov30030592010-07-27 13:53:20 -070061
Ben Chan9abb7632014-08-07 00:10:53 -070062 // Associates |key| with an int64_t |value|. Returns true on success,
Darin Petkov30030592010-07-27 13:53:20 -070063 // false otherwise.
64 virtual bool SetInt64(const std::string& key, const int64_t value) = 0;
Darin Petkov1cbd78f2010-07-29 12:38:34 -070065
Alex Deymoefb7c4c2013-07-09 14:34:00 -070066 // Gets a boolean |value| associated with |key|. Returns true on
67 // success, false on failure (including when the |key| is not
68 // present in the store).
Alex Deymod6f60072015-10-12 12:22:27 -070069 virtual bool GetBoolean(const std::string& key, bool* value) const = 0;
Alex Deymoefb7c4c2013-07-09 14:34:00 -070070
71 // Associates |key| with a boolean |value|. Returns true on success,
72 // false otherwise.
73 virtual bool SetBoolean(const std::string& key, const bool value) = 0;
74
Jay Srinivasan480ddfa2012-06-01 19:15:26 -070075 // Returns true if the setting exists (i.e. a file with the given key
76 // exists in the prefs directory)
Alex Deymod6f60072015-10-12 12:22:27 -070077 virtual bool Exists(const std::string& key) const = 0;
Jay Srinivasan480ddfa2012-06-01 19:15:26 -070078
79 // Returns true if successfully deleted the file corresponding to
80 // this key. Calling with non-existent keys does nothing.
81 virtual bool Delete(const std::string& key) = 0;
Alex Deymod6f60072015-10-12 12:22:27 -070082
Vyshu Khota4c5413d2020-11-04 16:17:25 -080083 // Deletes the pref key from platform and given namespace subdirectories.
84 // Keys are matched against end of pref keys in each namespace.
85 // Returns true if all deletes were successful.
86 virtual bool Delete(const std::string& pref_key,
87 const std::vector<std::string>& nss) = 0;
88
Andrew065d78d2020-04-07 15:43:07 -070089 // Creates a key which is part of a sub preference.
Jae Hoon Kimc1f36922020-05-11 18:20:18 -070090 static std::string CreateSubKey(const std::vector<std::string>& ns_with_key);
Andrew065d78d2020-04-07 15:43:07 -070091
Jae Hoon Kim29a80e02020-05-11 20:18:49 -070092 // Returns a list of keys within the namespace.
93 virtual bool GetSubKeys(const std::string& ns,
94 std::vector<std::string>* keys) const = 0;
95
Alex Deymod6f60072015-10-12 12:22:27 -070096 // Add an observer to watch whenever the given |key| is modified. The
97 // OnPrefSet() and OnPrefDelete() methods will be called whenever any of the
98 // Set*() methods or the Delete() method are called on the given key,
99 // respectively.
100 virtual void AddObserver(const std::string& key,
101 ObserverInterface* observer) = 0;
102
103 // Remove an observer added with AddObserver(). The observer won't be called
104 // anymore for future Set*() and Delete() method calls.
105 virtual void RemoveObserver(const std::string& key,
106 ObserverInterface* observer) = 0;
Vyshu Khota4c5413d2020-11-04 16:17:25 -0800107
108 protected:
109 // Key separator used to create sub key and get file names,
110 static const char kKeySeparator = '/';
Darin Petkov30030592010-07-27 13:53:20 -0700111};
112
113} // namespace chromeos_update_engine
114
Alex Deymo39910dc2015-11-09 17:04:30 -0800115#endif // UPDATE_ENGINE_COMMON_PREFS_INTERFACE_H_