| // Copyright 2024 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_VIEWS_WEBAUTHN_PIN_OPTIONS_BUTTON_H_ |
| #define CHROME_BROWSER_UI_VIEWS_WEBAUTHN_PIN_OPTIONS_BUTTON_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback.h" |
| #include "ui/base/metadata/metadata_header_macros.h" |
| #include "ui/menus/simple_menu_model.h" |
| #include "ui/views/controls/button/md_text_button_with_down_arrow.h" |
| |
| namespace views { |
| class MenuRunner; |
| } // namespace views |
| |
| // Defines a button visible in the GPM pin creation dialog, that upon pressing |
| // displays a menu with pin format options, allowing to pick one. |
| class PinOptionsButton : public views::MdTextButtonWithDownArrow, |
| public ui::SimpleMenuModel::Delegate { |
| METADATA_HEADER(PinOptionsButton, views::MdTextButtonWithDownArrow) |
| |
| public: |
| enum CommandId { |
| CHOOSE_SIX_DIGIT_PIN = 0, |
| CHOOSE_ARBITRARY_PIN, |
| COMMAND_ID_COUNT, |
| }; |
| |
| PinOptionsButton(const std::u16string& label, |
| CommandId checked_command_id, |
| base::RepeatingCallback<void(bool)> callback); |
| PinOptionsButton(const PinOptionsButton&) = delete; |
| PinOptionsButton& operator=(const PinOptionsButton&) = delete; |
| ~PinOptionsButton() override; |
| |
| // ui::SimpleMenuModel::Delegate: |
| void ExecuteCommand(int command_id, int event_flags) override; |
| bool IsCommandIdChecked(int command_id) const override; |
| |
| private: |
| void ButtonPressed(); |
| |
| const CommandId checked_command_id_; |
| base::RepeatingCallback<void(bool)> callback_; |
| std::unique_ptr<ui::SimpleMenuModel> menu_model_; |
| std::unique_ptr<views::MenuRunner> menu_runner_; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_WEBAUTHN_PIN_OPTIONS_BUTTON_H_ |