|  | // Copyright 2012 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // This file defines the interface class OmniboxPopupView.  Each toolkit | 
|  | // will implement the popup view differently, so that code is inherently | 
|  | // platform specific.  However, the OmniboxPopupModel needs to do some | 
|  | // communication with the view.  Since the model is shared between platforms, | 
|  | // we need to define an interface that all view implementations will share. | 
|  |  | 
|  | #ifndef COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_POPUP_VIEW_H_ | 
|  | #define COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_POPUP_VIEW_H_ | 
|  |  | 
|  | #include <stddef.h> | 
|  |  | 
|  | #include <string_view> | 
|  |  | 
|  | #include "base/callback_list.h" | 
|  | #include "base/functional/callback_forward.h" | 
|  | #include "base/memory/raw_ptr.h" | 
|  | #include "build/build_config.h" | 
|  | #include "components/omnibox/browser/omnibox_popup_selection.h" | 
|  |  | 
|  | class OmniboxController; | 
|  | class OmniboxEditModel; | 
|  | namespace ui { | 
|  | struct AXNodeData; | 
|  | } | 
|  |  | 
|  | class OmniboxPopupView { | 
|  | public: | 
|  | explicit OmniboxPopupView(OmniboxController* controller); | 
|  | virtual ~OmniboxPopupView(); | 
|  |  | 
|  | virtual OmniboxEditModel* model(); | 
|  | virtual const OmniboxEditModel* model() const; | 
|  |  | 
|  | virtual OmniboxController* controller(); | 
|  | virtual const OmniboxController* controller() const; | 
|  |  | 
|  | // Returns true if the popup is currently open. | 
|  | virtual bool IsOpen() const = 0; | 
|  |  | 
|  | // Invalidates one line of the autocomplete popup. | 
|  | virtual void InvalidateLine(size_t line) = 0; | 
|  |  | 
|  | // Invoked when the selection changes. The |line| field in either selection | 
|  | // may be OmniboxPopupSelection::kNoMatch. This method is invoked by the | 
|  | // model. | 
|  | virtual void OnSelectionChanged(OmniboxPopupSelection old_selection, | 
|  | OmniboxPopupSelection new_selection) {} | 
|  |  | 
|  | // Redraws the popup window to match any changes in the result set; this may | 
|  | // mean opening or closing the window. | 
|  | virtual void UpdatePopupAppearance() = 0; | 
|  |  | 
|  | // Called to inform result view of button focus. | 
|  | virtual void ProvideButtonFocusHint(size_t line) = 0; | 
|  |  | 
|  | // Notification that the icon used for the given match has been updated. | 
|  | virtual void OnMatchIconUpdated(size_t match_index) = 0; | 
|  |  | 
|  | // This method is called when the view should cancel any active drag (e.g. | 
|  | // because the user pressed ESC). The view may or may not need to take any | 
|  | // action (e.g. releasing mouse capture).  Note that this can be called when | 
|  | // no drag is in progress. | 
|  | virtual void OnDragCanceled() = 0; | 
|  |  | 
|  | // Popup equivalent of GetAccessibleNodeData, used only by a unit test. | 
|  | virtual void GetPopupAccessibleNodeData(ui::AXNodeData* node_data) const = 0; | 
|  |  | 
|  | // Returns result view button text. This is currently only needed by a single | 
|  | // unit test and it would be better to eliminate it than to increase usage. | 
|  | virtual std::u16string_view GetAccessibleButtonTextForResult( | 
|  | size_t line) const; | 
|  |  | 
|  | // Updates the result and header views based on the visibility of their group. | 
|  | virtual void SetSuggestionGroupVisibility(size_t match_index, | 
|  | bool suggestion_group_hidden) {} | 
|  |  | 
|  | // Adds a callback that will be called when the popup window becomes visible. | 
|  | base::CallbackListSubscription AddOpenListener( | 
|  | base::RepeatingClosure callback); | 
|  |  | 
|  | protected: | 
|  | // Call when the popup will appear to notify listeners. | 
|  | void NotifyOpenListeners(); | 
|  |  | 
|  | private: | 
|  | base::RepeatingClosureList on_popup_callbacks_; | 
|  |  | 
|  | // Owned by OmniboxView which owns this. | 
|  | const raw_ptr<OmniboxController> controller_; | 
|  | }; | 
|  |  | 
|  | #endif  // COMPONENTS_OMNIBOX_BROWSER_OMNIBOX_POPUP_VIEW_H_ |