OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/history/history_backend.h" | 5 #include "chrome/browser/history/history_backend.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
| 12 #include "base/callback.h" |
12 #include "base/command_line.h" | 13 #include "base/command_line.h" |
13 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
14 #include "base/file_util.h" | 15 #include "base/file_util.h" |
15 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
16 #include "base/memory/scoped_vector.h" | 17 #include "base/memory/scoped_vector.h" |
17 #include "base/message_loop.h" | 18 #include "base/message_loop.h" |
18 #include "base/metrics/histogram.h" | 19 #include "base/metrics/histogram.h" |
19 #include "base/string_util.h" | 20 #include "base/string_util.h" |
20 #include "base/time.h" | 21 #include "base/time.h" |
21 #include "chrome/browser/autocomplete/history_url_provider.h" | 22 #include "chrome/browser/autocomplete/history_url_provider.h" |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 HistoryBackend::HistoryBackend(const FilePath& history_dir, | 203 HistoryBackend::HistoryBackend(const FilePath& history_dir, |
203 int id, | 204 int id, |
204 Delegate* delegate, | 205 Delegate* delegate, |
205 BookmarkService* bookmark_service) | 206 BookmarkService* bookmark_service) |
206 : delegate_(delegate), | 207 : delegate_(delegate), |
207 id_(id), | 208 id_(id), |
208 history_dir_(history_dir), | 209 history_dir_(history_dir), |
209 ALLOW_THIS_IN_INITIALIZER_LIST(expirer_(this, bookmark_service)), | 210 ALLOW_THIS_IN_INITIALIZER_LIST(expirer_(this, bookmark_service)), |
210 recent_redirects_(kMaxRedirectCount), | 211 recent_redirects_(kMaxRedirectCount), |
211 backend_destroy_message_loop_(NULL), | 212 backend_destroy_message_loop_(NULL), |
212 backend_destroy_task_(NULL), | |
213 segment_queried_(false), | 213 segment_queried_(false), |
214 bookmark_service_(bookmark_service) { | 214 bookmark_service_(bookmark_service) { |
215 } | 215 } |
216 | 216 |
217 HistoryBackend::~HistoryBackend() { | 217 HistoryBackend::~HistoryBackend() { |
218 DCHECK(!scheduled_commit_) << "Deleting without cleanup"; | 218 DCHECK(!scheduled_commit_) << "Deleting without cleanup"; |
219 ReleaseDBTasks(); | 219 ReleaseDBTasks(); |
220 | 220 |
221 // First close the databases before optionally running the "destroy" task. | 221 // First close the databases before optionally running the "destroy" task. |
222 if (db_.get()) { | 222 if (db_.get()) { |
223 // Commit the long-running transaction. | 223 // Commit the long-running transaction. |
224 db_->CommitTransaction(); | 224 db_->CommitTransaction(); |
225 db_.reset(); | 225 db_.reset(); |
226 } | 226 } |
227 if (thumbnail_db_.get()) { | 227 if (thumbnail_db_.get()) { |
228 thumbnail_db_->CommitTransaction(); | 228 thumbnail_db_->CommitTransaction(); |
229 thumbnail_db_.reset(); | 229 thumbnail_db_.reset(); |
230 } | 230 } |
231 if (archived_db_.get()) { | 231 if (archived_db_.get()) { |
232 archived_db_->CommitTransaction(); | 232 archived_db_->CommitTransaction(); |
233 archived_db_.reset(); | 233 archived_db_.reset(); |
234 } | 234 } |
235 if (text_database_.get()) { | 235 if (text_database_.get()) { |
236 text_database_->CommitTransaction(); | 236 text_database_->CommitTransaction(); |
237 text_database_.reset(); | 237 text_database_.reset(); |
238 } | 238 } |
239 | 239 |
240 if (backend_destroy_task_) { | 240 if (!backend_destroy_task_.is_null()) { |
241 // Notify an interested party (typically a unit test) that we're done. | 241 // Notify an interested party (typically a unit test) that we're done. |
242 DCHECK(backend_destroy_message_loop_); | 242 DCHECK(backend_destroy_message_loop_); |
243 backend_destroy_message_loop_->PostTask(FROM_HERE, backend_destroy_task_); | 243 backend_destroy_message_loop_->PostTask(FROM_HERE, backend_destroy_task_); |
244 } | 244 } |
245 } | 245 } |
246 | 246 |
247 void HistoryBackend::Init(const std::string& languages, bool force_fail) { | 247 void HistoryBackend::Init(const std::string& languages, bool force_fail) { |
248 if (!force_fail) | 248 if (!force_fail) |
249 InitImpl(languages); | 249 InitImpl(languages); |
250 delegate_->DBLoaded(id_); | 250 delegate_->DBLoaded(id_); |
251 } | 251 } |
252 | 252 |
253 void HistoryBackend::SetOnBackendDestroyTask(MessageLoop* message_loop, | 253 void HistoryBackend::SetOnBackendDestroyTask(MessageLoop* message_loop, |
254 Task* task) { | 254 const base::Closure& task) { |
255 if (backend_destroy_task_) { | 255 if (!backend_destroy_task_.is_null()) |
256 DLOG(WARNING) << "Setting more than one destroy task, overriding"; | 256 DLOG(WARNING) << "Setting more than one destroy task, overriding"; |
257 delete backend_destroy_task_; | |
258 } | |
259 backend_destroy_message_loop_ = message_loop; | 257 backend_destroy_message_loop_ = message_loop; |
260 backend_destroy_task_ = task; | 258 backend_destroy_task_ = task; |
261 } | 259 } |
262 | 260 |
263 void HistoryBackend::Closing() { | 261 void HistoryBackend::Closing() { |
264 // Any scheduled commit will have a reference to us, we must make it | 262 // Any scheduled commit will have a reference to us, we must make it |
265 // release that reference before we can be destroyed. | 263 // release that reference before we can be destroyed. |
266 CancelScheduledCommit(); | 264 CancelScheduledCommit(); |
267 | 265 |
268 // Release our reference to the delegate, this reference will be keeping the | 266 // Release our reference to the delegate, this reference will be keeping the |
(...skipping 2047 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2316 break; | 2314 break; |
2317 } | 2315 } |
2318 } | 2316 } |
2319 } | 2317 } |
2320 UMA_HISTOGRAM_TIMES("History.GetFavIconFromDB", // historical name | 2318 UMA_HISTOGRAM_TIMES("History.GetFavIconFromDB", // historical name |
2321 TimeTicks::Now() - beginning_time); | 2319 TimeTicks::Now() - beginning_time); |
2322 return success; | 2320 return success; |
2323 } | 2321 } |
2324 | 2322 |
2325 } // namespace history | 2323 } // namespace history |
OLD | NEW |