Chromium Code Reviews| 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); |