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

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

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