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 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/message_loop/message_loop.h" |
13 #include "base/test/test_simple_task_runner.h" | 14 #include "base/test/test_simple_task_runner.h" |
14 #include "net/base/io_buffer.h" | 15 #include "net/base/io_buffer.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 namespace content { | 18 namespace content { |
18 namespace { | 19 namespace { |
19 | 20 |
20 void CountCallbacks(int* counter) { | 21 void CountCallbacks(int* counter) { |
21 ++*counter; | 22 ++*counter; |
22 } | 23 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 97 |
97 ByteStreamTest::ByteStreamTest() | 98 ByteStreamTest::ByteStreamTest() |
98 : producing_seed_key_(0), | 99 : producing_seed_key_(0), |
99 consuming_seed_key_(0) { } | 100 consuming_seed_key_(0) { } |
100 | 101 |
101 // Confirm that filling and emptying the stream works properly, and that | 102 // Confirm that filling and emptying the stream works properly, and that |
102 // we get full triggers when we expect. | 103 // we get full triggers when we expect. |
103 TEST_F(ByteStreamTest, ByteStream_PushBack) { | 104 TEST_F(ByteStreamTest, ByteStream_PushBack) { |
104 scoped_ptr<ByteStreamWriter> byte_stream_input; | 105 scoped_ptr<ByteStreamWriter> byte_stream_input; |
105 scoped_ptr<ByteStreamReader> byte_stream_output; | 106 scoped_ptr<ByteStreamReader> byte_stream_output; |
106 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 107 CreateByteStream( |
107 3 * 1024, &byte_stream_input, &byte_stream_output); | 108 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 109 3 * 1024, &byte_stream_input, &byte_stream_output); |
108 | 110 |
109 // Push a series of IO buffers on; test pushback happening and | 111 // Push a series of IO buffers on; test pushback happening and |
110 // that it's advisory. | 112 // that it's advisory. |
111 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
112 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 114 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 115 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
114 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); | 116 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); |
115 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); | 117 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); |
116 // Flush | 118 // Flush |
117 byte_stream_input->Close(0); | 119 byte_stream_input->Close(0); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 message_loop_.RunUntilIdle(); | 152 message_loop_.RunUntilIdle(); |
151 // Reader now knows that all data is read out. | 153 // Reader now knows that all data is read out. |
152 EXPECT_EQ(1024U, byte_stream_input->GetTotalBufferedBytes()); | 154 EXPECT_EQ(1024U, byte_stream_input->GetTotalBufferedBytes()); |
153 } | 155 } |
154 | 156 |
155 // Confirm that Flush() method makes the writer to send written contents to | 157 // Confirm that Flush() method makes the writer to send written contents to |
156 // the reader. | 158 // the reader. |
157 TEST_F(ByteStreamTest, ByteStream_Flush) { | 159 TEST_F(ByteStreamTest, ByteStream_Flush) { |
158 scoped_ptr<ByteStreamWriter> byte_stream_input; | 160 scoped_ptr<ByteStreamWriter> byte_stream_input; |
159 scoped_ptr<ByteStreamReader> byte_stream_output; | 161 scoped_ptr<ByteStreamReader> byte_stream_output; |
160 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 162 CreateByteStream( |
161 1024, &byte_stream_input, &byte_stream_output); | 163 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 164 1024, &byte_stream_input, &byte_stream_output); |
162 | 165 |
163 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); | 166 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); |
164 message_loop_.RunUntilIdle(); | 167 message_loop_.RunUntilIdle(); |
165 | 168 |
166 scoped_refptr<net::IOBuffer> output_io_buffer; | 169 scoped_refptr<net::IOBuffer> output_io_buffer; |
167 size_t output_length = 0; | 170 size_t output_length = 0; |
168 // Check that data is not sent to the reader yet. | 171 // Check that data is not sent to the reader yet. |
169 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 172 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
170 byte_stream_output->Read(&output_io_buffer, &output_length)); | 173 byte_stream_output->Read(&output_io_buffer, &output_length)); |
171 | 174 |
(...skipping 17 matching lines...) Expand all Loading... |
189 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 192 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
190 byte_stream_output->Read(&output_io_buffer, &output_length)); | 193 byte_stream_output->Read(&output_io_buffer, &output_length)); |
191 } | 194 } |
192 | 195 |
193 // Same as above, only use knowledge of the internals to confirm | 196 // Same as above, only use knowledge of the internals to confirm |
194 // that we're getting pushback even when data's split across the two | 197 // that we're getting pushback even when data's split across the two |
195 // objects | 198 // objects |
196 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { | 199 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { |
197 scoped_ptr<ByteStreamWriter> byte_stream_input; | 200 scoped_ptr<ByteStreamWriter> byte_stream_input; |
198 scoped_ptr<ByteStreamReader> byte_stream_output; | 201 scoped_ptr<ByteStreamReader> byte_stream_output; |
199 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 202 CreateByteStream( |
200 9 * 1024, &byte_stream_input, &byte_stream_output); | 203 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 204 9 * 1024, &byte_stream_input, &byte_stream_output); |
201 | 205 |
202 // Push a series of IO buffers on; test pushback happening and | 206 // Push a series of IO buffers on; test pushback happening and |
203 // that it's advisory. | 207 // that it's advisory. |
204 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 208 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
205 message_loop_.RunUntilIdle(); | 209 message_loop_.RunUntilIdle(); |
206 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 210 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
207 message_loop_.RunUntilIdle(); | 211 message_loop_.RunUntilIdle(); |
208 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 212 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
209 message_loop_.RunUntilIdle(); | 213 message_loop_.RunUntilIdle(); |
210 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 214 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 // Confirm that a Close() notification transmits in-order | 247 // Confirm that a Close() notification transmits in-order |
244 // with data on the stream. | 248 // with data on the stream. |
245 TEST_F(ByteStreamTest, ByteStream_CompleteTransmits) { | 249 TEST_F(ByteStreamTest, ByteStream_CompleteTransmits) { |
246 scoped_ptr<ByteStreamWriter> byte_stream_input; | 250 scoped_ptr<ByteStreamWriter> byte_stream_input; |
247 scoped_ptr<ByteStreamReader> byte_stream_output; | 251 scoped_ptr<ByteStreamReader> byte_stream_output; |
248 | 252 |
249 scoped_refptr<net::IOBuffer> output_io_buffer; | 253 scoped_refptr<net::IOBuffer> output_io_buffer; |
250 size_t output_length; | 254 size_t output_length; |
251 | 255 |
252 // Empty stream, non-error case. | 256 // Empty stream, non-error case. |
253 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 257 CreateByteStream( |
254 3 * 1024, &byte_stream_input, &byte_stream_output); | 258 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 259 3 * 1024, &byte_stream_input, &byte_stream_output); |
255 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 260 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
256 byte_stream_output->Read(&output_io_buffer, &output_length)); | 261 byte_stream_output->Read(&output_io_buffer, &output_length)); |
257 byte_stream_input->Close(0); | 262 byte_stream_input->Close(0); |
258 message_loop_.RunUntilIdle(); | 263 message_loop_.RunUntilIdle(); |
259 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 264 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
260 byte_stream_output->Read(&output_io_buffer, &output_length)); | 265 byte_stream_output->Read(&output_io_buffer, &output_length)); |
261 EXPECT_EQ(0, byte_stream_output->GetStatus()); | 266 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
262 | 267 |
263 // Non-empty stream, non-error case. | 268 // Non-empty stream, non-error case. |
264 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 269 CreateByteStream( |
265 3 * 1024, &byte_stream_input, &byte_stream_output); | 270 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 271 3 * 1024, &byte_stream_input, &byte_stream_output); |
266 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 272 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
267 byte_stream_output->Read(&output_io_buffer, &output_length)); | 273 byte_stream_output->Read(&output_io_buffer, &output_length)); |
268 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 274 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
269 byte_stream_input->Close(0); | 275 byte_stream_input->Close(0); |
270 message_loop_.RunUntilIdle(); | 276 message_loop_.RunUntilIdle(); |
271 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 277 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
272 byte_stream_output->Read(&output_io_buffer, &output_length)); | 278 byte_stream_output->Read(&output_io_buffer, &output_length)); |
273 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 279 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
274 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 280 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
275 byte_stream_output->Read(&output_io_buffer, &output_length)); | 281 byte_stream_output->Read(&output_io_buffer, &output_length)); |
276 EXPECT_EQ(0, byte_stream_output->GetStatus()); | 282 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
277 | 283 |
278 const int kFakeErrorCode = 22; | 284 const int kFakeErrorCode = 22; |
279 | 285 |
280 // Empty stream, error case. | 286 // Empty stream, error case. |
281 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 287 CreateByteStream( |
282 3 * 1024, &byte_stream_input, &byte_stream_output); | 288 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 289 3 * 1024, &byte_stream_input, &byte_stream_output); |
283 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 290 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
284 byte_stream_output->Read(&output_io_buffer, &output_length)); | 291 byte_stream_output->Read(&output_io_buffer, &output_length)); |
285 byte_stream_input->Close(kFakeErrorCode); | 292 byte_stream_input->Close(kFakeErrorCode); |
286 message_loop_.RunUntilIdle(); | 293 message_loop_.RunUntilIdle(); |
287 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 294 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
288 byte_stream_output->Read(&output_io_buffer, &output_length)); | 295 byte_stream_output->Read(&output_io_buffer, &output_length)); |
289 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); | 296 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
290 | 297 |
291 // Non-empty stream, error case. | 298 // Non-empty stream, error case. |
292 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 299 CreateByteStream( |
293 3 * 1024, &byte_stream_input, &byte_stream_output); | 300 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 301 3 * 1024, &byte_stream_input, &byte_stream_output); |
294 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 302 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
295 byte_stream_output->Read(&output_io_buffer, &output_length)); | 303 byte_stream_output->Read(&output_io_buffer, &output_length)); |
296 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 304 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
297 byte_stream_input->Close(kFakeErrorCode); | 305 byte_stream_input->Close(kFakeErrorCode); |
298 message_loop_.RunUntilIdle(); | 306 message_loop_.RunUntilIdle(); |
299 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 307 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
300 byte_stream_output->Read(&output_io_buffer, &output_length)); | 308 byte_stream_output->Read(&output_io_buffer, &output_length)); |
301 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 309 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
302 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 310 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
303 byte_stream_output->Read(&output_io_buffer, &output_length)); | 311 byte_stream_output->Read(&output_io_buffer, &output_length)); |
304 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); | 312 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
305 } | 313 } |
306 | 314 |
307 // Confirm that callbacks on the sink side are triggered when they should be. | 315 // Confirm that callbacks on the sink side are triggered when they should be. |
308 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { | 316 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { |
309 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 317 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
310 new base::TestSimpleTaskRunner()); | 318 new base::TestSimpleTaskRunner()); |
311 | 319 |
312 scoped_ptr<ByteStreamWriter> byte_stream_input; | 320 scoped_ptr<ByteStreamWriter> byte_stream_input; |
313 scoped_ptr<ByteStreamReader> byte_stream_output; | 321 scoped_ptr<ByteStreamReader> byte_stream_output; |
314 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, | 322 CreateByteStream( |
315 &byte_stream_input, &byte_stream_output); | 323 message_loop_.message_loop_proxy(), task_runner, |
| 324 10000, &byte_stream_input, &byte_stream_output); |
316 | 325 |
317 scoped_refptr<net::IOBuffer> output_io_buffer; | 326 scoped_refptr<net::IOBuffer> output_io_buffer; |
318 size_t output_length; | 327 size_t output_length; |
319 | 328 |
320 // Note that the specifics of when the callbacks are called with regard | 329 // Note that the specifics of when the callbacks are called with regard |
321 // to how much data is pushed onto the stream is not (currently) part | 330 // to how much data is pushed onto the stream is not (currently) part |
322 // of the interface contract. If it becomes part of the contract, the | 331 // of the interface contract. If it becomes part of the contract, the |
323 // tests below should get much more precise. | 332 // tests below should get much more precise. |
324 | 333 |
325 // Confirm callback called when you add more than 33% of the buffer. | 334 // Confirm callback called when you add more than 33% of the buffer. |
(...skipping 29 matching lines...) Expand all Loading... |
355 } | 364 } |
356 | 365 |
357 // Confirm that callbacks on the source side are triggered when they should | 366 // Confirm that callbacks on the source side are triggered when they should |
358 // be. | 367 // be. |
359 TEST_F(ByteStreamTest, ByteStream_SourceCallback) { | 368 TEST_F(ByteStreamTest, ByteStream_SourceCallback) { |
360 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 369 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
361 new base::TestSimpleTaskRunner()); | 370 new base::TestSimpleTaskRunner()); |
362 | 371 |
363 scoped_ptr<ByteStreamWriter> byte_stream_input; | 372 scoped_ptr<ByteStreamWriter> byte_stream_input; |
364 scoped_ptr<ByteStreamReader> byte_stream_output; | 373 scoped_ptr<ByteStreamReader> byte_stream_output; |
365 CreateByteStream(task_runner, message_loop_.task_runner(), 10000, | 374 CreateByteStream( |
366 &byte_stream_input, &byte_stream_output); | 375 task_runner, message_loop_.message_loop_proxy(), |
| 376 10000, &byte_stream_input, &byte_stream_output); |
367 | 377 |
368 scoped_refptr<net::IOBuffer> output_io_buffer; | 378 scoped_refptr<net::IOBuffer> output_io_buffer; |
369 size_t output_length; | 379 size_t output_length; |
370 | 380 |
371 // Note that the specifics of when the callbacks are called with regard | 381 // Note that the specifics of when the callbacks are called with regard |
372 // to how much data is pulled from the stream is not (currently) part | 382 // to how much data is pulled from the stream is not (currently) part |
373 // of the interface contract. If it becomes part of the contract, the | 383 // of the interface contract. If it becomes part of the contract, the |
374 // tests below should get much more precise. | 384 // tests below should get much more precise. |
375 | 385 |
376 // Confirm callback called when about 33% space available, and not | 386 // Confirm callback called when about 33% space available, and not |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 } | 426 } |
417 | 427 |
418 // Confirm that racing a change to a sink callback with a post results | 428 // Confirm that racing a change to a sink callback with a post results |
419 // in the new callback being called. | 429 // in the new callback being called. |
420 TEST_F(ByteStreamTest, ByteStream_SinkInterrupt) { | 430 TEST_F(ByteStreamTest, ByteStream_SinkInterrupt) { |
421 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 431 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
422 new base::TestSimpleTaskRunner()); | 432 new base::TestSimpleTaskRunner()); |
423 | 433 |
424 scoped_ptr<ByteStreamWriter> byte_stream_input; | 434 scoped_ptr<ByteStreamWriter> byte_stream_input; |
425 scoped_ptr<ByteStreamReader> byte_stream_output; | 435 scoped_ptr<ByteStreamReader> byte_stream_output; |
426 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, | 436 CreateByteStream( |
427 &byte_stream_input, &byte_stream_output); | 437 message_loop_.message_loop_proxy(), task_runner, |
| 438 10000, &byte_stream_input, &byte_stream_output); |
428 | 439 |
429 scoped_refptr<net::IOBuffer> output_io_buffer; | 440 scoped_refptr<net::IOBuffer> output_io_buffer; |
430 size_t output_length; | 441 size_t output_length; |
431 base::Closure intermediate_callback; | 442 base::Closure intermediate_callback; |
432 | 443 |
433 // Record initial state. | 444 // Record initial state. |
434 int num_callbacks = 0; | 445 int num_callbacks = 0; |
435 byte_stream_output->RegisterCallback( | 446 byte_stream_output->RegisterCallback( |
436 base::Bind(CountCallbacks, &num_callbacks)); | 447 base::Bind(CountCallbacks, &num_callbacks)); |
437 | 448 |
(...skipping 24 matching lines...) Expand all Loading... |
462 } | 473 } |
463 | 474 |
464 // Confirm that racing a change to a source callback with a post results | 475 // Confirm that racing a change to a source callback with a post results |
465 // in the new callback being called. | 476 // in the new callback being called. |
466 TEST_F(ByteStreamTest, ByteStream_SourceInterrupt) { | 477 TEST_F(ByteStreamTest, ByteStream_SourceInterrupt) { |
467 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 478 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
468 new base::TestSimpleTaskRunner()); | 479 new base::TestSimpleTaskRunner()); |
469 | 480 |
470 scoped_ptr<ByteStreamWriter> byte_stream_input; | 481 scoped_ptr<ByteStreamWriter> byte_stream_input; |
471 scoped_ptr<ByteStreamReader> byte_stream_output; | 482 scoped_ptr<ByteStreamReader> byte_stream_output; |
472 CreateByteStream(task_runner, message_loop_.task_runner(), 10000, | 483 CreateByteStream( |
473 &byte_stream_input, &byte_stream_output); | 484 task_runner, message_loop_.message_loop_proxy(), |
| 485 10000, &byte_stream_input, &byte_stream_output); |
474 | 486 |
475 scoped_refptr<net::IOBuffer> output_io_buffer; | 487 scoped_refptr<net::IOBuffer> output_io_buffer; |
476 size_t output_length; | 488 size_t output_length; |
477 base::Closure intermediate_callback; | 489 base::Closure intermediate_callback; |
478 | 490 |
479 // Setup state for test. | 491 // Setup state for test. |
480 int num_callbacks = 0; | 492 int num_callbacks = 0; |
481 byte_stream_input->RegisterCallback( | 493 byte_stream_input->RegisterCallback( |
482 base::Bind(CountCallbacks, &num_callbacks)); | 494 base::Bind(CountCallbacks, &num_callbacks)); |
483 EXPECT_TRUE(Write(byte_stream_input.get(), 2000)); | 495 EXPECT_TRUE(Write(byte_stream_input.get(), 2000)); |
(...skipping 29 matching lines...) Expand all Loading... |
513 } | 525 } |
514 | 526 |
515 // Confirm that callback is called on zero data transfer but source | 527 // Confirm that callback is called on zero data transfer but source |
516 // complete. | 528 // complete. |
517 TEST_F(ByteStreamTest, ByteStream_ZeroCallback) { | 529 TEST_F(ByteStreamTest, ByteStream_ZeroCallback) { |
518 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 530 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
519 new base::TestSimpleTaskRunner()); | 531 new base::TestSimpleTaskRunner()); |
520 | 532 |
521 scoped_ptr<ByteStreamWriter> byte_stream_input; | 533 scoped_ptr<ByteStreamWriter> byte_stream_input; |
522 scoped_ptr<ByteStreamReader> byte_stream_output; | 534 scoped_ptr<ByteStreamReader> byte_stream_output; |
523 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, | 535 CreateByteStream( |
524 &byte_stream_input, &byte_stream_output); | 536 message_loop_.message_loop_proxy(), task_runner, |
| 537 10000, &byte_stream_input, &byte_stream_output); |
525 | 538 |
526 base::Closure intermediate_callback; | 539 base::Closure intermediate_callback; |
527 | 540 |
528 // Record initial state. | 541 // Record initial state. |
529 int num_callbacks = 0; | 542 int num_callbacks = 0; |
530 byte_stream_output->RegisterCallback( | 543 byte_stream_output->RegisterCallback( |
531 base::Bind(CountCallbacks, &num_callbacks)); | 544 base::Bind(CountCallbacks, &num_callbacks)); |
532 | 545 |
533 // Immediately close the stream. | 546 // Immediately close the stream. |
534 byte_stream_input->Close(0); | 547 byte_stream_input->Close(0); |
535 task_runner->RunUntilIdle(); | 548 task_runner->RunUntilIdle(); |
536 EXPECT_EQ(1, num_callbacks); | 549 EXPECT_EQ(1, num_callbacks); |
537 } | 550 } |
538 | 551 |
539 TEST_F(ByteStreamTest, ByteStream_CloseWithoutAnyWrite) { | 552 TEST_F(ByteStreamTest, ByteStream_CloseWithoutAnyWrite) { |
540 scoped_ptr<ByteStreamWriter> byte_stream_input; | 553 scoped_ptr<ByteStreamWriter> byte_stream_input; |
541 scoped_ptr<ByteStreamReader> byte_stream_output; | 554 scoped_ptr<ByteStreamReader> byte_stream_output; |
542 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 555 CreateByteStream( |
543 3 * 1024, &byte_stream_input, &byte_stream_output); | 556 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 557 3 * 1024, &byte_stream_input, &byte_stream_output); |
544 | 558 |
545 byte_stream_input->Close(0); | 559 byte_stream_input->Close(0); |
546 message_loop_.RunUntilIdle(); | 560 message_loop_.RunUntilIdle(); |
547 | 561 |
548 scoped_refptr<net::IOBuffer> output_io_buffer; | 562 scoped_refptr<net::IOBuffer> output_io_buffer; |
549 size_t output_length; | 563 size_t output_length; |
550 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 564 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
551 byte_stream_output->Read(&output_io_buffer, &output_length)); | 565 byte_stream_output->Read(&output_io_buffer, &output_length)); |
552 } | 566 } |
553 | 567 |
554 TEST_F(ByteStreamTest, ByteStream_FlushWithoutAnyWrite) { | 568 TEST_F(ByteStreamTest, ByteStream_FlushWithoutAnyWrite) { |
555 scoped_ptr<ByteStreamWriter> byte_stream_input; | 569 scoped_ptr<ByteStreamWriter> byte_stream_input; |
556 scoped_ptr<ByteStreamReader> byte_stream_output; | 570 scoped_ptr<ByteStreamReader> byte_stream_output; |
557 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 571 CreateByteStream( |
558 3 * 1024, &byte_stream_input, &byte_stream_output); | 572 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
| 573 3 * 1024, &byte_stream_input, &byte_stream_output); |
559 | 574 |
560 byte_stream_input->Flush(); | 575 byte_stream_input->Flush(); |
561 message_loop_.RunUntilIdle(); | 576 message_loop_.RunUntilIdle(); |
562 | 577 |
563 scoped_refptr<net::IOBuffer> output_io_buffer; | 578 scoped_refptr<net::IOBuffer> output_io_buffer; |
564 size_t output_length; | 579 size_t output_length; |
565 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 580 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
566 byte_stream_output->Read(&output_io_buffer, &output_length)); | 581 byte_stream_output->Read(&output_io_buffer, &output_length)); |
567 | 582 |
568 byte_stream_input->Close(0); | 583 byte_stream_input->Close(0); |
569 message_loop_.RunUntilIdle(); | 584 message_loop_.RunUntilIdle(); |
570 | 585 |
571 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 586 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
572 byte_stream_output->Read(&output_io_buffer, &output_length)); | 587 byte_stream_output->Read(&output_io_buffer, &output_length)); |
573 } | 588 } |
574 | 589 |
575 TEST_F(ByteStreamTest, ByteStream_WriteOverflow) { | 590 TEST_F(ByteStreamTest, ByteStream_WriteOverflow) { |
576 scoped_ptr<ByteStreamWriter> byte_stream_input; | 591 scoped_ptr<ByteStreamWriter> byte_stream_input; |
577 scoped_ptr<ByteStreamReader> byte_stream_output; | 592 scoped_ptr<ByteStreamReader> byte_stream_output; |
578 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), | 593 CreateByteStream( |
579 std::numeric_limits<size_t>::max(), &byte_stream_input, | 594 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), |
580 &byte_stream_output); | 595 std::numeric_limits<size_t>::max(), |
| 596 &byte_stream_input, &byte_stream_output); |
581 | 597 |
582 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); | 598 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); |
583 // 1 + size_t max -> Overflow. | 599 // 1 + size_t max -> Overflow. |
584 scoped_refptr<net::IOBuffer> empty_io_buffer; | 600 scoped_refptr<net::IOBuffer> empty_io_buffer; |
585 EXPECT_FALSE(byte_stream_input->Write(empty_io_buffer, | 601 EXPECT_FALSE(byte_stream_input->Write(empty_io_buffer, |
586 std::numeric_limits<size_t>::max())); | 602 std::numeric_limits<size_t>::max())); |
587 message_loop_.RunUntilIdle(); | 603 message_loop_.RunUntilIdle(); |
588 | 604 |
589 // The first write is below PostToPeer threshold. We shouldn't get anything | 605 // The first write is below PostToPeer threshold. We shouldn't get anything |
590 // from the output. | 606 // from the output. |
591 scoped_refptr<net::IOBuffer> output_io_buffer; | 607 scoped_refptr<net::IOBuffer> output_io_buffer; |
592 size_t output_length; | 608 size_t output_length; |
593 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 609 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
594 byte_stream_output->Read(&output_io_buffer, &output_length)); | 610 byte_stream_output->Read(&output_io_buffer, &output_length)); |
595 } | 611 } |
596 | 612 |
597 } // namespace content | 613 } // namespace content |
OLD | NEW |