|  | // 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 CONTENT_BROWSER_WEBSOCKETS_WEBSOCKET_CONNECTOR_IMPL_H_ | 
|  | #define CONTENT_BROWSER_WEBSOCKETS_WEBSOCKET_CONNECTOR_IMPL_H_ | 
|  |  | 
|  | #include <optional> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/unguessable_token.h" | 
|  | #include "content/public/browser/content_browser_client.h" | 
|  | #include "net/base/isolation_info.h" | 
|  | #include "net/storage_access_api/status.h" | 
|  | #include "services/network/public/mojom/client_security_state.mojom.h" | 
|  | #include "services/network/public/mojom/network_context.mojom.h" | 
|  | #include "services/network/public/mojom/websocket.mojom.h" | 
|  | #include "third_party/blink/public/mojom/websockets/websocket_connector.mojom.h" | 
|  | #include "url/origin.h" | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class WebSocketConnectorImpl final : public blink::mojom::WebSocketConnector { | 
|  | public: | 
|  | using WebSocketFactory = ContentBrowserClient::WebSocketFactory; | 
|  |  | 
|  | // Called on the UI thread. | 
|  | // - For frames, |frame_id| should be their own id. | 
|  | // - For dedicated workers, |frame_id| should be its response document's | 
|  | //   frame's id. | 
|  | // - For shared workers and service workers, |frame_id| should be | 
|  | //   IPC::mojom::kRoutingIdNone because they do not have a frame. | 
|  | WebSocketConnectorImpl( | 
|  | int process_id, | 
|  | int frame_id, | 
|  | const url::Origin& origin, | 
|  | const net::IsolationInfo& isolation_info, | 
|  | network::mojom::ClientSecurityStatePtr client_security_state); | 
|  | ~WebSocketConnectorImpl() override; | 
|  |  | 
|  | // WebSocketConnector implementation | 
|  | void Connect(const GURL& url, | 
|  | const std::vector<std::string>& requested_protocols, | 
|  | const net::SiteForCookies& site_for_cookies, | 
|  | const std::optional<std::string>& user_agent, | 
|  | net::StorageAccessApiStatus storage_access_api_status, | 
|  | mojo::PendingRemote<network::mojom::WebSocketHandshakeClient> | 
|  | handshake_client, | 
|  | const std::optional<base::UnguessableToken>& | 
|  | throttling_profile_id) override; | 
|  |  | 
|  | private: | 
|  | static void ConnectCalledByContentBrowserClient( | 
|  | const std::vector<std::string>& requested_protocols, | 
|  | const net::SiteForCookies& site_for_cookies, | 
|  | net::StorageAccessApiStatus storage_access_api_status, | 
|  | const net::IsolationInfo& isolation_info, | 
|  | int process_id, | 
|  | int frame_id, | 
|  | const url::Origin& origin, | 
|  | network::mojom::ClientSecurityStatePtr client_security_state, | 
|  | uint32_t options, | 
|  | std::optional<base::UnguessableToken> throttling_profile_id, | 
|  | const GURL& url, | 
|  | std::vector<network::mojom::HttpHeaderPtr> additional_headers, | 
|  | mojo::PendingRemote<network::mojom::WebSocketHandshakeClient> | 
|  | handshake_client, | 
|  | mojo::PendingRemote<network::mojom::WebSocketAuthenticationHandler> | 
|  | auth_handler, | 
|  | mojo::PendingRemote<network::mojom::TrustedHeaderClient> | 
|  | trusted_header_client); | 
|  |  | 
|  | const int process_id_; | 
|  | const int frame_id_; | 
|  | const url::Origin origin_; | 
|  | const net::IsolationInfo isolation_info_; | 
|  | const network::mojom::ClientSecurityStatePtr client_security_state_; | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_WEBSOCKETS_WEBSOCKET_CONNECTOR_IMPL_H_ |