blob: da043b30a6fe1c5c3b2c3c10f875a797cc4e3119 [file] [log] [blame]
// Copyright 2018 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 OOBE_CONFIG_OOBE_CONFIG_H_
#define OOBE_CONFIG_OOBE_CONFIG_H_
#include <memory>
#include <string>
#include <base/files/file_path.h>
namespace oobe_config {
class RollbackData;
// Helper class for saving and restoring rollback data. Testing is possible with
// |set_prefix_path_for_testing|.
class OobeConfig {
public:
OobeConfig();
OobeConfig(const OobeConfig&) = delete;
OobeConfig& operator=(const OobeConfig&) = delete;
~OobeConfig();
// Saves the rollback data into an unencrypted file. Only use for testing.
bool UnencryptedRollbackSave() const;
// Saves the rollback data into an encrypted file.
bool EncryptedRollbackSave() const;
// Restores the rollback data from an unencrypted file. Only use for testing.
bool UnencryptedRollbackRestore() const;
// Restores the rollback data from an encrypted file.
bool EncryptedRollbackRestore() const;
// Removes all files from kEncryptedStatefulRollbackDataPath.
void CleanupEncryptedStatefulDirectory() const;
// Sets a prefix path which is used as file system root when testing. Setting
// to an empty path removes the prefix.
void set_prefix_path_for_testing(const base::FilePath& prefix_path) {
prefix_path_for_testing_ = prefix_path;
}
// Reads the content of the file at |file_path| (inside the testing prefix if
// set) and returns it in |out_content|.
// Returns true if reading the file succeeded.
// Returns false if the file doesn't exist or reading it fails, |out_content|
// is set to empty string in this case.
bool ReadFile(const base::FilePath& file_path,
std::string* out_content) const;
// Returns whether the file at |file_path| (inside the testing prefix if set)
// exists.
bool FileExists(const base::FilePath& file_path) const;
// Writes |data| into a file at |file_path| (inside the testing prefix if
// set).
// Returns true if writing the file succeeded, false otherwise.
bool WriteFile(const base::FilePath& file_path,
const std::string& data) const;
bool ShouldRestoreRollbackData() const;
bool ShouldSaveRollbackData() const;
bool DeleteRollbackSaveFlagFile() const;
private:
// Returns the file path of |file_path| which includes the prefix if set.
// |file_path| must be an absolute path starting with "/".
base::FilePath GetPrefixedFilePath(const base::FilePath& file_path) const;
// Reads the content of the file at |file_path| and returns it in
// |out_content|. Doesn't respect the testing prefix. Returns true if reading
// the file succeeded. Returns false if the file doesn't exist or reading it
// fails, |out_content| is set to empty string in this case.
bool ReadFileWithoutPrefix(const base::FilePath& file_path,
std::string* out_content) const;
// Writes |data| into a file at |file_path|. Doesn't respect the testing
// prefix. Returns true if the write succeeded, false otherwise.
bool WriteFileWithoutPrefix(const base::FilePath& file_path,
const std::string& data) const;
// Gets the files needed for rollback and stores them in a |RollbackData|
// proto, then returns the serialized proto |serialized_rollback_data|.
bool GetSerializedRollbackData(std::string* serialized_rollback_data) const;
// Gets the files needed for rollback and returns them in |rollback_data|.
void GetRollbackData(RollbackData* rollback_data) const;
// We're prefixing all paths for testing with a temp directory. Empty (no
// prefix) by default.
base::FilePath prefix_path_for_testing_;
};
} // namespace oobe_config
#endif // OOBE_CONFIG_OOBE_CONFIG_H_