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..fa76f5596a2f0aca59ea24f163b61609d94143fb 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" |
@@ -29,6 +32,12 @@ using content::SessionStorageNamespace; |
namespace { |
+bool ShouldStartRelNextPrerenders() { |
+ const std::string experiment_name = |
+ base::FieldTrialList::FindFullName("PrerenderRelNextTrial"); |
+ return experiment_name.find("Yes") != std::string::npos; |
+} |
+ |
void Send(int child_id, IPC::Message* raw_message) { |
using content::RenderProcessHost; |
scoped_ptr<IPC::Message> own_message(raw_message); |
@@ -44,7 +53,8 @@ void Send(int child_id, IPC::Message* raw_message) { |
namespace prerender { |
PrerenderLinkManager::PrerenderLinkManager(PrerenderManager* manager) |
- : has_shutdown_(false), |
+ : should_start_rel_next_prerenders_(ShouldStartRelNextPrerenders()), |
+ has_shutdown_(false), |
manager_(manager) { |
} |
@@ -64,6 +74,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 +89,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 +146,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 +260,22 @@ void PrerenderLinkManager::StartPrerenders() { |
} |
} |
+ switch ((*i)->rel_types) { |
+ case PrerenderRelTypePrerender: |
+ case PrerenderRelTypePrerender | PrerenderRelTypeNext: |
+ break; |
+ |
+ case PrerenderRelTypeNext: |
+ if (should_start_rel_next_prerenders_) |
+ break; |
+ else |
+ continue; |
+ |
+ case 0: |
+ default: |
+ NOTREACHED(); |
+ } |
+ |
davidben
2013/12/19 20:30:03
Nit: Maybe split this off into a separate function
gavinp
2013/12/20 14:44:48
Done.
|
PrerenderHandle* handle = manager_->AddPrerenderFromLinkRelPrerender( |
(*i)->launcher_child_id, (*i)->render_view_route_id, |
(*i)->url, (*i)->referrer, (*i)->size); |