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

Side by Side Diff: chrome/browser/prerender/prerender_resource_throttle.cc

Issue 2833553002: Revert of [Prerender] Restore request priorities when swapped in (Closed)
Patch Set: Created 3 years, 8 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/prerender/prerender_resource_throttle.h" 5 #include "chrome/browser/prerender/prerender_resource_throttle.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/numerics/safe_conversions.h" 9 #include "base/numerics/safe_conversions.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "chrome/browser/prerender/prerender_final_status.h" 11 #include "chrome/browser/prerender/prerender_final_status.h"
12 #include "chrome/browser/prerender/prerender_manager.h" 12 #include "chrome/browser/prerender/prerender_manager.h"
13 #include "chrome/browser/prerender/prerender_util.h" 13 #include "chrome/browser/prerender/prerender_util.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "content/public/browser/resource_dispatcher_host.h"
16 #include "content/public/browser/web_contents.h" 15 #include "content/public/browser/web_contents.h"
17 #include "net/base/load_flags.h" 16 #include "net/base/load_flags.h"
18 #include "net/http/http_response_headers.h" 17 #include "net/http/http_response_headers.h"
19 #include "net/url_request/redirect_info.h" 18 #include "net/url_request/redirect_info.h"
20 #include "net/url_request/url_request.h" 19 #include "net/url_request/url_request.h"
21 20
22 using content::BrowserThread; 21 using content::BrowserThread;
23 using content::ResourceRequestInfo; 22 using content::ResourceRequestInfo;
24 using content::ResourceType; 23 using content::ResourceType;
25 24
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 }; 78 };
80 79
81 void PrerenderResourceThrottle::OverridePrerenderContentsForTesting( 80 void PrerenderResourceThrottle::OverridePrerenderContentsForTesting(
82 PrerenderContents* contents) { 81 PrerenderContents* contents) {
83 g_prerender_contents_for_testing = contents; 82 g_prerender_contents_for_testing = contents;
84 } 83 }
85 84
86 PrerenderResourceThrottle::PrerenderResourceThrottle(net::URLRequest* request) 85 PrerenderResourceThrottle::PrerenderResourceThrottle(net::URLRequest* request)
87 : request_(request), 86 : request_(request),
88 load_flags_(net::LOAD_NORMAL), 87 load_flags_(net::LOAD_NORMAL),
89 prerender_throttle_info_(new PrerenderThrottleInfo()) { 88 prerender_throttle_info_(new PrerenderThrottleInfo()) {}
90 // Priorities for prerendering requests are lowered, to avoid competing with
91 // other page loads, except on Android where this is less likely to be a
92 // problem. In some cases, this may negatively impact the performance of
93 // prerendering, see https://crbug.com/652746 for details.
94 #if !defined(OS_ANDROID)
95 // Requests with the IGNORE_LIMITS flag set (i.e., sync XHRs)
96 // should remain at MAXIMUM_PRIORITY.
97 if (request_->load_flags() & net::LOAD_IGNORE_LIMITS) {
98 DCHECK_EQ(request_->priority(), net::MAXIMUM_PRIORITY);
99 } else if (request_->priority() != net::IDLE) {
100 original_request_priority_ = request_->priority();
101 // In practice, the resource scheduler does not know about the request yet,
102 // and it falls back to calling request_->SetPriority(), so it would be
103 // possible to do just that here. It is cleaner and more robust to go
104 // through the resource dispatcher host though.
105 if (content::ResourceDispatcherHost::Get()) {
106 content::ResourceDispatcherHost::Get()->ReprioritizeRequest(request_,
107 net::IDLE);
108 }
109 }
110 #endif // OS_ANDROID
111 }
112 89
113 PrerenderResourceThrottle::~PrerenderResourceThrottle() {} 90 PrerenderResourceThrottle::~PrerenderResourceThrottle() {}
114 91
115 void PrerenderResourceThrottle::WillStartRequest(bool* defer) { 92 void PrerenderResourceThrottle::WillStartRequest(bool* defer) {
116 DCHECK_CURRENTLY_ON(BrowserThread::IO); 93 DCHECK_CURRENTLY_ON(BrowserThread::IO);
117 const content::ResourceRequestInfo* info = 94 const content::ResourceRequestInfo* info =
118 content::ResourceRequestInfo::ForRequest(request_); 95 content::ResourceRequestInfo::ForRequest(request_);
119 *defer = true; 96 *defer = true;
120
121 BrowserThread::PostTask( 97 BrowserThread::PostTask(
122 BrowserThread::UI, FROM_HERE, 98 BrowserThread::UI, FROM_HERE,
123 base::Bind(&PrerenderResourceThrottle::WillStartRequestOnUI, AsWeakPtr(), 99 base::Bind(&PrerenderResourceThrottle::WillStartRequestOnUI, AsWeakPtr(),
124 request_->method(), info->GetResourceType(), request_->url(), 100 request_->method(), info->GetResourceType(), request_->url(),
125 info->GetWebContentsGetterForRequest(), 101 info->GetWebContentsGetterForRequest(),
126 prerender_throttle_info_)); 102 prerender_throttle_info_));
127 } 103 }
128 104
129 void PrerenderResourceThrottle::WillRedirectRequest( 105 void PrerenderResourceThrottle::WillRedirectRequest(
130 const net::RedirectInfo& redirect_info, 106 const net::RedirectInfo& redirect_info,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 const char* PrerenderResourceThrottle::GetNameForLogging() const { 142 const char* PrerenderResourceThrottle::GetNameForLogging() const {
167 return "PrerenderResourceThrottle"; 143 return "PrerenderResourceThrottle";
168 } 144 }
169 145
170 void PrerenderResourceThrottle::ResumeHandler() { 146 void PrerenderResourceThrottle::ResumeHandler() {
171 DCHECK_CURRENTLY_ON(BrowserThread::IO); 147 DCHECK_CURRENTLY_ON(BrowserThread::IO);
172 request_->SetLoadFlags(request_->load_flags() | load_flags_); 148 request_->SetLoadFlags(request_->load_flags() | load_flags_);
173 Resume(); 149 Resume();
174 } 150 }
175 151
176 void PrerenderResourceThrottle::ResetResourcePriority() {
177 if (!original_request_priority_)
178 return;
179
180 if (content::ResourceDispatcherHost::Get()) {
181 content::ResourceDispatcherHost::Get()->ReprioritizeRequest(
182 request_, original_request_priority_.value());
183 }
184 }
185
186 // static 152 // static
187 void PrerenderResourceThrottle::WillStartRequestOnUI( 153 void PrerenderResourceThrottle::WillStartRequestOnUI(
188 const base::WeakPtr<PrerenderResourceThrottle>& throttle, 154 const base::WeakPtr<PrerenderResourceThrottle>& throttle,
189 const std::string& method, 155 const std::string& method,
190 ResourceType resource_type, 156 ResourceType resource_type,
191 const GURL& url, 157 const GURL& url,
192 const ResourceRequestInfo::WebContentsGetter& web_contents_getter, 158 const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
193 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) { 159 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) {
194 DCHECK_CURRENTLY_ON(BrowserThread::UI); 160 DCHECK_CURRENTLY_ON(BrowserThread::UI);
195 bool cancel = false; 161 bool cancel = false;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // and PrerenderContents::CheckURL(). See http://crbug.com/673771. 195 // and PrerenderContents::CheckURL(). See http://crbug.com/673771.
230 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); 196 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME);
231 ReportUnsupportedPrerenderScheme(url); 197 ReportUnsupportedPrerenderScheme(url);
232 } 198 }
233 cancel = true; 199 cancel = true;
234 #if defined(OS_ANDROID) 200 #if defined(OS_ANDROID)
235 } else if (resource_type == content::RESOURCE_TYPE_FAVICON) { 201 } else if (resource_type == content::RESOURCE_TYPE_FAVICON) {
236 // Delay icon fetching until the contents are getting swapped in 202 // Delay icon fetching until the contents are getting swapped in
237 // to conserve network usage in mobile devices. 203 // to conserve network usage in mobile devices.
238 prerender_contents->AddResourceThrottle(throttle); 204 prerender_contents->AddResourceThrottle(throttle);
239
240 // No need to call AddIdleResource() on Android.
241 return; 205 return;
242 #endif 206 #endif
243 } 207 }
244
245 #if !defined(OS_ANDROID)
246 if (!cancel)
247 prerender_contents->AddIdleResource(throttle);
248 #endif
249 } 208 }
250 209
251 BrowserThread::PostTask( 210 BrowserThread::PostTask(
252 BrowserThread::IO, FROM_HERE, 211 BrowserThread::IO, FROM_HERE,
253 base::Bind(cancel ? &PrerenderResourceThrottle::Cancel 212 base::Bind(cancel ? &PrerenderResourceThrottle::Cancel
254 : &PrerenderResourceThrottle::ResumeHandler, 213 : &PrerenderResourceThrottle::ResumeHandler,
255 throttle)); 214 throttle));
256 } 215 }
257 216
258 // static 217 // static
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 return g_prerender_contents_for_testing; 290 return g_prerender_contents_for_testing;
332 return PrerenderContents::FromWebContents(web_contents_getter.Run()); 291 return PrerenderContents::FromWebContents(web_contents_getter.Run());
333 } 292 }
334 293
335 void PrerenderResourceThrottle::SetPrerenderMode(PrerenderMode mode) { 294 void PrerenderResourceThrottle::SetPrerenderMode(PrerenderMode mode) {
336 DCHECK_CURRENTLY_ON(BrowserThread::IO); 295 DCHECK_CURRENTLY_ON(BrowserThread::IO);
337 load_flags_ = (mode == PREFETCH_ONLY) ? net::LOAD_PREFETCH : net::LOAD_NORMAL; 296 load_flags_ = (mode == PREFETCH_ONLY) ? net::LOAD_PREFETCH : net::LOAD_NORMAL;
338 } 297 }
339 298
340 } // namespace prerender 299 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | chrome/browser/prerender/prerender_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698