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

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

Issue 6312008: Remove revalidation check from PrerenderResourceHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | 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 { 13 namespace {
14 14
15 base::Time DefaultGetCurrentTime() { 15 bool ShouldPrerender(const GURL& url, const ResourceResponse* response) {
16 return base::Time::Now();
17 }
18
19 bool ShouldPrerender(const GURL& url,
20 const ResourceResponse* response,
21 PrerenderResourceHandler::GetCurrentTimeFunction get_time,
22 base::TimeDelta prerender_duration) {
23 if (!response) 16 if (!response)
24 return false; 17 return false;
25 const ResourceResponseHead& rrh = response->response_head; 18 const ResourceResponseHead& rrh = response->response_head;
26 if (!url.is_valid()) 19 if (!url.is_valid())
27 return false; 20 return false;
28 if (!rrh.headers) 21 if (!rrh.headers)
29 return false; 22 return false;
30 if (!(url.SchemeIs("http") || url.SchemeIs("https"))) 23 if (!(url.SchemeIs("http") || url.SchemeIs("https")))
31 return false; 24 return false;
32 if (rrh.mime_type != "text/html") 25 if (rrh.mime_type != "text/html")
33 return false; 26 return false;
34 if (rrh.headers->response_code() != 200) 27 if (rrh.headers->response_code() != 200)
35 return false; 28 return false;
36 if (rrh.headers->RequiresValidation(
37 rrh.request_time,
38 rrh.response_time,
39 get_time() + prerender_duration))
40 return false;
41 return true; 29 return true;
42 } 30 }
43 31
44 } // namespace 32 } // namespace
45 33
46 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate( 34 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate(
47 const net::URLRequest& request, 35 const net::URLRequest& request,
48 ChromeURLRequestContext* context, 36 ChromeURLRequestContext* context,
49 ResourceHandler* next_handler) { 37 ResourceHandler* next_handler) {
50 if (!context || !context->prerender_manager()) 38 if (!context || !context->prerender_manager())
51 return NULL; 39 return NULL;
52 if (!(request.load_flags() & net::LOAD_PREFETCH)) 40 if (!(request.load_flags() & net::LOAD_PREFETCH))
53 return NULL; 41 return NULL;
54 if (request.method() != "GET") 42 if (request.method() != "GET")
55 return NULL; 43 return NULL;
56 return new PrerenderResourceHandler(next_handler, 44 return new PrerenderResourceHandler(next_handler,
57 context->prerender_manager()); 45 context->prerender_manager());
58 } 46 }
59 47
60 PrerenderResourceHandler::PrerenderResourceHandler( 48 PrerenderResourceHandler::PrerenderResourceHandler(
61 ResourceHandler* next_handler, 49 ResourceHandler* next_handler,
62 PrerenderManager* prerender_manager) 50 PrerenderManager* prerender_manager)
63 : next_handler_(next_handler), 51 : next_handler_(next_handler),
64 prerender_manager_(prerender_manager), 52 prerender_manager_(prerender_manager),
65 ALLOW_THIS_IN_INITIALIZER_LIST( 53 ALLOW_THIS_IN_INITIALIZER_LIST(
66 prerender_callback_(NewCallback( 54 prerender_callback_(NewCallback(
67 this, &PrerenderResourceHandler::StartPrerender))), 55 this, &PrerenderResourceHandler::StartPrerender))) {
68 prerender_duration_(
69 base::TimeDelta::FromSeconds(kDefaultPrerenderDurationSeconds)),
70 get_current_time_(&DefaultGetCurrentTime) {
71 DCHECK(next_handler); 56 DCHECK(next_handler);
72 DCHECK(prerender_manager); 57 DCHECK(prerender_manager);
73 } 58 }
74 59
75 // This constructor is only used from unit tests. 60 // This constructor is only used from unit tests.
76 PrerenderResourceHandler::PrerenderResourceHandler( 61 PrerenderResourceHandler::PrerenderResourceHandler(
77 ResourceHandler* next_handler, 62 ResourceHandler* next_handler,
78 PrerenderCallback* callback) 63 PrerenderCallback* callback)
79 : next_handler_(next_handler), 64 : next_handler_(next_handler),
80 prerender_callback_(callback), 65 prerender_callback_(callback) {
81 prerender_duration_(
82 base::TimeDelta::FromSeconds(kDefaultPrerenderDurationSeconds)),
83 get_current_time_(&DefaultGetCurrentTime) {
84 DCHECK(next_handler); 66 DCHECK(next_handler);
85 DCHECK(callback); 67 DCHECK(callback);
86 } 68 }
87 69
88 PrerenderResourceHandler::~PrerenderResourceHandler() { 70 PrerenderResourceHandler::~PrerenderResourceHandler() {
89 } 71 }
90 72
91 bool PrerenderResourceHandler::OnUploadProgress(int request_id, 73 bool PrerenderResourceHandler::OnUploadProgress(int request_id,
92 uint64 position, 74 uint64 position,
93 uint64 size) { 75 uint64 size) {
94 return next_handler_->OnUploadProgress(request_id, position, size); 76 return next_handler_->OnUploadProgress(request_id, position, size);
95 } 77 }
96 78
97 bool PrerenderResourceHandler::OnRequestRedirected(int request_id, 79 bool PrerenderResourceHandler::OnRequestRedirected(int request_id,
98 const GURL& url, 80 const GURL& url,
99 ResourceResponse* response, 81 ResourceResponse* response,
100 bool* defer) { 82 bool* defer) {
101 bool will_redirect = next_handler_->OnRequestRedirected( 83 bool will_redirect = next_handler_->OnRequestRedirected(
102 request_id, url, response, defer); 84 request_id, url, response, defer);
103 if (will_redirect) { 85 if (will_redirect) {
104 alias_urls_.push_back(url); 86 alias_urls_.push_back(url);
105 url_ = url; 87 url_ = url;
106 } 88 }
107 return will_redirect; 89 return will_redirect;
108 } 90 }
109 91
110 bool PrerenderResourceHandler::OnResponseStarted(int request_id, 92 bool PrerenderResourceHandler::OnResponseStarted(int request_id,
111 ResourceResponse* response) { 93 ResourceResponse* response) {
112 if (ShouldPrerender(url_, 94 if (ShouldPrerender(url_, response)) {
113 response,
114 get_current_time_,
115 prerender_duration_)) {
116 BrowserThread::PostTask( 95 BrowserThread::PostTask(
117 BrowserThread::UI, 96 BrowserThread::UI,
118 FROM_HERE, 97 FROM_HERE,
119 NewRunnableMethod( 98 NewRunnableMethod(
120 this, 99 this,
121 &PrerenderResourceHandler::RunCallbackFromUIThread, 100 &PrerenderResourceHandler::RunCallbackFromUIThread,
122 url_, 101 url_,
123 alias_urls_)); 102 alias_urls_));
124 } 103 }
125 return next_handler_->OnResponseStarted(request_id, response); 104 return next_handler_->OnResponseStarted(request_id, response);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
166 prerender_callback_->Run(url, alias_urls); 145 prerender_callback_->Run(url, alias_urls);
167 } 146 }
168 147
169 void PrerenderResourceHandler::StartPrerender(const GURL& url, 148 void PrerenderResourceHandler::StartPrerender(const GURL& url,
170 const std::vector<GURL>& 149 const std::vector<GURL>&
171 alias_urls) { 150 alias_urls) {
172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
173 prerender_manager_->AddPreload(url, alias_urls); 152 prerender_manager_->AddPreload(url, alias_urls);
174 } 153 }
175
176 void PrerenderResourceHandler::set_prerender_duration(base::TimeDelta dt) {
177 prerender_duration_ = dt;
178 }
179
180 void PrerenderResourceHandler::set_get_current_time_function(
181 GetCurrentTimeFunction get_current_time) {
182 DCHECK(get_current_time);
183 get_current_time_ = get_current_time;
184 }
185
186 // Note: this should stay in line with prerendermanager
187 // static
188 const int PrerenderResourceHandler::kDefaultPrerenderDurationSeconds = 20;
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