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

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

Issue 6171007: For prerendering, keep track of all the intermediate redirects, and hook into... (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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/prerender/prerender_contents.h" 10 #include "chrome/browser/prerender/prerender_contents.h"
(...skipping 21 matching lines...) Expand all
32 } 32 }
33 33
34 PrerenderManager::~PrerenderManager() { 34 PrerenderManager::~PrerenderManager() {
35 while (prerender_list_.size() > 0) { 35 while (prerender_list_.size() > 0) {
36 PrerenderContentsData data = prerender_list_.front(); 36 PrerenderContentsData data = prerender_list_.front();
37 prerender_list_.pop_front(); 37 prerender_list_.pop_front();
38 delete data.contents_; 38 delete data.contents_;
39 } 39 }
40 } 40 }
41 41
42 void PrerenderManager::AddPreload(const GURL& url) { 42 void PrerenderManager::AddPreload(const GURL& url,
43 const std::vector<GURL>& alias_urls) {
43 DCHECK(CalledOnValidThread()); 44 DCHECK(CalledOnValidThread());
44 DeleteOldEntries(); 45 DeleteOldEntries();
45 // If the URL already exists in the set of preloaded URLs, don't do anything. 46 // If the URL already exists in the set of preloaded URLs, don't do anything.
46 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); 47 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
47 it != prerender_list_.end(); 48 it != prerender_list_.end();
cbentzel 2011/01/12 23:49:53 Do you want to do MatchesUrl() here? url should
48 ++it) { 49 ++it) {
49 if (it->url_ == url) 50 if (it->url_ == url)
50 return; 51 return;
51 } 52 }
52 PrerenderContentsData data(CreatePrerenderContents(url), 53 PrerenderContentsData data(CreatePrerenderContents(url),
53 GetCurrentTime(), url); 54 GetCurrentTime(), url);
54 prerender_list_.push_back(data); 55 prerender_list_.push_back(data);
56 data.contents_->AddAliasURLs(alias_urls);
55 data.contents_->StartPrerendering(); 57 data.contents_->StartPrerendering();
56 while (prerender_list_.size() > max_elements_) { 58 while (prerender_list_.size() > max_elements_) {
57 data = prerender_list_.front(); 59 data = prerender_list_.front();
58 prerender_list_.pop_front(); 60 prerender_list_.pop_front();
59 delete data.contents_; 61 delete data.contents_;
60 } 62 }
61 } 63 }
62 64
63 void PrerenderManager::DeleteOldEntries() { 65 void PrerenderManager::DeleteOldEntries() {
64 while (prerender_list_.size() > 0) { 66 while (prerender_list_.size() > 0) {
65 PrerenderContentsData data = prerender_list_.front(); 67 PrerenderContentsData data = prerender_list_.front();
66 if (IsPrerenderElementFresh(data.start_time_)) 68 if (IsPrerenderElementFresh(data.start_time_))
67 return; 69 return;
68 prerender_list_.pop_front(); 70 prerender_list_.pop_front();
69 delete data.contents_; 71 delete data.contents_;
70 } 72 }
71 } 73 }
72 74
73 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) { 75 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) {
74 DeleteOldEntries(); 76 DeleteOldEntries();
75 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); 77 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
76 it != prerender_list_.end(); 78 it != prerender_list_.end();
77 ++it) { 79 ++it) {
78 if (it->url_ == url) { 80 PrerenderContents* pc = it->contents_;
81 if (pc->MatchesUrl(url)) {
79 PrerenderContents* pc = it->contents_; 82 PrerenderContents* pc = it->contents_;
80 prerender_list_.erase(it); 83 prerender_list_.erase(it);
81 return pc; 84 return pc;
82 } 85 }
83 } 86 }
84 // Entry not found. 87 // Entry not found.
85 return NULL; 88 return NULL;
86 } 89 }
87 90
88 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) { 91 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 128 }
126 129
127 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { 130 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const {
128 base::Time now = GetCurrentTime(); 131 base::Time now = GetCurrentTime();
129 return (now - start < max_prerender_age_); 132 return (now - start < max_prerender_age_);
130 } 133 }
131 134
132 PrerenderContents* PrerenderManager::CreatePrerenderContents(const GURL& url) { 135 PrerenderContents* PrerenderManager::CreatePrerenderContents(const GURL& url) {
133 return new PrerenderContents(this, profile_, url); 136 return new PrerenderContents(this, profile_, url);
134 } 137 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698