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 |