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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 deferred_url_ = url; | 77 deferred_url_ = url; |
78 return true; // Do not cancel. | 78 return true; // Do not cancel. |
79 } | 79 } |
80 } | 80 } |
81 | 81 |
82 next_index_ = 0; // Reset for next time. | 82 next_index_ = 0; // Reset for next time. |
83 | 83 |
84 return next_handler_->OnWillStart(request_id, url, defer); | 84 return next_handler_->OnWillStart(request_id, url, defer); |
85 } | 85 } |
86 | 86 |
| 87 bool ThrottlingResourceHandler::OnBeforeNetworkStart(int request_id, |
| 88 const GURL& url, |
| 89 bool* defer) { |
| 90 DCHECK(!cancelled_by_resource_throttle_); |
| 91 |
| 92 *defer = false; |
| 93 while (next_index_ < throttles_.size()) { |
| 94 int index = next_index_; |
| 95 throttles_[index]->OnBeforeNetworkStart(defer); |
| 96 next_index_++; |
| 97 if (cancelled_by_resource_throttle_) |
| 98 return false; |
| 99 if (*defer) { |
| 100 OnRequestDefered(index); |
| 101 deferred_stage_ = DEFERRED_NETWORK_START; |
| 102 deferred_url_ = url; |
| 103 return true; // Do not cancel. |
| 104 } |
| 105 } |
| 106 |
| 107 next_index_ = 0; // Reset for next time. |
| 108 |
| 109 return next_handler_->OnBeforeNetworkStart(request_id, url, defer); |
| 110 } |
| 111 |
87 bool ThrottlingResourceHandler::OnResponseStarted(int request_id, | 112 bool ThrottlingResourceHandler::OnResponseStarted(int request_id, |
88 ResourceResponse* response, | 113 ResourceResponse* response, |
89 bool* defer) { | 114 bool* defer) { |
90 DCHECK(!cancelled_by_resource_throttle_); | 115 DCHECK(!cancelled_by_resource_throttle_); |
91 | 116 |
92 while (next_index_ < throttles_.size()) { | 117 while (next_index_ < throttles_.size()) { |
93 int index = next_index_; | 118 int index = next_index_; |
94 throttles_[index]->WillProcessResponse(defer); | 119 throttles_[index]->WillProcessResponse(defer); |
95 next_index_++; | 120 next_index_++; |
96 if (cancelled_by_resource_throttle_) | 121 if (cancelled_by_resource_throttle_) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 deferred_stage_ = DEFERRED_NONE; | 155 deferred_stage_ = DEFERRED_NONE; |
131 // Clear information about the throttle that delayed the request. | 156 // Clear information about the throttle that delayed the request. |
132 request()->LogUnblocked(); | 157 request()->LogUnblocked(); |
133 switch (last_deferred_stage) { | 158 switch (last_deferred_stage) { |
134 case DEFERRED_NONE: | 159 case DEFERRED_NONE: |
135 NOTREACHED(); | 160 NOTREACHED(); |
136 break; | 161 break; |
137 case DEFERRED_START: | 162 case DEFERRED_START: |
138 ResumeStart(); | 163 ResumeStart(); |
139 break; | 164 break; |
| 165 case DEFERRED_NETWORK_START: |
| 166 ResumeNetworkStart(); |
| 167 break; |
140 case DEFERRED_REDIRECT: | 168 case DEFERRED_REDIRECT: |
141 ResumeRedirect(); | 169 ResumeRedirect(); |
142 break; | 170 break; |
143 case DEFERRED_RESPONSE: | 171 case DEFERRED_RESPONSE: |
144 ResumeResponse(); | 172 ResumeResponse(); |
145 break; | 173 break; |
146 } | 174 } |
147 } | 175 } |
148 | 176 |
149 void ThrottlingResourceHandler::ResumeStart() { | 177 void ThrottlingResourceHandler::ResumeStart() { |
150 DCHECK(!cancelled_by_resource_throttle_); | 178 DCHECK(!cancelled_by_resource_throttle_); |
151 | 179 |
152 GURL url = deferred_url_; | 180 GURL url = deferred_url_; |
153 deferred_url_ = GURL(); | 181 deferred_url_ = GURL(); |
154 | 182 |
155 bool defer = false; | 183 bool defer = false; |
156 if (!OnWillStart(GetRequestID(), url, &defer)) { | 184 if (!OnWillStart(GetRequestID(), url, &defer)) { |
157 controller()->Cancel(); | 185 controller()->Cancel(); |
158 } else if (!defer) { | 186 } else if (!defer) { |
159 controller()->Resume(); | 187 controller()->Resume(); |
160 } | 188 } |
161 } | 189 } |
162 | 190 |
| 191 void ThrottlingResourceHandler::ResumeNetworkStart() { |
| 192 DCHECK(!cancelled_by_resource_throttle_); |
| 193 |
| 194 GURL url = deferred_url_; |
| 195 deferred_url_ = GURL(); |
| 196 |
| 197 bool defer = false; |
| 198 if (!OnBeforeNetworkStart(GetRequestID(), url, &defer)) { |
| 199 controller()->Cancel(); |
| 200 } else if (!defer) { |
| 201 controller()->Resume(); |
| 202 } |
| 203 } |
| 204 |
163 void ThrottlingResourceHandler::ResumeRedirect() { | 205 void ThrottlingResourceHandler::ResumeRedirect() { |
164 DCHECK(!cancelled_by_resource_throttle_); | 206 DCHECK(!cancelled_by_resource_throttle_); |
165 | 207 |
166 GURL new_url = deferred_url_; | 208 GURL new_url = deferred_url_; |
167 deferred_url_ = GURL(); | 209 deferred_url_ = GURL(); |
168 scoped_refptr<ResourceResponse> response; | 210 scoped_refptr<ResourceResponse> response; |
169 deferred_response_.swap(response); | 211 deferred_response_.swap(response); |
170 | 212 |
171 bool defer = false; | 213 bool defer = false; |
172 if (!OnRequestRedirected(GetRequestID(), new_url, response.get(), &defer)) { | 214 if (!OnRequestRedirected(GetRequestID(), new_url, response.get(), &defer)) { |
(...skipping 15 matching lines...) Expand all Loading... |
188 } else if (!defer) { | 230 } else if (!defer) { |
189 controller()->Resume(); | 231 controller()->Resume(); |
190 } | 232 } |
191 } | 233 } |
192 | 234 |
193 void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) { | 235 void ThrottlingResourceHandler::OnRequestDefered(int throttle_index) { |
194 request()->LogBlockedBy(throttles_[throttle_index]->GetNameForLogging()); | 236 request()->LogBlockedBy(throttles_[throttle_index]->GetNameForLogging()); |
195 } | 237 } |
196 | 238 |
197 } // namespace content | 239 } // namespace content |
OLD | NEW |