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

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: fetch/merge 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) { 61 if (request.load_flags() & net::LOAD_PRERENDER) {
59 RecordFinalStatus(FINAL_STATUS_NESTED); 62 RecordFinalStatus(FINAL_STATUS_NESTED);
60 return NULL; 63 return NULL;
61 } 64 }
62 if (!(request.load_flags() & net::LOAD_PREFETCH)) 65 if (!(request.load_flags() & net::LOAD_PREFETCH))
63 return NULL; 66 return NULL;
64 if (!ShouldPrerenderURL(request.url())) 67 if (!ShouldPrerenderURL(request.url()))
65 return NULL; 68 return NULL;
66 if (request.method() != "GET") 69 if (request.method() != "GET")
67 return NULL; 70 return NULL;
71
68 return new PrerenderResourceHandler(request, 72 return new PrerenderResourceHandler(request,
69 next_handler, 73 next_handler,
70 context->prerender_manager()); 74 context->prerender_manager(),
75 is_from_prerender,
76 child_id,
77 route_id);
71 } 78 }
72 79
73 PrerenderResourceHandler::PrerenderResourceHandler( 80 PrerenderResourceHandler::PrerenderResourceHandler(
74 const net::URLRequest& request, 81 const net::URLRequest& request,
75 ResourceHandler* next_handler, 82 ResourceHandler* next_handler,
76 PrerenderManager* prerender_manager) 83 PrerenderManager* prerender_manager,
84 bool make_pending,
85 int child_id,
86 int route_id)
77 : next_handler_(next_handler), 87 : next_handler_(next_handler),
78 prerender_manager_(prerender_manager), 88 prerender_manager_(prerender_manager),
79 ALLOW_THIS_IN_INITIALIZER_LIST( 89 ALLOW_THIS_IN_INITIALIZER_LIST(
80 prerender_callback_(NewCallback( 90 prerender_callback_(NewCallback(
81 this, &PrerenderResourceHandler::StartPrerender))), 91 this, &PrerenderResourceHandler::StartPrerender))),
82 request_(request) { 92 request_(request),
93 child_id_(child_id),
94 route_id_(route_id),
95 make_pending_(make_pending) {
83 DCHECK(next_handler); 96 DCHECK(next_handler);
84 DCHECK(prerender_manager); 97 DCHECK(prerender_manager);
85 } 98 }
86 99
87 PrerenderResourceHandler::PrerenderResourceHandler( 100 PrerenderResourceHandler::PrerenderResourceHandler(
88 const net::URLRequest& request, 101 const net::URLRequest& request,
89 ResourceHandler* next_handler, 102 ResourceHandler* next_handler,
90 PrerenderCallback* callback) 103 PrerenderCallback* callback)
91 : next_handler_(next_handler), 104 : next_handler_(next_handler),
92 prerender_callback_(callback), 105 prerender_callback_(callback),
(...skipping 29 matching lines...) Expand all
122 bool PrerenderResourceHandler::OnResponseStarted(int request_id, 135 bool PrerenderResourceHandler::OnResponseStarted(int request_id,
123 ResourceResponse* response) { 136 ResourceResponse* response) {
124 if (ShouldPrerender(response)) { 137 if (ShouldPrerender(response)) {
125 DCHECK(ValidateAliasURLs(alias_urls_)); 138 DCHECK(ValidateAliasURLs(alias_urls_));
126 BrowserThread::PostTask( 139 BrowserThread::PostTask(
127 BrowserThread::UI, 140 BrowserThread::UI,
128 FROM_HERE, 141 FROM_HERE,
129 NewRunnableMethod( 142 NewRunnableMethod(
130 this, 143 this,
131 &PrerenderResourceHandler::RunCallbackFromUIThread, 144 &PrerenderResourceHandler::RunCallbackFromUIThread,
145 std::make_pair(child_id_, route_id_),
132 url_, 146 url_,
133 alias_urls_, 147 alias_urls_,
134 GURL(request_.referrer()))); 148 GURL(request_.referrer()),
149 make_pending_));
135 } 150 }
136 return next_handler_->OnResponseStarted(request_id, response); 151 return next_handler_->OnResponseStarted(request_id, response);
137 } 152 }
138 153
139 bool PrerenderResourceHandler::OnWillStart(int request_id, 154 bool PrerenderResourceHandler::OnWillStart(int request_id,
140 const GURL& url, 155 const GURL& url,
141 bool* defer) { 156 bool* defer) {
142 bool will_start = next_handler_->OnWillStart(request_id, url, defer); 157 bool will_start = next_handler_->OnWillStart(request_id, url, defer);
143 if (will_start) { 158 if (will_start) {
144 if (!ShouldPrerenderURL(url)) 159 if (!ShouldPrerenderURL(url))
(...skipping 21 matching lines...) Expand all
166 const net::URLRequestStatus& status, 181 const net::URLRequestStatus& status,
167 const std::string& security_info) { 182 const std::string& security_info) {
168 return next_handler_->OnResponseCompleted(request_id, status, security_info); 183 return next_handler_->OnResponseCompleted(request_id, status, security_info);
169 } 184 }
170 185
171 void PrerenderResourceHandler::OnRequestClosed() { 186 void PrerenderResourceHandler::OnRequestClosed() {
172 next_handler_->OnRequestClosed(); 187 next_handler_->OnRequestClosed();
173 } 188 }
174 189
175 void PrerenderResourceHandler::RunCallbackFromUIThread( 190 void PrerenderResourceHandler::RunCallbackFromUIThread(
191 std::pair<int, int> child_route_id_pair,
176 const GURL& url, 192 const GURL& url,
177 const std::vector<GURL>& alias_urls, 193 const std::vector<GURL>& alias_urls,
178 const GURL& referrer) { 194 const GURL& referrer,
195 bool make_pending) {
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 196 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
180 prerender_callback_->Run(url, alias_urls, referrer); 197 prerender_callback_->Run(child_route_id_pair,
198 url, alias_urls, referrer,
199 make_pending);
181 } 200 }
182 201
183 void PrerenderResourceHandler::StartPrerender( 202 void PrerenderResourceHandler::StartPrerender(
203 std::pair<int, int> child_route_id_pair,
184 const GURL& url, 204 const GURL& url,
185 const std::vector<GURL>& alias_urls, 205 const std::vector<GURL>& alias_urls,
186 const GURL& referrer) { 206 const GURL& referrer,
207 bool make_pending) {
187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
188 prerender_manager_->AddPreload(url, alias_urls, referrer); 209 if (make_pending)
cbentzel 2011/03/21 19:46:04 Nit: add braces
dominich 2011/03/21 20:25:51 Done.
210 prerender_manager_->AddPendingPreload(child_route_id_pair,
211 url, alias_urls, referrer);
212 else
213 prerender_manager_->AddPreload(url, alias_urls, referrer);
189 } 214 }
190 215
191 } // namespace prerender 216 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698