// services/network/public/mojom/restricted_udp_socket.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 SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_UDP_SOCKET_MOJOM_TEST_UTILS_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_UDP_SOCKET_MOJOM_TEST_UTILS_H_

#include "services/network/public/mojom/restricted_udp_socket.mojom.h"


namespace network::mojom {


class  RestrictedUDPSocketInterceptorForTesting : public RestrictedUDPSocket {
  virtual RestrictedUDPSocket* GetForwardingInterface() = 0;
  void JoinGroup(const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address, JoinGroupCallback callback) override;
  void LeaveGroup(const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address, LeaveGroupCallback callback) override;
  void ReceiveMore(uint32_t num_additional_datagrams) override;
  void Send(::base::span<const ::uint8_t> data, SendCallback callback) override;
  void SendTo(::base::span<const ::uint8_t> data, const ::net::HostPortPair& dest_addr, ::net::DnsQueryType dns_query_type, SendToCallback callback) override;
};
class  RestrictedUDPSocketAsyncWaiter {
 public:
  explicit RestrictedUDPSocketAsyncWaiter(RestrictedUDPSocket* proxy);

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

  ~RestrictedUDPSocketAsyncWaiter();
  void JoinGroup(
      const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address, int32_t* out_result);
  int32_t JoinGroup(const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address);
  void LeaveGroup(
      const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address, int32_t* out_result);
  int32_t LeaveGroup(const ::net::IPAddress& group_address, const std::optional<::net::IPAddress>& source_address);
  void Send(
      ::base::span<const ::uint8_t> data, int32_t* out_result);
  int32_t Send(::base::span<const ::uint8_t> data);
  void SendTo(
      ::base::span<const ::uint8_t> data, const ::net::HostPortPair& dest_addr, ::net::DnsQueryType dns_query_type, int32_t* out_result);
  int32_t SendTo(::base::span<const ::uint8_t> data, const ::net::HostPortPair& dest_addr, ::net::DnsQueryType dns_query_type);

 private:
  RestrictedUDPSocket* const proxy_;
};




}  // network::mojom

#endif  // SERVICES_NETWORK_PUBLIC_MOJOM_RESTRICTED_UDP_SOCKET_MOJOM_TEST_UTILS_H_