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

Side by Side Diff: chrome/browser/prerender/prerender_contents.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_contents.h" 5 #include "chrome/browser/prerender/prerender_contents.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/background_contents_service.h" 8 #include "chrome/browser/background_contents_service.h"
9 #include "chrome/browser/browsing_instance.h" 9 #include "chrome/browser/browsing_instance.h"
10 #include "chrome/browser/prerender/prerender_manager.h" 10 #include "chrome/browser/prerender/prerender_manager.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/renderer_host/render_view_host.h" 12 #include "chrome/browser/renderer_host/render_view_host.h"
13 #include "chrome/browser/renderer_host/site_instance.h" 13 #include "chrome/browser/renderer_host/site_instance.h"
14 #include "chrome/browser/renderer_preferences_util.h" 14 #include "chrome/browser/renderer_preferences_util.h"
15 #include "chrome/common/extensions/extension_constants.h" 15 #include "chrome/common/extensions/extension_constants.h"
16 #include "chrome/common/notification_service.h" 16 #include "chrome/common/notification_service.h"
17 #include "chrome/common/url_constants.h" 17 #include "chrome/common/url_constants.h"
18 #include "chrome/common/view_types.h" 18 #include "chrome/common/view_types.h"
19 #include "chrome/common/render_messages.h"
19 #include "chrome/common/render_messages_params.h" 20 #include "chrome/common/render_messages_params.h"
20 #include "gfx/rect.h" 21 #include "gfx/rect.h"
21 22
22 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, 23 PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager,
23 Profile* profile, 24 Profile* profile,
24 const GURL& url) 25 const GURL& url,
26 const std::vector<GURL>& alias_urls)
25 : prerender_manager_(prerender_manager), 27 : prerender_manager_(prerender_manager),
26 render_view_host_(NULL), 28 render_view_host_(NULL),
27 prerender_url_(url), 29 prerender_url_(url),
28 profile_(profile), 30 profile_(profile),
29 page_id_(0) { 31 page_id_(0) {
30 DCHECK(prerender_manager != NULL); 32 DCHECK(prerender_manager != NULL);
33 AddAliasURL(prerender_url_);
34 for (std::vector<GURL>::const_iterator it = alias_urls.begin();
35 it != alias_urls.end();
36 ++it) {
37 AddAliasURL(*it);
38 }
31 } 39 }
32 40
33 void PrerenderContents::StartPrerendering() { 41 void PrerenderContents::StartPrerendering() {
34 DCHECK(profile_ != NULL); 42 DCHECK(profile_ != NULL);
35 SiteInstance* site_instance = SiteInstance::CreateSiteInstance(profile_); 43 SiteInstance* site_instance = SiteInstance::CreateSiteInstance(profile_);
36 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE, 44 render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE,
37 NULL); 45 NULL);
38 render_view_host_->AllowScriptToClose(true); 46 render_view_host_->AllowScriptToClose(true);
39 47
40 // Close ourselves when the application is shutting down. 48 // Close ourselves when the application is shutting down.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 // We only care when the outer frame changes. 88 // We only care when the outer frame changes.
81 if (!PageTransition::IsMainFrame(params.transition)) 89 if (!PageTransition::IsMainFrame(params.transition))
82 return; 90 return;
83 91
84 // Store the navigation params. 92 // Store the navigation params.
85 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params(); 93 ViewHostMsg_FrameNavigate_Params* p = new ViewHostMsg_FrameNavigate_Params();
86 *p = params; 94 *p = params;
87 navigate_params_.reset(p); 95 navigate_params_.reset(p);
88 96
89 url_ = params.url; 97 url_ = params.url;
98
99 AddAliasURL(url_);
90 } 100 }
91 101
92 void PrerenderContents::UpdateTitle(RenderViewHost* render_view_host, 102 void PrerenderContents::UpdateTitle(RenderViewHost* render_view_host,
93 int32 page_id, 103 int32 page_id,
94 const std::wstring& title) { 104 const std::wstring& title) {
95 if (title.empty()) { 105 if (title.empty()) {
96 return; 106 return;
97 } 107 }
98 108
99 title_ = WideToUTF16Hack(title); 109 title_ = WideToUTF16Hack(title);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } 218 }
209 219
210 void PrerenderContents::ShowCreatedWidget(int route_id, 220 void PrerenderContents::ShowCreatedWidget(int route_id,
211 const gfx::Rect& initial_pos) { 221 const gfx::Rect& initial_pos) {
212 NOTIMPLEMENTED(); 222 NOTIMPLEMENTED();
213 } 223 }
214 224
215 void PrerenderContents::ShowCreatedFullscreenWidget(int route_id) { 225 void PrerenderContents::ShowCreatedFullscreenWidget(int route_id) {
216 NOTIMPLEMENTED(); 226 NOTIMPLEMENTED();
217 } 227 }
228
229 bool PrerenderContents::OnMessageReceived(const IPC::Message& message) {
230 bool handled = true;
231 bool message_is_ok = true;
232 IPC_BEGIN_MESSAGE_MAP_EX(PrerenderContents, message, message_is_ok)
233 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame,
234 OnDidStartProvisionalLoadForFrame)
235 IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad,
236 OnDidRedirectProvisionalLoad)
237 IPC_MESSAGE_UNHANDLED(handled = false)
238 IPC_END_MESSAGE_MAP_EX()
239
240 return handled;
241 }
242
243 void PrerenderContents::OnDidStartProvisionalLoadForFrame(int64 frame_id,
244 bool is_main_frame,
245 const GURL& url) {
246 if (is_main_frame)
247 AddAliasURL(url);
248 }
249
250 void PrerenderContents::OnDidRedirectProvisionalLoad(int32 page_id,
251 const GURL& source_url,
252 const GURL& target_url) {
253 AddAliasURL(target_url);
254 }
255
256 void PrerenderContents::AddAliasURL(const GURL& url) {
257 alias_urls_.push_back(url);
brettw 2011/01/14 01:34:13 Would alos_urls_ be better as a std::set?
tburkard 2011/01/18 22:29:18 Since it's just 1-3 elements, I thought a vector w
258 }
259
260 bool PrerenderContents::MatchesURL(const GURL& url) const {
261 return std::find(alias_urls_.begin(), alias_urls_.end(), url)
262 != alias_urls_.end();
263 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698