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

Side by Side Diff: chrome/browser/prerender/prerender_manager.cc

Issue 2622893002: [NoStatePrefetch] Don't cancel prefetches when there are duplicates (Closed)
Patch Set: add test Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <functional> 10 #include <functional>
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 if (prerendering_status != NetworkPredictionStatus::ENABLED) { 934 if (prerendering_status != NetworkPredictionStatus::ENABLED) {
935 FinalStatus final_status = 935 FinalStatus final_status =
936 prerendering_status == NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK 936 prerendering_status == NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK
937 ? FINAL_STATUS_CELLULAR_NETWORK 937 ? FINAL_STATUS_CELLULAR_NETWORK
938 : FINAL_STATUS_PRERENDERING_DISABLED; 938 : FINAL_STATUS_PRERENDERING_DISABLED;
939 RecordFinalStatusWithoutCreatingPrerenderContents(url, origin, 939 RecordFinalStatusWithoutCreatingPrerenderContents(url, origin,
940 final_status); 940 final_status);
941 return nullptr; 941 return nullptr;
942 } 942 }
943 943
944 if (PrerenderData* preexisting_prerender_data =
945 FindPrerenderData(url, session_storage_namespace)) {
946 RecordFinalStatusWithoutCreatingPrerenderContents(
947 url, origin, FINAL_STATUS_DUPLICATE);
948 return base::WrapUnique(new PrerenderHandle(preexisting_prerender_data));
949 }
950
944 if (IsNoStatePrefetch(origin)) { 951 if (IsNoStatePrefetch(origin)) {
945 base::TimeDelta prefetch_age; 952 base::TimeDelta prefetch_age;
946 GetPrefetchInformation(url, &prefetch_age, nullptr); 953 GetPrefetchInformation(url, &prefetch_age, nullptr);
947 if (!prefetch_age.is_zero() && 954 if (!prefetch_age.is_zero() &&
948 prefetch_age < 955 prefetch_age <
949 base::TimeDelta::FromMinutes(net::HttpCache::kPrefetchReuseMins)) { 956 base::TimeDelta::FromMinutes(net::HttpCache::kPrefetchReuseMins)) {
950 RecordFinalStatusWithoutCreatingPrerenderContents(url, origin, 957 RecordFinalStatusWithoutCreatingPrerenderContents(url, origin,
951 FINAL_STATUS_DUPLICATE); 958 FINAL_STATUS_DUPLICATE);
952 return nullptr; 959 return nullptr;
953 } 960 }
954 } else if (PrerenderData* preexisting_prerender_data =
955 FindPrerenderData(url, session_storage_namespace)) {
956 RecordFinalStatusWithoutCreatingPrerenderContents(
957 url, origin, FINAL_STATUS_DUPLICATE);
958 return base::WrapUnique(new PrerenderHandle(preexisting_prerender_data));
959 } 961 }
960 962
961 // Do not prerender if there are too many render processes, and we would 963 // Do not prerender if there are too many render processes, and we would
962 // have to use an existing one. We do not want prerendering to happen in 964 // have to use an existing one. We do not want prerendering to happen in
963 // a shared process, so that we can always reliably lower the CPU 965 // a shared process, so that we can always reliably lower the CPU
964 // priority for prerendering. 966 // priority for prerendering.
965 // In single-process mode, ShouldTryToUseExistingProcessHost() always returns 967 // In single-process mode, ShouldTryToUseExistingProcessHost() always returns
966 // true, so that case needs to be explicitly checked for. 968 // true, so that case needs to be explicitly checked for.
967 // TODO(tburkard): Figure out how to cancel prerendering in the opposite 969 // TODO(tburkard): Figure out how to cancel prerendering in the opposite
968 // case, when a new tab is added to a process used for prerendering. 970 // case, when a new tab is added to a process used for prerendering.
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 return weak_factory_.GetWeakPtr(); 1439 return weak_factory_.GetWeakPtr();
1438 } 1440 }
1439 1441
1440 void PrerenderManager::SetPrerenderContentsFactoryForTest( 1442 void PrerenderManager::SetPrerenderContentsFactoryForTest(
1441 PrerenderContents::Factory* prerender_contents_factory) { 1443 PrerenderContents::Factory* prerender_contents_factory) {
1442 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1444 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1443 prerender_contents_factory_.reset(prerender_contents_factory); 1445 prerender_contents_factory_.reset(prerender_contents_factory);
1444 } 1446 }
1445 1447
1446 } // namespace prerender 1448 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_unittest.cc » ('j') | chrome/browser/prerender/prerender_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698