Chromium Code Reviews| Index: chrome/browser/prerender/prerender_contents.cc |
| diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc |
| index 098a67a74cb737c1920b8e06b86768543ec1dc75..68ff8401caa16c430b43d837d59ee7ac27ddea34 100644 |
| --- a/chrome/browser/prerender/prerender_contents.cc |
| +++ b/chrome/browser/prerender/prerender_contents.cc |
| @@ -83,7 +83,7 @@ void InformRenderProcessAboutPrerender(const GURL& url, |
| render_process_host->Send(message); |
| } |
| -} // end namespace |
| +} // namespace |
| class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { |
| public: |
| @@ -96,13 +96,22 @@ class PrerenderContentsFactoryImpl : public PrerenderContents::Factory { |
| } |
| }; |
| -PrerenderContents::PendingPrerenderData::PendingPrerenderData( |
| - Origin origin, |
| +struct PrerenderContents::PendingPrerenderInfo { |
| + PendingPrerenderInfo(const GURL& url, |
| + const content::Referrer& referrer, |
| + const gfx::Size& size); |
| + const GURL url; |
| + const content::Referrer referrer; |
| + const gfx::Size size; |
| +}; |
| + |
| +PrerenderContents::PendingPrerenderInfo::PendingPrerenderInfo( |
| const GURL& url, |
| - const content::Referrer& referrer) |
| - : origin(origin), |
| - url(url), |
| - referrer(referrer) { |
| + const content::Referrer& referrer, |
| + const gfx::Size& size) |
| + : url(url), |
| + referrer(referrer), |
| + size(size) { |
| } |
| // TabContentsDelegateImpl ----------------------------------------------------- |
| @@ -197,11 +206,10 @@ class PrerenderContents::TabContentsDelegateImpl |
| PrerenderContents* prerender_contents_; |
| }; |
| -void PrerenderContents::AddPendingPrerender(Origin origin, |
| - const GURL& url, |
| - const content::Referrer& referrer) { |
| - pending_prerender_list_.push_back( |
| - PendingPrerenderData(origin, url, referrer)); |
| +void PrerenderContents::AddPendingPrerender(const GURL& url, |
| + const content::Referrer& referrer, |
| + const gfx::Size& size) { |
| + pending_prerender_list_.push_back(PendingPrerenderInfo(url, referrer, size)); |
| } |
| bool PrerenderContents::IsPendingEntry(const GURL& url) const { |
| @@ -221,11 +229,8 @@ void PrerenderContents::StartPendingPrerenders() { |
| for (PendingPrerenderList::iterator it = pending_prerender_list.begin(); |
| it != pending_prerender_list.end(); |
| ++it) { |
| - prerender_manager_->AddPrerender(it->origin, |
| - std::make_pair(child_id_, route_id_), |
| - it->url, |
| - it->referrer, |
| - NULL); |
| + prerender_manager_->AddPrerenderFromLinkRelPrerender( |
| + child_id_, route_id_, it->url, it->referrer, it->size); |
| } |
| } |
| @@ -267,17 +272,20 @@ PrerenderContents::Factory* PrerenderContents::CreateFactory() { |
| } |
| void PrerenderContents::StartPrerendering( |
| - const RenderViewHost* source_render_view_host, |
| + int creator_child_id, |
| + const gfx::Size& size, |
| content::SessionStorageNamespace* session_storage_namespace) { |
| DCHECK(profile_ != NULL); |
| DCHECK(!prerendering_has_started_); |
| DCHECK(prerender_contents_.get() == NULL); |
| + DCHECK_EQ(-1, creator_child_id_); |
| + DCHECK(size_.IsEmpty()); |
| + |
| + creator_child_id_ = creator_child_id; |
| + size_ = size; |
| prerendering_has_started_ = true; |
| - DCHECK(creator_child_id_ == -1); |
| - DCHECK(alias_urls_.size() == 1); |
| - if (source_render_view_host) |
| - creator_child_id_ = source_render_view_host->GetProcess()->GetID(); |
| + DCHECK_EQ(1U, alias_urls_.size()); |
|
cbentzel
2012/05/04 15:32:25
Nit: may as well move these near all of the other
gavinp
2012/05/04 23:10:51
Done.
|
| InformRenderProcessAboutPrerender(prerender_url_, true, |
| creator_child_id_); |
| @@ -285,16 +293,8 @@ void PrerenderContents::StartPrerendering( |
| prerender_contents_.reset(new TabContentsWrapper(new_contents)); |
| content::WebContentsObserver::Observe(new_contents); |
| - gfx::Rect tab_bounds = prerender_manager_->config().default_tab_bounds; |
| - if (source_render_view_host) { |
| - DCHECK(source_render_view_host->GetView() != NULL); |
| - WebContents* source_wc = |
| - source_render_view_host->GetDelegate()->GetAsWebContents(); |
| - if (source_wc) { |
| - // Set the size of the new TC to that of the old TC. |
| - source_wc->GetView()->GetContainerBounds(&tab_bounds); |
| - } |
| - } else { |
| + if (size_.IsEmpty()) { |
|
cbentzel
2012/05/04 15:32:25
Nit: Should this be done closer to the size_ = siz
gavinp
2012/05/04 23:10:51
Done.
|
| + size_ = prerender_manager_->config().default_tab_bounds.size(); |
| #if !defined(OS_ANDROID) |
| // Try to get the active tab of the active browser and use that for tab |
| // bounds. If the browser has never been active, we will fail to get a size |
| @@ -303,12 +303,14 @@ void PrerenderContents::StartPrerendering( |
| // This code is unneeded on Android as we do not have a Browser object so we |
| // can't get the size, and |default_tab_bounds| will be set to the right |
| // value. |
| - Browser* active_browser = BrowserList::GetLastActiveWithProfile(profile_); |
| - if (active_browser) { |
| + if (Browser* active_browser = |
| + BrowserList::GetLastActiveWithProfile(profile_)) { |
|
cbentzel
2012/05/04 15:32:25
Nit: not sure what this buys other than slightly t
gavinp
2012/05/04 23:10:51
This practice is specifically recommended in our c
|
| WebContents* active_web_contents = active_browser->GetWebContentsAt( |
| active_browser->active_index()); |
| + gfx::Rect container_bounds; |
| if (active_web_contents) |
| - active_web_contents->GetView()->GetContainerBounds(&tab_bounds); |
| + active_web_contents->GetView()->GetContainerBounds(&container_bounds); |
| + size_ = container_bounds.size(); |
|
cbentzel
2012/05/04 15:32:25
IMPORTANT: This is a change in behavior from befor
gavinp
2012/05/04 23:10:51
Good catch. Fixed.
|
| } |
| #endif // !defined(OS_ANDROID) |
| } |
| @@ -317,8 +319,7 @@ void PrerenderContents::StartPrerendering( |
| new_contents->SetDelegate(tab_contents_delegate_.get()); |
| // Set the size of the prerender WebContents. |
| - prerender_contents_->web_contents()->GetView()->SizeContents( |
| - tab_bounds.size()); |
| + prerender_contents_->web_contents()->GetView()->SizeContents(size_); |
| // Register as an observer of the RenderViewHost so we get messages. |
| render_view_host_observer_.reset( |