Index: chrome/browser/prerender/prerender_manager.cc |
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
index 48300bbae5e5b419ef3ea964014765b13faef654..f908885fbe4ae8ed9c6137a9c76683a160aca4ef 100644 |
--- a/chrome/browser/prerender/prerender_manager.cc |
+++ b/chrome/browser/prerender/prerender_manager.cc |
@@ -100,6 +100,13 @@ bool AreExtraHeadersCompatibleWithPrerenderContents( |
return parsed_headers.IsEmpty(); |
} |
+// Returns true if prerendering is forced, because it is needed as a feature, as |
+// opposed to a performance optimization. |
+bool IsPrerenderingForced(Origin origin) { |
+ return origin == ORIGIN_OFFLINE || |
+ origin == ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR; |
+} |
+ |
} // namespace |
class PrerenderManager::OnCloseWebContentsDeleter |
@@ -609,13 +616,15 @@ bool PrerenderManager::IsPrerenderingPossible() { |
} |
// static |
-bool PrerenderManager::IsNoStatePrefetch() { |
- return GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH; |
+bool PrerenderManager::IsNoStatePrefetch(Origin origin) { |
+ return !IsPrerenderingForced(origin) && |
+ GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH; |
} |
// static |
-bool PrerenderManager::IsSimpleLoadExperiment() { |
- return GetMode() == PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT; |
+bool PrerenderManager::IsSimpleLoadExperiment(Origin origin) { |
+ return !IsPrerenderingForced(origin) && |
+ GetMode() == PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT; |
} |
bool PrerenderManager::IsWebContentsPrerendering( |
@@ -952,7 +961,7 @@ std::unique_ptr<PrerenderHandle> PrerenderManager::AddPrerender( |
// enable metrics comparisons. |
prefetches_.emplace_back(url, GetCurrentTimeTicks(), origin); |
pasko
2016/12/16 17:23:00
Just to double-check that I understand: modifying
droger
2016/12/16 18:35:47
Yes, exactly.
This messes up our metrics a bit bu
|
- if (IsSimpleLoadExperiment()) { |
+ if (IsSimpleLoadExperiment(origin)) { |
// Exit after adding the url to prefetches_, so that no prefetching occurs |
// but the page is still tracked as "would have been prefetched". |
return nullptr; |
@@ -962,7 +971,7 @@ std::unique_ptr<PrerenderHandle> PrerenderManager::AddPrerender( |
CreatePrerenderContents(url, referrer, origin); |
DCHECK(prerender_contents); |
PrerenderContents* prerender_contents_ptr = prerender_contents.get(); |
- if (IsNoStatePrefetch()) |
+ if (IsNoStatePrefetch(origin)) |
prerender_contents_ptr->SetPrerenderMode(PREFETCH_ONLY); |
active_prerenders_.push_back( |
base::MakeUnique<PrerenderData>(this, std::move(prerender_contents), |