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

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

Issue 9623018: Prerendered pages are swapped in at browser::Navigate time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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_tab_helper.h" 5 #include "chrome/browser/prerender/prerender_tab_helper.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "chrome/browser/prerender/prerender_manager.h" 10 #include "chrome/browser/prerender/prerender_manager.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 PrerenderTabHelper::~PrerenderTabHelper() { 177 PrerenderTabHelper::~PrerenderTabHelper() {
178 } 178 }
179 179
180 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( 180 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl(
181 const GURL& url, 181 const GURL& url,
182 const GURL& opener_url) { 182 const GURL& opener_url) {
183 url_ = url; 183 url_ = url;
184 RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL); 184 RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL);
185 if (IsTopSite(url)) 185 if (IsTopSite(url))
186 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL); 186 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL);
187 if (!tab_->core_tab_helper()->delegate())
188 return; // PrerenderManager needs a delegate to handle the swap.
189 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 187 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
190 if (!prerender_manager) 188 if (!prerender_manager)
191 return; 189 return;
192 if (prerender_manager->IsWebContentsPrerendering(web_contents())) 190 if (prerender_manager->IsWebContentsPrerendering(web_contents()))
193 return; 191 return;
194 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); 192 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
195 MaybeUsePrerenderedPage(url, opener_url);
196 } 193 }
197 194
198 void PrerenderTabHelper::UpdateTargetURL(int32 page_id, const GURL& url) { 195 void PrerenderTabHelper::UpdateTargetURL(int32 page_id, const GURL& url) {
199 for (int i = 0; i < kNumHoverThresholds; i++) 196 for (int i = 0; i < kNumHoverThresholds; i++)
200 last_hovers_[i].RecordHover(url); 197 last_hovers_[i].RecordHover(url);
201 198
202 if (url != current_hover_url_) { 199 if (url != current_hover_url_) {
203 MaybeLogCurrentHover(false); 200 MaybeLogCurrentHover(false);
204 current_hover_url_ = url; 201 current_hover_url_ = url;
205 current_hover_time_ = base::TimeTicks::Now(); 202 current_hover_time_ = base::TimeTicks::Now();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 237
241 MaybeLogCurrentHover(current_hover_url_ == validated_url); 238 MaybeLogCurrentHover(current_hover_url_ == validated_url);
242 } 239 }
243 } 240 }
244 241
245 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { 242 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const {
246 return PrerenderManagerFactory::GetForProfile( 243 return PrerenderManagerFactory::GetForProfile(
247 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); 244 Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
248 } 245 }
249 246
250 bool PrerenderTabHelper::MaybeUsePrerenderedPage(const GURL& url,
251 const GURL& opener_url) {
252 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
253 if (!prerender_manager)
254 return false;
255 DCHECK(!prerender_manager->IsWebContentsPrerendering(web_contents()));
256 return prerender_manager->MaybeUsePrerenderedPage(web_contents(),
257 url,
258 opener_url);
259 }
260
261 bool PrerenderTabHelper::IsPrerendering() { 247 bool PrerenderTabHelper::IsPrerendering() {
262 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 248 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
263 if (!prerender_manager) 249 if (!prerender_manager)
264 return false; 250 return false;
265 return prerender_manager->IsWebContentsPrerendering(web_contents()); 251 return prerender_manager->IsWebContentsPrerendering(web_contents());
266 } 252 }
267 253
268 void PrerenderTabHelper::PrerenderSwappedIn() { 254 void PrerenderTabHelper::PrerenderSwappedIn() {
269 // Ensure we are not prerendering any more. 255 // Ensure we are not prerendering any more.
270 DCHECK(!IsPrerendering()); 256 DCHECK(!IsPrerendering());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 288
303 current_hover_url_ = GURL(); 289 current_hover_url_ = GURL();
304 } 290 }
305 291
306 bool PrerenderTabHelper::IsTopSite(const GURL& url) { 292 bool PrerenderTabHelper::IsTopSite(const GURL& url) {
307 PrerenderManager* pm = MaybeGetPrerenderManager(); 293 PrerenderManager* pm = MaybeGetPrerenderManager();
308 return (pm && pm->IsTopSite(url)); 294 return (pm && pm->IsTopSite(url));
309 } 295 }
310 296
311 } // namespace prerender 297 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698