proxy_resolving_socket_mojo.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_NETWORK_PROXY_RESOLVING_SOCKET_MOJO_H_
  5. #define SERVICES_NETWORK_PROXY_RESOLVING_SOCKET_MOJO_H_
  6. #include <memory>
  7. #include "base/component_export.h"
  8. #include "base/memory/raw_ptr.h"
  9. #include "base/memory/ref_counted.h"
  10. #include "mojo/public/cpp/bindings/pending_receiver.h"
  11. #include "mojo/public/cpp/bindings/pending_remote.h"
  12. #include "mojo/public/cpp/bindings/remote.h"
  13. #include "net/traffic_annotation/network_traffic_annotation.h"
  14. #include "services/network/proxy_resolving_client_socket.h"
  15. #include "services/network/public/mojom/proxy_resolving_socket.mojom.h"
  16. #include "services/network/socket_data_pump.h"
  17. #include "services/network/tls_socket_factory.h"
  18. namespace network {
  19. class SocketDataPump;
  20. class COMPONENT_EXPORT(NETWORK_SERVICE) ProxyResolvingSocketMojo
  21. : public mojom::ProxyResolvingSocket,
  22. public SocketDataPump::Delegate,
  23. public TLSSocketFactory::Delegate {
  24. public:
  25. ProxyResolvingSocketMojo(
  26. std::unique_ptr<net::StreamSocket> socket,
  27. const net::NetworkTrafficAnnotationTag& traffic_annotation,
  28. mojo::PendingRemote<mojom::SocketObserver> observer,
  29. TLSSocketFactory* tls_socket_factory);
  30. ProxyResolvingSocketMojo(const ProxyResolvingSocketMojo&) = delete;
  31. ProxyResolvingSocketMojo& operator=(const ProxyResolvingSocketMojo&) = delete;
  32. ~ProxyResolvingSocketMojo() override;
  33. void Connect(
  34. mojom::ProxyResolvingSocketFactory::CreateProxyResolvingSocketCallback
  35. callback);
  36. // mojom::ProxyResolvingSocket implementation.
  37. void UpgradeToTLS(
  38. const net::HostPortPair& host_port_pair,
  39. const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
  40. mojo::PendingReceiver<mojom::TLSClientSocket> receiver,
  41. mojo::PendingRemote<mojom::SocketObserver> observer,
  42. mojom::ProxyResolvingSocket::UpgradeToTLSCallback callback) override;
  43. private:
  44. void OnConnectCompleted(int net_result);
  45. // SocketDataPump::Delegate implementation.
  46. void OnNetworkReadError(int net_error) override;
  47. void OnNetworkWriteError(int net_error) override;
  48. void OnShutdown() override;
  49. // TLSSocketFactory::Delegate implementation.
  50. const net::StreamSocket* BorrowSocket() override;
  51. std::unique_ptr<net::StreamSocket> TakeSocket() override;
  52. mojo::Remote<mojom::SocketObserver> observer_;
  53. raw_ptr<TLSSocketFactory> tls_socket_factory_;
  54. std::unique_ptr<net::StreamSocket> socket_;
  55. const net::NetworkTrafficAnnotationTag traffic_annotation_;
  56. mojom::ProxyResolvingSocketFactory::CreateProxyResolvingSocketCallback
  57. connect_callback_;
  58. base::OnceClosure pending_upgrade_to_tls_callback_;
  59. std::unique_ptr<SocketDataPump> socket_data_pump_;
  60. };
  61. } // namespace network
  62. #endif // SERVICES_NETWORK_PROXY_RESOLVING_SOCKET_MOJO_H_