| 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::KeywordBatchModeScoper::KeywordBatchModeScoper( |
| 45 WebDataService* service) | 23 KeywordWebDataService* service) |
| 46 : service_(service) { | 24 : service_(service) { |
| 47 if (service_) | 25 if (service_) |
| 48 service_->AdjustKeywordBatchModeLevel(true); | 26 service_->AdjustKeywordBatchModeLevel(true); |
| 49 } | 27 } |
| 50 | 28 |
| 51 WebDataService::KeywordBatchModeScoper::~KeywordBatchModeScoper() { | 29 KeywordWebDataService::KeywordBatchModeScoper::~KeywordBatchModeScoper() { |
| 52 if (service_) | 30 if (service_) |
| 53 service_->AdjustKeywordBatchModeLevel(false); | 31 service_->AdjustKeywordBatchModeLevel(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 keyword_batch_mode_level_(0) { |
| 62 } | 40 } |
| 63 | 41 |
| 64 ////////////////////////////////////////////////////////////////////////////// | 42 void KeywordWebDataService::AddKeyword(const TemplateURLData& data) { |
| 65 // | |
| 66 // Keywords. | |
| 67 // | |
| 68 ////////////////////////////////////////////////////////////////////////////// | |
| 69 | |
| 70 void WebDataService::AddKeyword(const TemplateURLData& data) { | |
| 71 if (keyword_batch_mode_level_) { | 43 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 AdjustKeywordBatchModeLevel(true); |
| 76 AddKeyword(data); | 48 AddKeyword(data); |
| 77 AdjustKeywordBatchModeLevel(false); | 49 AdjustKeywordBatchModeLevel(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 (keyword_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 AdjustKeywordBatchModeLevel(true); |
| 89 RemoveKeyword(id); | 61 RemoveKeyword(id); |
| 90 AdjustKeywordBatchModeLevel(false); | 62 AdjustKeywordBatchModeLevel(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 (keyword_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 AdjustKeywordBatchModeLevel(true); |
| 100 UpdateKeyword(data); | 72 UpdateKeyword(data); |
| 101 AdjustKeywordBatchModeLevel(false); | 73 AdjustKeywordBatchModeLevel(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 // | |
| 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 } | |
| 134 | |
| 135 void WebDataService::SetWebAppHasAllImages(const GURL& app_url, | |
| 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_); | 97 DCHECK(!keyword_batch_mode_level_); |
| 164 } | 98 } |
| 165 | 99 |
| 166 void WebDataService::AdjustKeywordBatchModeLevel(bool entering_batch_mode) { | 100 void KeywordWebDataService::AdjustKeywordBatchModeLevel( |
| 101 bool entering_batch_mode) { |
| 167 if (entering_batch_mode) { | 102 if (entering_batch_mode) { |
| 168 ++keyword_batch_mode_level_; | 103 ++keyword_batch_mode_level_; |
| 169 } else { | 104 } else { |
| 170 DCHECK(keyword_batch_mode_level_); | 105 DCHECK(keyword_batch_mode_level_); |
| 171 --keyword_batch_mode_level_; | 106 --keyword_batch_mode_level_; |
| 172 if (!keyword_batch_mode_level_ && !queued_keyword_operations_.empty()) { | 107 if (!keyword_batch_mode_level_ && !queued_keyword_operations_.empty()) { |
| 173 wdbs_->ScheduleDBTask( | 108 wdbs_->ScheduleDBTask( |
| 174 FROM_HERE, | 109 FROM_HERE, |
| 175 Bind(&WebDataService::PerformKeywordOperationsImpl, this, | 110 Bind(&KeywordWebDataService::PerformKeywordOperationsImpl, this, |
| 176 queued_keyword_operations_)); | 111 queued_keyword_operations_)); |
| 177 queued_keyword_operations_.clear(); | 112 queued_keyword_operations_.clear(); |
| 178 } | 113 } |
| 179 } | 114 } |
| 180 } | 115 } |
| 181 | 116 |
| 182 //////////////////////////////////////////////////////////////////////////////// | 117 WebDatabase::State KeywordWebDataService::PerformKeywordOperationsImpl( |
| 183 // | |
| 184 // Keywords implementation. | |
| 185 // | |
| 186 //////////////////////////////////////////////////////////////////////////////// | |
| 187 | |
| 188 WebDatabase::State WebDataService::PerformKeywordOperationsImpl( | |
| 189 const KeywordTable::Operations& operations, | 118 const KeywordTable::Operations& operations, |
| 190 WebDatabase* db) { | 119 WebDatabase* db) { |
| 191 return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? | 120 return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? |
| 192 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 121 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
| 193 } | 122 } |
| 194 | 123 |
| 195 scoped_ptr<WDTypedResult> WebDataService::GetKeywordsImpl(WebDatabase* db) { | 124 scoped_ptr<WDTypedResult> KeywordWebDataService::GetKeywordsImpl( |
| 125 WebDatabase* db) { |
| 196 scoped_ptr<WDTypedResult> result_ptr; | 126 scoped_ptr<WDTypedResult> result_ptr; |
| 197 WDKeywordsResult result; | 127 WDKeywordsResult result; |
| 198 if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { | 128 if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { |
| 199 result.default_search_provider_id = | 129 result.default_search_provider_id = |
| 200 KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); | 130 KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); |
| 201 result.builtin_keyword_version = | 131 result.builtin_keyword_version = |
| 202 KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); | 132 KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); |
| 203 result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); | 133 result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); |
| 204 } | 134 } |
| 205 return result_ptr.Pass(); | 135 return result_ptr.Pass(); |
| 206 } | 136 } |
| 207 | 137 |
| 208 WebDatabase::State WebDataService::SetDefaultSearchProviderIDImpl( | 138 WebDatabase::State KeywordWebDataService::SetDefaultSearchProviderIDImpl( |
| 209 TemplateURLID id, | 139 TemplateURLID id, |
| 210 WebDatabase* db) { | 140 WebDatabase* db) { |
| 211 return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? | 141 return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? |
| 212 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 142 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
| 213 } | 143 } |
| 214 | 144 |
| 215 WebDatabase::State WebDataService::SetBuiltinKeywordVersionImpl( | 145 WebDatabase::State KeywordWebDataService::SetBuiltinKeywordVersionImpl( |
| 216 int version, | 146 int version, |
| 217 WebDatabase* db) { | 147 WebDatabase* db) { |
| 218 return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? | 148 return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? |
| 219 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | 149 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; |
| 220 } | 150 } |
| 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 |