Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: chrome/browser/prerender/prerender_manager.cc

Issue 2580753005: Disable No-State prefetch for offline origins. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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),
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698