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 743d117f38ca0a3799144705869176d0a3602a41..8e18a2bae27409c298c2aef7dbde52cdbdc04832 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. |
| + DCHECK(prerender_contents->origin() != ORIGIN_OFFLINE); |
|
mmenke
2016/04/22 16:41:33
Can we make this a CHECK? I'm generally not a fan
mmenke
2016/04/22 16:41:33
DCHECK_NE
gabadie
2016/04/25 11:08:24
Done.
gabadie
2016/04/25 11:08:24
Done.
|
| + |
| // 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-implements missing tests for |
|
mmenke
2016/04/22 16:41:33
nit: implements -> implement
gabadie
2016/04/25 11:08:24
Done.
|
| + // 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; |
| } |