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/loader/throttling_resource_handler.h" | 5 #include "content/browser/loader/throttling_resource_handler.h" |
6 | 6 |
7 #include "content/browser/loader/resource_request_info_impl.h" | 7 #include "content/browser/loader/resource_request_info_impl.h" |
8 #include "content/public/browser/resource_throttle.h" | 8 #include "content/public/browser/resource_throttle.h" |
9 #include "content/public/common/resource_response.h" | 9 #include "content/public/common/resource_response.h" |
10 #include "net/url_request/url_request.h" | 10 #include "net/url_request/url_request.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 throttles_[i]->set_controller(this); | 24 throttles_[i]->set_controller(this); |
25 // Throttles must have a name, as otherwise, bugs where a throttle fails | 25 // Throttles must have a name, as otherwise, bugs where a throttle fails |
26 // to resume a request can be very difficult to debug. | 26 // to resume a request can be very difficult to debug. |
27 DCHECK(throttles_[i]->GetNameForLogging()); | 27 DCHECK(throttles_[i]->GetNameForLogging()); |
28 } | 28 } |
29 } | 29 } |
30 | 30 |
31 ThrottlingResourceHandler::~ThrottlingResourceHandler() { | 31 ThrottlingResourceHandler::~ThrottlingResourceHandler() { |
32 } | 32 } |
33 | 33 |
34 bool ThrottlingResourceHandler::OnRequestRedirected(const GURL& new_url, | 34 bool ThrottlingResourceHandler::OnRequestRedirected( |
35 ResourceResponse* response, | 35 const net::RedirectInfo& redirect_info, |
36 bool* defer) { | 36 ResourceResponse* response, |
| 37 bool* defer) { |
37 DCHECK(!cancelled_by_resource_throttle_); | 38 DCHECK(!cancelled_by_resource_throttle_); |
38 | 39 |
39 *defer = false; | 40 *defer = false; |
40 while (next_index_ < throttles_.size()) { | 41 while (next_index_ < throttles_.size()) { |
41 int index = next_index_; | 42 int index = next_index_; |
42 throttles_[index]->WillRedirectRequest(new_url, defer); | 43 throttles_[index]->WillRedirectRequest(redirect_info.new_url, defer); |
43 next_index_++; | 44 next_index_++; |
44 if (cancelled_by_resource_throttle_) | 45 if (cancelled_by_resource_throttle_) |
45 return false; | 46 return false; |
46 if (*defer) { | 47 if (*defer) { |
47 OnRequestDefered(index); | 48 OnRequestDefered(index); |
48 deferred_stage_ = DEFERRED_REDIRECT; | 49 deferred_stage_ = DEFERRED_REDIRECT; |
49 deferred_url_ = new_url; | 50 deferred_redirect_ = redirect_info; |
50 deferred_response_ = response; | 51 deferred_response_ = response; |
51 return true; // Do not cancel. | 52 return true; // Do not cancel. |
52 } | 53 } |
53 } | 54 } |
54 | 55 |
55 next_index_ = 0; // Reset for next time. | 56 next_index_ = 0; // Reset for next time. |
56 | 57 |
57 return next_handler_->OnRequestRedirected(new_url, response, defer); | 58 return next_handler_->OnRequestRedirected(redirect_info, response, defer); |
58 } | 59 } |
59 | 60 |
60 bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) { | 61 bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) { |
61 DCHECK(!cancelled_by_resource_throttle_); | 62 DCHECK(!cancelled_by_resource_throttle_); |
62 | 63 |
63 *defer = false; | 64 *defer = false; |
64 while (next_index_ < throttles_.size()) { | 65 while (next_index_ < throttles_.size()) { |
65 int index = next_index_; | 66 int index = next_index_; |
66 throttles_[index]->WillStartRequest(defer); | 67 throttles_[index]->WillStartRequest(defer); |
67 next_index_++; | 68 next_index_++; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 if (!OnBeforeNetworkStart(url, &defer)) { | 193 if (!OnBeforeNetworkStart(url, &defer)) { |
193 controller()->Cancel(); | 194 controller()->Cancel(); |
194 } else if (!defer) { | 195 } else if (!defer) { |
195 controller()->Resume(); | 196 controller()->Resume(); |
196 } | 197 } |
197 } | 198 } |
198 | 199 |
199 void ThrottlingResourceHandler::ResumeRedirect() { | 200 void ThrottlingResourceHandler::ResumeRedirect() { |
200 DCHECK(!cancelled_by_resource_throttle_); | 201 DCHECK(!cancelled_by_resource_throttle_); |
201 | 202 |
202 GURL new_url = deferred_url_; | 203 net::RedirectInfo redirect_info = deferred_redirect_; |
203 deferred_url_ = GURL(); | 204 deferred_redirect_ = net::RedirectInfo(); |
204 scoped_refptr<ResourceResponse> response; | 205 scoped_refptr<ResourceResponse> response; |
205 deferred_response_.swap(response); | 206 deferred_response_.swap(response); |
206 | 207 |
207 bool defer = false; | 208 bool defer = false; |
208 if (!OnRequestRedirected(new_url, response.get(), &defer)) { | 209 if (!OnRequestRedirected(redirect_info, response.get(), &defer)) { |
209 controller()->Cancel(); | 210 controller()->Cancel(); |
210 } else if (!defer) { | 211 } else if (!defer) { |
211 controller()->Resume(); | 212 controller()->Resume(); |
212 } | 213 } |
213 } | 214 } |
214 | 215 |
215 void ThrottlingResourceHandler::ResumeResponse() { | 216 void ThrottlingResourceHandler::ResumeResponse() { |
216 DCHECK(!cancelled_by_resource_throttle_); | 217 DCHECK(!cancelled_by_resource_throttle_); |
217 | 218 |
218 scoped_refptr<ResourceResponse> response; | 219 scoped_refptr<ResourceResponse> response; |
219 deferred_response_.swap(response); | 220 deferred_response_.swap(response); |
220 | 221 |
221 bool defer = false; | 222 bool defer = false; |
222 if (!OnResponseStarted(response.get(), &defer)) { | 223 if (!OnResponseStarted(response.get(), &defer)) { |
223 controller()->Cancel(); | 224 controller()->Cancel(); |
224 } else if (!defer) { | 225 } else if (!defer) { |
225 controller()->Resume(); | 226 controller()->Resume(); |
226 } | 227 } |
227 } | 228 } |
228 | 229 |
229 void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) { | 230 void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) { |
230 request()->LogBlockedBy(throttles_[throttle_index]->GetNameForLogging()); | 231 request()->LogBlockedBy(throttles_[throttle_index]->GetNameForLogging()); |
231 } | 232 } |
232 | 233 |
233 } // namespace content | 234 } // namespace content |
OLD | NEW |