Chromium Code Reviews| 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; |
| } |