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

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'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 743d117f38ca0a3799144705869176d0a3602a41..765c95325d4ab914651347f13fe5ff55a3c84fcc 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,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 want to be able to snapshot webpages independently of
pasko 2016/04/05 11:49:56 slight rephrasing: "because they are controlled by
gabadie 2016/04/05 13:35:24 Done.
+ // these former settings.
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