| // Copyright 2020 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 INIT_CLOBBER_UI_H_ |
| #define INIT_CLOBBER_UI_H_ |
| |
| #include <cstdlib> |
| #include <memory> |
| #include <string> |
| |
| #include <base/files/file.h> |
| #include <base/synchronization/lock.h> |
| #include <base/threading/platform_thread.h> |
| #include <base/time/time.h> |
| |
| // ClobberUi's public class methods are not thread-safe. |
| class ClobberUi : private base::PlatformThread::Delegate { |
| public: |
| explicit ClobberUi(base::File&& terminal); |
| |
| bool StartWipeUi(int64_t bytes_to_write); |
| bool UpdateWipeProgress(int64_t total_bytes_written); |
| bool StopWipeUi(); |
| |
| bool ShowCountdownTimer(const base::TimeDelta& duration); |
| |
| static std::string BuildUiStringForTest(int terminal_width, |
| const base::TimeDelta& elapsed, |
| double progress); |
| |
| private: |
| // base::PlatformThread::Delegate interface. |
| void ThreadMain() override; |
| |
| enum UiMode { |
| kIdle, // No UI is currently being displayed. |
| kWipeUi, // The disk wipe progress UI is being shown. |
| kCountdownUi, // A countdown timer UI is being shown. |
| }; |
| |
| struct WipeState { |
| bool running; |
| int64_t total_bytes_written; |
| int64_t bytes_to_write; |
| }; |
| |
| base::File terminal_; |
| |
| base::PlatformThreadHandle wipe_ui_thread_; |
| UiMode mode_; |
| base::Lock lock_; |
| WipeState state_; // Protected by lock_. |
| }; |
| |
| #endif // INIT_CLOBBER_UI_H_ |