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 |