| // Copyright 2019 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 DLCSERVICE_DLC_MANAGER_H_ |
| #define DLCSERVICE_DLC_MANAGER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include <base/files/file_path.h> |
| #include <dlcservice/proto_bindings/dlcservice.pb.h> |
| #include <imageloader/dbus-proxies.h> |
| |
| #include "dlcservice/boot/boot_slot.h" |
| #include "dlcservice/types.h" |
| |
| namespace dlcservice { |
| |
| // Value to be stored in |kDlcMetadataFilePingActive| to indicate an active DLC. |
| extern const char kDlcMetadataActiveValue[]; |
| // |kDlcMetadataFilePingActive| is the name of the file used to store the value |
| // of the 'active' metadata. This value indicates if the DLC was active since |
| // the last time this value was sent to Omaha. This file name should not be |
| // modified since it is also used in update_engine/common/constants.h as |
| // |kPrefsPingActive|. |
| extern const char kDlcMetadataFilePingActive[]; |
| |
| class DlcManager { |
| public: |
| DlcManager(); |
| ~DlcManager(); |
| |
| // Returns true when an install is currently running. |
| // If the desire is to |Initnstall()| again, then |FinishInstall()| or |
| // |CancelInstall()| should be called before |InitInstall()|'ing again. |
| bool IsInstalling(); |
| |
| // Returns the list of fully installed + mounted DLC(s). |
| DlcModuleList GetInstalled(); |
| |
| // Loads installed DLC module images. |
| void LoadDlcModuleImages(); |
| |
| // DLC Installation Flow |
| |
| // Install Step 1: |
| // To start an install, the initial requirement is to call this function. |
| // During this phase, all necessary setup for update_engine to successfully |
| // install DLC(s) and other files that require creation are handled. |
| // Args: |
| // dlc_module_list: All the DLC(s) that want to be installed. |
| // err_code: The error code that should be checked when returned false. |
| // err_msg: The error message that should be checked when returned false. |
| // Return: |
| // True on success, otherwise false. |
| bool InitInstall(const DlcModuleList& dlc_module_list, |
| std::string* err_code, |
| std::string* err_msg); |
| |
| // Install Step 2: |
| // To get the actual list of DLC(s) to pass into update_engine. |
| // If the returned list of DLC(s) are empty there are no missing DLC(s) to |
| // inform update_engine to install and can move onto the next step. |
| // Args: |
| // none |
| // Return: |
| // Will return all the DLC(s) that update_engine needs to download/install. |
| DlcModuleList GetMissingInstalls(); |
| |
| // Install Step 3a: |
| // Once the missing DLC(s) are installed or there were no missing DLC(s), this |
| // call is still required to finish the installation. |
| // If there were missing DLC(s) that were newly installed, this call will go |
| // ahead and mount those DLC(s) to be ready for use. |
| // Args: |
| // dlc_module_list: Will contain all the DLC(s) and their root mount points |
| // when returned true, otherwise unmodified. |
| // err_code: The error code that should be checked when returned false. |
| // err_msg: The error message that should be checked when returned false. |
| // Return: |
| // True on success, otherwise false. |
| bool FinishInstall(DlcModuleList* dlc_module_list, |
| std::string* err_code, |
| std::string* err_msg); |
| |
| // Install Step 3b: |
| // If for any reason, the init'ed DLC(s) should not follow through with |
| // mounting it can be cancelled by invoking this. The call may fail, in |
| // which case the errors will reflect the causes and provide insight in ways |
| // dlcservice can be put into a valid state again. |
| // Args: |
| // err_code: The error code that should be checked when returned false. |
| // err_msg: The error message that should be checked when returned false. |
| // Return: |
| // True on success, otherwise false. |
| bool CancelInstall(std::string* err_code, std::string* err_msg); |
| |
| // DLC Deletion Flow |
| |
| // Delete Step 1: |
| // To delete the DLC this can be invoked, no prior step is required. |
| // Args: |
| // id: The DLC ID that is to be uninstalled. |
| // err_code: The error code that should be checked when returned false. |
| // err_msg: The error message that should be checked when returned false. |
| // Return: |
| // True if the DLC with the ID passed in is successfully uninstalled, |
| // otherwise false. Deleting a valid DLC that's not installed is considered |
| // successfully uninstalled, however uninstalling a DLC that's not supported |
| // is a failure. |
| bool Delete(const std::string& id, |
| std::string* err_code, |
| std::string* err_msg); |
| |
| private: |
| class DlcManagerImpl; |
| std::unique_ptr<DlcManagerImpl> impl_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DlcManager); |
| }; |
| |
| } // namespace dlcservice |
| |
| #endif // DLCSERVICE_DLC_MANAGER_H_ |