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 |