Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: content/browser/loader/throttling_resource_handler.cc

Issue 129173002: Adds the new URLRequest::OnBeforeNetworkStart hook to the (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@defer_1_net
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698