// 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.

// This class is an abstraction for a Chrome OS Downloadable Content (DLC).
//
// A DLC is a dynamically installed Chrome OS package that is verified via
// verity on device. DLC provides a way to install packages on demand instead
// of bundling all (used/unused) packages into root file system.
//
// This class verfies and mounts a DLC image. A DLC can be installed via API
// provided by dlc_service.

#ifndef IMAGELOADER_DLC_H_
#define IMAGELOADER_DLC_H_

#include <string>

#include <base/files/file_path.h>
#include <base/gtest_prod_util.h>

#include "imageloader/helper_process_proxy.h"

namespace imageloader {

// Enum on the two images (A/B) for one DLC.
// We keep two copies (A/B) for each DLC in order to sync with platform
// AutoUpdate (A/B update).
enum class AOrB { kDlcA, kDlcB, kUnknown };

class Dlc {
 public:
  explicit Dlc(const std::string& id);
  // Mount the image at |mount_point|.
  bool Mount(HelperProcessProxy* proxy,
             const std::string& a_or_b,
             const base::FilePath& mount_point);
  // Check if ID is valid.
  static bool IsIdValid(const std::string& id);

 private:
  FRIEND_TEST_ALL_PREFIXES(DlcTest, MountDlc);
  // Mount the image from |image_path| to |mount_point| using imageloader.json
  // at |manifest_path| and table at |table_path|
  bool Mount(HelperProcessProxy* proxy,
             const base::FilePath& image_path,
             const base::FilePath& manifest_path,
             const base::FilePath& table_path,
             AOrB a_or_b,
             const base::FilePath& mount_point);
  // id of the DLC image.
  std::string id_;

  DISALLOW_COPY_AND_ASSIGN(Dlc);
};

}  // namespace imageloader

#endif  // IMAGELOADER_DLC_H_
