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/top_sites_backend.h" | 5 #include "components/history/core/browser/top_sites_backend.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/location.h" |
10 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/single_thread_task_runner.h" |
11 #include "base/task/cancelable_task_tracker.h" | 13 #include "base/task/cancelable_task_tracker.h" |
12 #include "chrome/browser/history/top_sites_database.h" | 14 #include "components/history/core/browser/top_sites_database.h" |
13 #include "content/public/browser/browser_thread.h" | |
14 #include "sql/connection.h" | 15 #include "sql/connection.h" |
15 | 16 |
16 using content::BrowserThread; | |
17 | |
18 namespace history { | 17 namespace history { |
19 | 18 |
20 TopSitesBackend::TopSitesBackend() | 19 TopSitesBackend::TopSitesBackend( |
21 : db_(new TopSitesDatabase()) { | 20 const scoped_refptr<base::SingleThreadTaskRunner>& db_task_runner) |
| 21 : db_(new TopSitesDatabase()), db_task_runner_(db_task_runner) { |
| 22 DCHECK(db_task_runner_); |
22 } | 23 } |
23 | 24 |
24 void TopSitesBackend::Init(const base::FilePath& path) { | 25 void TopSitesBackend::Init(const base::FilePath& path) { |
25 db_path_ = path; | 26 db_path_ = path; |
26 BrowserThread::PostTask( | 27 db_task_runner_->PostTask( |
27 BrowserThread::DB, FROM_HERE, | 28 FROM_HERE, base::Bind(&TopSitesBackend::InitDBOnDBThread, this, path)); |
28 base::Bind(&TopSitesBackend::InitDBOnDBThread, this, path)); | |
29 } | 29 } |
30 | 30 |
31 void TopSitesBackend::Shutdown() { | 31 void TopSitesBackend::Shutdown() { |
32 BrowserThread::PostTask( | 32 db_task_runner_->PostTask( |
33 BrowserThread::DB, FROM_HERE, | 33 FROM_HERE, base::Bind(&TopSitesBackend::ShutdownDBOnDBThread, this)); |
34 base::Bind(&TopSitesBackend::ShutdownDBOnDBThread, this)); | |
35 } | 34 } |
36 | 35 |
37 void TopSitesBackend::GetMostVisitedThumbnails( | 36 void TopSitesBackend::GetMostVisitedThumbnails( |
38 const GetMostVisitedThumbnailsCallback& callback, | 37 const GetMostVisitedThumbnailsCallback& callback, |
39 base::CancelableTaskTracker* tracker) { | 38 base::CancelableTaskTracker* tracker) { |
40 scoped_refptr<MostVisitedThumbnails> thumbnails = new MostVisitedThumbnails(); | 39 scoped_refptr<MostVisitedThumbnails> thumbnails = new MostVisitedThumbnails(); |
41 | |
42 tracker->PostTaskAndReply( | 40 tracker->PostTaskAndReply( |
43 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB).get(), | 41 db_task_runner_.get(), FROM_HERE, |
44 FROM_HERE, | 42 base::Bind(&TopSitesBackend::GetMostVisitedThumbnailsOnDBThread, this, |
45 base::Bind(&TopSitesBackend::GetMostVisitedThumbnailsOnDBThread, | |
46 this, | |
47 thumbnails), | 43 thumbnails), |
48 base::Bind(callback, thumbnails)); | 44 base::Bind(callback, thumbnails)); |
49 } | 45 } |
50 | 46 |
51 void TopSitesBackend::UpdateTopSites(const TopSitesDelta& delta) { | 47 void TopSitesBackend::UpdateTopSites(const TopSitesDelta& delta) { |
52 BrowserThread::PostTask( | 48 db_task_runner_->PostTask( |
53 BrowserThread::DB, FROM_HERE, | 49 FROM_HERE, |
54 base::Bind(&TopSitesBackend::UpdateTopSitesOnDBThread, this, delta)); | 50 base::Bind(&TopSitesBackend::UpdateTopSitesOnDBThread, this, delta)); |
55 } | 51 } |
56 | 52 |
57 void TopSitesBackend::SetPageThumbnail(const MostVisitedURL& url, | 53 void TopSitesBackend::SetPageThumbnail(const MostVisitedURL& url, |
58 int url_rank, | 54 int url_rank, |
59 const Images& thumbnail) { | 55 const Images& thumbnail) { |
60 BrowserThread::PostTask( | 56 db_task_runner_->PostTask( |
61 BrowserThread::DB, FROM_HERE, | 57 FROM_HERE, base::Bind(&TopSitesBackend::SetPageThumbnailOnDBThread, this, |
62 base::Bind(&TopSitesBackend::SetPageThumbnailOnDBThread, this, url, | 58 url, url_rank, thumbnail)); |
63 url_rank, thumbnail)); | |
64 } | 59 } |
65 | 60 |
66 void TopSitesBackend::ResetDatabase() { | 61 void TopSitesBackend::ResetDatabase() { |
67 BrowserThread::PostTask( | 62 db_task_runner_->PostTask( |
68 BrowserThread::DB, FROM_HERE, | 63 FROM_HERE, |
69 base::Bind(&TopSitesBackend::ResetDatabaseOnDBThread, this, db_path_)); | 64 base::Bind(&TopSitesBackend::ResetDatabaseOnDBThread, this, db_path_)); |
70 } | 65 } |
71 | 66 |
72 void TopSitesBackend::DoEmptyRequest(const base::Closure& reply, | 67 void TopSitesBackend::DoEmptyRequest(const base::Closure& reply, |
73 base::CancelableTaskTracker* tracker) { | 68 base::CancelableTaskTracker* tracker) { |
74 tracker->PostTaskAndReply( | 69 tracker->PostTaskAndReply(db_task_runner_.get(), FROM_HERE, |
75 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB).get(), | 70 base::Bind(&base::DoNothing), reply); |
76 FROM_HERE, | |
77 base::Bind(&base::DoNothing), | |
78 reply); | |
79 } | 71 } |
80 | 72 |
81 TopSitesBackend::~TopSitesBackend() { | 73 TopSitesBackend::~TopSitesBackend() { |
82 DCHECK(!db_); // Shutdown should have happened first (which results in | 74 DCHECK(!db_); // Shutdown should have happened first (which results in |
83 // nulling out db). | 75 // nulling out db). |
84 } | 76 } |
85 | 77 |
86 void TopSitesBackend::InitDBOnDBThread(const base::FilePath& path) { | 78 void TopSitesBackend::InitDBOnDBThread(const base::FilePath& path) { |
87 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 79 DCHECK(db_task_runner_->BelongsToCurrentThread()); |
88 if (!db_->Init(path)) { | 80 if (!db_->Init(path)) { |
89 LOG(ERROR) << "Failed to initialize database."; | 81 LOG(ERROR) << "Failed to initialize database."; |
90 db_.reset(); | 82 db_.reset(); |
91 } | 83 } |
92 } | 84 } |
93 | 85 |
94 void TopSitesBackend::ShutdownDBOnDBThread() { | 86 void TopSitesBackend::ShutdownDBOnDBThread() { |
95 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 87 DCHECK(db_task_runner_->BelongsToCurrentThread()); |
96 db_.reset(); | 88 db_.reset(); |
97 } | 89 } |
98 | 90 |
99 void TopSitesBackend::GetMostVisitedThumbnailsOnDBThread( | 91 void TopSitesBackend::GetMostVisitedThumbnailsOnDBThread( |
100 scoped_refptr<MostVisitedThumbnails> thumbnails) { | 92 scoped_refptr<MostVisitedThumbnails> thumbnails) { |
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 93 DCHECK(db_task_runner_->BelongsToCurrentThread()); |
102 | 94 |
103 if (db_) { | 95 if (db_) { |
104 db_->GetPageThumbnails(&(thumbnails->most_visited), | 96 db_->GetPageThumbnails(&(thumbnails->most_visited), |
105 &(thumbnails->url_to_images_map)); | 97 &(thumbnails->url_to_images_map)); |
106 } | 98 } |
107 } | 99 } |
108 | 100 |
109 void TopSitesBackend::UpdateTopSitesOnDBThread(const TopSitesDelta& delta) { | 101 void TopSitesBackend::UpdateTopSitesOnDBThread(const TopSitesDelta& delta) { |
110 if (!db_) | 102 if (!db_) |
111 return; | 103 return; |
(...skipping 11 matching lines...) Expand all Loading... |
123 void TopSitesBackend::SetPageThumbnailOnDBThread(const MostVisitedURL& url, | 115 void TopSitesBackend::SetPageThumbnailOnDBThread(const MostVisitedURL& url, |
124 int url_rank, | 116 int url_rank, |
125 const Images& thumbnail) { | 117 const Images& thumbnail) { |
126 if (!db_) | 118 if (!db_) |
127 return; | 119 return; |
128 | 120 |
129 db_->SetPageThumbnail(url, url_rank, thumbnail); | 121 db_->SetPageThumbnail(url, url_rank, thumbnail); |
130 } | 122 } |
131 | 123 |
132 void TopSitesBackend::ResetDatabaseOnDBThread(const base::FilePath& file_path) { | 124 void TopSitesBackend::ResetDatabaseOnDBThread(const base::FilePath& file_path) { |
133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 125 DCHECK(db_task_runner_->BelongsToCurrentThread()); |
134 db_.reset(NULL); | 126 db_.reset(NULL); |
135 sql::Connection::Delete(db_path_); | 127 sql::Connection::Delete(db_path_); |
136 db_.reset(new TopSitesDatabase()); | 128 db_.reset(new TopSitesDatabase()); |
137 InitDBOnDBThread(db_path_); | 129 InitDBOnDBThread(db_path_); |
138 } | 130 } |
139 | 131 |
140 } // namespace history | 132 } // namespace history |
OLD | NEW |