| 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..a6573db61029c7595bb4f20c3abb0ce0ac235861 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,34 +272,21 @@ 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());
|
| + DCHECK_EQ(1U, alias_urls_.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();
|
| - InformRenderProcessAboutPrerender(prerender_url_, true,
|
| - creator_child_id_);
|
| -
|
| - WebContents* new_contents = CreateWebContents(session_storage_namespace);
|
| - prerender_contents_.reset(new TabContentsWrapper(new_contents));
|
| - content::WebContentsObserver::Observe(new_contents);
|
| + creator_child_id_ = creator_child_id;
|
|
|
| - 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 {
|
| + size_ = size;
|
| + if (size_.IsEmpty()) {
|
| + 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,22 +295,31 @@ 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) {
|
| - WebContents* active_web_contents = active_browser->GetWebContentsAt(
|
| - active_browser->active_index());
|
| - if (active_web_contents)
|
| - active_web_contents->GetView()->GetContainerBounds(&tab_bounds);
|
| + if (Browser* active_browser =
|
| + BrowserList::GetLastActiveWithProfile(profile_)) {
|
| + if (WebContents* active_web_contents = active_browser->GetWebContentsAt(
|
| + active_browser->active_index())) {
|
| + gfx::Rect container_bounds;
|
| + active_web_contents->GetView()->GetContainerBounds(&container_bounds);
|
| + size_ = container_bounds.size();
|
| + }
|
| }
|
| #endif // !defined(OS_ANDROID)
|
| }
|
|
|
| + prerendering_has_started_ = true;
|
| + InformRenderProcessAboutPrerender(prerender_url_, true,
|
| + creator_child_id_);
|
| +
|
| + WebContents* new_contents = CreateWebContents(session_storage_namespace);
|
| + prerender_contents_.reset(new TabContentsWrapper(new_contents));
|
| + content::WebContentsObserver::Observe(new_contents);
|
| +
|
| tab_contents_delegate_.reset(new TabContentsDelegateImpl(this));
|
| 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(
|
|
|