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

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

Issue 6543010: Revert 75393 - Cancel prerender if any of the visited URLs are https.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_handler.h" 5 #include "chrome/browser/prerender/prerender_resource_handler.h"
6 6
7 #include "chrome/browser/net/chrome_url_request_context.h" 7 #include "chrome/browser/net/chrome_url_request_context.h"
8 #include "chrome/common/resource_response.h" 8 #include "chrome/common/resource_response.h"
9 #include "net/base/load_flags.h" 9 #include "net/base/load_flags.h"
10 #include "net/http/http_response_headers.h" 10 #include "net/http/http_response_headers.h"
11 #include "net/url_request/url_request.h" 11 #include "net/url_request/url_request.h"
12 12
13 namespace prerender { 13 namespace prerender {
14 14
15 namespace { 15 namespace {
16 16
17 bool ShouldPrerenderURL(const GURL& url) { 17 bool ShouldPrerender(const GURL& url, const ResourceResponse* response) {
18 if (!url.is_valid())
19 return false;
20 if (!url.SchemeIs("http")) {
21 RecordFinalStatus(FINAL_STATUS_HTTPS);
22 return false;
23 }
24 return true;
25 }
26
27 bool ValidateAliasURLs(const std::vector<GURL>& urls) {
28 for (std::vector<GURL>::const_iterator it = urls.begin();
29 it != urls.end();
30 ++it) {
31 if (!ShouldPrerenderURL(*it))
32 return false;
33 }
34 return true;
35 }
36
37 bool ShouldPrerender(const ResourceResponse* response) {
38 if (!response) 18 if (!response)
39 return false; 19 return false;
40 const ResourceResponseHead& rrh = response->response_head; 20 const ResourceResponseHead& rrh = response->response_head;
21 if (!url.is_valid())
22 return false;
41 if (!rrh.headers) 23 if (!rrh.headers)
42 return false; 24 return false;
25 if (!(url.SchemeIs("http") || url.SchemeIs("https")))
26 return false;
43 if (rrh.mime_type != "text/html") 27 if (rrh.mime_type != "text/html")
44 return false; 28 return false;
45 if (rrh.headers->response_code() != 200) 29 if (rrh.headers->response_code() != 200)
46 return false; 30 return false;
47 return true; 31 return true;
48 } 32 }
49 33
50 } // namespace 34 } // namespace
51 35
52 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate( 36 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate(
53 const net::URLRequest& request, 37 const net::URLRequest& request,
54 ChromeURLRequestContext* context, 38 ChromeURLRequestContext* context,
55 ResourceHandler* next_handler) { 39 ResourceHandler* next_handler) {
56 if (!context || !context->prerender_manager()) 40 if (!context || !context->prerender_manager())
57 return NULL; 41 return NULL;
58 if (!(request.load_flags() & net::LOAD_PREFETCH)) 42 if (!(request.load_flags() & net::LOAD_PREFETCH))
59 return NULL; 43 return NULL;
60 if (!ShouldPrerenderURL(request.url()))
61 return NULL;
62 if (request.method() != "GET") 44 if (request.method() != "GET")
63 return NULL; 45 return NULL;
64 return new PrerenderResourceHandler(request, 46 return new PrerenderResourceHandler(request,
65 next_handler, 47 next_handler,
66 context->prerender_manager()); 48 context->prerender_manager());
67 } 49 }
68 50
69 PrerenderResourceHandler::PrerenderResourceHandler( 51 PrerenderResourceHandler::PrerenderResourceHandler(
70 const net::URLRequest& request, 52 const net::URLRequest& request,
71 ResourceHandler* next_handler, 53 ResourceHandler* next_handler,
(...skipping 28 matching lines...) Expand all
100 return next_handler_->OnUploadProgress(request_id, position, size); 82 return next_handler_->OnUploadProgress(request_id, position, size);
101 } 83 }
102 84
103 bool PrerenderResourceHandler::OnRequestRedirected(int request_id, 85 bool PrerenderResourceHandler::OnRequestRedirected(int request_id,
104 const GURL& url, 86 const GURL& url,
105 ResourceResponse* response, 87 ResourceResponse* response,
106 bool* defer) { 88 bool* defer) {
107 bool will_redirect = next_handler_->OnRequestRedirected( 89 bool will_redirect = next_handler_->OnRequestRedirected(
108 request_id, url, response, defer); 90 request_id, url, response, defer);
109 if (will_redirect) { 91 if (will_redirect) {
110 if (!ShouldPrerenderURL(url))
111 return false;
112 alias_urls_.push_back(url); 92 alias_urls_.push_back(url);
113 url_ = url; 93 url_ = url;
114 } 94 }
115 return will_redirect; 95 return will_redirect;
116 } 96 }
117 97
118 bool PrerenderResourceHandler::OnResponseStarted(int request_id, 98 bool PrerenderResourceHandler::OnResponseStarted(int request_id,
119 ResourceResponse* response) { 99 ResourceResponse* response) {
120 if (ShouldPrerender(response)) { 100 if (ShouldPrerender(url_, response)) {
121 DCHECK(ValidateAliasURLs(alias_urls_));
122 BrowserThread::PostTask( 101 BrowserThread::PostTask(
123 BrowserThread::UI, 102 BrowserThread::UI,
124 FROM_HERE, 103 FROM_HERE,
125 NewRunnableMethod( 104 NewRunnableMethod(
126 this, 105 this,
127 &PrerenderResourceHandler::RunCallbackFromUIThread, 106 &PrerenderResourceHandler::RunCallbackFromUIThread,
128 url_, 107 url_,
129 alias_urls_, 108 alias_urls_,
130 GURL(request_.referrer()))); 109 GURL(request_.referrer())));
131 } 110 }
132 return next_handler_->OnResponseStarted(request_id, response); 111 return next_handler_->OnResponseStarted(request_id, response);
133 } 112 }
134 113
135 bool PrerenderResourceHandler::OnWillStart(int request_id, 114 bool PrerenderResourceHandler::OnWillStart(int request_id,
136 const GURL& url, 115 const GURL& url,
137 bool* defer) { 116 bool* defer) {
138 bool will_start = next_handler_->OnWillStart(request_id, url, defer); 117 bool will_start = next_handler_->OnWillStart(request_id, url, defer);
139 if (will_start) { 118 if (will_start) {
140 if (!ShouldPrerenderURL(url))
141 return false;
142 alias_urls_.push_back(url); 119 alias_urls_.push_back(url);
143 url_ = url; 120 url_ = url;
144 } 121 }
145 return will_start; 122 return will_start;
146 } 123 }
147 124
148 bool PrerenderResourceHandler::OnWillRead(int request_id, 125 bool PrerenderResourceHandler::OnWillRead(int request_id,
149 net::IOBuffer** buf, 126 net::IOBuffer** buf,
150 int* buf_size, 127 int* buf_size,
151 int min_size) { 128 int min_size) {
(...skipping 26 matching lines...) Expand all
178 155
179 void PrerenderResourceHandler::StartPrerender( 156 void PrerenderResourceHandler::StartPrerender(
180 const GURL& url, 157 const GURL& url,
181 const std::vector<GURL>& alias_urls, 158 const std::vector<GURL>& alias_urls,
182 const GURL& referrer) { 159 const GURL& referrer) {
183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
184 prerender_manager_->AddPreload(url, alias_urls, referrer); 161 prerender_manager_->AddPreload(url, alias_urls, referrer);
185 } 162 }
186 163
187 } // namespace prerender 164 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_resource_handler.h ('k') | chrome/browser/prerender/prerender_resource_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698