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

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

Issue 6255005: Browser test for prerendering in general (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Added missing file (again) 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/browser_thread.h"
10 #include "chrome/browser/prerender/prerender_contents.h" 11 #include "chrome/browser/prerender/prerender_contents.h"
11 #include "chrome/browser/renderer_host/render_view_host.h" 12 #include "chrome/browser/renderer_host/render_view_host.h"
12 #include "chrome/browser/tab_contents/tab_contents.h" 13 #include "chrome/browser/tab_contents/tab_contents.h"
13 #include "chrome/browser/tab_contents/render_view_host_manager.h" 14 #include "chrome/browser/tab_contents/render_view_host_manager.h"
14 #include "chrome/common/render_messages.h" 15 #include "chrome/common/render_messages.h"
15 16
16 struct PrerenderManager::PrerenderContentsData { 17 struct PrerenderManager::PrerenderContentsData {
17 PrerenderContents* contents_; 18 PrerenderContents* contents_;
18 base::Time start_time_; 19 base::Time start_time_;
19 GURL url_; 20 GURL url_;
20 PrerenderContentsData(PrerenderContents* contents, 21 PrerenderContentsData(PrerenderContents* contents,
21 base::Time start_time, 22 base::Time start_time,
22 GURL url) 23 GURL url)
23 : contents_(contents), 24 : contents_(contents),
24 start_time_(start_time), 25 start_time_(start_time),
25 url_(url) { 26 url_(url) {
26 } 27 }
27 }; 28 };
28 29
29 PrerenderManager::PrerenderManager(Profile* profile) 30 PrerenderManager::PrerenderManager(Profile* profile)
30 : profile_(profile), 31 : profile_(profile),
31 max_prerender_age_(base::TimeDelta::FromSeconds( 32 max_prerender_age_(base::TimeDelta::FromSeconds(
32 kDefaultMaxPrerenderAgeSeconds)), 33 kDefaultMaxPrerenderAgeSeconds)),
33 max_elements_(kDefaultMaxPrerenderElements) { 34 max_elements_(kDefaultMaxPrerenderElements),
35 prerender_contents_factory_(PrerenderContents::CreateFactory()) {
34 } 36 }
35 37
36 PrerenderManager::~PrerenderManager() { 38 PrerenderManager::~PrerenderManager() {
37 while (prerender_list_.size() > 0) { 39 while (prerender_list_.size() > 0) {
38 PrerenderContentsData data = prerender_list_.front(); 40 PrerenderContentsData data = prerender_list_.front();
39 prerender_list_.pop_front(); 41 prerender_list_.pop_front();
40 delete data.contents_; 42 delete data.contents_;
41 } 43 }
42 } 44 }
43 45
46 void PrerenderManager::SetPrerenderContentsFactory(
47 PrerenderContents::Factory* prerender_contents_factory) {
48 prerender_contents_factory_.reset(prerender_contents_factory);
49 }
50
44 void PrerenderManager::AddPreload(const GURL& url, 51 void PrerenderManager::AddPreload(const GURL& url,
45 const std::vector<GURL>& alias_urls) { 52 const std::vector<GURL>& alias_urls) {
46 DCHECK(CalledOnValidThread()); 53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
47 DeleteOldEntries(); 54 DeleteOldEntries();
48 // If the URL already exists in the set of preloaded URLs, don't do anything. 55 // If the URL already exists in the set of preloaded URLs, don't do anything.
49 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); 56 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
50 it != prerender_list_.end(); 57 it != prerender_list_.end();
51 ++it) { 58 ++it) {
52 if (it->url_ == url) 59 if (it->url_ == url)
53 return; 60 return;
54 } 61 }
55 PrerenderContentsData data(CreatePrerenderContents(url, alias_urls), 62 PrerenderContentsData data(CreatePrerenderContents(url, alias_urls),
56 GetCurrentTime(), url); 63 GetCurrentTime(), url);
(...skipping 26 matching lines...) Expand all
83 PrerenderContents* pc = it->contents_; 90 PrerenderContents* pc = it->contents_;
84 prerender_list_.erase(it); 91 prerender_list_.erase(it);
85 return pc; 92 return pc;
86 } 93 }
87 } 94 }
88 // Entry not found. 95 // Entry not found.
89 return NULL; 96 return NULL;
90 } 97 }
91 98
92 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) { 99 bool PrerenderManager::MaybeUsePreloadedPage(TabContents* tc, const GURL& url) {
93 DCHECK(CalledOnValidThread()); 100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
94 scoped_ptr<PrerenderContents> pc(GetEntry(url)); 101 scoped_ptr<PrerenderContents> pc(GetEntry(url));
95 if (pc.get() == NULL) 102 if (pc.get() == NULL)
96 return false; 103 return false;
97 104
98 RenderViewHost* rvh = pc->render_view_host(); 105 RenderViewHost* rvh = pc->render_view_host();
99 pc->set_render_view_host(NULL); 106 pc->set_render_view_host(NULL);
100 rvh->Send(new ViewMsg_DisplayPrerenderedPage(rvh->routing_id())); 107 rvh->Send(new ViewMsg_DisplayPrerenderedPage(rvh->routing_id()));
101 tc->SwapInRenderViewHost(rvh); 108 tc->SwapInRenderViewHost(rvh);
102 109
103 ViewHostMsg_FrameNavigate_Params* p = pc->navigate_params(); 110 ViewHostMsg_FrameNavigate_Params* p = pc->navigate_params();
104 if (p != NULL) 111 if (p != NULL)
105 tc->DidNavigate(rvh, *p); 112 tc->DidNavigate(rvh, *p);
106 113
107 string16 title = pc->title(); 114 string16 title = pc->title();
108 if (!title.empty()) 115 if (!title.empty())
109 tc->UpdateTitle(rvh, pc->page_id(), UTF16ToWideHack(title)); 116 tc->UpdateTitle(rvh, pc->page_id(), UTF16ToWideHack(title));
110 117
111 return true; 118 return true;
112 } 119 }
113 120
114 void PrerenderManager::RemoveEntry(PrerenderContents* entry) { 121 void PrerenderManager::RemoveEntry(PrerenderContents* entry) {
115 DCHECK(CalledOnValidThread()); 122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
116 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); 123 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
117 it != prerender_list_.end(); 124 it != prerender_list_.end();
118 ++it) { 125 ++it) {
119 if (it->contents_ == entry) { 126 if (it->contents_ == entry) {
120 prerender_list_.erase(it); 127 prerender_list_.erase(it);
121 break; 128 break;
122 } 129 }
123 } 130 }
124 delete entry; 131 delete entry;
125 DeleteOldEntries(); 132 DeleteOldEntries();
126 } 133 }
127 134
128 base::Time PrerenderManager::GetCurrentTime() const { 135 base::Time PrerenderManager::GetCurrentTime() const {
129 return base::Time::Now(); 136 return base::Time::Now();
130 } 137 }
131 138
132 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { 139 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const {
133 base::Time now = GetCurrentTime(); 140 base::Time now = GetCurrentTime();
134 return (now - start < max_prerender_age_); 141 return (now - start < max_prerender_age_);
135 } 142 }
136 143
137 PrerenderContents* PrerenderManager::CreatePrerenderContents( 144 PrerenderContents* PrerenderManager::CreatePrerenderContents(
138 const GURL& url, 145 const GURL& url,
139 const std::vector<GURL>& alias_urls) { 146 const std::vector<GURL>& alias_urls) {
140 return new PrerenderContents(this, profile_, url, alias_urls); 147 return prerender_contents_factory_->CreatePrerenderContents(
148 this, profile_, url, alias_urls);
141 } 149 }
150
151 PrerenderContents* PrerenderManager::FindEntry(const GURL& url) {
152 for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
153 it != prerender_list_.end();
154 ++it) {
155 if (it->contents_->MatchesURL(url))
156 return it->contents_;
157 }
158 // Entry not found.
159 return NULL;
160 }
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