Index: chrome/browser/prerender/prerender_link_manager.cc |
diff --git a/chrome/browser/prerender/prerender_link_manager.cc b/chrome/browser/prerender/prerender_link_manager.cc |
index 7726016c203f430ee05bb727dc56b28e7e8a7a64..787a8116836bade0505a3eb202a23a71907d22c8 100644 |
--- a/chrome/browser/prerender/prerender_link_manager.cc |
+++ b/chrome/browser/prerender/prerender_link_manager.cc |
@@ -6,15 +6,18 @@ |
#include <limits> |
#include <set> |
+#include <string> |
#include <utility> |
#include "base/memory/scoped_ptr.h" |
+#include "base/metrics/field_trial.h" |
#include "chrome/browser/prerender/prerender_contents.h" |
#include "chrome/browser/prerender/prerender_handle.h" |
#include "chrome/browser/prerender/prerender_manager.h" |
#include "chrome/browser/prerender/prerender_manager_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/prerender_messages.h" |
+#include "chrome/common/prerender_types.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/session_storage_namespace.h" |
@@ -27,8 +30,30 @@ using base::TimeTicks; |
using content::RenderViewHost; |
using content::SessionStorageNamespace; |
+namespace prerender { |
+ |
namespace { |
+bool ShouldStartRelNextPrerenders() { |
+ const std::string experiment_name = |
+ base::FieldTrialList::FindFullName("PrerenderRelNextTrial"); |
+ |
+ return experiment_name.find("Yes") != std::string::npos; |
+} |
+ |
+bool ShouldStartPrerender(uint32 rel_types) { |
+ const bool should_start_rel_next_prerenders = |
+ ShouldStartRelNextPrerenders(); |
+ |
+ if (rel_types & PrerenderRelTypePrerender) { |
+ return true; |
+ } else if (should_start_rel_next_prerenders && |
+ (rel_types & PrerenderRelTypeNext) == PrerenderRelTypeNext) { |
+ return true; |
+ } |
+ return false; |
+} |
+ |
void Send(int child_id, IPC::Message* raw_message) { |
using content::RenderProcessHost; |
scoped_ptr<IPC::Message> own_message(raw_message); |
@@ -41,8 +66,6 @@ void Send(int child_id, IPC::Message* raw_message) { |
} // namespace |
-namespace prerender { |
- |
PrerenderLinkManager::PrerenderLinkManager(PrerenderManager* manager) |
: has_shutdown_(false), |
manager_(manager) { |
@@ -64,6 +87,7 @@ PrerenderLinkManager::~PrerenderLinkManager() { |
void PrerenderLinkManager::OnAddPrerender(int launcher_child_id, |
int prerender_id, |
const GURL& url, |
+ uint32 rel_types, |
const content::Referrer& referrer, |
const gfx::Size& size, |
int render_view_route_id) { |
@@ -78,7 +102,7 @@ void PrerenderLinkManager::OnAddPrerender(int launcher_child_id, |
return; |
LinkPrerender |
- prerender(launcher_child_id, prerender_id, url, referrer, size, |
+ prerender(launcher_child_id, prerender_id, url, rel_types, referrer, size, |
render_view_route_id, manager_->GetCurrentTimeTicks()); |
prerenders_.push_back(prerender); |
StartPrerenders(); |
@@ -135,12 +159,14 @@ PrerenderLinkManager::LinkPrerender::LinkPrerender( |
int launcher_child_id, |
int prerender_id, |
const GURL& url, |
+ uint32 rel_types, |
const content::Referrer& referrer, |
const gfx::Size& size, |
int render_view_route_id, |
TimeTicks creation_time) : launcher_child_id(launcher_child_id), |
prerender_id(prerender_id), |
url(url), |
+ rel_types(rel_types), |
referrer(referrer), |
size(size), |
render_view_route_id(render_view_route_id), |
@@ -247,6 +273,11 @@ void PrerenderLinkManager::StartPrerenders() { |
} |
} |
+ if (!ShouldStartPrerender((*i)->rel_types)) { |
+ prerenders_.erase(*i); |
+ continue; |
+ } |
+ |
PrerenderHandle* handle = manager_->AddPrerenderFromLinkRelPrerender( |
(*i)->launcher_child_id, (*i)->render_view_route_id, |
(*i)->url, (*i)->referrer, (*i)->size); |