| 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 |