| 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/throttling_resource_handler.h" | 5 #include "content/browser/renderer_host/throttling_resource_handler.h" |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" | |
| 8 #include "content/public/browser/resource_throttle.h" | 7 #include "content/public/browser/resource_throttle.h" |
| 9 #include "content/public/common/resource_response.h" | 8 #include "content/public/common/resource_response.h" |
| 10 | 9 |
| 11 namespace content { | 10 namespace content { |
| 12 | 11 |
| 13 ThrottlingResourceHandler::ThrottlingResourceHandler( | 12 ThrottlingResourceHandler::ThrottlingResourceHandler( |
| 14 ResourceDispatcherHostImpl* host, | |
| 15 scoped_ptr<ResourceHandler> next_handler, | 13 scoped_ptr<ResourceHandler> next_handler, |
| 16 int child_id, | 14 int child_id, |
| 17 int request_id, | 15 int request_id, |
| 18 ScopedVector<ResourceThrottle> throttles) | 16 ScopedVector<ResourceThrottle> throttles) |
| 19 : LayeredResourceHandler(next_handler.Pass()), | 17 : LayeredResourceHandler(next_handler.Pass()), |
| 20 deferred_stage_(DEFERRED_NONE), | 18 deferred_stage_(DEFERRED_NONE), |
| 21 host_(host), | |
| 22 child_id_(child_id), | 19 child_id_(child_id), |
| 23 request_id_(request_id), | 20 request_id_(request_id), |
| 24 throttles_(throttles.Pass()), | 21 throttles_(throttles.Pass()), |
| 25 index_(0) { | 22 index_(0) { |
| 26 for (size_t i = 0; i < throttles_.size(); ++i) | 23 for (size_t i = 0; i < throttles_.size(); ++i) |
| 27 throttles_[i]->set_controller(this); | 24 throttles_[i]->set_controller(this); |
| 28 } | 25 } |
| 29 | 26 |
| 30 ThrottlingResourceHandler::~ThrottlingResourceHandler() { | 27 ThrottlingResourceHandler::~ThrottlingResourceHandler() { |
| 31 } | 28 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 return true; // Do not cancel. | 86 return true; // Do not cancel. |
| 90 } | 87 } |
| 91 } | 88 } |
| 92 | 89 |
| 93 index_ = 0; // Reset for next time. | 90 index_ = 0; // Reset for next time. |
| 94 | 91 |
| 95 return next_handler_->OnResponseStarted(request_id, response, defer); | 92 return next_handler_->OnResponseStarted(request_id, response, defer); |
| 96 } | 93 } |
| 97 | 94 |
| 98 void ThrottlingResourceHandler::Cancel() { | 95 void ThrottlingResourceHandler::Cancel() { |
| 99 host_->CancelRequest(child_id_, request_id_, false); | 96 controller()->Cancel(); |
| 100 } | 97 } |
| 101 | 98 |
| 102 void ThrottlingResourceHandler::Resume() { | 99 void ThrottlingResourceHandler::Resume() { |
| 103 switch (deferred_stage_) { | 100 switch (deferred_stage_) { |
| 104 case DEFERRED_NONE: | 101 case DEFERRED_NONE: |
| 105 NOTREACHED(); | 102 NOTREACHED(); |
| 106 break; | 103 break; |
| 107 case DEFERRED_START: | 104 case DEFERRED_START: |
| 108 ResumeStart(); | 105 ResumeStart(); |
| 109 break; | 106 break; |
| 110 case DEFERRED_REDIRECT: | 107 case DEFERRED_REDIRECT: |
| 111 ResumeRedirect(); | 108 ResumeRedirect(); |
| 112 break; | 109 break; |
| 113 case DEFERRED_RESPONSE: | 110 case DEFERRED_RESPONSE: |
| 114 ResumeResponse(); | 111 ResumeResponse(); |
| 115 break; | 112 break; |
| 116 } | 113 } |
| 117 deferred_stage_ = DEFERRED_NONE; | 114 deferred_stage_ = DEFERRED_NONE; |
| 118 } | 115 } |
| 119 | 116 |
| 120 void ThrottlingResourceHandler::ResumeStart() { | 117 void ThrottlingResourceHandler::ResumeStart() { |
| 121 GURL url = deferred_url_; | 118 GURL url = deferred_url_; |
| 122 deferred_url_ = GURL(); | 119 deferred_url_ = GURL(); |
| 123 | 120 |
| 124 bool defer = false; | 121 bool defer = false; |
| 125 if (!OnWillStart(request_id_, url, &defer)) { | 122 if (!OnWillStart(request_id_, url, &defer)) { |
| 126 Cancel(); | 123 controller()->Cancel(); |
| 127 } else if (!defer) { | 124 } else if (!defer) { |
| 128 host_->StartDeferredRequest(child_id_, request_id_); | 125 controller()->Resume(); |
| 129 } | 126 } |
| 130 } | 127 } |
| 131 | 128 |
| 132 void ThrottlingResourceHandler::ResumeRedirect() { | 129 void ThrottlingResourceHandler::ResumeRedirect() { |
| 133 GURL new_url = deferred_url_; | 130 GURL new_url = deferred_url_; |
| 134 deferred_url_ = GURL(); | 131 deferred_url_ = GURL(); |
| 135 scoped_refptr<ResourceResponse> response; | 132 scoped_refptr<ResourceResponse> response; |
| 136 deferred_response_.swap(response); | 133 deferred_response_.swap(response); |
| 137 | 134 |
| 138 bool defer = false; | 135 bool defer = false; |
| 139 if (!OnRequestRedirected(request_id_, new_url, response, &defer)) { | 136 if (!OnRequestRedirected(request_id_, new_url, response, &defer)) { |
| 140 Cancel(); | 137 controller()->Cancel(); |
| 141 } else if (!defer) { | 138 } else if (!defer) { |
| 142 host_->FollowDeferredRedirect(child_id_, request_id_, false, GURL()); | 139 controller()->Resume(); |
| 143 } | 140 } |
| 144 } | 141 } |
| 145 | 142 |
| 146 void ThrottlingResourceHandler::ResumeResponse() { | 143 void ThrottlingResourceHandler::ResumeResponse() { |
| 147 scoped_refptr<ResourceResponse> response; | 144 scoped_refptr<ResourceResponse> response; |
| 148 deferred_response_.swap(response); | 145 deferred_response_.swap(response); |
| 149 | 146 |
| 150 bool defer = false; | 147 bool defer = false; |
| 151 if (!OnResponseStarted(request_id_, response, &defer)) { | 148 if (!OnResponseStarted(request_id_, response, &defer)) { |
| 152 Cancel(); | 149 controller()->Cancel(); |
| 153 } else if (!defer) { | 150 } else if (!defer) { |
| 154 host_->ResumeDeferredRequest(child_id_, request_id_); | 151 controller()->Resume(); |
| 155 } | 152 } |
| 156 } | 153 } |
| 157 | 154 |
| 158 } // namespace content | 155 } // namespace content |
| OLD | NEW |