Index: content/browser/byte_stream_unittest.cc |
diff --git a/content/browser/byte_stream_unittest.cc b/content/browser/byte_stream_unittest.cc |
index ed413da8f3cc0c884bfec31e34b5b0ac2a2209a1..a585fb7a6c2f3ddda09bbc4c973b2f890e6b2773 100644 |
--- a/content/browser/byte_stream_unittest.cc |
+++ b/content/browser/byte_stream_unittest.cc |
@@ -146,6 +146,45 @@ TEST_F(ByteStreamTest, ByteStream_PushBack) { |
byte_stream_output->Read(&output_io_buffer, &output_length)); |
} |
+// Confirm that Flush() method makes the writer to send written contents to |
+// the reader. |
+TEST_F(ByteStreamTest, ByteStream_Flush) { |
+ scoped_ptr<ByteStreamWriter> byte_stream_input; |
+ scoped_ptr<ByteStreamReader> byte_stream_output; |
+ CreateByteStream( |
+ message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
+ 1024, &byte_stream_input, &byte_stream_output); |
+ |
+ EXPECT_TRUE(Write(byte_stream_input.get(), 1)); |
+ message_loop_.RunUntilIdle(); |
+ |
+ scoped_refptr<net::IOBuffer> output_io_buffer; |
+ size_t output_length = 0; |
+ // Check that data is not sent to the reader yet. |
+ EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
+ byte_stream_output->Read(&output_io_buffer, &output_length)); |
+ |
+ byte_stream_input->Flush(); |
+ message_loop_.RunUntilIdle(); |
+ |
+ EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
+ byte_stream_output->Read(&output_io_buffer, &output_length)); |
+ EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
+ |
+ // Check that it's ok to Flush() an empty writer. |
+ byte_stream_input->Flush(); |
+ message_loop_.RunUntilIdle(); |
+ |
+ EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
+ byte_stream_output->Read(&output_io_buffer, &output_length)); |
+ |
+ byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); |
+ message_loop_.RunUntilIdle(); |
+ |
+ EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
+ byte_stream_output->Read(&output_io_buffer, &output_length)); |
+} |
+ |
// Same as above, only use knowledge of the internals to confirm |
// that we're getting pushback even when data's split across the two |
// objects |