OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/webdata/web_data_service.h" | 5 #include "chrome/browser/webdata/keyword_web_data_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/stl_util.h" | |
9 #include "chrome/browser/chrome_notification_types.h" | |
10 #include "chrome/browser/webdata/keyword_table.h" | 8 #include "chrome/browser/webdata/keyword_table.h" |
11 #include "chrome/browser/webdata/logins_table.h" | 9 #include "components/search_engines/template_url_data.h" |
12 #include "chrome/browser/webdata/web_apps_table.h" | 10 #include "components/webdata/common/web_data_results.h" |
13 #include "chrome/browser/webdata/web_intents_table.h" | |
14 #include "components/search_engines/template_url.h" | |
15 #include "components/signin/core/browser/webdata/token_service_table.h" | |
16 #include "components/webdata/common/web_database_service.h" | 11 #include "components/webdata/common/web_database_service.h" |
17 #include "content/public/browser/browser_thread.h" | |
18 #include "content/public/browser/notification_details.h" | |
19 #include "content/public/browser/notification_service.h" | |
20 #include "content/public/browser/notification_source.h" | |
21 #include "third_party/skia/include/core/SkBitmap.h" | |
22 | |
23 //////////////////////////////////////////////////////////////////////////////// | |
24 // | |
25 // WebDataService implementation. | |
26 // | |
27 //////////////////////////////////////////////////////////////////////////////// | |
28 | 12 |
29 using base::Bind; | 13 using base::Bind; |
30 using base::Time; | |
31 using content::BrowserThread; | |
32 | |
33 WDAppImagesResult::WDAppImagesResult() : has_all_images(false) {} | |
34 | |
35 WDAppImagesResult::~WDAppImagesResult() {} | |
36 | 14 |
37 WDKeywordsResult::WDKeywordsResult() | 15 WDKeywordsResult::WDKeywordsResult() |
38 : default_search_provider_id(0), | 16 : default_search_provider_id(0), |
39 builtin_keyword_version(0) { | 17 builtin_keyword_version(0) { |
40 } | 18 } |
41 | 19 |
42 WDKeywordsResult::~WDKeywordsResult() {} | 20 WDKeywordsResult::~WDKeywordsResult() {} |
43 | 21 |
44 WebDataService::KeywordBatchModeScoper::KeywordBatchModeScoper( | 22 KeywordWebDataService::BatchModeScoper::BatchModeScoper( |
45 WebDataService* service) | 23 KeywordWebDataService* service) |
46 : service_(service) { | 24 : service_(service) { |
47 if (service_) | 25 if (service_) |
48 service_->AdjustKeywordBatchModeLevel(true); | 26 service_->AdjustBatchModeLevel(true); |
49 } | 27 } |
50 | 28 |
51 WebDataService::KeywordBatchModeScoper::~KeywordBatchModeScoper() { | 29 KeywordWebDataService::BatchModeScoper::~BatchModeScoper() { |
52 if (service_) | 30 if (service_) |
53 service_->AdjustKeywordBatchModeLevel(false); | 31 service_->AdjustBatchModeLevel(false); |
54 } | 32 } |
55 | 33 |
56 WebDataService::WebDataService(scoped_refptr<WebDatabaseService> wdbs, | 34 KeywordWebDataService::KeywordWebDataService( |
57 const ProfileErrorCallback& callback) | 35 scoped_refptr<WebDatabaseService> wdbs, |
58 : WebDataServiceBase( | 36 scoped_refptr<base::MessageLoopProxy> ui_thread, |
59 wdbs, callback, | 37 const ProfileErrorCallback& callback) |
60 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 38 : WebDataServiceBase(wdbs, callback, ui_thread), |
61 keyword_batch_mode_level_(0) { | 39 batch_mode_level_(0) { |
62 } | 40 } |
63 | 41 |
64 ////////////////////////////////////////////////////////////////////////////// | 42 void KeywordWebDataService::AddKeyword(const TemplateURLData& data) { |
65 // | 43 if (batch_mode_level_) { |
66 // Keywords. | |
67 // | |
68 ////////////////////////////////////////////////////////////////////////////// | |
69 | |
70 void WebDataService::AddKeyword(const TemplateURLData& data) { | |
71 if (keyword_batch_mode_level_) { | |
72 queued_keyword_operations_.push_back( | 44 queued_keyword_operations_.push_back( |
73 KeywordTable::Operation(KeywordTable::ADD, data)); | 45 KeywordTable::Operation(KeywordTable::ADD, data)); |
74 } else { | 46 } else { |
75 AdjustKeywordBatchModeLevel(true); | 47 AdjustBatchModeLevel(true); |
76 AddKeyword(data); | 48 AddKeyword(data); |
77 AdjustKeywordBatchModeLevel(false); | 49 AdjustBatchModeLevel(false); |
78 } | 50 } |
79 } | 51 } |
80 | 52 |
81 void WebDataService::RemoveKeyword(TemplateURLID id) { | 53 void KeywordWebDataService::RemoveKeyword(TemplateURLID id) { |
82 if (keyword_batch_mode_level_) { | 54 if (batch_mode_level_) { |
83 TemplateURLData data; | 55 TemplateURLData data; |
84 data.id = id; | 56 data.id = id; |
85 queued_keyword_operations_.push_back( | 57 queued_keyword_operations_.push_back( |
86 KeywordTable::Operation(KeywordTable::REMOVE, data)); | 58 KeywordTable::Operation(KeywordTable::REMOVE, data)); |
87 } else { | 59 } else { |
88 AdjustKeywordBatchModeLevel(true); | 60 AdjustBatchModeLevel(true); |
89 RemoveKeyword(id); | 61 RemoveKeyword(id); |
90 AdjustKeywordBatchModeLevel(false); | 62 AdjustBatchModeLevel(false); |
91 } | 63 } |
92 } | 64 } |
93 | 65 |
94 void WebDataService::UpdateKeyword(const TemplateURLData& data) { | 66 void KeywordWebDataService::UpdateKeyword(const TemplateURLData& data) { |
95 if (keyword_batch_mode_level_) { | 67 if (batch_mode_level_) { |
96 queued_keyword_operations_.push_back( | 68 queued_keyword_operations_.push_back( |
97 KeywordTable::Operation(KeywordTable::UPDATE, data)); | 69 KeywordTable::Operation(KeywordTable::UPDATE, data)); |
98 } else { | 70 } else { |
99 AdjustKeywordBatchModeLevel(true); | 71 AdjustBatchModeLevel(true); |
100 UpdateKeyword(data); | 72 UpdateKeyword(data); |
101 AdjustKeywordBatchModeLevel(false); | 73 AdjustBatchModeLevel(false); |
102 } | 74 } |
103 } | 75 } |
104 | 76 |
105 WebDataServiceBase::Handle WebDataService::GetKeywords( | 77 WebDataServiceBase::Handle KeywordWebDataService::GetKeywords( |
106 WebDataServiceConsumer* consumer) { | 78 WebDataServiceConsumer* consumer) { |
107 return wdbs_->ScheduleDBTaskWithResult( | 79 return wdbs_->ScheduleDBTaskWithResult( |
108 FROM_HERE, Bind(&WebDataService::GetKeywordsImpl, this), consumer); | 80 FROM_HERE, Bind(&KeywordWebDataService::GetKeywordsImpl, this), consumer); |
109 } | 81 } |
110 | 82 |
111 void WebDataService::SetDefaultSearchProviderID(TemplateURLID id) { | 83 void KeywordWebDataService::SetDefaultSearchProviderID(TemplateURLID id) { |
112 wdbs_->ScheduleDBTask( | 84 wdbs_->ScheduleDBTask( |
113 FROM_HERE, | 85 FROM_HERE, |
114 Bind(&WebDataService::SetDefaultSearchProviderIDImpl, this, id)); | 86 Bind(&KeywordWebDataService::SetDefaultSearchProviderIDImpl, this, id)); |
115 } | 87 } |
116 | 88 |
117 void WebDataService::SetBuiltinKeywordVersion(int version) { | 89 void KeywordWebDataService::SetBuiltinKeywordVersion(int version) { |
118 wdbs_->ScheduleDBTask( | 90 wdbs_->ScheduleDBTask( |
119 FROM_HERE, | 91 FROM_HERE, |
120 Bind(&WebDataService::SetBuiltinKeywordVersionImpl, this, version)); | 92 Bind(&KeywordWebDataService::SetBuiltinKeywordVersionImpl, |
| 93 this, version)); |
121 } | 94 } |
122 | 95 |
123 ////////////////////////////////////////////////////////////////////////////// | 96 KeywordWebDataService::~KeywordWebDataService() { |
124 // | 97 DCHECK(!batch_mode_level_); |
125 // Web Apps | |
126 // | |
127 ////////////////////////////////////////////////////////////////////////////// | |
128 | |
129 void WebDataService::SetWebAppImage(const GURL& app_url, | |
130 const SkBitmap& image) { | |
131 wdbs_->ScheduleDBTask(FROM_HERE, | |
132 Bind(&WebDataService::SetWebAppImageImpl, this, app_url, image)); | |
133 } | 98 } |
134 | 99 |
135 void WebDataService::SetWebAppHasAllImages(const GURL& app_url, | 100 void KeywordWebDataService::AdjustBatchModeLevel(bool entering_batch_mode) { |
136 bool has_all_images) { | |
137 wdbs_->ScheduleDBTask(FROM_HERE, | |
138 Bind(&WebDataService::SetWebAppHasAllImagesImpl, this, app_url, | |
139 has_all_images)); | |
140 } | |
141 | |
142 void WebDataService::RemoveWebApp(const GURL& app_url) { | |
143 wdbs_->ScheduleDBTask(FROM_HERE, | |
144 Bind(&WebDataService::RemoveWebAppImpl, this, app_url)); | |
145 } | |
146 | |
147 WebDataServiceBase::Handle WebDataService::GetWebAppImages( | |
148 const GURL& app_url, WebDataServiceConsumer* consumer) { | |
149 return wdbs_->ScheduleDBTaskWithResult(FROM_HERE, | |
150 Bind(&WebDataService::GetWebAppImagesImpl, this, app_url), consumer); | |
151 } | |
152 | |
153 //////////////////////////////////////////////////////////////////////////////// | |
154 | |
155 WebDataService::WebDataService() | |
156 : WebDataServiceBase( | |
157 NULL, ProfileErrorCallback(), | |
158 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | |
159 keyword_batch_mode_level_(0) { | |
160 } | |
161 | |
162 WebDataService::~WebDataService() { | |
163 DCHECK(!keyword_batch_mode_level_); | |
164 } | |
165 | |
166 void WebDataService::AdjustKeywordBatchModeLevel(bool entering_batch_mode) { | |
167 if (entering_batch_mode) { | 101 if (entering_batch_mode) { |
168 ++keyword_batch_mode_level_; | 102 ++batch_mode_level_; |
169 } else { | 103 } else { |
170 DCHECK(keyword_batch_mode_level_); | 104 DCHECK(batch_mode_level_); |
171 --keyword_batch_mode_level_; | 105 --batch_mode_level_; |
172 if (!keyword_batch_mode_level_ && !queued_keyword_operations_.empty()) { | 106 if (!batch_mode_level_ && !queued_keyword_operations_.empty()) { |
173 wdbs_->ScheduleDBTask( | 107 wdbs_->ScheduleDBTask( |
174 FROM_HERE, | 108 FROM_HERE, |
175 Bind(&WebDataService::PerformKeywordOperationsImpl, this, | 109 Bind(&KeywordWebDataService::PerformKeywordOperationsImpl, this, |
176 queued_keyword_operations_)); | 110 queued_keyword_operations_)); |
177 queued_keyword_operations_.clear(); | 111 queued_keyword_operations_.clear(); |
178 } | 112 } |
179 } | 113 } |
180 } | 114 } |
181 | 115 |
182 //////////////////////////////////////////////////////////////////////////////// | 116 WebDatabase::State KeywordWebDataService::PerformKeywordOperationsImpl( |
183 // | |
184 // Keywords implementation. | |
185 // | |
186 //////////////////////////////////////////////////////////////////////////////// | |
187 | |
188 WebDatabase::State WebDataService::PerformKeywordOperationsImpl( | |
189 const KeywordTable::Operations& operations, | 117 const KeywordTable::Operations& operations, |
190 WebDatabase* db) { | 118 WebDatabase* db) { |
191 return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? | 119 return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? |
192 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 120 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
193 } | 121 } |
194 | 122 |
195 scoped_ptr<WDTypedResult> WebDataService::GetKeywordsImpl(WebDatabase* db) { | 123 scoped_ptr<WDTypedResult> KeywordWebDataService::GetKeywordsImpl( |
| 124 WebDatabase* db) { |
196 scoped_ptr<WDTypedResult> result_ptr; | 125 scoped_ptr<WDTypedResult> result_ptr; |
197 WDKeywordsResult result; | 126 WDKeywordsResult result; |
198 if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { | 127 if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { |
199 result.default_search_provider_id = | 128 result.default_search_provider_id = |
200 KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); | 129 KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); |
201 result.builtin_keyword_version = | 130 result.builtin_keyword_version = |
202 KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); | 131 KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); |
203 result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); | 132 result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); |
204 } | 133 } |
205 return result_ptr.Pass(); | 134 return result_ptr.Pass(); |
206 } | 135 } |
207 | 136 |
208 WebDatabase::State WebDataService::SetDefaultSearchProviderIDImpl( | 137 WebDatabase::State KeywordWebDataService::SetDefaultSearchProviderIDImpl( |
209 TemplateURLID id, | 138 TemplateURLID id, |
210 WebDatabase* db) { | 139 WebDatabase* db) { |
211 return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? | 140 return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? |
212 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 141 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
213 } | 142 } |
214 | 143 |
215 WebDatabase::State WebDataService::SetBuiltinKeywordVersionImpl( | 144 WebDatabase::State KeywordWebDataService::SetBuiltinKeywordVersionImpl( |
216 int version, | 145 int version, |
217 WebDatabase* db) { | 146 WebDatabase* db) { |
218 return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? | 147 return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? |
219 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 148 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
220 } | 149 } |
221 | |
222 //////////////////////////////////////////////////////////////////////////////// | |
223 // | |
224 // Web Apps implementation. | |
225 // | |
226 //////////////////////////////////////////////////////////////////////////////// | |
227 | |
228 WebDatabase::State WebDataService::SetWebAppImageImpl( | |
229 const GURL& app_url, const SkBitmap& image, WebDatabase* db) { | |
230 WebAppsTable::FromWebDatabase(db)->SetWebAppImage(app_url, image); | |
231 return WebDatabase::COMMIT_NEEDED; | |
232 } | |
233 | |
234 WebDatabase::State WebDataService::SetWebAppHasAllImagesImpl( | |
235 const GURL& app_url, bool has_all_images, WebDatabase* db) { | |
236 WebAppsTable::FromWebDatabase(db)->SetWebAppHasAllImages(app_url, | |
237 has_all_images); | |
238 return WebDatabase::COMMIT_NEEDED; | |
239 } | |
240 | |
241 WebDatabase::State WebDataService::RemoveWebAppImpl( | |
242 const GURL& app_url, WebDatabase* db) { | |
243 WebAppsTable::FromWebDatabase(db)->RemoveWebApp(app_url); | |
244 return WebDatabase::COMMIT_NEEDED; | |
245 } | |
246 | |
247 scoped_ptr<WDTypedResult> WebDataService::GetWebAppImagesImpl( | |
248 const GURL& app_url, WebDatabase* db) { | |
249 WDAppImagesResult result; | |
250 result.has_all_images = | |
251 WebAppsTable::FromWebDatabase(db)->GetWebAppHasAllImages(app_url); | |
252 WebAppsTable::FromWebDatabase(db)->GetWebAppImages(app_url, &result.images); | |
253 return scoped_ptr<WDTypedResult>( | |
254 new WDResult<WDAppImagesResult>(WEB_APP_IMAGES, result)); | |
255 } | |
OLD | NEW |