1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// 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_
|