Move QuicToyClient::ClientFactory to its own file

This is necessary to avoid a dependency on QuicToyClient from the
QuicEpollClientFactory, which we want to avoid because the toy client
defines way to many flags.

PiperOrigin-RevId: 486476799
diff --git a/build/source_list.bzl b/build/source_list.bzl
index afc80c7..4d627c1 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -968,7 +968,9 @@
     "quic/masque/masque_utils.h",
     "quic/platform/api/quic_udp_socket_platform_api.h",
     "quic/tools/quic_client_default_network_helper.h",
+    "quic/tools/quic_client_factory.h",
     "quic/tools/quic_default_client.h",
+    "quic/tools/quic_epoll_client_factory.h",
     "quic/tools/quic_server.h",
 ]
 io_tool_support_srcs = [
@@ -993,6 +995,7 @@
     "quic/masque/masque_utils.cc",
     "quic/tools/quic_client_default_network_helper.cc",
     "quic/tools/quic_default_client.cc",
+    "quic/tools/quic_epoll_client_factory.cc",
     "quic/tools/quic_server.cc",
 ]
 io_test_support_hdrs = [
@@ -1310,7 +1313,6 @@
     "quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc",
 ]
 cli_tools_hdrs = [
-    "quic/tools/quic_epoll_client_factory.h",
     "quic/tools/quic_server_factory.h",
     "quic/tools/quic_toy_client.h",
     "quic/tools/quic_toy_server.h",
@@ -1322,7 +1324,6 @@
     "quic/tools/qpack_offline_decoder_bin.cc",
     "quic/tools/quic_client_bin.cc",
     "quic/tools/quic_client_interop_test_bin.cc",
-    "quic/tools/quic_epoll_client_factory.cc",
     "quic/tools/quic_packet_printer_bin.cc",
     "quic/tools/quic_reject_reason_decoder_bin.cc",
     "quic/tools/quic_server_bin.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 53814a2..82132ae 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -968,7 +968,9 @@
     "src/quiche/quic/masque/masque_utils.h",
     "src/quiche/quic/platform/api/quic_udp_socket_platform_api.h",
     "src/quiche/quic/tools/quic_client_default_network_helper.h",
+    "src/quiche/quic/tools/quic_client_factory.h",
     "src/quiche/quic/tools/quic_default_client.h",
+    "src/quiche/quic/tools/quic_epoll_client_factory.h",
     "src/quiche/quic/tools/quic_server.h",
 ]
 io_tool_support_srcs = [
@@ -993,6 +995,7 @@
     "src/quiche/quic/masque/masque_utils.cc",
     "src/quiche/quic/tools/quic_client_default_network_helper.cc",
     "src/quiche/quic/tools/quic_default_client.cc",
+    "src/quiche/quic/tools/quic_epoll_client_factory.cc",
     "src/quiche/quic/tools/quic_server.cc",
 ]
 io_test_support_hdrs = [
@@ -1310,7 +1313,6 @@
     "src/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc",
 ]
 cli_tools_hdrs = [
-    "src/quiche/quic/tools/quic_epoll_client_factory.h",
     "src/quiche/quic/tools/quic_server_factory.h",
     "src/quiche/quic/tools/quic_toy_client.h",
     "src/quiche/quic/tools/quic_toy_server.h",
@@ -1322,7 +1324,6 @@
     "src/quiche/quic/tools/qpack_offline_decoder_bin.cc",
     "src/quiche/quic/tools/quic_client_bin.cc",
     "src/quiche/quic/tools/quic_client_interop_test_bin.cc",
-    "src/quiche/quic/tools/quic_epoll_client_factory.cc",
     "src/quiche/quic/tools/quic_packet_printer_bin.cc",
     "src/quiche/quic/tools/quic_reject_reason_decoder_bin.cc",
     "src/quiche/quic/tools/quic_server_bin.cc",
diff --git a/build/source_list.json b/build/source_list.json
index a877e81..3ded441 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -967,7 +967,9 @@
     "quiche/quic/masque/masque_utils.h",
     "quiche/quic/platform/api/quic_udp_socket_platform_api.h",
     "quiche/quic/tools/quic_client_default_network_helper.h",
+    "quiche/quic/tools/quic_client_factory.h",
     "quiche/quic/tools/quic_default_client.h",
+    "quiche/quic/tools/quic_epoll_client_factory.h",
     "quiche/quic/tools/quic_server.h"
   ],
   "io_tool_support_srcs": [
@@ -992,6 +994,7 @@
     "quiche/quic/masque/masque_utils.cc",
     "quiche/quic/tools/quic_client_default_network_helper.cc",
     "quiche/quic/tools/quic_default_client.cc",
+    "quiche/quic/tools/quic_epoll_client_factory.cc",
     "quiche/quic/tools/quic_server.cc"
   ],
   "io_test_support_hdrs": [
@@ -1309,7 +1312,6 @@
     "quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc"
   ],
   "cli_tools_hdrs": [
-    "quiche/quic/tools/quic_epoll_client_factory.h",
     "quiche/quic/tools/quic_server_factory.h",
     "quiche/quic/tools/quic_toy_client.h",
     "quiche/quic/tools/quic_toy_server.h"
@@ -1321,7 +1323,6 @@
     "quiche/quic/tools/qpack_offline_decoder_bin.cc",
     "quiche/quic/tools/quic_client_bin.cc",
     "quiche/quic/tools/quic_client_interop_test_bin.cc",
-    "quiche/quic/tools/quic_epoll_client_factory.cc",
     "quiche/quic/tools/quic_packet_printer_bin.cc",
     "quiche/quic/tools/quic_reject_reason_decoder_bin.cc",
     "quiche/quic/tools/quic_server_bin.cc",
diff --git a/quiche/quic/tools/quic_client_factory.h b/quiche/quic/tools/quic_client_factory.h
new file mode 100644
index 0000000..df4aab9
--- /dev/null
+++ b/quiche/quic/tools/quic_client_factory.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_
+#define QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_
+
+#include "quiche/quic/core/crypto/proof_verifier.h"
+#include "quiche/quic/core/crypto/quic_crypto_client_config.h"
+#include "quiche/quic/core/quic_config.h"
+#include "quiche/quic/core/quic_versions.h"
+#include "quiche/quic/tools/quic_spdy_client_base.h"
+
+namespace quic {
+
+// Interface implemented by Factories to create QuicClients.
+class ClientFactoryInterface {
+ public:
+  virtual ~ClientFactoryInterface() = default;
+
+  // Creates a new client configured to connect to |host_for_lookup:port|
+  // supporting |versions|, using |host_for_handshake| for handshake and
+  // |verifier| to verify proofs.
+  virtual std::unique_ptr<QuicSpdyClientBase> CreateClient(
+      std::string host_for_handshake, std::string host_for_lookup,
+      // AF_INET, AF_INET6, or AF_UNSPEC(=don't care).
+      int address_family_for_lookup, uint16_t port,
+      ParsedQuicVersionVector versions, const QuicConfig& config,
+      std::unique_ptr<ProofVerifier> verifier,
+      std::unique_ptr<SessionCache> session_cache) = 0;
+};
+
+}  // namespace quic
+
+#endif  // QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_
diff --git a/quiche/quic/tools/quic_epoll_client_factory.h b/quiche/quic/tools/quic_epoll_client_factory.h
index 962a714..ab5e882 100644
--- a/quiche/quic/tools/quic_epoll_client_factory.h
+++ b/quiche/quic/tools/quic_epoll_client_factory.h
@@ -8,12 +8,12 @@
 #include <memory>
 
 #include "quiche/quic/core/io/quic_event_loop.h"
-#include "quiche/quic/tools/quic_toy_client.h"
+#include "quiche/quic/tools/quic_client_factory.h"
 
 namespace quic {
 
 // Factory creating QuicClient instances.
-class QuicEpollClientFactory : public QuicToyClient::ClientFactory {
+class QuicEpollClientFactory : public ClientFactoryInterface {
  public:
   QuicEpollClientFactory();
 
diff --git a/quiche/quic/tools/quic_toy_client.h b/quiche/quic/tools/quic_toy_client.h
index 7639482..50e42c4 100644
--- a/quiche/quic/tools/quic_toy_client.h
+++ b/quiche/quic/tools/quic_toy_client.h
@@ -8,39 +8,26 @@
 #ifndef QUICHE_QUIC_TOOLS_QUIC_TOY_CLIENT_H_
 #define QUICHE_QUIC_TOOLS_QUIC_TOY_CLIENT_H_
 
-#include "quiche/quic/tools/quic_spdy_client_base.h"
+#include "quiche/quic/tools/quic_client_factory.h"
 
 namespace quic {
 
 class QuicToyClient {
  public:
-  class ClientFactory {
-   public:
-    virtual ~ClientFactory() = default;
-
-    // Creates a new client configured to connect to |host_for_lookup:port|
-    // supporting |versions|, using |host_for_handshake| for handshake and
-    // |verifier| to verify proofs.
-    virtual std::unique_ptr<QuicSpdyClientBase> CreateClient(
-        std::string host_for_handshake, std::string host_for_lookup,
-        // AF_INET, AF_INET6, or AF_UNSPEC(=don't care).
-        int address_family_for_lookup, uint16_t port,
-        ParsedQuicVersionVector versions, const QuicConfig& config,
-        std::unique_ptr<ProofVerifier> verifier,
-        std::unique_ptr<SessionCache> session_cache) = 0;
-  };
-
   // Constructs a new toy client that will use |client_factory| to create the
   // actual QuicSpdyClientBase instance.
-  QuicToyClient(ClientFactory* client_factory);
+  QuicToyClient(ClientFactoryInterface* client_factory);
 
   // Connects to the QUIC server based on the various flags defined in the
   // .cc file, sends requests and prints the responses. Returns 0 on success
   // and non-zero otherwise.
   int SendRequestsAndPrintResponses(std::vector<std::string> urls);
 
+  // Compatibility alias
+  using ClientFactory = ClientFactoryInterface;
+
  private:
-  ClientFactory* client_factory_;  // Unowned.
+  ClientFactoryInterface* client_factory_;  // Unowned.
 };
 
 }  // namespace quic