blob: 95d8eebf0bae5aae6bbfb05948aadee99fd8e369 [file] [log] [blame]
// Copyright 2020 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 "chrome/updater/external_constants_builder.h"
#include <string>
#include <vector>
#include "base/json/json_file_value_serializer.h"
#include "base/logging.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/updater_scope.h"
#include "chrome/updater/util.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace updater {
ExternalConstantsBuilder::~ExternalConstantsBuilder() {
LOG_IF(WARNING, !written_) << "An ExternalConstantsBuilder with "
<< overrides_.DictSize() << " entries is being "
<< "discarded without being written to a file.";
}
ExternalConstantsBuilder& ExternalConstantsBuilder::SetUpdateURL(
const std::vector<std::string>& urls) {
base::Value::ListStorage url_list;
url_list.reserve(urls.size());
for (const std::string& url_string : urls) {
url_list.push_back(base::Value(url_string));
}
overrides_.SetKey(kDevOverrideKeyUrl, base::Value(std::move(url_list)));
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::ClearUpdateURL() {
overrides_.RemoveKey(kDevOverrideKeyUrl);
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::SetUseCUP(bool use_cup) {
overrides_.SetBoolKey(kDevOverrideKeyUseCUP, use_cup);
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::ClearUseCUP() {
overrides_.RemoveKey(kDevOverrideKeyUseCUP);
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::SetInitialDelay(
double initial_delay) {
overrides_.SetDoubleKey(kDevOverrideKeyInitialDelay, initial_delay);
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::ClearInitialDelay() {
overrides_.RemoveKey(kDevOverrideKeyInitialDelay);
return *this;
}
ExternalConstantsBuilder& ExternalConstantsBuilder::SetServerKeepAliveSeconds(
int server_keep_alive_seconds) {
overrides_.SetIntKey(kDevOverrideKeyServerKeepAliveSeconds,
server_keep_alive_seconds);
return *this;
}
ExternalConstantsBuilder&
ExternalConstantsBuilder::ClearServerKeepAliveSeconds() {
overrides_.RemoveKey(kDevOverrideKeyServerKeepAliveSeconds);
return *this;
}
bool ExternalConstantsBuilder::Overwrite() {
const absl::optional<base::FilePath> base_path =
GetBaseDirectory(GetUpdaterScope());
if (!base_path) {
LOG(ERROR) << "Can't find base directory; can't save constant overrides.";
return false;
}
const base::FilePath override_file_path =
base_path.value().AppendASCII(kDevOverrideFileName);
bool ok = JSONFileValueSerializer(override_file_path).Serialize(overrides_);
written_ = written_ || ok;
return ok;
}
} // namespace updater