123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // Copyright 2021 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.
- #include "remoting/base/file_host_settings.h"
- #include "base/files/file_util.h"
- #include "base/files/important_file_writer.h"
- #include "base/json/json_file_value_serializer.h"
- #include "base/json/json_string_value_serializer.h"
- #include "base/logging.h"
- #include "base/threading/sequenced_task_runner_handle.h"
- #include "base/values.h"
- #include "remoting/base/logging.h"
- namespace remoting {
- FileHostSettings::FileHostSettings(const base::FilePath& settings_file)
- : settings_file_(settings_file) {}
- FileHostSettings::~FileHostSettings() = default;
- void FileHostSettings::InitializeInstance() {
- // TODO(yuweih): Make FileHostSettings detect changes of the settings file.
- if (settings_) {
- return;
- }
- if (!base::PathIsReadable(settings_file_)) {
- HOST_LOG << "Host settings file " << settings_file_ << " does not exist.";
- return;
- }
- JSONFileValueDeserializer deserializer(settings_file_);
- int error_code;
- std::string error_message;
- settings_ = deserializer.Deserialize(&error_code, &error_message);
- if (!settings_) {
- LOG(WARNING) << "Failed to load " << settings_file_
- << ". Code: " << error_code << ", message: " << error_message;
- return;
- }
- HOST_LOG << "Host settings loaded.";
- }
- std::string FileHostSettings::GetString(
- const HostSettingKey key,
- const std::string& default_value) const {
- #if !defined(NDEBUG)
- if (task_runner_for_checking_sequence_) {
- DCHECK(task_runner_for_checking_sequence_->RunsTasksInCurrentSequence());
- }
- #endif
- if (!settings_) {
- VLOG(1) << "Either Initialize() has not been called, or the settings file "
- "doesn't exist.";
- return default_value;
- }
- std::string* string_value = settings_->FindStringKey(key);
- if (!string_value) {
- return default_value;
- }
- return *string_value;
- }
- void FileHostSettings::SetString(const HostSettingKey key,
- const std::string& value) {
- #if !defined(NDEBUG)
- if (task_runner_for_checking_sequence_) {
- DCHECK(task_runner_for_checking_sequence_->RunsTasksInCurrentSequence());
- } else {
- task_runner_for_checking_sequence_ = base::SequencedTaskRunnerHandle::Get();
- }
- #endif
- if (!settings_) {
- VLOG(1) << "Settings file didn't exist. New file will be created.";
- settings_ = std::make_unique<base::Value>(base::Value::Type::DICTIONARY);
- }
- settings_->SetStringKey(key, value);
- std::string json;
- JSONStringValueSerializer serializer(&json);
- if (!serializer.Serialize(*settings_)) {
- LOG(ERROR) << "Failed to serialize host settings JSON";
- return;
- }
- if (!base::ImportantFileWriter::WriteFileAtomically(settings_file_, json)) {
- LOG(ERROR) << "Can't write host settings file to " << settings_file_;
- }
- }
- } // namespace remoting
|