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

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: Makes offline originated prerenders unfindable 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..26198d8fb24460d36f723ffd4d03bc7ef6ace184 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()) {
@@ -956,7 +964,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;
@@ -1152,8 +1161,12 @@ PrerenderManager::PrerenderData* PrerenderManager::FindPrerenderData(
const SessionStorageNamespace* session_storage_namespace) {
for (ScopedVector<PrerenderData>::iterator it = active_prerenders_.begin();
it != active_prerenders_.end(); ++it) {
- if ((*it)->contents()->Matches(url, session_storage_namespace))
+ PrerenderContents* contents = (*it)->contents();
+ if (contents->Matches(url, session_storage_namespace)) {
+ if (contents->origin() == ORIGIN_OFFLINE)
+ return NULL;
return *it;
+ }
}
return NULL;
}
@@ -1174,6 +1187,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 +1334,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