#ifndef CHROMEOS_ASH_EXPERIENCES_ARC_SESSION_ARC_CLIENT_ADAPTER_H_
#define CHROMEOS_ASH_EXPERIENCES_ARC_SESSION_ARC_CLIENT_ADAPTER_H_
#include <memory>
#include <string>
#include "base/files/file_path.h"
#include "base/functional/callback_forward.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "chromeos/ash/components/dbus/arc/arc.pb.h"
#include "chromeos/ash/experiences/arc/session/arc_start_params.h"
#include "chromeos/ash/experiences/arc/session/arc_upgrade_params.h"
#include "chromeos/dbus/common/dbus_callback.h"
namespace cryptohome {
class Identification;
}
namespace arc {
class ArcClientAdapter {
public:
class Observer : public base::CheckedObserver {
public:
~Observer() override = default;
virtual void ArcInstanceStopped(bool is_system_shutdown) = 0;
};
class DemoModeDelegate {
public:
virtual ~DemoModeDelegate() = default;
virtual void EnsureResourcesLoaded(base::OnceClosure callback) = 0;
virtual base::FilePath GetDemoAppsPath() = 0;
};
static std::unique_ptr<ArcClientAdapter> Create();
static StartArcMiniInstanceRequest
ConvertStartParamsToStartArcMiniInstanceRequest(const StartParams& params);
ArcClientAdapter(const ArcClientAdapter&) = delete;
ArcClientAdapter& operator=(const ArcClientAdapter&) = delete;
virtual ~ArcClientAdapter();
virtual void StartMiniArc(StartParams params,
chromeos::VoidDBusMethodCallback callback) = 0;
virtual void UpgradeArc(UpgradeParams params,
chromeos::VoidDBusMethodCallback callback) = 0;
virtual void StopArcInstance(bool on_shutdown, bool should_backup_log) = 0;
virtual void SetUserInfo(const cryptohome::Identification& cryptohome_id,
const std::string& hash,
const std::string& serial_number) = 0;
virtual void SetDemoModeDelegate(DemoModeDelegate* delegate) = 0;
using TrimVmMemoryCallback =
base::OnceCallback<void(bool success, const std::string& failure_reason)>;
virtual void TrimVmMemory(TrimVmMemoryCallback callback, int page_limit) = 0;
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
protected:
ArcClientAdapter();
base::ObserverList<Observer> observer_list_;
};
}
#endif