blob: ca30e20565164551eaf87bfed7f42b183382cdbd [file] [log] [blame]
// Copyright 2019 The Chromium 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 CHROME_BROWSER_ASH_LOGIN_SECURITY_TOKEN_PIN_DIALOG_HOST_ASH_IMPL_H_
#define CHROME_BROWSER_ASH_LOGIN_SECURITY_TOKEN_PIN_DIALOG_HOST_ASH_IMPL_H_
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h"
namespace chromeos {
// The Ash Login/Lock screen implementation of the security token PIN dialog
// host. It displays the PIN request embedded into the user pod.
class SecurityTokenPinDialogHostAshImpl final
: public SecurityTokenPinDialogHost {
public:
SecurityTokenPinDialogHostAshImpl();
~SecurityTokenPinDialogHostAshImpl() override;
// SecurityTokenPinDialogHost:
void ShowSecurityTokenPinDialog(
const std::string& caller_extension_name,
security_token_pin::CodeType code_type,
bool enable_user_input,
security_token_pin::ErrorLabel error_label,
int attempts_left,
const absl::optional<AccountId>& authenticating_user_account_id,
SecurityTokenPinEnteredCallback pin_entered_callback,
SecurityTokenPinDialogClosedCallback pin_dialog_closed_callback) override;
void CloseSecurityTokenPinDialog() override;
private:
bool is_request_running() const {
return !pin_dialog_closed_callback_.is_null();
}
// Called when the PIN entered by the user is received from the Ash Login/Lock
// Screen UI.
void OnUserInputReceived(const std::string& user_input);
// Called when the PIN UI gets closed.
void OnClosedByUser();
// Resets the internal state and weak pointers associated with the previously
// started requests.
void Reset();
// The callback to run when the user submits a non-empty input to the security
// token PIN dialog.
// Is non-empty iff the dialog is active and the input wasn't sent yet.
SecurityTokenPinEnteredCallback pin_entered_callback_;
// The callback to run when the security token PIN dialog gets closed.
// Is non-empty iff the dialog is active.
SecurityTokenPinDialogClosedCallback pin_dialog_closed_callback_;
base::WeakPtrFactory<SecurityTokenPinDialogHostAshImpl> weak_ptr_factory_{
this};
DISALLOW_COPY_AND_ASSIGN(SecurityTokenPinDialogHostAshImpl);
};
} // namespace chromeos
// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos
// source migration is finished.
namespace ash {
using ::chromeos::SecurityTokenPinDialogHostAshImpl;
}
#endif // CHROME_BROWSER_ASH_LOGIN_SECURITY_TOKEN_PIN_DIALOG_HOST_ASH_IMPL_H_