AU: Add support for persistent update engine preferences store.

BUG=5140
TEST=emerge-x86-generic, attached unit tests

Review URL: http://codereview.chromium.org/3014035
diff --git a/prefs.h b/prefs.h
new file mode 100644
index 0000000..5926d97
--- /dev/null
+++ b/prefs.h
@@ -0,0 +1,46 @@
+// Copyright (c) 2010 The Chromium OS 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_PLATFORM_UPDATE_ENGINE_PREFS_H__
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_PREFS_H__
+
+#include "base/file_path.h"
+#include "gtest/gtest_prod.h"  // for FRIEND_TEST
+#include "update_engine/prefs_interface.h"
+
+namespace chromeos_update_engine {
+
+// Implements a preference store by storing the value associated with
+// a key in a separate file named after the key under a preference
+// store directory.
+
+class Prefs : public PrefsInterface {
+ public:
+  // Initializes the store by associating this object with |prefs_dir|
+  // as the preference store directory. Returns true on success, false
+  // otherwise.
+  bool Init(const FilePath& prefs_dir);
+
+  // PrefsInterface methods.
+  bool GetString(const std::string& key, std::string* value);
+  bool SetString(const std::string& key, const std::string& value);
+  bool GetInt64(const std::string& key, int64_t* value);
+  bool SetInt64(const std::string& key, const int64_t value);
+
+ private:
+  FRIEND_TEST(PrefsTest, GetFileNameForKey);
+  FRIEND_TEST(PrefsTest, GetFileNameForKeyBadCharacter);
+  FRIEND_TEST(PrefsTest, GetFileNameForKeyEmpty);
+
+  // Sets |filename| to the full path to the file containing the data
+  // associated with |key|. Returns true on success, false otherwise.
+  bool GetFileNameForKey(const std::string& key, FilePath* filename);
+
+  // Preference store directory.
+  FilePath prefs_dir_;
+};
+
+}  // namespace chromeos_update_engine
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_PREFS_H__