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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 void PrecacheManager::StartPrecaching( | 89 void PrecacheManager::StartPrecaching( |
90 const PrecacheCompletionCallback& precache_completion_callback, | 90 const PrecacheCompletionCallback& precache_completion_callback, |
91 const history::HistoryService& history_service) { | 91 const history::HistoryService& history_service) { |
92 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 92 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
93 | 93 |
94 if (is_precaching_) { | 94 if (is_precaching_) { |
95 DLOG(WARNING) << "Cannot start precaching because precaching is already " | 95 DLOG(WARNING) << "Cannot start precaching because precaching is already " |
96 "in progress."; | 96 "in progress."; |
97 return; | 97 return; |
98 } | 98 } |
99 is_precaching_ = true; | |
100 | |
101 precache_completion_callback_ = precache_completion_callback; | 99 precache_completion_callback_ = precache_completion_callback; |
102 | 100 |
103 if (ShouldRun()) { | 101 if (ShouldRun()) { |
| 102 is_precaching_ = true; |
| 103 |
104 BrowserThread::PostTask( | 104 BrowserThread::PostTask( |
105 BrowserThread::DB, FROM_HERE, | 105 BrowserThread::DB, FROM_HERE, |
106 base::Bind(&PrecacheDatabase::DeleteExpiredPrecacheHistory, | 106 base::Bind(&PrecacheDatabase::DeleteExpiredPrecacheHistory, |
107 precache_database_, base::Time::Now())); | 107 precache_database_, base::Time::Now())); |
108 | 108 |
109 // Request NumTopHosts() top hosts. Note that PrecacheFetcher is further | 109 // Request NumTopHosts() top hosts. Note that PrecacheFetcher is further |
110 // bound by the value of PrecacheConfigurationSettings.top_sites_count, as | 110 // bound by the value of PrecacheConfigurationSettings.top_sites_count, as |
111 // retrieved from the server. | 111 // retrieved from the server. |
112 history_service.TopHosts( | 112 history_service.TopHosts( |
113 NumTopHosts(), | 113 NumTopHosts(), |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 base::Bind(&PrecacheDatabase::ClearHistory, precache_database_)); | 180 base::Bind(&PrecacheDatabase::ClearHistory, precache_database_)); |
181 } | 181 } |
182 | 182 |
183 void PrecacheManager::Shutdown() { | 183 void PrecacheManager::Shutdown() { |
184 CancelPrecaching(); | 184 CancelPrecaching(); |
185 } | 185 } |
186 | 186 |
187 void PrecacheManager::OnDone() { | 187 void PrecacheManager::OnDone() { |
188 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 188 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
189 | 189 |
190 // If OnDone has been called, then we should just be finishing precaching. | |
191 DCHECK(is_precaching_); | |
192 is_precaching_ = false; | |
193 | |
194 precache_fetcher_.reset(); | 190 precache_fetcher_.reset(); |
195 | 191 |
196 precache_completion_callback_.Run(); | 192 precache_completion_callback_.Run(is_precaching_); |
197 // Uninitialize the callback so that any scoped_refptrs in it are released. | 193 // Uninitialize the callback so that any scoped_refptrs in it are released. |
198 precache_completion_callback_.Reset(); | 194 precache_completion_callback_.Reset(); |
| 195 |
| 196 is_precaching_ = false; |
199 } | 197 } |
200 | 198 |
201 void PrecacheManager::OnHostsReceived( | 199 void PrecacheManager::OnHostsReceived( |
202 const history::TopHostsList& host_counts) { | 200 const history::TopHostsList& host_counts) { |
203 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 201 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
204 | 202 |
205 if (!is_precaching_) { | 203 if (!is_precaching_) { |
206 // Don't start precaching if it was canceled while waiting for the list of | 204 // Don't start precaching if it was canceled while waiting for the list of |
207 // hosts. | 205 // hosts. |
208 return; | 206 return; |
209 } | 207 } |
210 | 208 |
211 std::vector<std::string> hosts; | 209 std::vector<std::string> hosts; |
212 for (const auto& host_count : host_counts) | 210 for (const auto& host_count : host_counts) |
213 hosts.push_back(host_count.first); | 211 hosts.push_back(host_count.first); |
214 | 212 |
215 // Start precaching. | 213 // Start precaching. |
216 precache_fetcher_.reset( | 214 precache_fetcher_.reset( |
217 new PrecacheFetcher(hosts, browser_context_->GetRequestContext(), | 215 new PrecacheFetcher(hosts, browser_context_->GetRequestContext(), |
218 variations::GetVariationParamValue( | 216 variations::GetVariationParamValue( |
219 kPrecacheFieldTrialName, kManifestURLPrefixParam), | 217 kPrecacheFieldTrialName, kManifestURLPrefixParam), |
220 this)); | 218 this)); |
221 precache_fetcher_->Start(); | 219 precache_fetcher_->Start(); |
222 } | 220 } |
223 | 221 |
224 } // namespace precache | 222 } // namespace precache |
OLD | NEW |