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

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

Issue 2605503002: Prerender: Add thread checks to PrerenderResourceThrottle (Closed)
Patch Set: BrowserThread::IO (without content::) everywhere for consistency Created 3 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
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 } 83 }
84 84
85 PrerenderResourceThrottle::PrerenderResourceThrottle(net::URLRequest* request) 85 PrerenderResourceThrottle::PrerenderResourceThrottle(net::URLRequest* request)
86 : request_(request), 86 : request_(request),
87 load_flags_(net::LOAD_NORMAL), 87 load_flags_(net::LOAD_NORMAL),
88 prerender_throttle_info_(new PrerenderThrottleInfo()) {} 88 prerender_throttle_info_(new PrerenderThrottleInfo()) {}
89 89
90 PrerenderResourceThrottle::~PrerenderResourceThrottle() {} 90 PrerenderResourceThrottle::~PrerenderResourceThrottle() {}
91 91
92 void PrerenderResourceThrottle::WillStartRequest(bool* defer) { 92 void PrerenderResourceThrottle::WillStartRequest(bool* defer) {
93 DCHECK_CURRENTLY_ON(BrowserThread::IO);
93 const content::ResourceRequestInfo* info = 94 const content::ResourceRequestInfo* info =
94 content::ResourceRequestInfo::ForRequest(request_); 95 content::ResourceRequestInfo::ForRequest(request_);
95 *defer = true; 96 *defer = true;
96 BrowserThread::PostTask( 97 BrowserThread::PostTask(
97 BrowserThread::UI, FROM_HERE, 98 BrowserThread::UI, FROM_HERE,
98 base::Bind(&PrerenderResourceThrottle::WillStartRequestOnUI, AsWeakPtr(), 99 base::Bind(&PrerenderResourceThrottle::WillStartRequestOnUI, AsWeakPtr(),
99 request_->method(), info->GetResourceType(), request_->url(), 100 request_->method(), info->GetResourceType(), request_->url(),
100 info->GetWebContentsGetterForRequest(), 101 info->GetWebContentsGetterForRequest(),
101 prerender_throttle_info_)); 102 prerender_throttle_info_));
102 } 103 }
103 104
104 void PrerenderResourceThrottle::WillRedirectRequest( 105 void PrerenderResourceThrottle::WillRedirectRequest(
105 const net::RedirectInfo& redirect_info, 106 const net::RedirectInfo& redirect_info,
106 bool* defer) { 107 bool* defer) {
108 DCHECK_CURRENTLY_ON(BrowserThread::IO);
107 const content::ResourceRequestInfo* info = 109 const content::ResourceRequestInfo* info =
108 content::ResourceRequestInfo::ForRequest(request_); 110 content::ResourceRequestInfo::ForRequest(request_);
109 *defer = true; 111 *defer = true;
110 std::string header; 112 std::string header;
111 request_->GetResponseHeaderByName(kFollowOnlyWhenPrerenderShown, &header); 113 request_->GetResponseHeaderByName(kFollowOnlyWhenPrerenderShown, &header);
112 114
113 BrowserThread::PostTask( 115 BrowserThread::PostTask(
114 BrowserThread::UI, FROM_HERE, 116 BrowserThread::UI, FROM_HERE,
115 base::Bind(&PrerenderResourceThrottle::WillRedirectRequestOnUI, 117 base::Bind(&PrerenderResourceThrottle::WillRedirectRequestOnUI,
116 AsWeakPtr(), header, info->GetResourceType(), info->IsAsync(), 118 AsWeakPtr(), header, info->GetResourceType(), info->IsAsync(),
117 IsNoStoreResponse(*request_), redirect_info.new_url, 119 IsNoStoreResponse(*request_), redirect_info.new_url,
118 info->GetWebContentsGetterForRequest())); 120 info->GetWebContentsGetterForRequest()));
119 } 121 }
120 122
121 void PrerenderResourceThrottle::WillProcessResponse(bool* defer) { 123 void PrerenderResourceThrottle::WillProcessResponse(bool* defer) {
124 DCHECK_CURRENTLY_ON(BrowserThread::IO);
122 const content::ResourceRequestInfo* info = 125 const content::ResourceRequestInfo* info =
123 content::ResourceRequestInfo::ForRequest(request_); 126 content::ResourceRequestInfo::ForRequest(request_);
124 if (!info) 127 if (!info)
125 return; 128 return;
126 129
127 DCHECK_GT(request_->url_chain().size(), 0u); 130 DCHECK_GT(request_->url_chain().size(), 0u);
128 int redirect_count = 131 int redirect_count =
129 base::saturated_cast<int>(request_->url_chain().size()) - 1; 132 base::saturated_cast<int>(request_->url_chain().size()) - 1;
130 133
131 BrowserThread::PostTask( 134 BrowserThread::PostTask(
132 BrowserThread::UI, FROM_HERE, 135 BrowserThread::UI, FROM_HERE,
133 base::Bind(&PrerenderResourceThrottle::WillProcessResponseOnUI, 136 base::Bind(&PrerenderResourceThrottle::WillProcessResponseOnUI,
134 content::IsResourceTypeFrame(info->GetResourceType()), 137 content::IsResourceTypeFrame(info->GetResourceType()),
135 IsNoStoreResponse(*request_), redirect_count, 138 IsNoStoreResponse(*request_), redirect_count,
136 prerender_throttle_info_)); 139 prerender_throttle_info_));
137 } 140 }
138 141
139 const char* PrerenderResourceThrottle::GetNameForLogging() const { 142 const char* PrerenderResourceThrottle::GetNameForLogging() const {
140 return "PrerenderResourceThrottle"; 143 return "PrerenderResourceThrottle";
141 } 144 }
142 145
143 void PrerenderResourceThrottle::ResumeHandler() { 146 void PrerenderResourceThrottle::ResumeHandler() {
147 DCHECK_CURRENTLY_ON(BrowserThread::IO);
144 request_->SetLoadFlags(request_->load_flags() | load_flags_); 148 request_->SetLoadFlags(request_->load_flags() | load_flags_);
145 Resume(); 149 Resume();
146 } 150 }
147 151
148 // static 152 // static
149 void PrerenderResourceThrottle::WillStartRequestOnUI( 153 void PrerenderResourceThrottle::WillStartRequestOnUI(
150 const base::WeakPtr<PrerenderResourceThrottle>& throttle, 154 const base::WeakPtr<PrerenderResourceThrottle>& throttle,
151 const std::string& method, 155 const std::string& method,
152 ResourceType resource_type, 156 ResourceType resource_type,
153 const GURL& url, 157 const GURL& url,
154 const ResourceRequestInfo::WebContentsGetter& web_contents_getter, 158 const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
155 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) { 159 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) {
160 DCHECK_CURRENTLY_ON(BrowserThread::UI);
156 bool cancel = false; 161 bool cancel = false;
157 PrerenderContents* prerender_contents = 162 PrerenderContents* prerender_contents =
158 PrerenderContentsFromGetter(web_contents_getter); 163 PrerenderContentsFromGetter(web_contents_getter);
159 if (prerender_contents) { 164 if (prerender_contents) {
160 DCHECK(prerender_throttle_info); 165 DCHECK(prerender_throttle_info);
161 prerender_throttle_info->Set(prerender_contents->prerender_mode(), 166 prerender_throttle_info->Set(prerender_contents->prerender_mode(),
162 prerender_contents->origin(), 167 prerender_contents->origin(),
163 prerender_contents->prerender_manager()); 168 prerender_contents->prerender_manager());
164 BrowserThread::PostTask( 169 BrowserThread::PostTask(
165 BrowserThread::IO, FROM_HERE, 170 BrowserThread::IO, FROM_HERE,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 211
207 // static 212 // static
208 void PrerenderResourceThrottle::WillRedirectRequestOnUI( 213 void PrerenderResourceThrottle::WillRedirectRequestOnUI(
209 const base::WeakPtr<PrerenderResourceThrottle>& throttle, 214 const base::WeakPtr<PrerenderResourceThrottle>& throttle,
210 const std::string& follow_only_when_prerender_shown_header, 215 const std::string& follow_only_when_prerender_shown_header,
211 ResourceType resource_type, 216 ResourceType resource_type,
212 bool async, 217 bool async,
213 bool is_no_store, 218 bool is_no_store,
214 const GURL& new_url, 219 const GURL& new_url,
215 const ResourceRequestInfo::WebContentsGetter& web_contents_getter) { 220 const ResourceRequestInfo::WebContentsGetter& web_contents_getter) {
221 DCHECK_CURRENTLY_ON(BrowserThread::UI);
216 bool cancel = false; 222 bool cancel = false;
217 PrerenderContents* prerender_contents = 223 PrerenderContents* prerender_contents =
218 PrerenderContentsFromGetter(web_contents_getter); 224 PrerenderContentsFromGetter(web_contents_getter);
219 if (prerender_contents) { 225 if (prerender_contents) {
220 prerender_contents->prerender_manager()->RecordPrefetchResponseReceived( 226 prerender_contents->prerender_manager()->RecordPrefetchResponseReceived(
221 prerender_contents->origin(), 227 prerender_contents->origin(),
222 content::IsResourceTypeFrame(resource_type), true /* is_redirect */, 228 content::IsResourceTypeFrame(resource_type), true /* is_redirect */,
223 is_no_store); 229 is_no_store);
224 // Abort any prerenders with requests which redirect to invalid schemes. 230 // Abort any prerenders with requests which redirect to invalid schemes.
225 if (!PrerenderManager::DoesURLHaveValidScheme(new_url)) { 231 if (!PrerenderManager::DoesURLHaveValidScheme(new_url)) {
(...skipping 23 matching lines...) Expand all
249 : &PrerenderResourceThrottle::ResumeHandler, 255 : &PrerenderResourceThrottle::ResumeHandler,
250 throttle)); 256 throttle));
251 } 257 }
252 258
253 // static 259 // static
254 void PrerenderResourceThrottle::WillProcessResponseOnUI( 260 void PrerenderResourceThrottle::WillProcessResponseOnUI(
255 bool is_main_resource, 261 bool is_main_resource,
256 bool is_no_store, 262 bool is_no_store,
257 int redirect_count, 263 int redirect_count,
258 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) { 264 scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) {
265 DCHECK_CURRENTLY_ON(BrowserThread::UI);
259 DCHECK(prerender_throttle_info); 266 DCHECK(prerender_throttle_info);
260 if (!prerender_throttle_info->manager()) 267 if (!prerender_throttle_info->manager())
261 return; 268 return;
262 269
263 if (prerender_throttle_info->mode() != PREFETCH_ONLY) 270 if (prerender_throttle_info->mode() != PREFETCH_ONLY)
264 return; 271 return;
265 272
266 prerender_throttle_info->manager()->RecordPrefetchResponseReceived( 273 prerender_throttle_info->manager()->RecordPrefetchResponseReceived(
267 prerender_throttle_info->origin(), is_main_resource, 274 prerender_throttle_info->origin(), is_main_resource,
268 false /* is_redirect */, is_no_store); 275 false /* is_redirect */, is_no_store);
269 prerender_throttle_info->manager()->RecordPrefetchRedirectCount( 276 prerender_throttle_info->manager()->RecordPrefetchRedirectCount(
270 prerender_throttle_info->origin(), is_main_resource, redirect_count); 277 prerender_throttle_info->origin(), is_main_resource, redirect_count);
271 } 278 }
272 279
273 // static 280 // static
274 PrerenderContents* PrerenderResourceThrottle::PrerenderContentsFromGetter( 281 PrerenderContents* PrerenderResourceThrottle::PrerenderContentsFromGetter(
275 const ResourceRequestInfo::WebContentsGetter& web_contents_getter) { 282 const ResourceRequestInfo::WebContentsGetter& web_contents_getter) {
283 DCHECK_CURRENTLY_ON(BrowserThread::UI);
276 if (g_prerender_contents_for_testing) 284 if (g_prerender_contents_for_testing)
277 return g_prerender_contents_for_testing; 285 return g_prerender_contents_for_testing;
278 return PrerenderContents::FromWebContents(web_contents_getter.Run()); 286 return PrerenderContents::FromWebContents(web_contents_getter.Run());
279 } 287 }
280 288
281 void PrerenderResourceThrottle::SetPrerenderMode(PrerenderMode mode) { 289 void PrerenderResourceThrottle::SetPrerenderMode(PrerenderMode mode) {
290 DCHECK_CURRENTLY_ON(BrowserThread::IO);
282 load_flags_ = (mode == PREFETCH_ONLY) ? net::LOAD_PREFETCH : net::LOAD_NORMAL; 291 load_flags_ = (mode == PREFETCH_ONLY) ? net::LOAD_PREFETCH : net::LOAD_NORMAL;
283 } 292 }
284 293
285 } // namespace prerender 294 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698