diff options
Diffstat (limited to 'chromium/services/network/web_transport_unittest.cc')
-rw-r--r-- | chromium/services/network/web_transport_unittest.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chromium/services/network/web_transport_unittest.cc b/chromium/services/network/web_transport_unittest.cc index 81bf26f9e05..1a9e6bcfef8 100644 --- a/chromium/services/network/web_transport_unittest.cc +++ b/chromium/services/network/web_transport_unittest.cc @@ -610,6 +610,51 @@ TEST_F(WebTransportTest, EchoOnUnidirectionalStreams) { EXPECT_EQ(0u, resets_sent.size()); } +TEST_F(WebTransportTest, DeleteClientWithStreamsOpen) { + base::RunLoop run_loop_for_handshake; + mojo::PendingRemote<mojom::WebTransportHandshakeClient> handshake_client; + TestHandshakeClient test_handshake_client( + handshake_client.InitWithNewPipeAndPassReceiver(), + run_loop_for_handshake.QuitClosure()); + + CreateWebTransport(GetURL("/echo"), + url::Origin::Create(GURL("https://example.org/")), + std::move(handshake_client)); + + run_loop_for_handshake.Run(); + + ASSERT_TRUE(test_handshake_client.has_seen_connection_establishment()); + + TestClient client(test_handshake_client.PassClientReceiver()); + mojo::Remote<mojom::WebTransport> transport_remote( + test_handshake_client.PassTransport()); + + constexpr int kNumStreams = 10; + auto writable_for_outgoing = + std::make_unique<mojo::ScopedDataPipeProducerHandle[]>(kNumStreams); + for (int i = 0; i < kNumStreams; i++) { + const MojoCreateDataPipeOptions options = { + sizeof(options), MOJO_CREATE_DATA_PIPE_FLAG_NONE, 1, 4 * 1024}; + mojo::ScopedDataPipeConsumerHandle readable_for_outgoing; + ASSERT_EQ(MOJO_RESULT_OK, + mojo::CreateDataPipe(&options, writable_for_outgoing[i], + readable_for_outgoing)); + base::RunLoop run_loop_for_stream_creation; + bool stream_created; + transport_remote->CreateStream( + std::move(readable_for_outgoing), + /*writable=*/{}, + base::BindLambdaForTesting([&](bool b, uint32_t /*id*/) { + stream_created = b; + run_loop_for_stream_creation.Quit(); + })); + run_loop_for_stream_creation.Run(); + ASSERT_TRUE(stream_created); + } + + // Keep the streams open so that they are closed via destructor. +} + // crbug.com/1129847: disabled because it is flaky. TEST_F(WebTransportTest, DISABLED_EchoOnBidirectionalStream) { base::RunLoop run_loop_for_handshake; |