From 01a624b782ea72dfaea0ef4dc1d19bfedf61de66 Mon Sep 17 00:00:00 2001
From: klzgrad <kizdiv@gmail.com>
Date: Sat, 8 Dec 2018 00:52:08 -0500
Subject: [PATCH] socket: Add RawConnect method

---
 src/net/socket/client_socket_pool_manager.cc | 32 +++++++++++++++++---
 src/net/socket/client_socket_pool_manager.h  | 14 +++++++++
 2 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/net/socket/client_socket_pool_manager.cc b/src/net/socket/client_socket_pool_manager.cc
index 521ebc8f50..6bc9dff14e 100644
--- a/src/net/socket/client_socket_pool_manager.cc
+++ b/src/net/socket/client_socket_pool_manager.cc
@@ -31,8 +31,8 @@ namespace {
 
 // Limit of sockets of each socket pool.
 int g_max_sockets_per_pool[] = {
-  256,  // NORMAL_SOCKET_POOL
-  256   // WEBSOCKET_SOCKET_POOL
+    256,  // NORMAL_SOCKET_POOL
+    256   // WEBSOCKET_SOCKET_POOL
 };
 
 static_assert(std::size(g_max_sockets_per_pool) ==
@@ -60,8 +60,8 @@ static_assert(std::size(g_max_sockets_per_group) ==
 // http and SOCKS proxies.  See http://crbug.com/12066 and
 // http://crbug.com/44501 for details about proxy server connection limits.
 int g_max_sockets_per_proxy_server[] = {
-  kDefaultMaxSocketsPerProxyServer,  // NORMAL_SOCKET_POOL
-  kDefaultMaxSocketsPerProxyServer   // WEBSOCKET_SOCKET_POOL
+    kDefaultMaxSocketsPerProxyServer,  // NORMAL_SOCKET_POOL
+    kDefaultMaxSocketsPerProxyServer   // WEBSOCKET_SOCKET_POOL
 };
 
 static_assert(std::size(g_max_sockets_per_proxy_server) ==
@@ -279,6 +279,30 @@ int InitSocketHandleForWebSocketRequest(
       proxy_auth_callback);
 }
 
+int InitSocketHandleForRawConnect2(
+    url::SchemeHostPort endpoint,
+    int request_load_flags,
+    RequestPriority request_priority,
+    HttpNetworkSession* session,
+    const ProxyInfo& proxy_info,
+    const SSLConfig& ssl_config_for_origin,
+    const SSLConfig& ssl_config_for_proxy,
+    PrivacyMode privacy_mode,
+    NetworkAnonymizationKey network_anonymization_key,
+    const NetLogWithSource& net_log,
+    ClientSocketHandle* socket_handle,
+    CompletionOnceCallback callback) {
+  DCHECK(socket_handle);
+  return InitSocketPoolHelper(
+      std::move(endpoint), request_load_flags, request_priority, session,
+      proxy_info, ssl_config_for_origin, ssl_config_for_proxy,
+      /*is_for_websockets=*/true, privacy_mode,
+      std::move(network_anonymization_key), SecureDnsPolicy::kDisable,
+      SocketTag(), net_log, 0, socket_handle,
+      HttpNetworkSession::NORMAL_SOCKET_POOL, std::move(callback),
+      ClientSocketPool::ProxyAuthCallback());
+}
+
 int PreconnectSocketsForHttpRequest(
     url::SchemeHostPort endpoint,
     int request_load_flags,
diff --git a/src/net/socket/client_socket_pool_manager.h b/src/net/socket/client_socket_pool_manager.h
index cb0f0e9eaf..3d3b0c116c 100644
--- a/src/net/socket/client_socket_pool_manager.h
+++ b/src/net/socket/client_socket_pool_manager.h
@@ -120,6 +120,20 @@ int InitSocketHandleForWebSocketRequest(
     CompletionOnceCallback callback,
     const ClientSocketPool::ProxyAuthCallback& proxy_auth_callback);
 
+NET_EXPORT int InitSocketHandleForRawConnect2(
+    url::SchemeHostPort endpoint,
+    int request_load_flags,
+    RequestPriority request_priority,
+    HttpNetworkSession* session,
+    const ProxyInfo& proxy_info,
+    const SSLConfig& ssl_config_for_origin,
+    const SSLConfig& ssl_config_for_proxy,
+    PrivacyMode privacy_mode,
+    NetworkAnonymizationKey network_anonymization_key,
+    const NetLogWithSource& net_log,
+    ClientSocketHandle* socket_handle,
+    CompletionOnceCallback callback);
+
 // Similar to InitSocketHandleForHttpRequest except that it initiates the
 // desired number of preconnect streams from the relevant socket pool.
 int PreconnectSocketsForHttpRequest(