// mojo/public/cpp/bindings/tests/extra_cpp_template_unittest.test-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 MOJO_PUBLIC_CPP_BINDINGS_TESTS_EXTRA_CPP_TEMPLATE_UNITTEST_TEST_MOJOM_TEST_UTILS_H_
#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_EXTRA_CPP_TEMPLATE_UNITTEST_TEST_MOJOM_TEST_UTILS_H_

#include "mojo/public/cpp/bindings/tests/extra_cpp_template_unittest.test-mojom.h"


namespace mojo::test::extra_cpp_template_unittest::mojom {


class  ExtraCppInterfaceInterceptorForTesting : public ExtraCppInterface {
  virtual ExtraCppInterface* GetForwardingInterface() = 0;
};
class  ExtraCppInterfaceAsyncWaiter {
 public:
  explicit ExtraCppInterfaceAsyncWaiter(ExtraCppInterface* proxy);

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

  ~ExtraCppInterfaceAsyncWaiter();

 private:
  ExtraCppInterface* const proxy_;
};




}  // mojo::test::extra_cpp_template_unittest::mojom

#endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_EXTRA_CPP_TEMPLATE_UNITTEST_TEST_MOJOM_TEST_UTILS_H_