| 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;
|
| }
|
|
|