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

Unified Diff: chrome/browser/prerender/prerender_contents.cc

Issue 10198040: New link rel=prerender api, using WebKit::WebPrerenderingPlatform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 80 columns Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prerender/prerender_contents.h ('k') | chrome/browser/prerender/prerender_link_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « chrome/browser/prerender/prerender_contents.h ('k') | chrome/browser/prerender/prerender_link_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698