| // Copyright 2018 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_UI_WEBAUTHN_SHEET_MODELS_H_ |
| #define CHROME_BROWSER_UI_WEBAUTHN_SHEET_MODELS_H_ |
| |
| #include <cstddef> |
| #include <memory> |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/ui/webauthn/authenticator_request_sheet_model.h" |
| #include "chrome/browser/webauthn/authenticator_request_dialog_model.h" |
| #include "chrome/browser/webauthn/local_authentication_token.h" |
| #include "device/fido/pin.h" |
| #include "ui/gfx/font_list.h" |
| |
| namespace gfx { |
| class Image; |
| } // namespace gfx |
| |
| // Base class for sheets, implementing the shared behavior used on most sheets, |
| // as well as maintaining a weak pointer to the dialog model. |
| class AuthenticatorSheetModelBase |
| : public AuthenticatorRequestSheetModel, |
| public AuthenticatorRequestDialogModel::Observer { |
| public: |
| // Determines whether the button in the lower-left corner of the dialog, to |
| // display other available mechanisms, is shown on a sheet. |
| enum class OtherMechanismButtonVisibility { |
| // The button is not shown (default). |
| kHidden, |
| // The button is shown if there is more than one mechanism to choose from. |
| kVisible, |
| }; |
| |
| explicit AuthenticatorSheetModelBase( |
| AuthenticatorRequestDialogModel* dialog_model); |
| AuthenticatorSheetModelBase( |
| AuthenticatorRequestDialogModel* dialog_model, |
| OtherMechanismButtonVisibility other_mechanism_button_visibility); |
| |
| AuthenticatorSheetModelBase(const AuthenticatorSheetModelBase&) = delete; |
| AuthenticatorSheetModelBase& operator=(const AuthenticatorSheetModelBase&) = |
| delete; |
| |
| ~AuthenticatorSheetModelBase() override; |
| |
| AuthenticatorRequestDialogModel* dialog_model() const { |
| return dialog_model_; |
| } |
| |
| // Returns the preferred with for the contents of the dialog, i.e. the |
| // preferred dialog width minus the padding. |
| static int GetPreferredContentWidth(); |
| |
| // Returns a string containing the RP ID, styled as an origin, truncated to a |
| // reasonable width. |
| static std::u16string GetRelyingPartyIdString( |
| const AuthenticatorRequestDialogModel* dialog_model, |
| gfx::FontList font_list); |
| |
| // Returns a string containing the RP ID, styled as an origin, truncated to a |
| // reasonable width. Use this for default sized text, like labels. |
| static std::u16string GetRelyingPartyIdStringLabel( |
| const AuthenticatorRequestDialogModel* dialog_model); |
| |
| // Returns a string containing the RP ID, styled as an origin, truncated to a |
| // reasonable width. Use this for title sized text. |
| static std::u16string GetRelyingPartyIdStringTitle( |
| const AuthenticatorRequestDialogModel* dialog_model); |
| |
| protected: |
| // AuthenticatorRequestSheetModel: |
| bool IsActivityIndicatorVisible() const override; |
| bool IsCancelButtonVisible() const override; |
| bool IsOtherMechanismButtonVisible() const override; |
| std::u16string GetOtherMechanismButtonLabel() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnBack() override; |
| void OnAccept() override; |
| void OnCancel() override; |
| |
| // AuthenticatorRequestDialogModel::Observer: |
| void OnModelDestroyed(AuthenticatorRequestDialogModel* model) override; |
| |
| private: |
| raw_ptr<AuthenticatorRequestDialogModel> dialog_model_; |
| OtherMechanismButtonVisibility other_mechanism_button_visibility_ = |
| OtherMechanismButtonVisibility::kHidden; |
| }; |
| |
| // The sheet shown for selecting the transport over which the security key |
| // should be accessed. |
| class AuthenticatorMechanismSelectorSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorMechanismSelectorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorInsertAndActivateUsbSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorInsertAndActivateUsbSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::vector<std::u16string> GetAdditionalDescriptions() const override; |
| }; |
| |
| class AuthenticatorTimeoutErrorModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorTimeoutErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorNoAvailableTransportsErrorModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorNoAvailableTransportsErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorNoPasskeysErrorModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorNoPasskeysErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorNotRegisteredErrorModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorNotRegisteredErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorAlreadyRegisteredErrorModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorAlreadyRegisteredErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorInternalUnrecognizedErrorSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorInternalUnrecognizedErrorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorChallengeFetchErrorModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorChallengeFetchErrorModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorBlePowerOnManualSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorBlePowerOnManualSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| |
| // AuthenticatorRequestDialogModel::Observer: |
| void OnBluetoothPoweredStateChanged() override; |
| }; |
| |
| class AuthenticatorBlePowerOnAutomaticSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorBlePowerOnAutomaticSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| |
| bool busy_powering_on_ble_ = false; |
| }; |
| |
| #if BUILDFLAG(IS_MAC) |
| |
| class AuthenticatorBlePermissionMacSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorBlePermissionMacSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorTouchIdSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorTouchIdSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| // Called after the user taps their Touch ID sensor. |
| void OnTouchIDSensorTapped( |
| std::optional<webauthn::LocalAuthenticationToken> local_auth_token); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| void OnAccept() override; |
| |
| bool touch_id_completed_ = false; |
| }; |
| |
| #endif // IS_MAC |
| |
| class AuthenticatorOffTheRecordInterstitialSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorOffTheRecordInterstitialSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorPaaskSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorPaaskSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorPaaskSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorClientPinEntrySheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| // Indicates whether the view should accommodate changing an existing PIN, |
| // setting up a new PIN or entering an existing one. |
| enum class Mode { kPinChange, kPinEntry, kPinSetup }; |
| AuthenticatorClientPinEntrySheetModel( |
| AuthenticatorRequestDialogModel* dialog_model, |
| Mode mode, |
| device::pin::PINEntryError error); |
| ~AuthenticatorClientPinEntrySheetModel() override; |
| |
| void SetPinCode(std::u16string pin_code); |
| void SetPinConfirmation(std::u16string pin_confirmation); |
| |
| Mode mode() const { return mode_; } |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::u16string GetError() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| bool IsOtherMechanismButtonVisible() const override; |
| |
| std::u16string pin_code_; |
| std::u16string pin_confirmation_; |
| std::u16string error_; |
| const Mode mode_; |
| }; |
| |
| class AuthenticatorClientPinTapAgainSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorClientPinTapAgainSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorClientPinTapAgainSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::vector<std::u16string> GetAdditionalDescriptions() const override; |
| }; |
| |
| class AuthenticatorBioEnrollmentSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorBioEnrollmentSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorBioEnrollmentSheetModel() override; |
| |
| int max_bio_samples() { return dialog_model()->max_bio_samples.value_or(1); } |
| int bio_samples_remaining() { |
| return dialog_model()->bio_samples_remaining.value_or(1); |
| } |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| void OnAccept() override; |
| void OnCancel() override; |
| |
| bool HasBioSamplesRemaining() const; |
| }; |
| |
| class AuthenticatorRetryUvSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorRetryUvSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorRetryUvSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::u16string GetError() const override; |
| }; |
| |
| // Generic error dialog that allows starting the request over. |
| class AuthenticatorGenericErrorSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> |
| ForClientPinErrorSoftBlock(AuthenticatorRequestDialogModel* dialog_model); |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> |
| ForClientPinErrorHardBlock(AuthenticatorRequestDialogModel* dialog_model); |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> |
| ForClientPinErrorAuthenticatorRemoved( |
| AuthenticatorRequestDialogModel* dialog_model); |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> |
| ForMissingCapability(AuthenticatorRequestDialogModel* dialog_model); |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> ForStorageFull( |
| AuthenticatorRequestDialogModel* dialog_model); |
| static std::unique_ptr<AuthenticatorGenericErrorSheetModel> |
| ForWindowsHelloNotEnabled(AuthenticatorRequestDialogModel* dialog_model); |
| |
| private: |
| AuthenticatorGenericErrorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model, |
| std::u16string title, |
| std::u16string description); |
| |
| // AuthenticatorSheetModelBase: |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| void OnAccept() override; |
| |
| std::u16string title_; |
| std::u16string description_; |
| }; |
| |
| class AuthenticatorResidentCredentialConfirmationSheetView |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorResidentCredentialConfirmationSheetView( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorResidentCredentialConfirmationSheetView() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| void OnAccept() override; |
| }; |
| |
| // The sheet shown when the user needs to select an account. |
| class AuthenticatorSelectAccountSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| // Indicates whether the corresponding view is presented before or after |
| // gathering user verification and generating an assertion signature. |
| // `kPreUserVerification` is only possible with platform authenticators |
| // for which we can silently enumerate credentials. |
| enum UserVerificationMode { |
| kPreUserVerification, |
| kPostUserVerification, |
| }; |
| |
| AuthenticatorSelectAccountSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model, |
| UserVerificationMode mode); |
| ~AuthenticatorSelectAccountSheetModel() override; |
| |
| // Set the index of the currently selected row. Only valid to call for |
| // `kMultipleAccount`. |
| void SetCurrentSelection(int selected); |
| |
| // AuthenticatorSheetModelBase: |
| void OnAccept() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| |
| const UserVerificationMode user_verification_mode_; |
| size_t selected_ = 0; |
| }; |
| |
| class AuthenticatorHybridAndSecurityKeySheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorHybridAndSecurityKeySheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorHybridAndSecurityKeySheetModel() override; |
| |
| // Returns the attestation warning for the security key. |
| std::optional<std::u16string> GetAttestationWarning() const; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::u16string GetOtherMechanismButtonLabel() const override; |
| }; |
| |
| class AuthenticatorConnectingSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorConnectingSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorConnectingSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorConnectedSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorConnectedSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorConnectedSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorCableErrorSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorCableErrorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorCableErrorSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| }; |
| |
| class AuthenticatorCreatePasskeySheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorCreatePasskeySheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorCreatePasskeySheetModel() override; |
| |
| // An additional label that `AuthenticatorCreatePasskeySheetView` includes in |
| // the `BuildStepSpecificContent()` view. |
| std::u16string passkey_storage_description() const; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| void OnAccept() override; |
| std::u16string GetAcceptButtonLabel() const override; |
| }; |
| |
| class AuthenticatorGPMErrorSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorGPMErrorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorGPMErrorSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| class AuthenticatorGPMConnectingSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorGPMConnectingSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorGPMConnectingSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| }; |
| |
| // An account and mechanism picker that combines passkeys from multiple sources. |
| // Passkeys are grouped in two lists: |
| // * "Primary" passkeys. These are local passkeys if available, or GPM passkeys |
| // if no local passkeys are available. Can be empty. |
| // * "Secondary" passkeys. These are all the other passkeys & mechanisms. |
| // AuthenticatorMultiSourcePickerSheetModel will filter these lists and |
| // present them as indices of AuthenticatorRequestDialogModel's |
| // `mechanisms()` member. |
| class AuthenticatorMultiSourcePickerSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorMultiSourcePickerSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorMultiSourcePickerSheetModel() override; |
| |
| // Returns a vector of indices to the "Primary" passkey mechanisms. Indices |
| // correspond to AuthenticatorRequestDialogModel's mechanisms(). |
| std::vector<int>& primary_passkey_indices() { |
| return primary_passkey_indices_; |
| } |
| |
| // Returns a vector of indices to the "Secondary" passkey mechanisms. Indices |
| // correspond to AuthenticatorRequestDialogModel's mechanisms(). |
| std::vector<int>& secondary_passkey_indices() { |
| return secondary_passkey_indices_; |
| } |
| |
| // Returns the user-visible label for the "Primary" passkey mechanisms. |
| std::u16string& primary_passkeys_label() { return primary_passkeys_label_; } |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| |
| std::vector<int> primary_passkey_indices_; |
| std::vector<int> secondary_passkey_indices_; |
| std::u16string primary_passkeys_label_; |
| bool has_passwords_ = false; |
| }; |
| |
| class AuthenticatorPriorityMechanismSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorPriorityMechanismSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| ~AuthenticatorPriorityMechanismSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| class AuthenticatorGpmPinSheetModelBase : public AuthenticatorSheetModelBase { |
| public: |
| // Indicates whether the view should accommodate creating a new pin or |
| // entering an existing one. |
| enum class Mode { kPinCreate, kPinEntry }; |
| |
| explicit AuthenticatorGpmPinSheetModelBase( |
| AuthenticatorRequestDialogModel* dialog_model, |
| Mode mode); |
| ~AuthenticatorGpmPinSheetModelBase() override; |
| |
| std::u16string GetGpmAccountEmail() const; |
| std::u16string GetGpmAccountName() const; |
| gfx::Image GetGpmAccountImage() const; |
| std::u16string GetAccessibleDescription() const; |
| |
| std::u16string pin() const { return pin_; } |
| Mode mode() const { return mode_; } |
| bool ui_disabled() const; |
| |
| // Sets currently typed pin in the sheet. |
| virtual void SetPin(std::u16string pin) = 0; |
| |
| // Returns the accessibility label of the pin view based on its type and mode. |
| virtual std::u16string GetAccessibleName() const = 0; |
| |
| protected: |
| std::u16string pin_; |
| const Mode mode_; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| std::u16string GetError() const override; |
| bool IsForgotGPMPinButtonVisible() const override; |
| bool IsGPMPinOptionsButtonVisible() const override; |
| void OnAccept() override; |
| void OnCancel() override; |
| void OnForgotGPMPin() const override; |
| void OnGPMPinOptionChosen(bool is_arbitrary) const override; |
| }; |
| |
| // The sheet shown when the user is entering a digit-only GPM pin. |
| class AuthenticatorGpmPinSheetModel : public AuthenticatorGpmPinSheetModelBase { |
| public: |
| explicit AuthenticatorGpmPinSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model, |
| int pin_digits_count, |
| Mode mode); |
| ~AuthenticatorGpmPinSheetModel() override; |
| |
| void PinCharTyped(bool is_digit); |
| |
| int pin_digits_count() const; |
| |
| // AuthenticatorGpmPinSheetModelBase: |
| void SetPin(std::u16string pin) override; |
| std::u16string GetAccessibleName() const override; |
| |
| private: |
| bool FullPinTyped() const; |
| |
| // AuthenticatorSheetModelBase: |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetHint() const override; |
| |
| const int pin_digits_count_; |
| |
| // Whether a hint explaining that only digits are allowed should be shown. |
| bool show_digit_hint_ = false; |
| }; |
| |
| // The sheet shown when the user is entering an arbitrary (alphanumeric) pin. |
| class AuthenticatorGpmArbitraryPinSheetModel |
| : public AuthenticatorGpmPinSheetModelBase { |
| public: |
| explicit AuthenticatorGpmArbitraryPinSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model, |
| Mode mode); |
| ~AuthenticatorGpmArbitraryPinSheetModel() override; |
| |
| // AuthenticatorGpmPinSheetModelBase: |
| void SetPin(std::u16string pin) override; |
| std::u16string GetAccessibleName() const override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| std::u16string GetHint() const override; |
| }; |
| |
| // The sheet shown for bootstrapping Google Password Manager passkeys during |
| // sign-in. |
| class AuthenticatorTrustThisComputerAssertionSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorTrustThisComputerAssertionSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| ~AuthenticatorTrustThisComputerAssertionSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| bool IsOtherMechanismButtonVisible() const override; |
| std::u16string GetOtherMechanismButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| // The sheet shown for creating a passkey in Google Password Manager. |
| class AuthenticatorCreateGpmPasskeySheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorCreateGpmPasskeySheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| ~AuthenticatorCreateGpmPasskeySheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| // "Save another way" button handler. |
| void OnBack() override; |
| void OnCancel() override; |
| }; |
| |
| // The sheet shown for warning a user about creating a Google Password Manager |
| // passkey in incognito mode. |
| class AuthenticatorGpmIncognitoCreateSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorGpmIncognitoCreateSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| ~AuthenticatorGpmIncognitoCreateSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| // The sheet shown for bootstrapping Google Password Manager passkeys during |
| // passkey creation. |
| class AuthenticatorTrustThisComputerCreationSheetModel |
| : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorTrustThisComputerCreationSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| ~AuthenticatorTrustThisComputerCreationSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| bool IsCancelButtonVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetOtherMechanismButtonLabel() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| // The sheet shown when the maximum amount of GPM pin entry attempts has been |
| // reached informing that the PIN needs to be reset. |
| class AuthenticatorGPMLockedPinSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| explicit AuthenticatorGPMLockedPinSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| ~AuthenticatorGPMLockedPinSheetModel() override; |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| }; |
| |
| class CombinedSelectorSheetModel : public AuthenticatorSheetModelBase { |
| public: |
| enum class SelectionStatus { |
| kNone, |
| kNotSelected, |
| kSelected, |
| }; |
| explicit CombinedSelectorSheetModel( |
| AuthenticatorRequestDialogModel* dialog_model); |
| |
| SelectionStatus GetSelectionStatus(size_t index) const; |
| size_t GetSelectionIndex() const; |
| void SetSelectionIndex(size_t index); |
| |
| private: |
| // AuthenticatorSheetModelBase: |
| std::u16string GetStepTitle() const override; |
| std::u16string GetStepDescription() const override; |
| AcceptButtonState GetAcceptButtonState() const override; |
| bool IsCancelButtonVisible() const override; |
| bool IsActivityIndicatorVisible() const override; |
| std::u16string GetCancelButtonLabel() const override; |
| std::u16string GetAcceptButtonLabel() const override; |
| void OnAccept() override; |
| void OnCancel() override; |
| |
| size_t selection_index_ = 0; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_WEBAUTHN_SHEET_MODELS_H_ |