OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "content/browser/loader/null_resource_handler.h" |
| 6 |
| 7 #include "base/bind.h" |
| 8 #include "base/logging.h" |
| 9 #include "content/browser/loader/resource_message_filter.h" |
| 10 #include "content/browser/loader/resource_request_info_impl.h" |
| 11 #include "content/public/browser/resource_controller.h" |
| 12 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 13 #include "net/base/io_buffer.h" |
| 14 #include "net/base/net_errors.h" |
| 15 #include "net/url_request/redirect_info.h" |
| 16 |
| 17 namespace { |
| 18 // This matches the maximum allocation size of AsyncResourceHandler. |
| 19 const int kReadBufSize = 32 * 1024; |
| 20 } |
| 21 |
| 22 namespace content { |
| 23 |
| 24 const int kNullResourceHandlerDefaultReadTimeoutSecs = 5 * 60; |
| 25 |
| 26 // The use of base::Unretained in the initialisation of read_timer_ is safe |
| 27 // because base::Timer guarantees it will never call the callback after being |
| 28 // destroyed. |
| 29 NullResourceHandler::NullResourceHandler(net::URLRequest* request, |
| 30 ResourceDispatcherHostImpl* rdh, |
| 31 base::TimeDelta read_timeout) |
| 32 : ResourceHandler(request), |
| 33 rdh_(rdh), |
| 34 read_timer_(FROM_HERE, |
| 35 read_timeout, |
| 36 base::Bind(&NullResourceHandler::OnReadTimeout, |
| 37 base::Unretained(this)), |
| 38 false) { |
| 39 } |
| 40 |
| 41 NullResourceHandler::~NullResourceHandler() { |
| 42 } |
| 43 |
| 44 void NullResourceHandler::SetController(ResourceController* controller) { |
| 45 ResourceHandler::SetController(controller); |
| 46 } |
| 47 |
| 48 bool NullResourceHandler::OnUploadProgress(uint64 position, uint64 size) { |
| 49 return true; |
| 50 } |
| 51 |
| 52 bool NullResourceHandler::OnRequestRedirected( |
| 53 const net::RedirectInfo& redirect_info, |
| 54 ResourceResponse* response, |
| 55 bool* defer) { |
| 56 const ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 57 if (info->filter() && rdh_->delegate()) { |
| 58 rdh_->delegate()->OnRequestRedirected(redirect_info.new_url, request(), |
| 59 info->GetContext(), response); |
| 60 } |
| 61 // We only need to update the redirect in the cache, not its destination. |
| 62 return false; |
| 63 } |
| 64 |
| 65 bool NullResourceHandler::OnResponseStarted(ResourceResponse* response, |
| 66 bool* defer) { |
| 67 const ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 68 if (!info->filter()) |
| 69 return false; |
| 70 if (rdh_->delegate()) { |
| 71 rdh_->delegate()->OnResponseStarted(request(), info->GetContext(), response, |
| 72 info->filter()); |
| 73 } |
| 74 return true; |
| 75 } |
| 76 |
| 77 bool NullResourceHandler::OnWillStart(const GURL& url, bool* defer) { |
| 78 return true; |
| 79 } |
| 80 |
| 81 bool NullResourceHandler::OnBeforeNetworkStart(const GURL& url, bool* defer) { |
| 82 DCHECK(!read_timer_.IsRunning()); |
| 83 read_timer_.Reset(); |
| 84 DCHECK(read_timer_.IsRunning()); |
| 85 return true; |
| 86 } |
| 87 |
| 88 bool NullResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
| 89 int* buf_size, |
| 90 int min_size) { |
| 91 DCHECK_LE(min_size, kReadBufSize); |
| 92 if (!read_buffer_.get()) |
| 93 read_buffer_ = new net::IOBuffer(kReadBufSize); |
| 94 *buf = read_buffer_; |
| 95 *buf_size = kReadBufSize; |
| 96 read_timer_.Reset(); |
| 97 return true; |
| 98 } |
| 99 |
| 100 bool NullResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { |
| 101 return true; |
| 102 } |
| 103 |
| 104 void NullResourceHandler::OnResponseCompleted( |
| 105 const net::URLRequestStatus& status, |
| 106 const std::string& security_info, |
| 107 bool* defer) { |
| 108 return; |
| 109 } |
| 110 |
| 111 void NullResourceHandler::OnDataDownloaded(int bytes_downloaded) { |
| 112 return; |
| 113 } |
| 114 |
| 115 void NullResourceHandler::OnReadTimeout() { |
| 116 controller()->Cancel(); |
| 117 } |
| 118 |
| 119 } // namespace content |
OLD | NEW |