| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/byte_stream.h" | 5 #include "content/browser/byte_stream.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 3 * 1024, &byte_stream_input, &byte_stream_output); | 108 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 109 | 109 |
| 110 // Push a series of IO buffers on; test pushback happening and | 110 // Push a series of IO buffers on; test pushback happening and |
| 111 // that it's advisory. | 111 // that it's advisory. |
| 112 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 112 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 114 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 114 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 115 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); | 115 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); |
| 116 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); | 116 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); |
| 117 // Flush | 117 // Flush |
| 118 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 118 byte_stream_input->Close(0); |
| 119 message_loop_.RunUntilIdle(); | 119 message_loop_.RunUntilIdle(); |
| 120 | 120 |
| 121 // Pull the IO buffers out; do we get the same buffers and do they | 121 // Pull the IO buffers out; do we get the same buffers and do they |
| 122 // have the same contents? | 122 // have the same contents? |
| 123 scoped_refptr<net::IOBuffer> output_io_buffer; | 123 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 124 size_t output_length; | 124 size_t output_length; |
| 125 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 125 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 126 byte_stream_output->Read(&output_io_buffer, &output_length)); | 126 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 127 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 127 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 128 | 128 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 byte_stream_output->Read(&output_io_buffer, &output_length)); | 171 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 172 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 172 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 173 | 173 |
| 174 // Check that it's ok to Flush() an empty writer. | 174 // Check that it's ok to Flush() an empty writer. |
| 175 byte_stream_input->Flush(); | 175 byte_stream_input->Flush(); |
| 176 message_loop_.RunUntilIdle(); | 176 message_loop_.RunUntilIdle(); |
| 177 | 177 |
| 178 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 178 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 179 byte_stream_output->Read(&output_io_buffer, &output_length)); | 179 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 180 | 180 |
| 181 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 181 byte_stream_input->Close(0); |
| 182 message_loop_.RunUntilIdle(); | 182 message_loop_.RunUntilIdle(); |
| 183 | 183 |
| 184 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 184 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 185 byte_stream_output->Read(&output_io_buffer, &output_length)); | 185 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 186 } | 186 } |
| 187 | 187 |
| 188 // Same as above, only use knowledge of the internals to confirm | 188 // Same as above, only use knowledge of the internals to confirm |
| 189 // that we're getting pushback even when data's split across the two | 189 // that we're getting pushback even when data's split across the two |
| 190 // objects | 190 // objects |
| 191 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { | 191 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 | 244 |
| 245 scoped_refptr<net::IOBuffer> output_io_buffer; | 245 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 246 size_t output_length; | 246 size_t output_length; |
| 247 | 247 |
| 248 // Empty stream, non-error case. | 248 // Empty stream, non-error case. |
| 249 CreateByteStream( | 249 CreateByteStream( |
| 250 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 250 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 251 3 * 1024, &byte_stream_input, &byte_stream_output); | 251 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 252 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 252 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 253 byte_stream_output->Read(&output_io_buffer, &output_length)); | 253 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 254 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 254 byte_stream_input->Close(0); |
| 255 message_loop_.RunUntilIdle(); | 255 message_loop_.RunUntilIdle(); |
| 256 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 256 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 257 byte_stream_output->Read(&output_io_buffer, &output_length)); | 257 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 258 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, | 258 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 259 byte_stream_output->GetStatus()); | |
| 260 | 259 |
| 261 // Non-empty stream, non-error case. | 260 // Non-empty stream, non-error case. |
| 262 CreateByteStream( | 261 CreateByteStream( |
| 263 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 262 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 264 3 * 1024, &byte_stream_input, &byte_stream_output); | 263 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 265 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 264 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 266 byte_stream_output->Read(&output_io_buffer, &output_length)); | 265 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 267 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 266 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 268 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 267 byte_stream_input->Close(0); |
| 269 message_loop_.RunUntilIdle(); | 268 message_loop_.RunUntilIdle(); |
| 270 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 269 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 271 byte_stream_output->Read(&output_io_buffer, &output_length)); | 270 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 272 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 271 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 273 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 272 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 274 byte_stream_output->Read(&output_io_buffer, &output_length)); | 273 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 275 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, | 274 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 276 byte_stream_output->GetStatus()); | |
| 277 | 275 |
| 278 // Empty stream, non-error case. | 276 const int kFakeErrorCode = 22; |
| 277 |
| 278 // Empty stream, error case. |
| 279 CreateByteStream( | 279 CreateByteStream( |
| 280 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 280 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 281 3 * 1024, &byte_stream_input, &byte_stream_output); | 281 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 282 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 282 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 283 byte_stream_output->Read(&output_io_buffer, &output_length)); | 283 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 284 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED); | 284 byte_stream_input->Close(kFakeErrorCode); |
| 285 message_loop_.RunUntilIdle(); | 285 message_loop_.RunUntilIdle(); |
| 286 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 286 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 287 byte_stream_output->Read(&output_io_buffer, &output_length)); | 287 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 288 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, | 288 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 289 byte_stream_output->GetStatus()); | |
| 290 | 289 |
| 291 // Non-empty stream, non-error case. | 290 // Non-empty stream, error case. |
| 292 CreateByteStream( | 291 CreateByteStream( |
| 293 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 292 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 294 3 * 1024, &byte_stream_input, &byte_stream_output); | 293 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 295 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 294 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 296 byte_stream_output->Read(&output_io_buffer, &output_length)); | 295 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 297 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 296 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 298 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED); | 297 byte_stream_input->Close(kFakeErrorCode); |
| 299 message_loop_.RunUntilIdle(); | 298 message_loop_.RunUntilIdle(); |
| 300 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 299 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 301 byte_stream_output->Read(&output_io_buffer, &output_length)); | 300 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 302 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 301 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 303 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 302 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 304 byte_stream_output->Read(&output_io_buffer, &output_length)); | 303 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 305 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, | 304 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 306 byte_stream_output->GetStatus()); | |
| 307 } | 305 } |
| 308 | 306 |
| 309 // Confirm that callbacks on the sink side are triggered when they should be. | 307 // Confirm that callbacks on the sink side are triggered when they should be. |
| 310 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { | 308 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { |
| 311 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 309 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 312 new base::TestSimpleTaskRunner()); | 310 new base::TestSimpleTaskRunner()); |
| 313 | 311 |
| 314 scoped_ptr<ByteStreamWriter> byte_stream_input; | 312 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 315 scoped_ptr<ByteStreamReader> byte_stream_output; | 313 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 316 CreateByteStream( | 314 CreateByteStream( |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 10000, &byte_stream_input, &byte_stream_output); | 529 10000, &byte_stream_input, &byte_stream_output); |
| 532 | 530 |
| 533 base::Closure intermediate_callback; | 531 base::Closure intermediate_callback; |
| 534 | 532 |
| 535 // Record initial state. | 533 // Record initial state. |
| 536 int num_callbacks = 0; | 534 int num_callbacks = 0; |
| 537 byte_stream_output->RegisterCallback( | 535 byte_stream_output->RegisterCallback( |
| 538 base::Bind(CountCallbacks, &num_callbacks)); | 536 base::Bind(CountCallbacks, &num_callbacks)); |
| 539 | 537 |
| 540 // Immediately close the stream. | 538 // Immediately close the stream. |
| 541 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 539 byte_stream_input->Close(0); |
| 542 task_runner->RunUntilIdle(); | 540 task_runner->RunUntilIdle(); |
| 543 EXPECT_EQ(1, num_callbacks); | 541 EXPECT_EQ(1, num_callbacks); |
| 544 } | 542 } |
| 545 | 543 |
| 546 } // namespace content | 544 } // namespace content |
| OLD | NEW |