// Copyright 2020 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 ASH_IN_SESSION_AUTH_AUTH_DIALOG_CONTENTS_VIEW_H_ #define ASH_IN_SESSION_AUTH_AUTH_DIALOG_CONTENTS_VIEW_H_ #include #include "ash/login/ui/login_palette.h" #include "ash/public/cpp/login_types.h" #include "ui/views/view.h" namespace views { class BoxLayout; class Label; class LabelButton; class MdTextButton; } // namespace views namespace ash { class AnimatedRoundedImageView; class LoginPasswordView; class LoginPinView; class LoginPinInputView; // Contains the debug views that allows the developer to interact with the // AuthDialogController. class AuthDialogContentsView : public views::View { public: // Flags which describe the set of currently visible auth methods. enum AuthMethods { kAuthNone = 0, // No auth methods. kAuthPassword = 1 << 0, // Display password. kAuthPin = 1 << 1, // Display PIN keyboard. kAuthFingerprint = 1 << 2, // Use fingerprint to unlock. }; // Extra control parameters to be passed when setting the auth methods. struct AuthMethodsMetadata { // User's pin length to use for autosubmit. size_t autosubmit_pin_length = 0; }; AuthDialogContentsView(uint32_t auth_methods, const std::string& origin_name, const AuthMethodsMetadata& auth_metadata, const UserAvatar& avatar); AuthDialogContentsView(const AuthDialogContentsView&) = delete; AuthDialogContentsView& operator=(const AuthDialogContentsView&) = delete; ~AuthDialogContentsView() override; // views::Views: void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void RequestFocus() override; uint32_t auth_methods() const { return auth_methods_; } private: class TitleLabel; class FingerprintView; // views::View: void AddedToWidget() override; // Add a view for user avatar. void AddAvatarView(const UserAvatar& avatar); // Add a view for dialog title. void AddTitleView(); // Add a view that shows which website/app we are authenticating for. void AddOriginNameView(); // Add a view for entering PIN (if autosubmit is off). void AddPinTextInputView(); // Add a view for entering password. void AddPasswordView(); // Add a PIN pad view. void AddPinPadView(); // Add a PIN input view that automatically submits PIN. void AddPinDigitInputView(); // Add a vertical spacing view. void AddVerticalSpacing(int height); // Add a view for action buttons. void AddActionButtonsView(); // Called when the user taps a digit on the PIN pad. void OnInsertDigitFromPinPad(int digit); // Called when the user taps backspace on the PIN pad. void OnBackspaceFromPinPad(); // Called when either: // 1. the user inserts or deletes a character in // |pin_text_input_view_| or |pin_digit_input_view_| without using the PIN // pad, or // 2. the user inserts or deletes a character in |password_view_|, or // 3. contents of |pin_text_input_view_|, |password_view_|, or // |pin_digit_input_view_| are cleared by a Reset() call. void OnInputTextChanged(bool is_empty); // Called when the user submits password or PIN. If authenticated_by_pin is // false, the user authenticated by password. void OnAuthSubmit(bool authenticated_by_pin, const std::u16string& password); // Called when password or PIN authentication of the user completes. If // authenticated_by_pin is false, the user authenticated by password. // |can_use_pin| specifies whether PIN is available after the authentication, // as it might be locked out. void OnPasswordOrPinAuthComplete(bool authenticated_by_pin, bool success, bool can_use_pin); // Called when fingerprint authentication completes. void OnFingerprintAuthComplete(bool success, FingerprintState fingerprint_state); // Called when the cancel button is pressed. void OnCancelButtonPressed(const ui::Event& event); // Called when the "Need help?" button is pressed. void OnNeedHelpButtonPressed(const ui::Event& event); // Debug container which holds the entire debug UI. views::View* container_ = nullptr; // Layout for |container_|. views::BoxLayout* main_layout_ = nullptr; // User avatar to indicate this is an OS dialog. AnimatedRoundedImageView* avatar_view_ = nullptr; // Title of the auth dialog, also used to show PIN auth error message.. TitleLabel* title_ = nullptr; // Prompt message to the user. views::Label* origin_name_view_ = nullptr; // Whether PIN can be auto submitted. bool pin_autosubmit_on_ = false; // Whether PIN is locked out. bool pin_locked_out_ = false; // Text input field for PIN if PIN cannot be auto submitted. LoginPasswordView* pin_text_input_view_ = nullptr; // PIN input view that's shown if PIN can be auto submitted. LoginPinInputView* pin_digit_input_view_ = nullptr; // Text input field for password. LoginPasswordView* password_view_ = nullptr; // PIN pad view. LoginPinView* pin_pad_view_ = nullptr; FingerprintView* fingerprint_view_ = nullptr; // A button to cancel authentication and close the dialog. views::MdTextButton* cancel_button_ = nullptr; // A button to show a help center article. views::LabelButton* help_button_ = nullptr; // Flags of auth methods that should be visible. uint32_t auth_methods_ = 0u; const std::string origin_name_; // Extra parameters to control the UI. AuthMethodsMetadata auth_metadata_; LoginPalette palette_ = CreateInSessionAuthPalette(); // Container which holds action buttons. views::View* action_view_container_ = nullptr; base::WeakPtrFactory weak_factory_{this}; }; } // namespace ash #endif // ASH_IN_SESSION_AUTH_AUTH_DIALOG_CONTENTS_VIEW_H_