blob: b0bab647f1e2c7aea3656c30e65e6cbcca59232e [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.
#include "dlcservice/dlc_service_dbus_adaptor.h"
#include <utility>
#include <vector>
#include <base/files/file_enumerator.h>
#include <base/files/file_util.h>
namespace dlcservice {
DlcServiceDBusAdaptor::DlcServiceDBusAdaptor(
std::unique_ptr<org::chromium::ImageLoaderInterfaceProxyInterface>
image_loader_proxy,
std::unique_ptr<org::chromium::UpdateEngineInterfaceProxyInterface>
update_engine_proxy,
const base::FilePath& manifest_dir,
const base::FilePath& content_dir)
: org::chromium::DlcServiceInterfaceAdaptor(this),
image_loader_proxy_(std::move(image_loader_proxy)),
update_engine_proxy_(std::move(update_engine_proxy)),
manifest_dir_(manifest_dir),
content_dir_(content_dir) {
LoadDlcImages();
}
DlcServiceDBusAdaptor::~DlcServiceDBusAdaptor() {}
bool DlcServiceDBusAdaptor::Install(brillo::ErrorPtr* err,
const std::string& in_id,
std::string* mount_point_out) {
// TODO(xiaochu): implement this.
*mount_point_out = "";
return true;
}
bool DlcServiceDBusAdaptor::Uninstall(brillo::ErrorPtr* err,
const std::string& id_in) {
// TODO(xiaochu): implement this.
return true;
}
void DlcServiceDBusAdaptor::LoadDlcImages() {
// Initialize available DLC list.
std::vector<std::string> dlc_ids;
base::FileEnumerator file_enumerator(manifest_dir_, false,
base::FileEnumerator::DIRECTORIES);
for (base::FilePath dir_path = file_enumerator.Next(); !dir_path.empty();
dir_path = file_enumerator.Next()) {
dlc_ids.emplace_back(dir_path.BaseName().value());
}
// Initialize the states of installed DLC.
for (auto& dlc_id : dlc_ids) {
auto image_path = content_dir_.Append(dlc_id);
if (base::PathExists(image_path)) {
// Mount the installed DLC image.
std::string path;
image_loader_proxy_->LoadDlcImage(dlc_id, "Dlc-A", &path, nullptr);
if (path.empty()) {
LOG(ERROR) << "DLC image " << dlc_id << " is corrupted.";
} else {
LOG(INFO) << "DLC image " << dlc_id << " is mounted at " << path;
}
}
}
}
} // namespace dlcservice