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

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

Issue 6625066: Add pending preloads indexed by routing id. Start preloading once we navigate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Responding to comments Created 9 years, 9 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 "content/common/resource_response.h" 8 #include "content/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"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 if (rrh.headers->response_code() != 200) 45 if (rrh.headers->response_code() != 200)
46 return false; 46 return false;
47 return true; 47 return true;
48 } 48 }
49 49
50 } // namespace 50 } // namespace
51 51
52 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate( 52 PrerenderResourceHandler* PrerenderResourceHandler::MaybeCreate(
53 const net::URLRequest& request, 53 const net::URLRequest& request,
54 ChromeURLRequestContext* context, 54 ChromeURLRequestContext* context,
55 ResourceHandler* next_handler) { 55 ResourceHandler* next_handler,
56 bool is_from_prerender,
57 int child_id,
58 int route_id) {
56 if (!context || !context->prerender_manager()) 59 if (!context || !context->prerender_manager())
57 return NULL; 60 return NULL;
58 if (request.load_flags() & net::LOAD_PRERENDER) {
59 RecordFinalStatus(FINAL_STATUS_NESTED);
60 return NULL;
61 }
62 if (!(request.load_flags() & net::LOAD_PREFETCH)) 61 if (!(request.load_flags() & net::LOAD_PREFETCH))
63 return NULL; 62 return NULL;
64 if (!ShouldPrerenderURL(request.url())) 63 if (!ShouldPrerenderURL(request.url()))
65 return NULL; 64 return NULL;
66 if (request.method() != "GET") 65 if (request.method() != "GET")
67 return NULL; 66 return NULL;
67
68 return new PrerenderResourceHandler(request, 68 return new PrerenderResourceHandler(request,
69 next_handler, 69 next_handler,
70 context->prerender_manager()); 70 context->prerender_manager(),
71 is_from_prerender,
72 child_id,
73 route_id);
71 } 74 }
72 75
73 PrerenderResourceHandler::PrerenderResourceHandler( 76 PrerenderResourceHandler::PrerenderResourceHandler(
74 const net::URLRequest& request, 77 const net::URLRequest& request,
75 ResourceHandler* next_handler, 78 ResourceHandler* next_handler,
76 PrerenderManager* prerender_manager) 79 PrerenderManager* prerender_manager,
80 bool make_pending,
81 int child_id,
82 int route_id)
77 : next_handler_(next_handler), 83 : next_handler_(next_handler),
78 prerender_manager_(prerender_manager), 84 prerender_manager_(prerender_manager),
79 ALLOW_THIS_IN_INITIALIZER_LIST( 85 ALLOW_THIS_IN_INITIALIZER_LIST(
80 prerender_callback_(NewCallback( 86 prerender_callback_(NewCallback(
81 this, &PrerenderResourceHandler::StartPrerender))), 87 this, &PrerenderResourceHandler::StartPrerender))),
82 request_(request) { 88 request_(request),
89 child_id_(child_id),
90 route_id_(route_id),
91 make_pending_(make_pending) {
83 DCHECK(next_handler); 92 DCHECK(next_handler);
84 DCHECK(prerender_manager); 93 DCHECK(prerender_manager);
85 } 94 }
86 95
87 PrerenderResourceHandler::PrerenderResourceHandler( 96 PrerenderResourceHandler::PrerenderResourceHandler(
88 const net::URLRequest& request, 97 const net::URLRequest& request,
89 ResourceHandler* next_handler, 98 ResourceHandler* next_handler,
90 PrerenderCallback* callback) 99 PrerenderCallback* callback)
91 : next_handler_(next_handler), 100 : next_handler_(next_handler),
92 prerender_callback_(callback), 101 prerender_callback_(callback),
(...skipping 29 matching lines...) Expand all
122 bool PrerenderResourceHandler::OnResponseStarted(int request_id, 131 bool PrerenderResourceHandler::OnResponseStarted(int request_id,
123 ResourceResponse* response) { 132 ResourceResponse* response) {
124 if (ShouldPrerender(response)) { 133 if (ShouldPrerender(response)) {
125 DCHECK(ValidateAliasURLs(alias_urls_)); 134 DCHECK(ValidateAliasURLs(alias_urls_));
126 BrowserThread::PostTask( 135 BrowserThread::PostTask(
127 BrowserThread::UI, 136 BrowserThread::UI,
128 FROM_HERE, 137 FROM_HERE,
129 NewRunnableMethod( 138 NewRunnableMethod(
130 this, 139 this,
131 &PrerenderResourceHandler::RunCallbackFromUIThread, 140 &PrerenderResourceHandler::RunCallbackFromUIThread,
141 std::make_pair(child_id_, route_id_),
132 url_, 142 url_,
133 alias_urls_, 143 alias_urls_,
134 GURL(request_.referrer()))); 144 GURL(request_.referrer()),
145 make_pending_));
135 } 146 }
136 return next_handler_->OnResponseStarted(request_id, response); 147 return next_handler_->OnResponseStarted(request_id, response);
137 } 148 }
138 149
139 bool PrerenderResourceHandler::OnWillStart(int request_id, 150 bool PrerenderResourceHandler::OnWillStart(int request_id,
140 const GURL& url, 151 const GURL& url,
141 bool* defer) { 152 bool* defer) {
142 bool will_start = next_handler_->OnWillStart(request_id, url, defer); 153 bool will_start = next_handler_->OnWillStart(request_id, url, defer);
143 if (will_start) { 154 if (will_start) {
144 if (!ShouldPrerenderURL(url)) 155 if (!ShouldPrerenderURL(url))
(...skipping 21 matching lines...) Expand all
166 const net::URLRequestStatus& status, 177 const net::URLRequestStatus& status,
167 const std::string& security_info) { 178 const std::string& security_info) {
168 return next_handler_->OnResponseCompleted(request_id, status, security_info); 179 return next_handler_->OnResponseCompleted(request_id, status, security_info);
169 } 180 }
170 181
171 void PrerenderResourceHandler::OnRequestClosed() { 182 void PrerenderResourceHandler::OnRequestClosed() {
172 next_handler_->OnRequestClosed(); 183 next_handler_->OnRequestClosed();
173 } 184 }
174 185
175 void PrerenderResourceHandler::RunCallbackFromUIThread( 186 void PrerenderResourceHandler::RunCallbackFromUIThread(
187 std::pair<int, int> child_route_id_pair,
176 const GURL& url, 188 const GURL& url,
177 const std::vector<GURL>& alias_urls, 189 const std::vector<GURL>& alias_urls,
178 const GURL& referrer) { 190 const GURL& referrer,
191 bool make_pending) {
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 192 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
180 prerender_callback_->Run(url, alias_urls, referrer); 193 prerender_callback_->Run(child_route_id_pair,
194 url, alias_urls, referrer,
195 make_pending);
181 } 196 }
182 197
183 void PrerenderResourceHandler::StartPrerender( 198 void PrerenderResourceHandler::StartPrerender(
199 std::pair<int, int> child_route_id_pair,
184 const GURL& url, 200 const GURL& url,
185 const std::vector<GURL>& alias_urls, 201 const std::vector<GURL>& alias_urls,
186 const GURL& referrer) { 202 const GURL& referrer,
203 bool make_pending) {
187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 204 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
188 prerender_manager_->AddPreload(url, alias_urls, referrer); 205 if (make_pending) {
206 prerender_manager_->AddPendingPreload(child_route_id_pair,
207 url, alias_urls, referrer);
208 } else
209 prerender_manager_->AddPreload(url, alias_urls, referrer);
cbentzel 2011/03/21 21:07:38 Nit: braces go here as well [same for else than if
dominich 2011/03/22 15:54:45 Done.
189 } 210 }
190 211
191 } // namespace prerender 212 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698