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