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

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

Issue 9226037: Cancel prerenders from Omnibox if we navigate to a different URL than predicted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove debug logging Created 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 for (std::list<PrerenderContentsData>::const_iterator it = 283 for (std::list<PrerenderContentsData>::const_iterator it =
284 prerender_list_.begin(); 284 prerender_list_.begin();
285 it != prerender_list_.end(); 285 it != prerender_list_.end();
286 ++it) { 286 ++it) {
287 if (it->contents_->IsPendingEntry(url)) 287 if (it->contents_->IsPendingEntry(url))
288 return true; 288 return true;
289 } 289 }
290 return false; 290 return false;
291 } 291 }
292 292
293 bool PrerenderManager::IsPrerendering(const GURL& url) {
Peter Kasting 2012/01/21 00:22:52 Nit: Can you make this file's definition order mat
dominich 2012/01/23 22:50:07 Done.
294 DCHECK(CalledOnValidThread());
295 return (FindEntry(url) != NULL);
296 }
297
293 PrerenderManager::PrerenderManager(Profile* profile, 298 PrerenderManager::PrerenderManager(Profile* profile,
294 PrerenderTracker* prerender_tracker) 299 PrerenderTracker* prerender_tracker)
295 : enabled_(true), 300 : enabled_(true),
296 profile_(profile), 301 profile_(profile),
297 prerender_tracker_(prerender_tracker), 302 prerender_tracker_(prerender_tracker),
298 prerender_contents_factory_(PrerenderContents::CreateFactory()), 303 prerender_contents_factory_(PrerenderContents::CreateFactory()),
299 last_prerender_start_time_(GetCurrentTimeTicks() - 304 last_prerender_start_time_(GetCurrentTimeTicks() -
300 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), 305 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)),
301 weak_factory_(this), 306 weak_factory_(this),
302 prerender_history_(new PrerenderHistory(kHistoryLength)), 307 prerender_history_(new PrerenderHistory(kHistoryLength)),
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 494
490 void PrerenderManager::CancelAllPrerenders() { 495 void PrerenderManager::CancelAllPrerenders() {
491 DCHECK(CalledOnValidThread()); 496 DCHECK(CalledOnValidThread());
492 while (!prerender_list_.empty()) { 497 while (!prerender_list_.empty()) {
493 PrerenderContentsData data = prerender_list_.front(); 498 PrerenderContentsData data = prerender_list_.front();
494 DCHECK(data.contents_); 499 DCHECK(data.contents_);
495 data.contents_->Destroy(FINAL_STATUS_CANCELLED); 500 data.contents_->Destroy(FINAL_STATUS_CANCELLED);
496 } 501 }
497 } 502 }
498 503
504 void PrerenderManager::CancelOmniboxPrerenders() {
505 DCHECK(CalledOnValidThread());
506 // Calling Destroy will invalidate iterators as it erases the entry from
507 // |prerender_list_| so we must first gather those contents to destroy and
508 // then destroy them.
Peter Kasting 2012/01/21 00:22:52 Nit: Our normal practice for this would be to do o
dominich 2012/01/23 22:50:07 Done.
509 std::vector<PrerenderContents*> destroy_contents;
510 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
511 it != prerender_list_.end();
512 ++it) {
513 if (it->contents_->origin() == ORIGIN_OMNIBOX)
514 destroy_contents.push_back(it->contents_);
515 }
516
517 for (std::vector<PrerenderContents*>::iterator it = destroy_contents.begin();
518 it != destroy_contents.end();
519 ++it) {
520 (*it)->Destroy(FINAL_STATUS_CANCELLED);
521 }
522 }
523
499 void PrerenderManager::DeleteOldEntries() { 524 void PrerenderManager::DeleteOldEntries() {
500 DCHECK(CalledOnValidThread()); 525 DCHECK(CalledOnValidThread());
501 while (!prerender_list_.empty()) { 526 while (!prerender_list_.empty()) {
502 PrerenderContentsData data = prerender_list_.front(); 527 PrerenderContentsData data = prerender_list_.front();
503 if (IsPrerenderElementFresh(data.start_time_)) 528 if (IsPrerenderElementFresh(data.start_time_))
504 return; 529 return;
505 data.contents_->Destroy(FINAL_STATUS_TIMED_OUT); 530 data.contents_->Destroy(FINAL_STATUS_TIMED_OUT);
506 } 531 }
507 MaybeStopSchedulingPeriodicCleanups(); 532 MaybeStopSchedulingPeriodicCleanups();
508 } 533 }
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 if (!render_process_host || !render_process_host->GetBrowserContext()) 1141 if (!render_process_host || !render_process_host->GetBrowserContext())
1117 return NULL; 1142 return NULL;
1118 Profile* profile = Profile::FromBrowserContext( 1143 Profile* profile = Profile::FromBrowserContext(
1119 render_process_host->GetBrowserContext()); 1144 render_process_host->GetBrowserContext());
1120 if (!profile) 1145 if (!profile)
1121 return NULL; 1146 return NULL;
1122 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1147 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1123 } 1148 }
1124 1149
1125 } // namespace prerender 1150 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698