// 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_
