| Index: chrome/browser/prerender/prerender_contents.cc
|
| ===================================================================
|
| --- chrome/browser/prerender/prerender_contents.cc (revision 98544)
|
| +++ chrome/browser/prerender/prerender_contents.cc (working copy)
|
| @@ -172,6 +172,7 @@
|
| prerender_contents_.reset(new TabContentsWrapper(new_contents));
|
| TabContentsObserver::Observe(new_contents);
|
|
|
| + gfx::Rect tab_bounds;
|
| if (source_render_view_host) {
|
| DCHECK(source_render_view_host->view() != NULL);
|
| TabContents* source_tc =
|
| @@ -182,7 +183,7 @@
|
| starting_page_id_ = source_tc->GetMaxPageID();
|
|
|
| // Set the size of the new TC to that of the old TC.
|
| - source_tc->view()->GetContainerBounds(&tab_bounds_);
|
| + source_tc->view()->GetContainerBounds(&tab_bounds);
|
| }
|
| } else {
|
| int max_page_id = -1;
|
| @@ -208,7 +209,7 @@
|
| if (active_browser) {
|
| TabContents* active_tab_contents = active_browser->GetTabContentsAt(
|
| active_browser->active_index());
|
| - active_tab_contents->view()->GetContainerBounds(&tab_bounds_);
|
| + active_tab_contents->view()->GetContainerBounds(&tab_bounds);
|
| }
|
| }
|
|
|
| @@ -222,6 +223,9 @@
|
| tab_contents_delegate_.reset(new TabContentsDelegateImpl(this));
|
| new_contents->set_delegate(tab_contents_delegate_.get());
|
|
|
| + // Set the size of the prerender TabContents.
|
| + prerender_contents_->view()->SizeContents(tab_bounds.size());
|
| +
|
| // Register as an observer of the RenderViewHost so we get messages.
|
| render_view_host_observer_.reset(
|
| new PrerenderRenderViewHostObserver(this, render_view_host_mutable()));
|
| @@ -254,6 +258,12 @@
|
| this, content::NOTIFICATION_RENDER_VIEW_HOST_CREATED_FOR_TAB,
|
| Source<TabContents>(new_contents));
|
|
|
| + // Register to be told when the RenderView is ready, so we can hide it.
|
| + // It will automatically be set to visible when we resize it, otherwise.
|
| + notification_registrar_.Add(this,
|
| + content::NOTIFICATION_TAB_CONTENTS_CONNECTED,
|
| + Source<TabContents>(new_contents));
|
| +
|
| // Register for redirect notifications sourced from |this|.
|
| notification_registrar_.Add(
|
| this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
|
| @@ -371,17 +381,20 @@
|
| new ChromeViewMsg_SetIsPrerendering(
|
| new_render_view_host->routing_id(),
|
| true));
|
| + }
|
| + break;
|
| + }
|
|
|
| - // Set the size of the prerender TabContents. This must be done after
|
| - // the RenderView has been created so that the RenderView will be
|
| - // informated promptly of the size change.
|
| - prerender_contents_->view()->SizeContents(tab_bounds_.size());
|
| -
|
| - // Hide the tab contents. Must be done after setting the size, as
|
| - // resizing currently forces the RenderView to set itself as visible.
|
| + case content::NOTIFICATION_TAB_CONTENTS_CONNECTED: {
|
| + if (prerender_contents_.get()) {
|
| + DCHECK_EQ(Source<TabContents>(source).ptr(),
|
| + prerender_contents_->tab_contents());
|
| + // Set the new TabContents and its RenderViewHost as hidden, to reduce
|
| + // resource usage. This can only be done after the size has been sent
|
| + // to the RenderView, which is why it's done here.
|
| prerender_contents_->tab_contents()->HideContents();
|
| }
|
| - break;
|
| + return;
|
| }
|
|
|
| case content::NOTIFICATION_CREATING_NEW_WINDOW_CANCELLED: {
|
|
|