// Copyright (c) 2012 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 ELECTRON_SHELL_BROWSER_UI_AUTOFILL_POPUP_H_ #define ELECTRON_SHELL_BROWSER_UI_AUTOFILL_POPUP_H_ #include #include "base/memory/raw_ptr.h" #include "shell/browser/ui/views/autofill_popup_view.h" #include "ui/gfx/font_list.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" namespace content { class RenderFrameHost; } // namespace content namespace ui { using ColorId = int; } // namespace ui namespace electron { class AutofillPopupView; class AutofillPopup : private views::ViewObserver { public: AutofillPopup(); ~AutofillPopup() override; // disable copy AutofillPopup(const AutofillPopup&) = delete; AutofillPopup& operator=(const AutofillPopup&) = delete; void CreateView(content::RenderFrameHost* render_frame, content::RenderFrameHost* embedder_frame, bool offscreen, views::View* parent, const gfx::RectF& bounds); void Hide(); void SetItems(const std::vector& values, const std::vector& labels); void UpdatePopupBounds(); gfx::Rect popup_bounds_in_view(); private: friend class AutofillPopupView; // views::ViewObserver: void OnViewBoundsChanged(views::View* view) override; void OnViewIsDeleting(views::View* view) override; void AcceptSuggestion(int index); int GetDesiredPopupHeight(); int GetDesiredPopupWidth(); gfx::Rect GetRowBounds(int i); const gfx::FontList& GetValueFontListForRow(int index) const; const gfx::FontList& GetLabelFontListForRow(int index) const; ui::ColorId GetBackgroundColorIDForRow(int index) const; int line_count() const { return values_.size(); } const std::u16string& value_at(int i) const { return values_.at(i); } const std::u16string& label_at(int i) const { return labels_.at(i); } int LineFromY(int y) const; int selected_index_; // Popup location gfx::Rect popup_bounds_; // Bounds of the autofilled element gfx::Rect element_bounds_; // Datalist suggestions std::vector values_; std::vector labels_; // Font lists for the suggestions gfx::FontList smaller_font_list_; gfx::FontList bold_font_list_; // For sending the accepted suggestion to the render frame that // asked to open the popup raw_ptr frame_host_ = nullptr; // The popup view. The lifetime is managed by the owning Widget raw_ptr view_ = nullptr; // The parent view that the popup view shows on. Weak ref. raw_ptr parent_ = nullptr; }; } // namespace electron #endif // ELECTRON_SHELL_BROWSER_UI_AUTOFILL_POPUP_H_