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

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

Issue 1854643002: Implement PrerenderManager::AddPrerenderForOffline() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addresses mmenke's comments Created 4 years, 8 months 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
Index: chrome/browser/prerender/prerender_manager.cc
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index 3bc6d9cede0a50e42322ca4d469d7d37971711cc..06cdb24059b36470df1226986d7ccb4f3ca4bc5a 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -325,6 +325,14 @@ PrerenderHandle* PrerenderManager::AddPrerenderForInstant(
session_storage_namespace);
}
+PrerenderHandle* PrerenderManager::AddPrerenderForOffline(
+ const GURL& url,
+ content::SessionStorageNamespace* session_storage_namespace,
+ const gfx::Size& size) {
+ return AddPrerender(ORIGIN_OFFLINE, url, content::Referrer(), size,
+ session_storage_namespace);
+}
+
void PrerenderManager::CancelAllPrerenders() {
DCHECK(CalledOnValidThread());
while (!active_prerenders_.empty()) {
@@ -532,6 +540,9 @@ WebContents* PrerenderManager::SwapInternal(
ScheduleDeleteOldWebContents(old_web_contents, NULL);
}
+ // Offline originated prerenders should never ever be swapped-in.
+ CHECK_NE(ORIGIN_OFFLINE, prerender_contents->origin());
pasko 2016/04/25 11:29:11 This comment does not propose to change anything,
gabadie 2016/04/25 12:35:11 I have uploaded a new CL that removed that CHECK,
+
// TODO(cbentzel): Should prerender_contents move to the pending delete
// list, instead of deleting directly here?
AddToHistory(prerender_contents.get());
@@ -956,7 +967,8 @@ PrerenderHandle* PrerenderManager::AddPrerender(
// histogram tracking.
histograms_->RecordPrerender(origin, url_arg);
- if (profile_->GetPrefs()->GetBoolean(prefs::kBlockThirdPartyCookies)) {
+ if (profile_->GetPrefs()->GetBoolean(prefs::kBlockThirdPartyCookies) &&
+ origin != ORIGIN_OFFLINE) {
RecordFinalStatusWithoutCreatingPrerenderContents(
url, origin, FINAL_STATUS_BLOCK_THIRD_PARTY_COOKIES);
return nullptr;
@@ -1174,6 +1186,11 @@ bool PrerenderManager::DoesRateLimitAllowPrerender(Origin origin) const {
base::TimeDelta elapsed_time =
GetCurrentTimeTicks() - last_prerender_start_time_;
histograms_->RecordTimeBetweenPrerenderRequests(origin, elapsed_time);
+ // TODO(gabadie,pasko): Re-implement missing tests for
+ // FINAL_STATUS_RATE_LIMIT_EXCEEDED that where removed by:
+ // http://crrev.com/a2439eeab37f7cb7a118493fb55ec0cb07f93b49.
+ if (origin == ORIGIN_OFFLINE)
+ return true;
if (!config_.rate_limit_enabled)
return true;
return elapsed_time >=
@@ -1316,10 +1333,18 @@ NetworkPredictionStatus PrerenderManager::GetPredictionStatusForOrigin(
Origin origin) const {
DCHECK(CalledOnValidThread());
- // LINK rel=prerender origins ignore the network state and the privacy
- // settings.
+ // <link rel=prerender> origins ignore the network state and the privacy
+ // settings. Web developers should be able prefetch with all possible privacy
+ // settings and with all possible network types. This would avoid web devs
+ // coming up with creative ways to prefetch in cases they are not allowed to
+ // do so.
+ //
+ // Offline originated prerenders also ignore the network state and privacy
+ // settings because they are controlled by the offliner logic via
+ // PrerenderHandle.
if (origin == ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN ||
- origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN) {
+ origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN ||
+ origin == ORIGIN_OFFLINE) {
return NetworkPredictionStatus::ENABLED;
}

Powered by Google App Engine
This is Rietveld 408576698