| 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 | 205 |
| 206 scoped_refptr<net::IOBuffer> output_io_buffer; | 206 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 207 size_t output_length; | 207 size_t output_length; |
| 208 | 208 |
| 209 // Empty stream, non-error case. | 209 // Empty stream, non-error case. |
| 210 CreateByteStream( | 210 CreateByteStream( |
| 211 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 211 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 212 3 * 1024, &byte_stream_input, &byte_stream_output); | 212 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 213 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 213 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 214 byte_stream_output->Read(&output_io_buffer, &output_length)); | 214 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 215 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 215 byte_stream_input->Close(0); |
| 216 message_loop_.RunUntilIdle(); | 216 message_loop_.RunUntilIdle(); |
| 217 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 217 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 218 byte_stream_output->Read(&output_io_buffer, &output_length)); | 218 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 219 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, | 219 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 220 byte_stream_output->GetStatus()); | |
| 221 | 220 |
| 222 // Non-empty stream, non-error case. | 221 // Non-empty stream, non-error case. |
| 223 CreateByteStream( | 222 CreateByteStream( |
| 224 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 223 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 225 3 * 1024, &byte_stream_input, &byte_stream_output); | 224 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 226 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 225 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 227 byte_stream_output->Read(&output_io_buffer, &output_length)); | 226 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 228 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 227 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 229 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 228 byte_stream_input->Close(0); |
| 230 message_loop_.RunUntilIdle(); | 229 message_loop_.RunUntilIdle(); |
| 231 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 230 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 232 byte_stream_output->Read(&output_io_buffer, &output_length)); | 231 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 233 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 232 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 234 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 233 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 235 byte_stream_output->Read(&output_io_buffer, &output_length)); | 234 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 236 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, | 235 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 237 byte_stream_output->GetStatus()); | |
| 238 | 236 |
| 239 // Empty stream, non-error case. | 237 const int kFakeErrorCode = 22; |
| 238 |
| 239 // Empty stream, error case. |
| 240 CreateByteStream( | 240 CreateByteStream( |
| 241 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 241 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 242 3 * 1024, &byte_stream_input, &byte_stream_output); | 242 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 243 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 243 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 244 byte_stream_output->Read(&output_io_buffer, &output_length)); | 244 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 245 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED); | 245 byte_stream_input->Close(kFakeErrorCode); |
| 246 message_loop_.RunUntilIdle(); | 246 message_loop_.RunUntilIdle(); |
| 247 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 247 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 248 byte_stream_output->Read(&output_io_buffer, &output_length)); | 248 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 249 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, | 249 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 250 byte_stream_output->GetStatus()); | |
| 251 | 250 |
| 252 // Non-empty stream, non-error case. | 251 // Non-empty stream, error case. |
| 253 CreateByteStream( | 252 CreateByteStream( |
| 254 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 253 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 255 3 * 1024, &byte_stream_input, &byte_stream_output); | 254 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 256 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 255 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 257 byte_stream_output->Read(&output_io_buffer, &output_length)); | 256 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 258 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 257 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 259 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED); | 258 byte_stream_input->Close(kFakeErrorCode); |
| 260 message_loop_.RunUntilIdle(); | 259 message_loop_.RunUntilIdle(); |
| 261 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 260 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 262 byte_stream_output->Read(&output_io_buffer, &output_length)); | 261 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 263 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 262 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 264 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 263 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 265 byte_stream_output->Read(&output_io_buffer, &output_length)); | 264 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 266 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, | 265 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 267 byte_stream_output->GetStatus()); | |
| 268 } | 266 } |
| 269 | 267 |
| 270 // Confirm that callbacks on the sink side are triggered when they should be. | 268 // Confirm that callbacks on the sink side are triggered when they should be. |
| 271 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { | 269 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { |
| 272 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 270 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 273 new base::TestSimpleTaskRunner()); | 271 new base::TestSimpleTaskRunner()); |
| 274 | 272 |
| 275 scoped_ptr<ByteStreamWriter> byte_stream_input; | 273 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 276 scoped_ptr<ByteStreamReader> byte_stream_output; | 274 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 277 CreateByteStream( | 275 CreateByteStream( |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 10000, &byte_stream_input, &byte_stream_output); | 490 10000, &byte_stream_input, &byte_stream_output); |
| 493 | 491 |
| 494 base::Closure intermediate_callback; | 492 base::Closure intermediate_callback; |
| 495 | 493 |
| 496 // Record initial state. | 494 // Record initial state. |
| 497 int num_callbacks = 0; | 495 int num_callbacks = 0; |
| 498 byte_stream_output->RegisterCallback( | 496 byte_stream_output->RegisterCallback( |
| 499 base::Bind(CountCallbacks, &num_callbacks)); | 497 base::Bind(CountCallbacks, &num_callbacks)); |
| 500 | 498 |
| 501 // Immediately close the stream. | 499 // Immediately close the stream. |
| 502 byte_stream_input->Close(DOWNLOAD_INTERRUPT_REASON_NONE); | 500 byte_stream_input->Close(0); |
| 503 task_runner->RunUntilIdle(); | 501 task_runner->RunUntilIdle(); |
| 504 EXPECT_EQ(1, num_callbacks); | 502 EXPECT_EQ(1, num_callbacks); |
| 505 } | 503 } |
| 506 | 504 |
| 507 } // namespace content | 505 } // namespace content |
| OLD | NEW |