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

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 pasko' 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 743d117f38ca0a3799144705869176d0a3602a41..1191798c093cde683c38d08a7e44d7a83e140a2f 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -25,6 +25,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/net/prediction_options.h"
+#include "chrome/browser/prerender/prerender_constants.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_field_trial.h"
#include "chrome/browser/prerender/prerender_final_status.h"
@@ -325,6 +326,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 +541,9 @@ WebContents* PrerenderManager::SwapInternal(
ScheduleDeleteOldWebContents(old_web_contents, NULL);
}
+ // Offline originated prerenders should never ever be swapped-in.
+ DCHECK(prerender_contents->origin() != ORIGIN_OFFLINE);
+
// TODO(cbentzel): Should prerender_contents move to the pending delete
// list, instead of deleting directly here?
AddToHistory(prerender_contents.get());
@@ -1104,6 +1116,9 @@ void PrerenderManager::PostCleanupTask() {
base::TimeTicks PrerenderManager::GetExpiryTimeForNewPrerender(
Origin origin) const {
+ if (origin == ORIGIN_OFFLINE)
+ return GetCurrentTimeTicks() + base::TimeDelta::FromMinutes(
+ kOfflinePrerenderLifeExpectancyMinutes);
return GetCurrentTimeTicks() + config_.time_to_live;
}
@@ -1174,6 +1189,8 @@ bool PrerenderManager::DoesRateLimitAllowPrerender(Origin origin) const {
base::TimeDelta elapsed_time =
GetCurrentTimeTicks() - last_prerender_start_time_;
histograms_->RecordTimeBetweenPrerenderRequests(origin, elapsed_time);
+ if (origin == ORIGIN_OFFLINE)
+ return true;
if (!config_.rate_limit_enabled)
return true;
return elapsed_time >=
@@ -1316,18 +1333,14 @@ NetworkPredictionStatus PrerenderManager::GetPredictionStatusForOrigin(
Origin origin) const {
DCHECK(CalledOnValidThread());
- // LINK rel=prerender origins ignore the network state and the privacy
- // settings.
- if (origin == ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN ||
- origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN) {
+ if (IsAlwaysPrerenderedOrigin(origin))
return NetworkPredictionStatus::ENABLED;
- }
// Prerendering forced for cellular networks still prevents navigation with
// the DISABLED_ALWAYS selected via privacy settings.
NetworkPredictionStatus prediction_status =
CanPrefetchAndPrerenderUI(profile_->GetPrefs());
- if (origin == ORIGIN_EXTERNAL_REQUEST_FORCED_CELLULAR &&
+ if (IsCellularForcedOrigin(origin) &&
prediction_status == NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK) {
return NetworkPredictionStatus::ENABLED;
}

Powered by Google App Engine
This is Rietveld 408576698