Chromium Code Reviews| Index: chrome/browser/prerender/prerender_manager.cc |
| diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
| index 60cdd13904c785ede93b57e1245da33b285de263..d4a051baacc8b9b6d0da708076473626aaad3f9a 100644 |
| --- a/chrome/browser/prerender/prerender_manager.cc |
| +++ b/chrome/browser/prerender/prerender_manager.cc |
| @@ -321,6 +321,10 @@ bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, |
| return false; |
| DCHECK(prerender_data->contents()); |
| + if (prerender_data->contents()->prerender_mode() != FULL_PRERENDER) { |
| + return false; |
| + } |
|
mmenke
2016/08/22 14:17:58
nit: Remove braces
mattcary
2016/08/23 10:53:56
Done.
|
| + |
| std::unique_ptr<WebContents> new_web_contents = SwapInternal( |
| url, web_contents, prerender_data, params->should_replace_current_entry); |
| if (!new_web_contents) |
| @@ -572,6 +576,8 @@ const char* PrerenderManager::GetModeString() { |
| return "_15MinTTL"; |
| case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP: |
| return "_NoUse"; |
| + case PRERENDER_MODE_NOSTATE_PREFETCH: |
| + return "_NoStatePrefetch"; |
|
mmenke
2016/08/22 14:17:58
Need to update histograms.xml for this addition.
mattcary
2016/08/23 10:53:56
Done.
I see that the PrerenderMode histogram in h
mmenke
2016/08/23 14:35:27
Hrm...you're right. I'd say no. Looks like a lot
|
| case PRERENDER_MODE_MAX: |
| default: |
| NOTREACHED() << "Invalid PrerenderManager mode."; |
| @@ -600,6 +606,11 @@ bool PrerenderManager::IsNoUseGroup() { |
| return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP; |
| } |
| +// static |
| +bool PrerenderManager::IsNoStatePrefetch() { |
| + return GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH; |
| +} |
| + |
| bool PrerenderManager::IsWebContentsPrerendering( |
| const WebContents* web_contents, |
| Origin* origin) const { |
| @@ -677,8 +688,11 @@ std::vector<WebContents*> PrerenderManager::GetAllPrerenderingContents() const { |
| std::vector<WebContents*> result; |
| for (const auto& prerender : active_prerenders_) { |
| - if (WebContents* contents = prerender->contents()->prerender_contents()) |
| + WebContents* contents = prerender->contents()->prerender_contents(); |
|
mmenke
2016/08/22 14:17:58
So we do create a WebContents in the non-full prer
mattcary
2016/08/23 10:53:56
AFAIK, we will have a WebContents for the prefetch
|
| + if (contents && |
| + prerender->contents()->prerender_mode() == FULL_PRERENDER) { |
| result.push_back(contents); |
| + } |
| } |
| return result; |
| @@ -936,6 +950,9 @@ std::unique_ptr<PrerenderHandle> PrerenderManager::AddPrerender( |
| CreatePrerenderContents(url, referrer, origin); |
| DCHECK(prerender_contents); |
| PrerenderContents* prerender_contents_ptr = prerender_contents.get(); |
| + if (IsNoStatePrefetch()) { |
| + prerender_contents_ptr->SetPrerenderMode(PREFETCH_ONLY); |
| + } |
|
mmenke
2016/08/22 14:17:58
nit: Remove braces
mattcary
2016/08/23 10:53:56
Done.
|
| active_prerenders_.push_back( |
| base::MakeUnique<PrerenderData>(this, std::move(prerender_contents), |
| GetExpiryTimeForNewPrerender(origin))); |