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

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();
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, alias_urls),
53 GetCurrentTime(), url); 54 GetCurrentTime(), url);
54 prerender_list_.push_back(data); 55 prerender_list_.push_back(data);
55 data.contents_->StartPrerendering(); 56 data.contents_->StartPrerendering();
56 while (prerender_list_.size() > max_elements_) { 57 while (prerender_list_.size() > max_elements_) {
57 data = prerender_list_.front(); 58 data = prerender_list_.front();
58 prerender_list_.pop_front(); 59 prerender_list_.pop_front();
59 delete data.contents_; 60 delete data.contents_;
60 } 61 }
61 } 62 }
62 63
63 void PrerenderManager::DeleteOldEntries() { 64 void PrerenderManager::DeleteOldEntries() {
64 while (prerender_list_.size() > 0) { 65 while (prerender_list_.size() > 0) {
65 PrerenderContentsData data = prerender_list_.front(); 66 PrerenderContentsData data = prerender_list_.front();
66 if (IsPrerenderElementFresh(data.start_time_)) 67 if (IsPrerenderElementFresh(data.start_time_))
67 return; 68 return;
68 prerender_list_.pop_front(); 69 prerender_list_.pop_front();
69 delete data.contents_; 70 delete data.contents_;
70 } 71 }
71 } 72 }
72 73
73 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) { 74 PrerenderContents* PrerenderManager::GetEntry(const GURL& url) {
74 DeleteOldEntries(); 75 DeleteOldEntries();
75 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); 76 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
76 it != prerender_list_.end(); 77 it != prerender_list_.end();
77 ++it) { 78 ++it) {
78 if (it->url_ == url) { 79 PrerenderContents* pc = it->contents_;
80 if (pc->MatchesURL(url)) {
79 PrerenderContents* pc = it->contents_; 81 PrerenderContents* pc = it->contents_;
80 prerender_list_.erase(it); 82 prerender_list_.erase(it);
81 return pc; 83 return pc;
82 } 84 }
83 } 85 }
84 // Entry not found. 86 // Entry not found.
85 return NULL; 87 return NULL;
86 } 88 }
87 89
88 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) { 90 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 124
123 base::Time PrerenderManager::GetCurrentTime() const { 125 base::Time PrerenderManager::GetCurrentTime() const {
124 return base::Time::Now(); 126 return base::Time::Now();
125 } 127 }
126 128
127 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { 129 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const {
128 base::Time now = GetCurrentTime(); 130 base::Time now = GetCurrentTime();
129 return (now - start < max_prerender_age_); 131 return (now - start < max_prerender_age_);
130 } 132 }
131 133
132 PrerenderContents* PrerenderManager::CreatePrerenderContents(const GURL& url) { 134 PrerenderContents* PrerenderManager::CreatePrerenderContents(
133 return new PrerenderContents(this, profile_, url); 135 const GURL& url,
136 const std::vector<GURL>& alias_urls) {
137 return new PrerenderContents(this, profile_, url, alias_urls);
134 } 138 }
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698