chromium/ios/chrome/browser/contextual_panel/model/contextual_panel_model.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_CONTEXTUAL_PANEL_MODEL_CONTEXTUAL_PANEL_MODEL_H_
#define IOS_CHROME_BROWSER_CONTEXTUAL_PANEL_MODEL_CONTEXTUAL_PANEL_MODEL_H_

#include "base/functional/callback.h"

struct ContextualPanelItemConfiguration;
namespace web {
class WebState;
}

// Abstract class representing a model for a Contextual Panel item.
class ContextualPanelModel {
 public:
  using FetchConfigurationForWebStateCallback = base::OnceCallback<void(
      std::unique_ptr<ContextualPanelItemConfiguration>)>;
  // Asks the model to do any work necessary to fetch the Contextual Panel
  // data for the given `web_state`. Once it has fetched the data, it should
  // call the `callback` with it, or nullopt if it has no data for this
  // web_state.
  virtual void FetchConfigurationForWebState(
      web::WebState* web_state,
      FetchConfigurationForWebStateCallback callback) = 0;
};

#endif  // IOS_CHROME_BROWSER_CONTEXTUAL_PANEL_MODEL_CONTEXTUAL_PANEL_MODEL_H_