| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_USER_EDUCATION_TEST_TEST_HELP_BUBBLE_H_ |
| #define COMPONENTS_USER_EDUCATION_TEST_TEST_HELP_BUBBLE_H_ |
| |
| #include <memory> |
| |
| #include "base/auto_reset.h" |
| #include "base/callback_list.h" |
| #include "base/memory/weak_ptr.h" |
| #include "components/user_education/common/help_bubble/help_bubble.h" |
| #include "components/user_education/common/help_bubble/help_bubble_factory.h" |
| #include "components/user_education/common/help_bubble/help_bubble_params.h" |
| #include "ui/base/interaction/element_identifier.h" |
| #include "ui/base/interaction/element_test_util.h" |
| #include "ui/base/interaction/framework_specific_implementation.h" |
| |
| namespace ui { |
| class TrackedElement; |
| } |
| |
| namespace user_education::test { |
| |
| class TestHelpBubbleElement; |
| |
| class TestHelpBubble : public HelpBubble { |
| public: |
| static constexpr int kNoButtonWithTextIndex = -1; |
| |
| TestHelpBubble(ui::TrackedElement* element, HelpBubbleParams params); |
| ~TestHelpBubble() override; |
| |
| DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kElementId); |
| DECLARE_FRAMEWORK_SPECIFIC_METADATA() |
| |
| const HelpBubbleParams& params() const { return params_; } |
| |
| const ui::TrackedElement* anchor_element() const { |
| return anchor_element_.get(); |
| } |
| |
| // Simulates the user dismissing the bubble. |
| void SimulateDismiss(); |
| |
| // Simulates the bubble timing out. |
| void SimulateTimeout(); |
| |
| // Simulates the user pressing one of the bubble buttons. |
| void SimulateButtonPress(int button_index); |
| |
| // Provides the index of a button with a given string value as its text |
| // property. If one does not exist, returns -1. |
| int GetIndexOfButtonWithText(std::u16string text); |
| |
| // Get the number of times this bubble has has ToggleFocusForAccessibility() |
| // called. |
| int focus_count() const { return focus_count_; } |
| |
| protected: |
| // HelpBubble: |
| bool ToggleFocusForAccessibility() override; |
| void CloseBubbleImpl() override; |
| ui::ElementContext GetContext() const override; |
| |
| private: |
| void OnElementHidden(ui::TrackedElement* element); |
| |
| std::unique_ptr<TestHelpBubbleElement> bubble_element_; |
| raw_ptr<ui::TrackedElement> anchor_element_; |
| base::CallbackListSubscription element_hidden_subscription_; |
| HelpBubbleParams params_; |
| int focus_count_ = 0; |
| |
| base::WeakPtrFactory<TestHelpBubble> weak_ptr_factory_{this}; |
| }; |
| |
| class TestHelpBubbleElement : public ui::test::TestElementBase { |
| public: |
| TestHelpBubbleElement(base::WeakPtr<TestHelpBubble> bubble, |
| ui::ElementIdentifier identifier, |
| ui::ElementContext context); |
| ~TestHelpBubbleElement() override; |
| |
| DECLARE_FRAMEWORK_SPECIFIC_METADATA() |
| |
| TestHelpBubble* bubble() { return bubble_.get(); } |
| const TestHelpBubble* bubble() const { return bubble_.get(); } |
| |
| private: |
| base::WeakPtr<TestHelpBubble> bubble_; |
| }; |
| |
| class TestHelpBubbleFactory : public HelpBubbleFactory { |
| public: |
| DECLARE_FRAMEWORK_SPECIFIC_METADATA() |
| |
| bool CanBuildBubbleForTrackedElement( |
| const ui::TrackedElement* element) const override; |
| |
| std::unique_ptr<HelpBubble> CreateBubble(ui::TrackedElement* element, |
| HelpBubbleParams params) override; |
| }; |
| |
| } // namespace user_education::test |
| |
| #endif // COMPONENTS_USER_EDUCATION_TEST_TEST_HELP_BUBBLE_H_ |