OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/detachable_resource_handler.h" | 5 #include "content/browser/loader/detachable_resource_handler.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 void DetachableResourceHandler::Detach() { | 41 void DetachableResourceHandler::Detach() { |
42 if (is_detached()) | 42 if (is_detached()) |
43 return; | 43 return; |
44 | 44 |
45 if (!is_finished_) { | 45 if (!is_finished_) { |
46 // Simulate a cancel on the next handler before destroying it. | 46 // Simulate a cancel on the next handler before destroying it. |
47 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 47 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
48 net::ERR_ABORTED); | 48 net::ERR_ABORTED); |
49 bool defer_ignored = false; | 49 bool defer_ignored = false; |
50 next_handler_->OnResponseCompleted(status, std::string(), &defer_ignored); | 50 next_handler_->OnResponseCompleted(status, &defer_ignored); |
51 DCHECK(!defer_ignored); | 51 DCHECK(!defer_ignored); |
52 // If |next_handler_| were to defer its shutdown in OnResponseCompleted, | 52 // If |next_handler_| were to defer its shutdown in OnResponseCompleted, |
53 // this would destroy it anyway. Fortunately, AsyncResourceHandler never | 53 // this would destroy it anyway. Fortunately, AsyncResourceHandler never |
54 // does this anyway, so DCHECK it. MimeTypeResourceHandler and RVH shutdown | 54 // does this anyway, so DCHECK it. MimeTypeResourceHandler and RVH shutdown |
55 // already ignore deferred ResourceHandler shutdown, but | 55 // already ignore deferred ResourceHandler shutdown, but |
56 // DetachableResourceHandler and the detach-on-renderer-cancel logic | 56 // DetachableResourceHandler and the detach-on-renderer-cancel logic |
57 // introduces a case where this occurs when the renderer cancels a resource. | 57 // introduces a case where this occurs when the renderer cancels a resource. |
58 } | 58 } |
59 // A OnWillRead / OnReadCompleted pair may still be in progress, but | 59 // A OnWillRead / OnReadCompleted pair may still be in progress, but |
60 // OnWillRead passes back a scoped_refptr, so downstream handler's buffer will | 60 // OnWillRead passes back a scoped_refptr, so downstream handler's buffer will |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 return true; | 150 return true; |
151 | 151 |
152 bool ret = | 152 bool ret = |
153 next_handler_->OnReadCompleted(bytes_read, &is_deferred_); | 153 next_handler_->OnReadCompleted(bytes_read, &is_deferred_); |
154 *defer = is_deferred_; | 154 *defer = is_deferred_; |
155 return ret; | 155 return ret; |
156 } | 156 } |
157 | 157 |
158 void DetachableResourceHandler::OnResponseCompleted( | 158 void DetachableResourceHandler::OnResponseCompleted( |
159 const net::URLRequestStatus& status, | 159 const net::URLRequestStatus& status, |
160 const std::string& security_info, | |
161 bool* defer) { | 160 bool* defer) { |
162 // No DCHECK(!is_deferred_) as the request may have been cancelled while | 161 // No DCHECK(!is_deferred_) as the request may have been cancelled while |
163 // deferred. | 162 // deferred. |
164 | 163 |
165 if (!next_handler_) | 164 if (!next_handler_) |
166 return; | 165 return; |
167 | 166 |
168 is_finished_ = true; | 167 is_finished_ = true; |
169 | 168 |
170 next_handler_->OnResponseCompleted(status, security_info, &is_deferred_); | 169 next_handler_->OnResponseCompleted(status, &is_deferred_); |
171 *defer = is_deferred_; | 170 *defer = is_deferred_; |
172 } | 171 } |
173 | 172 |
174 void DetachableResourceHandler::OnDataDownloaded(int bytes_downloaded) { | 173 void DetachableResourceHandler::OnDataDownloaded(int bytes_downloaded) { |
175 if (!next_handler_) | 174 if (!next_handler_) |
176 return; | 175 return; |
177 | 176 |
178 next_handler_->OnDataDownloaded(bytes_downloaded); | 177 next_handler_->OnDataDownloaded(bytes_downloaded); |
179 } | 178 } |
180 | 179 |
181 void DetachableResourceHandler::Resume() { | 180 void DetachableResourceHandler::Resume() { |
182 DCHECK(is_deferred_); | 181 DCHECK(is_deferred_); |
183 is_deferred_ = false; | 182 is_deferred_ = false; |
184 controller()->Resume(); | 183 controller()->Resume(); |
185 } | 184 } |
186 | 185 |
187 void DetachableResourceHandler::Cancel() { | 186 void DetachableResourceHandler::Cancel() { |
188 controller()->Cancel(); | 187 controller()->Cancel(); |
189 } | 188 } |
190 | 189 |
191 void DetachableResourceHandler::CancelAndIgnore() { | 190 void DetachableResourceHandler::CancelAndIgnore() { |
192 controller()->CancelAndIgnore(); | 191 controller()->CancelAndIgnore(); |
193 } | 192 } |
194 | 193 |
195 void DetachableResourceHandler::CancelWithError(int error_code) { | 194 void DetachableResourceHandler::CancelWithError(int error_code) { |
196 controller()->CancelWithError(error_code); | 195 controller()->CancelWithError(error_code); |
197 } | 196 } |
198 | 197 |
199 } // namespace content | 198 } // namespace content |
OLD | NEW |