| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/user_education/webui/help_bubble_webui.h" |
| |
| #include "components/user_education/webui/help_bubble_handler.h" |
| #include "components/user_education/webui/tracked_element_webui.h" |
| #include "ui/base/interaction/element_identifier.h" |
| #include "ui/base/interaction/framework_specific_implementation.h" |
| |
| namespace user_education { |
| |
| HelpBubbleWebUI::HelpBubbleWebUI(HelpBubbleHandlerBase* handler, |
| ui::ElementIdentifier anchor_id) |
| : handler_(handler), anchor_id_(anchor_id) { |
| CHECK(handler_); |
| } |
| HelpBubbleWebUI::~HelpBubbleWebUI() { |
| Close(); |
| } |
| |
| bool HelpBubbleWebUI::ToggleFocusForAccessibility() { |
| return handler_->ToggleHelpBubbleFocusForAccessibility(anchor_id_); |
| } |
| |
| gfx::Rect HelpBubbleWebUI::GetBoundsInScreen() const { |
| return handler_->GetHelpBubbleBoundsInScreen(anchor_id_); |
| } |
| |
| ui::ElementContext HelpBubbleWebUI::GetContext() const { |
| return handler_->context(); |
| } |
| |
| void HelpBubbleWebUI::CloseBubbleImpl() { |
| handler_->OnHelpBubbleClosing(anchor_id_); |
| } |
| |
| DEFINE_FRAMEWORK_SPECIFIC_METADATA(HelpBubbleWebUI) |
| |
| HelpBubbleFactoryWebUI::HelpBubbleFactoryWebUI() = default; |
| HelpBubbleFactoryWebUI::~HelpBubbleFactoryWebUI() = default; |
| |
| std::unique_ptr<HelpBubble> HelpBubbleFactoryWebUI::CreateBubble( |
| ui::TrackedElement* element, |
| HelpBubbleParams params) { |
| HelpBubbleHandlerBase* const handler = |
| element->AsA<TrackedElementWebUI>()->handler(); |
| return handler->CreateHelpBubble(element->identifier(), std::move(params)); |
| } |
| |
| bool HelpBubbleFactoryWebUI::CanBuildBubbleForTrackedElement( |
| const ui::TrackedElement* element) const { |
| return element->IsA<TrackedElementWebUI>(); |
| } |
| |
| DEFINE_FRAMEWORK_SPECIFIC_METADATA(HelpBubbleFactoryWebUI) |
| |
| } // namespace user_education |