// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_CROSTINI_CROSTINI_INSTALLER_UI_DELEGATE_H_
#define CHROME_BROWSER_ASH_CROSTINI_CROSTINI_INSTALLER_UI_DELEGATE_H_
#include "base/functional/callback_forward.h"
#include "chrome/browser/ash/crostini/crostini_manager.h"
#include "chrome/browser/ash/crostini/crostini_types.mojom-forward.h"
namespace crostini {
class CrostiniInstallerUIDelegate {
public:
// |progress_fraction| ranges from 0.0 to 1.0.
using ProgressCallback =
base::RepeatingCallback<void(crostini::mojom::InstallerState state,
double progress_fraction)>;
using ResultCallback =
base::OnceCallback<void(crostini::mojom::InstallerError error)>;
// Start the installation. |progress_callback| will be called multiple times
// until |result_callback| is called. The crostini terminal will be launched
// when the installation succeeds.
virtual void Install(CrostiniManager::RestartOptions options,
ProgressCallback progress_callback,
ResultCallback result_callback) = 0;
// Cancel the ongoing installation. |callback| will be called when it
// finishes. The callbacks passed to |Install()| will not be called anymore.
// A closing UI should call this if installation has started but hasn't
// finished.
virtual void Cancel(base::OnceClosure callback) = 0;
// UI should call this if the user cancels without starting installation so
// metrics can be recorded.
virtual void CancelBeforeStart() = 0;
};
} // namespace crostini
#endif // CHROME_BROWSER_ASH_CROSTINI_CROSTINI_INSTALLER_UI_DELEGATE_H_