diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc | 81 |
1 files changed, 19 insertions, 62 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc b/chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc index 6e37b261f05..43bc56f1d85 100644 --- a/chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc +++ b/chromium/third_party/blink/renderer/modules/webtransport/bidirectional_stream_test.cc @@ -19,11 +19,11 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/mojom/webtransport/web_transport_connector.mojom-blink.h" +#include "third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_tester.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_iterator_result_value.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_uint8_array.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_bidirectional_stream.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_web_transport_options.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" @@ -172,32 +172,18 @@ class StubWebTransport : public network::mojom::blink::WebTransport { // This class sets up a connected blink::WebTransport object using a // StubWebTransport and provides access to both. -class ScopedWebTransport : public mojom::blink::WebTransportConnector { +class ScopedWebTransport { STACK_ALLOCATED(); public: - // For convenience, this class does work in the constructor. This is okay - // because it is only used for testing. - explicit ScopedWebTransport(const V8TestingScope& scope) - : browser_interface_broker_( - &scope.GetExecutionContext()->GetBrowserInterfaceBroker()) { - browser_interface_broker_->SetBinderForTesting( - mojom::blink::WebTransportConnector::Name_, - base::BindRepeating(&ScopedWebTransport::BindConnector, - weak_ptr_factory_.GetWeakPtr())); - web_transport_ = WebTransport::Create( - scope.GetScriptState(), "https://example.com/", - MakeGarbageCollected<WebTransportOptions>(), ASSERT_NO_EXCEPTION); - - test::RunPendingTasks(); + // This constructor runs the event loop. + explicit ScopedWebTransport(const V8TestingScope& scope) { + creator_.Init(scope.GetScriptState(), + base::BindRepeating(&ScopedWebTransport::CreateStub, + weak_ptr_factory_.GetWeakPtr())); } - ~ScopedWebTransport() override { - browser_interface_broker_->SetBinderForTesting( - mojom::blink::WebTransportConnector::Name_, {}); - } - - WebTransport* GetWebTransport() const { return web_transport_; } + WebTransport* GetWebTransport() const { return creator_.GetWebTransport(); } StubWebTransport* Stub() const { return stub_.get(); } void ResetStub() { stub_.reset(); } @@ -205,8 +191,8 @@ class ScopedWebTransport : public mojom::blink::WebTransportConnector { BidirectionalStream* CreateBidirectionalStream(const V8TestingScope& scope) { auto* script_state = scope.GetScriptState(); ScriptPromise bidirectional_stream_promise = - web_transport_->createBidirectionalStream(script_state, - ASSERT_NO_EXCEPTION); + GetWebTransport()->createBidirectionalStream(script_state, + ASSERT_NO_EXCEPTION); ScriptPromiseTester tester(script_state, bidirectional_stream_promise); tester.WaitUntilSettled(); @@ -221,7 +207,7 @@ class ScopedWebTransport : public mojom::blink::WebTransportConnector { BidirectionalStream* RemoteCreateBidirectionalStream( const V8TestingScope& scope) { stub_->CreateRemote(); - ReadableStream* streams = web_transport_->incomingBidirectionalStreams(); + ReadableStream* streams = GetWebTransport()->incomingBidirectionalStreams(); v8::Local<v8::Value> v8value = ReadValueFromStream(scope, streams); @@ -232,45 +218,15 @@ class ScopedWebTransport : public mojom::blink::WebTransportConnector { return bidirectional_stream; } - // Implementation of mojom::blink::WebTransportConnector. - void Connect( - const KURL&, - Vector<network::mojom::blink::WebTransportCertificateFingerprintPtr> - fingerprints, - mojo::PendingRemote<network::mojom::blink::WebTransportHandshakeClient> - pending_handshake_client) override { - mojo::Remote<network::mojom::blink::WebTransportHandshakeClient> - handshake_client(std::move(pending_handshake_client)); - - mojo::PendingRemote<network::mojom::blink::WebTransport> - web_transport_to_pass; - mojo::PendingRemote<network::mojom::blink::WebTransportClient> - client_remote; - + private: + void CreateStub(mojo::PendingRemote<network::mojom::blink::WebTransport>& + web_transport_to_pass) { stub_ = std::make_unique<StubWebTransport>( web_transport_to_pass.InitWithNewPipeAndPassReceiver()); - - handshake_client->OnConnectionEstablished( - std::move(web_transport_to_pass), - client_remote.InitWithNewPipeAndPassReceiver()); - client_remote_.Bind(std::move(client_remote)); - } - - private: - void BindConnector(mojo::ScopedMessagePipeHandle handle) { - connector_receiver_.Bind( - mojo::PendingReceiver<mojom::blink::WebTransportConnector>( - std::move(handle))); } - // |browser_interface_broker_| is cached here because we need to use it in the - // destructor. This means ScopedWebTransport must always be destroyed before - // the V8TestingScope object that owns the BrowserInterfaceBrokerProxy. - const BrowserInterfaceBrokerProxy* browser_interface_broker_; - WebTransport* web_transport_; + TestWebTransportCreator creator_; std::unique_ptr<StubWebTransport> stub_; - mojo::Remote<network::mojom::blink::WebTransportClient> client_remote_; - mojo::Receiver<mojom::blink::WebTransportConnector> connector_receiver_{this}; base::WeakPtrFactory<ScopedWebTransport> weak_ptr_factory_{this}; }; @@ -329,7 +285,7 @@ TEST(BidirectionalStreamTest, CreateRemotelyAndWrite) { // This test fragment is common to CreateLocallyAndRead and // CreateRemotelyAndRead. -void TestRead(const V8TestingScope& scope, +void TestRead(V8TestingScope& scope, ScopedWebTransport* scoped_web_transport, BidirectionalStream* bidirectional_stream) { mojo::ScopedDataPipeProducerHandle& input_producer = @@ -343,8 +299,9 @@ void TestRead(const V8TestingScope& scope, v8::Local<v8::Value> v8array = ReadValueFromStream(scope, bidirectional_stream->readable()); - DOMUint8Array* u8array = - V8Uint8Array::ToImplWithTypeCheck(scope.GetIsolate(), v8array); + NotShared<DOMUint8Array> u8array = + NativeValueTraits<NotShared<DOMUint8Array>>::NativeValue( + scope.GetIsolate(), v8array, scope.GetExceptionState()); ASSERT_TRUE(u8array); ASSERT_EQ(u8array->byteLength(), 1u); |