#include "net/websockets/websocket_stream.h"
#include <optional>
#include <ostream>
#include <utility>
#include "base/check.h"
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/notreached.h"
#include "base/strings/strcat.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "net/base/auth.h"
#include "net/base/isolation_info.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/request_priority.h"
#include "net/base/url_util.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_response_info.h"
#include "net/http/http_status_code.h"
#include "net/storage_access_api/status.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/websocket_handshake_userdata_key.h"
#include "net/websockets/websocket_basic_handshake_stream.h"
#include "net/websockets/websocket_event_interface.h"
#include "net/websockets/websocket_handshake_constants.h"
#include "net/websockets/websocket_handshake_response_info.h"
#include "net/websockets/websocket_handshake_stream_base.h"
#include "net/websockets/websocket_handshake_stream_create_helper.h"
#include "net/websockets/websocket_http2_handshake_stream.h"
#include "net/websockets/websocket_http3_handshake_stream.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace net {
class SSLCertRequestInfo;
class SSLInfo;
class SiteForCookies;
namespace {
constexpr int kHandshakeTimeoutIntervalInSeconds = …;
class WebSocketStreamRequestImpl;
class Delegate : public URLRequest::Delegate { … };
class WebSocketStreamRequestImpl : public WebSocketStreamRequestAPI { … };
class SSLErrorCallbacks : public WebSocketEventInterface::SSLErrorCallbacks { … };
int Delegate::OnConnected(URLRequest* request,
const TransportInfo& info,
CompletionOnceCallback callback) { … }
void Delegate::OnReceivedRedirect(URLRequest* request,
const RedirectInfo& redirect_info,
bool* defer_redirect) { … }
void Delegate::OnResponseStarted(URLRequest* request, int net_error) { … }
void Delegate::OnAuthRequired(URLRequest* request,
const AuthChallengeInfo& auth_info) { … }
void Delegate::OnAuthRequiredComplete(URLRequest* request,
const AuthCredentials* credentials) { … }
void Delegate::OnCertificateRequested(URLRequest* request,
SSLCertRequestInfo* cert_request_info) { … }
void Delegate::OnSSLCertificateError(URLRequest* request,
int net_error,
const SSLInfo& ssl_info,
bool fatal) { … }
void Delegate::OnReadCompleted(URLRequest* request, int bytes_read) { … }
}
WebSocketStreamRequest::~WebSocketStreamRequest() = default;
WebSocketStream::WebSocketStream() = default;
WebSocketStream::~WebSocketStream() = default;
WebSocketStream::ConnectDelegate::~ConnectDelegate() = default;
std::unique_ptr<WebSocketStreamRequest> WebSocketStream::CreateAndConnectStream(
const GURL& socket_url,
const std::vector<std::string>& requested_subprotocols,
const url::Origin& origin,
const SiteForCookies& site_for_cookies,
StorageAccessApiStatus storage_access_api_status,
const IsolationInfo& isolation_info,
const HttpRequestHeaders& additional_headers,
URLRequestContext* url_request_context,
const NetLogWithSource& net_log,
NetworkTrafficAnnotationTag traffic_annotation,
std::unique_ptr<ConnectDelegate> connect_delegate) { … }
std::unique_ptr<WebSocketStreamRequest>
WebSocketStream::CreateAndConnectStreamForTesting(
const GURL& socket_url,
const std::vector<std::string>& requested_subprotocols,
const url::Origin& origin,
const SiteForCookies& site_for_cookies,
StorageAccessApiStatus storage_access_api_status,
const IsolationInfo& isolation_info,
const HttpRequestHeaders& additional_headers,
URLRequestContext* url_request_context,
const NetLogWithSource& net_log,
NetworkTrafficAnnotationTag traffic_annotation,
std::unique_ptr<WebSocketStream::ConnectDelegate> connect_delegate,
std::unique_ptr<base::OneShotTimer> timer,
std::unique_ptr<WebSocketStreamRequestAPI> api_delegate) { … }
}