| Index: net/websockets/websocket_channel_test.cc
 | 
| diff --git a/net/websockets/websocket_channel_test.cc b/net/websockets/websocket_channel_test.cc
 | 
| index 7a50c41cbe4b4f21ebd7021492000c940353d50d..d5ceae8e478f282f7646ddb5eedff6c0392cdb73 100644
 | 
| --- a/net/websockets/websocket_channel_test.cc
 | 
| +++ b/net/websockets/websocket_channel_test.cc
 | 
| @@ -2542,6 +2542,39 @@ TEST_F(WebSocketChannelFlowControlTest, CloseFrameShouldNotOvertakeDataFrames) {
 | 
|    checkpoint.Call(4);
 | 
|  }
 | 
|  
 | 
| +// SendFlowControl calls should not trigger multiple close respond frames.
 | 
| +TEST_F(WebSocketChannelFlowControlTest, DoNotSendMultipleCloseRespondFrames) {
 | 
| +  std::unique_ptr<ReadableFakeWebSocketStream> stream(
 | 
| +      new ReadableFakeWebSocketStream);
 | 
| +  static constexpr InitFrame frames[] = {
 | 
| +      {FINAL_FRAME, WebSocketFrameHeader::kOpCodeText, NOT_MASKED,
 | 
| +       "FIRST SECOND"},
 | 
| +      {FINAL_FRAME, WebSocketFrameHeader::kOpCodeClose, NOT_MASKED,
 | 
| +       CLOSE_DATA(NORMAL_CLOSURE, "GOOD BYE")},
 | 
| +  };
 | 
| +  stream->PrepareReadFrames(ReadableFakeWebSocketStream::SYNC, OK, frames);
 | 
| +  set_stream(std::move(stream));
 | 
| +  Checkpoint checkpoint;
 | 
| +  InSequence s;
 | 
| +  EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
 | 
| +  EXPECT_CALL(*event_interface_, OnFlowControl(_));
 | 
| +  EXPECT_CALL(*event_interface_,
 | 
| +              OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
 | 
| +                                AsVector("FIRST ")));
 | 
| +  EXPECT_CALL(checkpoint, Call(1));
 | 
| +  EXPECT_CALL(*event_interface_,
 | 
| +              OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
 | 
| +                                AsVector("SECOND")));
 | 
| +  EXPECT_CALL(*event_interface_, OnClosingHandshake());
 | 
| +  EXPECT_CALL(checkpoint, Call(2));
 | 
| +
 | 
| +  CreateChannelAndConnectWithQuota(6);
 | 
| +  checkpoint.Call(1);
 | 
| +  ASSERT_EQ(CHANNEL_ALIVE, channel_->SendFlowControl(6));
 | 
| +  checkpoint.Call(2);
 | 
| +  ASSERT_EQ(CHANNEL_ALIVE, channel_->SendFlowControl(6));
 | 
| +}
 | 
| +
 | 
|  // RFC6455 5.1 "a client MUST mask all frames that it sends to the server".
 | 
|  // WebSocketChannel actually only sets the mask bit in the header, it doesn't
 | 
|  // perform masking itself (not all transports actually use masking).
 | 
| 
 |