Index: chrome/browser/prerender/prerender_contents.cc |
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc |
index ae72b910baf0e2fd2591acf4b22becea6e89b208..ec5c727f92455b1fb3c15dab7150ec2d8110116a 100644 |
--- a/chrome/browser/prerender/prerender_contents.cc |
+++ b/chrome/browser/prerender/prerender_contents.cc |
@@ -60,9 +60,10 @@ class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { |
public: |
virtual PrerenderContents* CreatePrerenderContents( |
PrerenderManager* prerender_manager, PrerenderTracker* prerender_tracker, |
- Profile* profile, const GURL& url, const GURL& referrer) OVERRIDE { |
+ Profile* profile, const GURL& url, const GURL& referrer, |
+ Origin origin) OVERRIDE { |
return new PrerenderContents(prerender_manager, prerender_tracker, profile, |
- url, referrer); |
+ url, referrer, origin); |
} |
}; |
@@ -124,7 +125,8 @@ PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, |
PrerenderTracker* prerender_tracker, |
Profile* profile, |
const GURL& url, |
- const GURL& referrer) |
+ const GURL& referrer, |
+ Origin origin) |
: prerender_manager_(prerender_manager), |
prerender_tracker_(prerender_tracker), |
prerender_url_(url), |
@@ -137,7 +139,8 @@ PrerenderContents::PrerenderContents(PrerenderManager* prerender_manager, |
prerendering_has_been_cancelled_(false), |
child_id_(-1), |
route_id_(-1), |
- starting_page_id_(-1) { |
+ starting_page_id_(-1), |
+ origin_(origin) { |
DCHECK(prerender_manager != NULL); |
} |
@@ -155,8 +158,6 @@ void PrerenderContents::StartPrerendering( |
DCHECK(profile_ != NULL); |
DCHECK(!prerendering_has_started_); |
DCHECK(prerender_contents_.get() == NULL); |
- DCHECK(source_render_view_host != NULL); |
- DCHECK(source_render_view_host->view() != NULL); |
prerendering_has_started_ = true; |
TabContents* new_contents = new TabContents(profile_, NULL, MSG_ROUTING_NONE, |
@@ -165,26 +166,29 @@ void PrerenderContents::StartPrerendering( |
TabContentsObserver::Observe(new_contents); |
prerender_contents_->download_tab_helper()->set_delegate(this); |
- TabContents* source_tc = |
- source_render_view_host->delegate()->GetAsTabContents(); |
- if (source_tc) { |
- // So that history merging will work, get the max page ID |
- // of the old page, and add a safety margin of 10 to it (for things |
- // such as redirects). |
- starting_page_id_ = source_tc->GetMaxPageID(); |
- if (starting_page_id_ < 0) |
- starting_page_id_ = 0; |
- starting_page_id_ += kPrerenderPageIdOffset; |
- prerender_contents_->controller().set_max_restored_page_id( |
- starting_page_id_); |
- |
- tab_contents_delegate_.reset(new TabContentsDelegateImpl(this)); |
- new_contents->set_delegate(tab_contents_delegate_.get()); |
- |
- // Set the size of the new TC to that of the old TC. |
- gfx::Rect tab_bounds; |
- source_tc->view()->GetContainerBounds(&tab_bounds); |
- prerender_contents_->view()->SizeContents(tab_bounds.size()); |
+ if (source_render_view_host) { |
+ DCHECK(source_render_view_host->view() != NULL); |
+ TabContents* source_tc = |
+ source_render_view_host->delegate()->GetAsTabContents(); |
+ if (source_tc) { |
+ // So that history merging will work, get the max page ID |
+ // of the old page, and add a safety margin of 10 to it (for things |
+ // such as redirects). |
+ starting_page_id_ = source_tc->GetMaxPageID(); |
+ if (starting_page_id_ < 0) |
+ starting_page_id_ = 0; |
+ starting_page_id_ += kPrerenderPageIdOffset; |
+ prerender_contents_->controller().set_max_restored_page_id( |
+ starting_page_id_); |
+ |
+ tab_contents_delegate_.reset(new TabContentsDelegateImpl(this)); |
+ new_contents->set_delegate(tab_contents_delegate_.get()); |
+ |
+ // Set the size of the new TC to that of the old TC. |
+ gfx::Rect tab_bounds; |
+ source_tc->view()->GetContainerBounds(&tab_bounds); |
+ prerender_contents_->view()->SizeContents(tab_bounds.size()); |
+ } |
} |
// Register as an observer of the RenderViewHost so we get messages. |
@@ -272,11 +276,12 @@ PrerenderContents::~PrerenderContents() { |
DCHECK(prerendering_has_been_cancelled_ || |
final_status_ == FINAL_STATUS_USED || |
final_status_ == FINAL_STATUS_CONTROL_GROUP); |
+ DCHECK(origin_ != ORIGIN_MAX); |
// If we haven't even started prerendering, we were just in the control |
// group, which means we do not want to record the status. |
if (prerendering_has_started()) |
- RecordFinalStatus(final_status_); |
+ RecordFinalStatus(origin_, final_status_); |
if (child_id_ != -1 && route_id_ != -1) |
prerender_tracker_->OnPrerenderingFinished(child_id_, route_id_); |