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> | |
8 #include <set> | |
9 #include <utility> | |
10 | |
7 #include "base/bind.h" | 11 #include "base/bind.h" |
8 #include "base/location.h" | 12 #include "base/location.h" |
9 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
10 #include "base/memory/weak_ptr.h" | |
11 #include "base/sequenced_task_runner.h" | 14 #include "base/sequenced_task_runner.h" |
12 | 15 |
13 namespace content { | 16 namespace content { |
14 namespace { | 17 namespace { |
15 | 18 |
16 typedef std::deque<std::pair<scoped_refptr<net::IOBuffer>, size_t> > | 19 typedef std::deque<std::pair<scoped_refptr<net::IOBuffer>, size_t> > |
17 ContentVector; | 20 ContentVector; |
18 | 21 |
19 class ByteStreamReaderImpl; | 22 class ByteStreamReaderImpl; |
20 | 23 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 (total_known_size_used + bytes_consumed > total_buffer_size_) && | 259 (total_known_size_used + bytes_consumed > total_buffer_size_) && |
257 !space_available_callback_.is_null()) | 260 !space_available_callback_.is_null()) |
258 space_available_callback_.Run(); | 261 space_available_callback_.Run(); |
259 } | 262 } |
260 | 263 |
261 void ByteStreamWriterImpl::PostToPeer(bool complete, int status) { | 264 void ByteStreamWriterImpl::PostToPeer(bool complete, int status) { |
262 DCHECK(my_task_runner_->RunsTasksOnCurrentThread()); | 265 DCHECK(my_task_runner_->RunsTasksOnCurrentThread()); |
263 // Valid contexts in which to call. | 266 // Valid contexts in which to call. |
264 DCHECK(complete || 0 != input_contents_size_); | 267 DCHECK(complete || 0 != input_contents_size_); |
265 | 268 |
266 scoped_ptr<ContentVector> transfer_buffer(new ContentVector); | 269 scoped_ptr<ContentVector> transfer_buffer; |
Randy Smith (Not in Mondays)
2013/08/02 18:43:05
I believe the answer is yes, but just confirming:
tyoshino (SeeGerritForStatus)
2013/08/05 07:53:11
Added.
| |
267 size_t buffer_size = 0; | 270 size_t buffer_size = 0; |
268 if (0 != input_contents_size_) { | 271 if (0 != input_contents_size_) { |
269 transfer_buffer.reset(new ContentVector); | 272 transfer_buffer.reset(new ContentVector); |
270 transfer_buffer->swap(input_contents_); | 273 transfer_buffer->swap(input_contents_); |
271 buffer_size = input_contents_size_; | 274 buffer_size = input_contents_size_; |
272 output_size_used_ += input_contents_size_; | 275 output_size_used_ += input_contents_size_; |
273 input_contents_size_ = 0; | 276 input_contents_size_ = 0; |
274 } | 277 } |
275 peer_task_runner_->PostTask( | 278 peer_task_runner_->PostTask( |
276 FROM_HERE, base::Bind( | 279 FROM_HERE, base::Bind( |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
363 scoped_ptr<ContentVector> transfer_buffer, | 366 scoped_ptr<ContentVector> transfer_buffer, |
364 size_t buffer_size, | 367 size_t buffer_size, |
365 bool source_complete, | 368 bool source_complete, |
366 int status) { | 369 int status) { |
367 DCHECK(my_task_runner_->RunsTasksOnCurrentThread()); | 370 DCHECK(my_task_runner_->RunsTasksOnCurrentThread()); |
368 | 371 |
369 bool was_empty = available_contents_.empty(); | 372 bool was_empty = available_contents_.empty(); |
370 | 373 |
371 if (transfer_buffer) { | 374 if (transfer_buffer) { |
372 available_contents_.insert(available_contents_.end(), | 375 available_contents_.insert(available_contents_.end(), |
373 transfer_buffer->begin(), | 376 transfer_buffer->begin(), |
374 transfer_buffer->end()); | 377 transfer_buffer->end()); |
375 } | 378 } |
376 | 379 |
377 if (source_complete) { | 380 if (source_complete) { |
378 received_status_ = true; | 381 received_status_ = true; |
379 status_ = status; | 382 status_ = status; |
380 } | 383 } |
381 | 384 |
382 // Callback on transition from empty to non-empty, or | 385 // Callback on transition from empty to non-empty, or |
383 // source complete. | 386 // source complete. |
384 if (((was_empty && !available_contents_.empty()) || | 387 if (((was_empty && !available_contents_.empty()) || |
(...skipping 16 matching lines...) Expand all Loading... | |
401 FROM_HERE, base::Bind( | 404 FROM_HERE, base::Bind( |
402 &ByteStreamWriterImpl::UpdateWindow, | 405 &ByteStreamWriterImpl::UpdateWindow, |
403 peer_lifetime_flag_, | 406 peer_lifetime_flag_, |
404 peer_, | 407 peer_, |
405 unreported_consumed_bytes_)); | 408 unreported_consumed_bytes_)); |
406 unreported_consumed_bytes_ = 0; | 409 unreported_consumed_bytes_ = 0; |
407 } | 410 } |
408 | 411 |
409 } // namespace | 412 } // namespace |
410 | 413 |
411 | |
412 const int ByteStreamWriter::kFractionBufferBeforeSending = 3; | 414 const int ByteStreamWriter::kFractionBufferBeforeSending = 3; |
413 const int ByteStreamReader::kFractionReadBeforeWindowUpdate = 3; | 415 const int ByteStreamReader::kFractionReadBeforeWindowUpdate = 3; |
414 | 416 |
415 ByteStreamReader::~ByteStreamReader() { } | 417 ByteStreamReader::~ByteStreamReader() { } |
416 | 418 |
417 ByteStreamWriter::~ByteStreamWriter() { } | 419 ByteStreamWriter::~ByteStreamWriter() { } |
418 | 420 |
419 void CreateByteStream( | 421 void CreateByteStream( |
420 scoped_refptr<base::SequencedTaskRunner> input_task_runner, | 422 scoped_refptr<base::SequencedTaskRunner> input_task_runner, |
421 scoped_refptr<base::SequencedTaskRunner> output_task_runner, | 423 scoped_refptr<base::SequencedTaskRunner> output_task_runner, |
422 size_t buffer_size, | 424 size_t buffer_size, |
423 scoped_ptr<ByteStreamWriter>* input, | 425 scoped_ptr<ByteStreamWriter>* input, |
424 scoped_ptr<ByteStreamReader>* output) { | 426 scoped_ptr<ByteStreamReader>* output) { |
425 scoped_refptr<LifetimeFlag> input_flag(new LifetimeFlag()); | 427 scoped_refptr<LifetimeFlag> input_flag(new LifetimeFlag()); |
426 scoped_refptr<LifetimeFlag> output_flag(new LifetimeFlag()); | 428 scoped_refptr<LifetimeFlag> output_flag(new LifetimeFlag()); |
427 | 429 |
428 ByteStreamWriterImpl* in = new ByteStreamWriterImpl( | 430 ByteStreamWriterImpl* in = new ByteStreamWriterImpl( |
429 input_task_runner, input_flag, buffer_size); | 431 input_task_runner, input_flag, buffer_size); |
430 ByteStreamReaderImpl* out = new ByteStreamReaderImpl( | 432 ByteStreamReaderImpl* out = new ByteStreamReaderImpl( |
431 output_task_runner, output_flag, buffer_size); | 433 output_task_runner, output_flag, buffer_size); |
432 | 434 |
433 in->SetPeer(out, output_task_runner, output_flag); | 435 in->SetPeer(out, output_task_runner, output_flag); |
434 out->SetPeer(in, input_task_runner, input_flag); | 436 out->SetPeer(in, input_task_runner, input_flag); |
435 input->reset(in); | 437 input->reset(in); |
436 output->reset(out); | 438 output->reset(out); |
437 } | 439 } |
438 | 440 |
439 } // namespace content | 441 } // namespace content |
OLD | NEW |