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/renderer_host/buffered_resource_handler.h" | 5 #include "content/browser/renderer_host/buffered_resource_handler.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
13 #include "content/browser/download/download_resource_handler.h" | 13 #include "content/browser/download/download_resource_handler.h" |
14 #include "content/browser/download/download_stats.h" | 14 #include "content/browser/download/download_stats.h" |
15 #include "content/browser/plugin_service_impl.h" | 15 #include "content/browser/plugin_service_impl.h" |
16 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" | 16 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" |
17 #include "content/browser/renderer_host/resource_request_info_impl.h" | 17 #include "content/browser/renderer_host/resource_request_info_impl.h" |
| 18 #include "content/browser/renderer_host/resource_request_info_impl.h" |
18 #include "content/browser/renderer_host/x509_user_cert_resource_handler.h" | 19 #include "content/browser/renderer_host/x509_user_cert_resource_handler.h" |
19 #include "content/public/browser/browser_thread.h" | 20 #include "content/public/browser/browser_thread.h" |
20 #include "content/public/browser/content_browser_client.h" | 21 #include "content/public/browser/content_browser_client.h" |
21 #include "content/public/browser/download_save_info.h" | 22 #include "content/public/browser/download_save_info.h" |
22 #include "content/public/browser/resource_context.h" | 23 #include "content/public/browser/resource_context.h" |
23 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 24 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
24 #include "content/public/common/resource_response.h" | 25 #include "content/public/common/resource_response.h" |
25 #include "net/base/io_buffer.h" | 26 #include "net/base/io_buffer.h" |
26 #include "net/base/mime_sniffer.h" | 27 #include "net/base/mime_sniffer.h" |
27 #include "net/base/mime_util.h" | 28 #include "net/base/mime_util.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 case STATE_STREAMING: | 205 case STATE_STREAMING: |
205 controller()->Resume(); | 206 controller()->Resume(); |
206 break; | 207 break; |
207 } | 208 } |
208 } | 209 } |
209 | 210 |
210 void BufferedResourceHandler::Cancel() { | 211 void BufferedResourceHandler::Cancel() { |
211 controller()->Cancel(); | 212 controller()->Cancel(); |
212 } | 213 } |
213 | 214 |
| 215 void BufferedResourceHandler::CancelAndIgnore() { |
| 216 controller()->CancelAndIgnore(); |
| 217 } |
| 218 |
214 bool BufferedResourceHandler::ProcessResponse(bool* defer) { | 219 bool BufferedResourceHandler::ProcessResponse(bool* defer) { |
215 DCHECK_EQ(STATE_PROCESSING, state_); | 220 DCHECK_EQ(STATE_PROCESSING, state_); |
216 | 221 |
217 // TODO(darin): Stop special-casing 304 responses. | 222 // TODO(darin): Stop special-casing 304 responses. |
218 if (!(response_->head.headers && | 223 if (!(response_->head.headers && |
219 response_->head.headers->response_code() == 304)) { | 224 response_->head.headers->response_code() == 304)) { |
220 if (!SelectNextHandler(defer)) | 225 if (!SelectNextHandler(defer)) |
221 return false; | 226 return false; |
222 if (*defer) | 227 if (*defer) |
223 return true; | 228 return true; |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 } | 349 } |
345 | 350 |
346 int request_id = ResourceRequestInfo::ForRequest(request_)->GetRequestID(); | 351 int request_id = ResourceRequestInfo::ForRequest(request_)->GetRequestID(); |
347 | 352 |
348 // Inform the original ResourceHandler that this will be handled entirely by | 353 // Inform the original ResourceHandler that this will be handled entirely by |
349 // the new ResourceHandler. | 354 // the new ResourceHandler. |
350 // TODO(darin): We should probably check the return values of these. | 355 // TODO(darin): We should probably check the return values of these. |
351 bool defer_ignored = false; | 356 bool defer_ignored = false; |
352 next_handler_->OnResponseStarted(request_id, response_, &defer_ignored); | 357 next_handler_->OnResponseStarted(request_id, response_, &defer_ignored); |
353 DCHECK(!defer_ignored); | 358 DCHECK(!defer_ignored); |
354 net::URLRequestStatus status(net::URLRequestStatus::HANDLED_EXTERNALLY, 0); | 359 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 360 net::ERR_ABORTED); |
| 361 ResourceRequestInfoImpl* info = |
| 362 ResourceRequestInfoImpl::ForRequest(request_); |
| 363 info->set_was_ignored_by_handler(true); |
355 next_handler_->OnResponseCompleted(request_id, status, std::string()); | 364 next_handler_->OnResponseCompleted(request_id, status, std::string()); |
356 | 365 |
357 // This is handled entirely within the new ResourceHandler, so just reset the | 366 // This is handled entirely within the new ResourceHandler, so just reset the |
358 // original ResourceHandler. | 367 // original ResourceHandler. |
359 next_handler_ = new_handler.Pass(); | 368 next_handler_ = new_handler.Pass(); |
360 next_handler_->SetController(this); | 369 next_handler_->SetController(this); |
361 | 370 |
362 return CopyReadBufferToNextHandler(request_id); | 371 return CopyReadBufferToNextHandler(request_id); |
363 } | 372 } |
364 | 373 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 const std::vector<webkit::WebPluginInfo>& plugins) { | 447 const std::vector<webkit::WebPluginInfo>& plugins) { |
439 bool defer = false; | 448 bool defer = false; |
440 if (!ProcessResponse(&defer)) { | 449 if (!ProcessResponse(&defer)) { |
441 controller()->Cancel(); | 450 controller()->Cancel(); |
442 } else if (!defer) { | 451 } else if (!defer) { |
443 controller()->Resume(); | 452 controller()->Resume(); |
444 } | 453 } |
445 } | 454 } |
446 | 455 |
447 } // namespace content | 456 } // namespace content |
OLD | NEW |