// components/optimization_guide/public/mojom/model_broker.mojom-test-utils.h is auto generated by mojom_bindings_generator.py, do not edit

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

#ifndef COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_MOJOM_TEST_UTILS_H_
#define COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_MOJOM_TEST_UTILS_H_

#include "components/optimization_guide/public/mojom/model_broker.mojom.h"


namespace optimization_guide::mojom {


class  ModelSolutionInterceptorForTesting : public ModelSolution {
  virtual ModelSolution* GetForwardingInterface() = 0;
  void CreateSession(::mojo::PendingReceiver<::on_device_model::mojom::Session> session, ::on_device_model::mojom::SessionParamsPtr params) override;
  void CreateTextSafetySession(::mojo::PendingReceiver<::on_device_model::mojom::TextSafetySession> session) override;
  void ReportHealthyCompletion() override;
};
class  ModelSolutionAsyncWaiter {
 public:
  explicit ModelSolutionAsyncWaiter(ModelSolution* proxy);

  ModelSolutionAsyncWaiter(const ModelSolutionAsyncWaiter&) = delete;
  ModelSolutionAsyncWaiter& operator=(const ModelSolutionAsyncWaiter&) = delete;

  ~ModelSolutionAsyncWaiter();

 private:
  ModelSolution* const proxy_;
};


class  ModelSubscriberInterceptorForTesting : public ModelSubscriber {
  virtual ModelSubscriber* GetForwardingInterface() = 0;
  void Unavailable(ModelUnavailableReason reason, std::optional<ModelNotSupportedDetailedReason> detailed_reason) override;
  void Available(ModelSolutionConfigPtr config, ::mojo::PendingRemote<ModelSolution> solution) override;
  void CapabilitiesUpdated(const ::on_device_model::Capabilities& capabilities) override;
};
class  ModelSubscriberAsyncWaiter {
 public:
  explicit ModelSubscriberAsyncWaiter(ModelSubscriber* proxy);

  ModelSubscriberAsyncWaiter(const ModelSubscriberAsyncWaiter&) = delete;
  ModelSubscriberAsyncWaiter& operator=(const ModelSubscriberAsyncWaiter&) = delete;

  ~ModelSubscriberAsyncWaiter();

 private:
  ModelSubscriber* const proxy_;
};


class  ModelBrokerInterceptorForTesting : public ModelBroker {
  virtual ModelBroker* GetForwardingInterface() = 0;
  void Subscribe(ModelSubscriptionOptionsPtr options, ::mojo::PendingRemote<ModelSubscriber> subscriber) override;
  void GetConfig(OnDeviceFeature feature, GetConfigCallback callback) override;
  void AddModelDownloadProgressObserver(const std::string& use_case, ::mojo::PendingRemote<::on_device_model::mojom::DownloadObserver> observer) override;
  void RequestAssetsFor(const std::string& use_case) override;
};
class  ModelBrokerAsyncWaiter {
 public:
  explicit ModelBrokerAsyncWaiter(ModelBroker* proxy);

  ModelBrokerAsyncWaiter(const ModelBrokerAsyncWaiter&) = delete;
  ModelBrokerAsyncWaiter& operator=(const ModelBrokerAsyncWaiter&) = delete;

  ~ModelBrokerAsyncWaiter();
  void GetConfig(
      OnDeviceFeature feature, std::optional<::mojo_base::ProtoWrapper>* out_config);
  std::optional<::mojo_base::ProtoWrapper> GetConfig(OnDeviceFeature feature);

 private:
  ModelBroker* const proxy_;
};




}  // optimization_guide::mojom

#endif  // COMPONENTS_OPTIMIZATION_GUIDE_PUBLIC_MOJOM_MODEL_BROKER_MOJOM_TEST_UTILS_H_