| 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/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "content/public/common/resource_response.h" | 9 #include "content/public/common/resource_response.h" |
| 10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
| 11 #include "net/url_request/url_request.h" |
| 11 | 12 |
| 12 namespace content { | 13 namespace content { |
| 13 | 14 |
| 14 InterceptingResourceHandler::InterceptingResourceHandler( | 15 InterceptingResourceHandler::InterceptingResourceHandler( |
| 15 std::unique_ptr<ResourceHandler> next_handler, | 16 std::unique_ptr<ResourceHandler> next_handler, |
| 16 net::URLRequest* request) | 17 net::URLRequest* request) |
| 17 : LayeredResourceHandler(request, std::move(next_handler)) { | 18 : LayeredResourceHandler(request, std::move(next_handler)) { |
| 18 next_handler_->SetController(this); | 19 next_handler_->SetController(this); |
| 19 } | 20 } |
| 20 | 21 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 | 169 |
| 169 bool InterceptingResourceHandler::DoLoop(bool* defer) { | 170 bool InterceptingResourceHandler::DoLoop(bool* defer) { |
| 170 bool result = true; | 171 bool result = true; |
| 171 do { | 172 do { |
| 172 switch (state_) { | 173 switch (state_) { |
| 173 case State::STARTING: | 174 case State::STARTING: |
| 174 case State::WAITING_FOR_ON_READ_COMPLETED: | 175 case State::WAITING_FOR_ON_READ_COMPLETED: |
| 175 case State::PASS_THROUGH: | 176 case State::PASS_THROUGH: |
| 176 NOTREACHED(); | 177 NOTREACHED(); |
| 177 break; | 178 break; |
| 178 case State::NOTIFYING_ON_RESPONSE_STARTED_TO_NEW_HANDLER: | 179 case State::SENDING_ON_WILL_START_TO_NEW_HANDLER: |
| 180 result = SendOnResponseStartedToNewHandler(defer); |
| 181 break; |
| 182 case State::SENDING_ON_RESPONSE_STARTED_TO_NEW_HANDLER: |
| 179 if (first_read_buffer_double_) { | 183 if (first_read_buffer_double_) { |
| 180 // OnWillRead has been called, so copying the data from | 184 // OnWillRead has been called, so copying the data from |
| 181 // |first_read_buffer_double_| to |first_read_buffer_| will be needed | 185 // |first_read_buffer_double_| to |first_read_buffer_| will be needed |
| 182 // when OnReadCompleted is called. | 186 // when OnReadCompleted is called. |
| 183 state_ = State::WAITING_FOR_ON_READ_COMPLETED; | 187 state_ = State::WAITING_FOR_ON_READ_COMPLETED; |
| 184 } else { | 188 } else { |
| 185 // OnWillRead has not been called, so no special handling will be | 189 // OnWillRead has not been called, so no special handling will be |
| 186 // needed from now on. | 190 // needed from now on. |
| 187 state_ = State::PASS_THROUGH; | 191 state_ = State::PASS_THROUGH; |
| 188 next_handler_->SetController(controller()); | 192 next_handler_->SetController(controller()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 | 236 |
| 233 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | 237 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); |
| 234 if (payload_for_old_handler_.empty()) { | 238 if (payload_for_old_handler_.empty()) { |
| 235 // If there is no payload, just finalize the request on the old handler. | 239 // If there is no payload, just finalize the request on the old handler. |
| 236 status = net::URLRequestStatus::FromError(net::ERR_ABORTED); | 240 status = net::URLRequestStatus::FromError(net::ERR_ABORTED); |
| 237 } | 241 } |
| 238 next_handler_->OnResponseCompleted(status, defer); | 242 next_handler_->OnResponseCompleted(status, defer); |
| 239 DCHECK(!*defer); | 243 DCHECK(!*defer); |
| 240 | 244 |
| 241 next_handler_ = std::move(new_handler_); | 245 next_handler_ = std::move(new_handler_); |
| 242 state_ = State::NOTIFYING_ON_RESPONSE_STARTED_TO_NEW_HANDLER; | 246 state_ = State::SENDING_ON_WILL_START_TO_NEW_HANDLER; |
| 247 return next_handler_->OnWillStart(request()->url(), defer); |
| 248 } |
| 249 |
| 250 bool InterceptingResourceHandler::SendOnResponseStartedToNewHandler( |
| 251 bool* defer) { |
| 252 state_ = State::SENDING_ON_RESPONSE_STARTED_TO_NEW_HANDLER; |
| 243 return next_handler_->OnResponseStarted(response_.get(), defer); | 253 return next_handler_->OnResponseStarted(response_.get(), defer); |
| 244 } | 254 } |
| 245 | 255 |
| 246 bool InterceptingResourceHandler::SendFirstReadBufferToNewHandler(bool* defer) { | 256 bool InterceptingResourceHandler::SendFirstReadBufferToNewHandler(bool* defer) { |
| 247 DCHECK_EQ(state_, State::SENDING_BUFFER_TO_NEW_HANDLER); | 257 DCHECK_EQ(state_, State::SENDING_BUFFER_TO_NEW_HANDLER); |
| 248 | 258 |
| 249 while (first_read_buffer_bytes_written_ < first_read_buffer_bytes_read_) { | 259 while (first_read_buffer_bytes_written_ < first_read_buffer_bytes_read_) { |
| 250 scoped_refptr<net::IOBuffer> buf; | 260 scoped_refptr<net::IOBuffer> buf; |
| 251 int size = 0; | 261 int size = 0; |
| 252 if (!next_handler_->OnWillRead(&buf, &size, -1)) | 262 if (!next_handler_->OnWillRead(&buf, &size, -1)) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 263 return true; | 273 return true; |
| 264 } | 274 } |
| 265 | 275 |
| 266 state_ = State::PASS_THROUGH; | 276 state_ = State::PASS_THROUGH; |
| 267 first_read_buffer_double_ = nullptr; | 277 first_read_buffer_double_ = nullptr; |
| 268 next_handler_->SetController(controller()); | 278 next_handler_->SetController(controller()); |
| 269 return true; | 279 return true; |
| 270 } | 280 } |
| 271 | 281 |
| 272 } // namespace content | 282 } // namespace content |
| OLD | NEW |