Index: chrome/browser/prerender/prerender_resource_handler.cc |
diff --git a/chrome/browser/prerender/prerender_resource_handler.cc b/chrome/browser/prerender/prerender_resource_handler.cc |
index 0d60610bd32b01d083f7a08e899e0bfb9d807a5d..65ec6d392e3b715d720bb6818557e1522c1162a0 100644 |
--- a/chrome/browser/prerender/prerender_resource_handler.cc |
+++ b/chrome/browser/prerender/prerender_resource_handler.cc |
@@ -14,16 +14,32 @@ namespace prerender { |
namespace { |
-bool ShouldPrerender(const GURL& url, const ResourceResponse* response) { |
+bool ShouldPrerenderURL(const GURL& url) { |
+ if (!url.is_valid()) |
+ return false; |
+ if (!url.SchemeIs("http")) { |
+ RecordFinalStatus(FINAL_STATUS_HTTPS); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+bool ValidateAliasURLs(const std::vector<GURL>& urls) { |
+ for (std::vector<GURL>::const_iterator it = urls.begin(); |
+ it != urls.end(); |
+ ++it) { |
+ if (!ShouldPrerenderURL(*it)) |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+bool ShouldPrerender(const ResourceResponse* response) { |
if (!response) |
return false; |
const ResourceResponseHead& rrh = response->response_head; |
- if (!url.is_valid()) |
- return false; |
if (!rrh.headers) |
return false; |
- if (!(url.SchemeIs("http") || url.SchemeIs("https"))) |
- return false; |
if (rrh.mime_type != "text/html") |
return false; |
if (rrh.headers->response_code() != 200) |
@@ -41,6 +57,8 @@ PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate( |
return NULL; |
if (!(request.load_flags() & net::LOAD_PREFETCH)) |
return NULL; |
+ if (!ShouldPrerenderURL(request.url())) |
+ return NULL; |
if (request.method() != "GET") |
return NULL; |
return new PrerenderResourceHandler(request, |
@@ -89,6 +107,8 @@ bool PrerenderResourceHandler::OnRequestRedirected(int request_id, |
bool will_redirect = next_handler_->OnRequestRedirected( |
request_id, url, response, defer); |
if (will_redirect) { |
+ if (!ShouldPrerenderURL(url)) |
+ return false; |
alias_urls_.push_back(url); |
url_ = url; |
} |
@@ -97,7 +117,8 @@ bool PrerenderResourceHandler::OnRequestRedirected(int request_id, |
bool PrerenderResourceHandler::OnResponseStarted(int request_id, |
ResourceResponse* response) { |
- if (ShouldPrerender(url_, response)) { |
+ if (ShouldPrerender(response)) { |
+ DCHECK(ValidateAliasURLs(alias_urls_)); |
BrowserThread::PostTask( |
BrowserThread::UI, |
FROM_HERE, |
@@ -116,6 +137,8 @@ bool PrerenderResourceHandler::OnWillStart(int request_id, |
bool* defer) { |
bool will_start = next_handler_->OnWillStart(request_id, url, defer); |
if (will_start) { |
+ if (!ShouldPrerenderURL(url)) |
+ return false; |
alias_urls_.push_back(url); |
url_ = url; |
} |