1 // Copyright 2020 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 5 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_TCP_SOCKET_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_TCP_SOCKET_H_ 7 8 #include "base/optional.h" 9 #include "mojo/public/cpp/bindings/pending_receiver.h" 10 #include "mojo/public/cpp/bindings/pending_remote.h" 11 #include "mojo/public/cpp/bindings/receiver.h" 12 #include "mojo/public/cpp/bindings/remote.h" 13 #include "mojo/public/cpp/system/data_pipe.h" 14 #include "services/network/public/mojom/tcp_socket.mojom-blink.h" 15 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" 16 #include "third_party/blink/renderer/modules/modules_export.h" 17 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" 18 #include "third_party/blink/renderer/platform/heap/heap.h" 19 #include "third_party/blink/renderer/platform/heap/member.h" 20 #include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h" 21 22 namespace net { 23 class IPEndPoint; 24 } // namespace net 25 26 namespace blink { 27 28 class MODULES_EXPORT TCPSocket final 29 : public ScriptWrappable, 30 public network::mojom::blink::SocketObserver { 31 DEFINE_WRAPPERTYPEINFO(); 32 33 public: 34 explicit TCPSocket(ScriptPromiseResolver&); 35 ~TCPSocket() override; 36 37 TCPSocket(const TCPSocket&) = delete; 38 TCPSocket& operator=(const TCPSocket&) = delete; 39 40 // Called by NavigatorSocket when initiating a connection: 41 mojo::PendingReceiver<network::mojom::blink::TCPConnectedSocket> 42 GetTCPSocketReceiver(); 43 mojo::PendingRemote<network::mojom::blink::SocketObserver> 44 GetTCPSocketObserver(); 45 void Init(int32_t result, 46 const base::Optional<net::IPEndPoint>& local_addr, 47 const base::Optional<net::IPEndPoint>& peer_addr, 48 mojo::ScopedDataPipeConsumerHandle receive_stream, 49 mojo::ScopedDataPipeProducerHandle send_stream); 50 51 // Web-exposed function 52 ScriptPromise close(ScriptState*, ExceptionState&); 53 54 // network::mojom::blink::SocketObserver: 55 void OnReadError(int32_t net_error) override; 56 void OnWriteError(int32_t net_error) override; 57 58 // ScriptWrappable: 59 void Trace(Visitor* visitor) const override; 60 61 private: 62 void OnSocketObserverConnectionError(); 63 64 Member<ScriptPromiseResolver> resolver_; 65 FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle 66 feature_handle_for_scheduler_; 67 68 mojo::Remote<network::mojom::blink::TCPConnectedSocket> tcp_socket_; 69 mojo::Receiver<network::mojom::blink::SocketObserver> 70 socket_observer_receiver_{this}; 71 }; 72 73 } // namespace blink 74 75 #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_DIRECT_SOCKETS_TCP_SOCKET_H_ 76