| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/precache/content/precache_manager.h" | 5 #include "components/precache/content/precache_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 base::Unretained(precache_database_.get())), | 135 base::Unretained(precache_database_.get())), |
| 136 base::Bind(&PrecacheManager::OnGetUnfinishedWorkDone, AsWeakPtr())); | 136 base::Bind(&PrecacheManager::OnGetUnfinishedWorkDone, AsWeakPtr())); |
| 137 } | 137 } |
| 138 | 138 |
| 139 void PrecacheManager::OnGetUnfinishedWorkDone( | 139 void PrecacheManager::OnGetUnfinishedWorkDone( |
| 140 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work) { | 140 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work) { |
| 141 if (!unfinished_work->has_start_time() || | 141 if (!unfinished_work->has_start_time() || |
| 142 base::Time::Now() - base::Time::FromInternalValue( | 142 base::Time::Now() - base::Time::FromInternalValue( |
| 143 unfinished_work->start_time()) > base::TimeDelta::FromHours(6)) { | 143 unfinished_work->start_time()) > base::TimeDelta::FromHours(6)) { |
| 144 PrecacheFetcher::RecordCompletionStatistics( | 144 PrecacheFetcher::RecordCompletionStatistics( |
| 145 *unfinished_work, | 145 *unfinished_work, unfinished_work->top_host_size(), |
| 146 unfinished_work->manifest_size(), | |
| 147 unfinished_work->resource_size()); | 146 unfinished_work->resource_size()); |
| 148 unfinished_work.reset(new PrecacheUnfinishedWork()); | 147 unfinished_work.reset(new PrecacheUnfinishedWork()); |
| 149 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); | 148 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); |
| 150 } | 149 } |
| 151 unfinished_work_ = std::move(unfinished_work); | 150 unfinished_work_ = std::move(unfinished_work); |
| 152 bool needs_top_hosts = unfinished_work_->top_host_size() == 0; | 151 bool needs_top_hosts = unfinished_work_->top_host_size() == 0; |
| 153 | 152 |
| 154 if (IsInExperimentGroup()) { | 153 if (IsInExperimentGroup()) { |
| 155 BrowserThread::PostTask( | 154 BrowserThread::PostTask( |
| 156 BrowserThread::DB, FROM_HERE, | 155 BrowserThread::DB, FROM_HERE, |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 | 243 |
| 245 if (size == 0 || url.is_empty() || !url.SchemeIsHTTPOrHTTPS()) { | 244 if (size == 0 || url.is_empty() || !url.SchemeIsHTTPOrHTTPS()) { |
| 246 // Ignore empty responses, empty URLs, or URLs that aren't HTTP or HTTPS. | 245 // Ignore empty responses, empty URLs, or URLs that aren't HTTP or HTTPS. |
| 247 return; | 246 return; |
| 248 } | 247 } |
| 249 | 248 |
| 250 if (!history_service_) | 249 if (!history_service_) |
| 251 return; | 250 return; |
| 252 | 251 |
| 253 history_service_->HostRankIfAvailable( | 252 history_service_->HostRankIfAvailable( |
| 254 referrer, base::Bind(&PrecacheManager::RecordStatsForFetchInternal, | 253 referrer, |
| 255 AsWeakPtr(), url, latency, fetch_time, info, size)); | 254 base::Bind(&PrecacheManager::RecordStatsForFetchInternal, AsWeakPtr(), |
| 255 url, referrer.host(), latency, fetch_time, info, size)); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void PrecacheManager::RecordStatsForFetchInternal( | 258 void PrecacheManager::RecordStatsForFetchInternal( |
| 259 const GURL& url, | 259 const GURL& url, |
| 260 const std::string& referrer_host, |
| 260 const base::TimeDelta& latency, | 261 const base::TimeDelta& latency, |
| 261 const base::Time& fetch_time, | 262 const base::Time& fetch_time, |
| 262 const net::HttpResponseInfo& info, | 263 const net::HttpResponseInfo& info, |
| 263 int64_t size, | 264 int64_t size, |
| 264 int host_rank) { | 265 int host_rank) { |
| 265 if (is_precaching_) { | 266 if (is_precaching_) { |
| 266 // Assume that precache is responsible for all requests made while | 267 // Assume that precache is responsible for all requests made while |
| 267 // precaching is currently in progress. | 268 // precaching is currently in progress. |
| 268 // TODO(sclittle): Make PrecacheFetcher explicitly mark precache-motivated | 269 // TODO(sclittle): Make PrecacheFetcher explicitly mark precache-motivated |
| 269 // fetches, and use that to determine whether or not a fetch was motivated | 270 // fetches, and use that to determine whether or not a fetch was motivated |
| 270 // by precaching. | 271 // by precaching. |
| 271 BrowserThread::PostTask( | 272 BrowserThread::PostTask( |
| 272 BrowserThread::DB, FROM_HERE, | 273 BrowserThread::DB, FROM_HERE, |
| 273 base::Bind(&PrecacheDatabase::RecordURLPrefetch, | 274 base::Bind(&PrecacheDatabase::RecordURLPrefetch, |
| 274 base::Unretained(precache_database_.get()), url, latency, | 275 base::Unretained(precache_database_.get()), url, |
| 275 fetch_time, info, size)); | 276 referrer_host, fetch_time, info.was_cached, size)); |
| 276 } else { | 277 } else { |
| 277 bool is_connection_cellular = | 278 bool is_connection_cellular = |
| 278 net::NetworkChangeNotifier::IsConnectionCellular( | 279 net::NetworkChangeNotifier::IsConnectionCellular( |
| 279 net::NetworkChangeNotifier::GetConnectionType()); | 280 net::NetworkChangeNotifier::GetConnectionType()); |
| 280 | 281 |
| 281 BrowserThread::PostTask( | 282 BrowserThread::PostTask( |
| 282 BrowserThread::DB, FROM_HERE, | 283 BrowserThread::DB, FROM_HERE, |
| 283 base::Bind(&PrecacheDatabase::RecordURLNonPrefetch, | 284 base::Bind(&PrecacheDatabase::RecordURLNonPrefetch, |
| 284 base::Unretained(precache_database_.get()), url, latency, | 285 base::Unretained(precache_database_.get()), url, latency, |
| 285 fetch_time, info, size, host_rank, is_connection_cellular)); | 286 fetch_time, info, size, host_rank, is_connection_cellular)); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 precache_fetcher_.reset(new PrecacheFetcher( | 337 precache_fetcher_.reset(new PrecacheFetcher( |
| 337 content::BrowserContext::GetDefaultStoragePartition(browser_context_) | 338 content::BrowserContext::GetDefaultStoragePartition(browser_context_) |
| 338 ->GetURLRequestContext(), | 339 ->GetURLRequestContext(), |
| 339 GURL(variations::GetVariationParamValue(kPrecacheFieldTrialName, | 340 GURL(variations::GetVariationParamValue(kPrecacheFieldTrialName, |
| 340 kConfigURLParam)), | 341 kConfigURLParam)), |
| 341 variations::GetVariationParamValue(kPrecacheFieldTrialName, | 342 variations::GetVariationParamValue(kPrecacheFieldTrialName, |
| 342 kManifestURLPrefixParam), | 343 kManifestURLPrefixParam), |
| 343 std::move(unfinished_work_), | 344 std::move(unfinished_work_), |
| 344 metrics::HashName( | 345 metrics::HashName( |
| 345 base::FieldTrialList::FindFullName(kPrecacheFieldTrialName)), | 346 base::FieldTrialList::FindFullName(kPrecacheFieldTrialName)), |
| 347 precache_database_->GetWeakPtr(), |
| 348 content::BrowserThread::GetTaskRunnerForThread( |
| 349 content::BrowserThread::DB), |
| 346 this)); | 350 this)); |
| 347 precache_fetcher_->Start(); | 351 precache_fetcher_->Start(); |
| 348 } | 352 } |
| 349 | 353 |
| 350 void PrecacheManager::OnHostsReceivedThenDone( | 354 void PrecacheManager::OnHostsReceivedThenDone( |
| 351 const history::TopHostsList& host_counts) { | 355 const history::TopHostsList& host_counts) { |
| 352 OnDone(); | 356 OnDone(); |
| 353 } | 357 } |
| 354 | 358 |
| 355 } // namespace precache | 359 } // namespace precache |
| OLD | NEW |