| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/loader/intercepting_resource_handler.h" | 5 #include "content/browser/loader/intercepting_resource_handler.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 | 86 |
| 87 // Otherwise, switch handlers. First, inform the original ResourceHandler | 87 // Otherwise, switch handlers. First, inform the original ResourceHandler |
| 88 // that this will be handled entirely by the new ResourceHandler. | 88 // that this will be handled entirely by the new ResourceHandler. |
| 89 HoldController(std::move(controller)); | 89 HoldController(std::move(controller)); |
| 90 state_ = State::SWAPPING_HANDLERS; | 90 state_ = State::SWAPPING_HANDLERS; |
| 91 | 91 |
| 92 DoLoop(); | 92 DoLoop(); |
| 93 } | 93 } |
| 94 | 94 |
| 95 bool InterceptingResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, | 95 bool InterceptingResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
| 96 int* buf_size, | 96 int* buf_size) { |
| 97 int min_size) { | |
| 98 if (state_ == State::PASS_THROUGH) | 97 if (state_ == State::PASS_THROUGH) |
| 99 return next_handler_->OnWillRead(buf, buf_size, min_size); | 98 return next_handler_->OnWillRead(buf, buf_size); |
| 100 | 99 |
| 101 DCHECK_EQ(State::STARTING, state_); | 100 DCHECK_EQ(State::STARTING, state_); |
| 102 DCHECK_EQ(-1, min_size); | |
| 103 | 101 |
| 104 if (!next_handler_->OnWillRead(buf, buf_size, min_size)) | 102 if (!next_handler_->OnWillRead(buf, buf_size)) |
| 105 return false; | 103 return false; |
| 106 | 104 |
| 107 first_read_buffer_ = *buf; | 105 first_read_buffer_ = *buf; |
| 108 first_read_buffer_size_ = *buf_size; | 106 first_read_buffer_size_ = *buf_size; |
| 109 first_read_buffer_double_ = new net::IOBuffer(static_cast<size_t>(*buf_size)); | 107 first_read_buffer_double_ = new net::IOBuffer(static_cast<size_t>(*buf_size)); |
| 110 *buf = first_read_buffer_double_; | 108 *buf = first_read_buffer_double_; |
| 111 return true; | 109 return true; |
| 112 } | 110 } |
| 113 | 111 |
| 114 void InterceptingResourceHandler::OnReadCompleted( | 112 void InterceptingResourceHandler::OnReadCompleted( |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 int size = 0; | 277 int size = 0; |
| 280 if (first_read_buffer_) { | 278 if (first_read_buffer_) { |
| 281 // |first_read_buffer_| is a buffer gotten from |next_handler_| via | 279 // |first_read_buffer_| is a buffer gotten from |next_handler_| via |
| 282 // OnWillRead. Use the buffer. | 280 // OnWillRead. Use the buffer. |
| 283 buffer = first_read_buffer_; | 281 buffer = first_read_buffer_; |
| 284 size = first_read_buffer_size_; | 282 size = first_read_buffer_size_; |
| 285 | 283 |
| 286 first_read_buffer_ = nullptr; | 284 first_read_buffer_ = nullptr; |
| 287 first_read_buffer_size_ = 0; | 285 first_read_buffer_size_ = 0; |
| 288 } else { | 286 } else { |
| 289 if (!next_handler_->OnWillRead(&buffer, &size, -1)) { | 287 if (!next_handler_->OnWillRead(&buffer, &size)) { |
| 290 Cancel(); | 288 Cancel(); |
| 291 return; | 289 return; |
| 292 } | 290 } |
| 293 } | 291 } |
| 294 | 292 |
| 295 size = std::min(size, static_cast<int>(payload_for_old_handler_.size() - | 293 size = std::min(size, static_cast<int>(payload_for_old_handler_.size() - |
| 296 payload_bytes_written_)); | 294 payload_bytes_written_)); |
| 297 memcpy(buffer->data(), | 295 memcpy(buffer->data(), |
| 298 payload_for_old_handler_.data() + payload_bytes_written_, size); | 296 payload_for_old_handler_.data() + payload_bytes_written_, size); |
| 299 payload_bytes_written_ += size; | 297 payload_bytes_written_ += size; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 311 | 309 |
| 312 if (first_read_buffer_bytes_written_ == first_read_buffer_bytes_read_) { | 310 if (first_read_buffer_bytes_written_ == first_read_buffer_bytes_read_) { |
| 313 state_ = State::PASS_THROUGH; | 311 state_ = State::PASS_THROUGH; |
| 314 first_read_buffer_double_ = nullptr; | 312 first_read_buffer_double_ = nullptr; |
| 315 ResumeInternal(); | 313 ResumeInternal(); |
| 316 return; | 314 return; |
| 317 } | 315 } |
| 318 | 316 |
| 319 scoped_refptr<net::IOBuffer> buf; | 317 scoped_refptr<net::IOBuffer> buf; |
| 320 int size = 0; | 318 int size = 0; |
| 321 if (!next_handler_->OnWillRead(&buf, &size, -1)) { | 319 if (!next_handler_->OnWillRead(&buf, &size)) { |
| 322 Cancel(); | 320 Cancel(); |
| 323 return; | 321 return; |
| 324 } | 322 } |
| 325 size = std::min(size, static_cast<int>(first_read_buffer_bytes_read_ - | 323 size = std::min(size, static_cast<int>(first_read_buffer_bytes_read_ - |
| 326 first_read_buffer_bytes_written_)); | 324 first_read_buffer_bytes_written_)); |
| 327 memcpy(buf->data(), | 325 memcpy(buf->data(), |
| 328 first_read_buffer_double_->data() + first_read_buffer_bytes_written_, | 326 first_read_buffer_double_->data() + first_read_buffer_bytes_written_, |
| 329 size); | 327 size); |
| 330 first_read_buffer_bytes_written_ += size; | 328 first_read_buffer_bytes_written_ += size; |
| 331 next_handler_->OnReadCompleted(size, base::MakeUnique<Controller>(this)); | 329 next_handler_->OnReadCompleted(size, base::MakeUnique<Controller>(this)); |
| 332 } | 330 } |
| 333 | 331 |
| 334 } // namespace content | 332 } // namespace content |
| OLD | NEW |