| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "components/search_engines/keyword_web_data_service.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "components/search_engines/keyword_table.h" | |
| 9 #include "components/search_engines/template_url_data.h" | |
| 10 #include "components/webdata/common/web_data_results.h" | |
| 11 #include "components/webdata/common/web_database_service.h" | |
| 12 | |
| 13 using base::Bind; | |
| 14 | |
| 15 WDKeywordsResult::WDKeywordsResult() | |
| 16 : default_search_provider_id(0), | |
| 17 builtin_keyword_version(0) { | |
| 18 } | |
| 19 | |
| 20 WDKeywordsResult::~WDKeywordsResult() {} | |
| 21 | |
| 22 KeywordWebDataService::BatchModeScoper::BatchModeScoper( | |
| 23 KeywordWebDataService* service) | |
| 24 : service_(service) { | |
| 25 if (service_) | |
| 26 service_->AdjustBatchModeLevel(true); | |
| 27 } | |
| 28 | |
| 29 KeywordWebDataService::BatchModeScoper::~BatchModeScoper() { | |
| 30 if (service_) | |
| 31 service_->AdjustBatchModeLevel(false); | |
| 32 } | |
| 33 | |
| 34 KeywordWebDataService::KeywordWebDataService( | |
| 35 scoped_refptr<WebDatabaseService> wdbs, | |
| 36 scoped_refptr<base::MessageLoopProxy> ui_thread, | |
| 37 const ProfileErrorCallback& callback) | |
| 38 : WebDataServiceBase(wdbs, callback, ui_thread), | |
| 39 batch_mode_level_(0) { | |
| 40 } | |
| 41 | |
| 42 void KeywordWebDataService::AddKeyword(const TemplateURLData& data) { | |
| 43 if (batch_mode_level_) { | |
| 44 queued_keyword_operations_.push_back( | |
| 45 KeywordTable::Operation(KeywordTable::ADD, data)); | |
| 46 } else { | |
| 47 AdjustBatchModeLevel(true); | |
| 48 AddKeyword(data); | |
| 49 AdjustBatchModeLevel(false); | |
| 50 } | |
| 51 } | |
| 52 | |
| 53 void KeywordWebDataService::RemoveKeyword(TemplateURLID id) { | |
| 54 if (batch_mode_level_) { | |
| 55 TemplateURLData data; | |
| 56 data.id = id; | |
| 57 queued_keyword_operations_.push_back( | |
| 58 KeywordTable::Operation(KeywordTable::REMOVE, data)); | |
| 59 } else { | |
| 60 AdjustBatchModeLevel(true); | |
| 61 RemoveKeyword(id); | |
| 62 AdjustBatchModeLevel(false); | |
| 63 } | |
| 64 } | |
| 65 | |
| 66 void KeywordWebDataService::UpdateKeyword(const TemplateURLData& data) { | |
| 67 if (batch_mode_level_) { | |
| 68 queued_keyword_operations_.push_back( | |
| 69 KeywordTable::Operation(KeywordTable::UPDATE, data)); | |
| 70 } else { | |
| 71 AdjustBatchModeLevel(true); | |
| 72 UpdateKeyword(data); | |
| 73 AdjustBatchModeLevel(false); | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 WebDataServiceBase::Handle KeywordWebDataService::GetKeywords( | |
| 78 WebDataServiceConsumer* consumer) { | |
| 79 return wdbs_->ScheduleDBTaskWithResult( | |
| 80 FROM_HERE, Bind(&KeywordWebDataService::GetKeywordsImpl, this), consumer); | |
| 81 } | |
| 82 | |
| 83 void KeywordWebDataService::SetDefaultSearchProviderID(TemplateURLID id) { | |
| 84 wdbs_->ScheduleDBTask( | |
| 85 FROM_HERE, | |
| 86 Bind(&KeywordWebDataService::SetDefaultSearchProviderIDImpl, this, id)); | |
| 87 } | |
| 88 | |
| 89 void KeywordWebDataService::SetBuiltinKeywordVersion(int version) { | |
| 90 wdbs_->ScheduleDBTask( | |
| 91 FROM_HERE, | |
| 92 Bind(&KeywordWebDataService::SetBuiltinKeywordVersionImpl, | |
| 93 this, version)); | |
| 94 } | |
| 95 | |
| 96 KeywordWebDataService::~KeywordWebDataService() { | |
| 97 DCHECK(!batch_mode_level_); | |
| 98 } | |
| 99 | |
| 100 void KeywordWebDataService::AdjustBatchModeLevel(bool entering_batch_mode) { | |
| 101 if (entering_batch_mode) { | |
| 102 ++batch_mode_level_; | |
| 103 } else { | |
| 104 DCHECK(batch_mode_level_); | |
| 105 --batch_mode_level_; | |
| 106 if (!batch_mode_level_ && !queued_keyword_operations_.empty()) { | |
| 107 wdbs_->ScheduleDBTask( | |
| 108 FROM_HERE, | |
| 109 Bind(&KeywordWebDataService::PerformKeywordOperationsImpl, this, | |
| 110 queued_keyword_operations_)); | |
| 111 queued_keyword_operations_.clear(); | |
| 112 } | |
| 113 } | |
| 114 } | |
| 115 | |
| 116 WebDatabase::State KeywordWebDataService::PerformKeywordOperationsImpl( | |
| 117 const KeywordTable::Operations& operations, | |
| 118 WebDatabase* db) { | |
| 119 return KeywordTable::FromWebDatabase(db)->PerformOperations(operations) ? | |
| 120 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | |
| 121 } | |
| 122 | |
| 123 scoped_ptr<WDTypedResult> KeywordWebDataService::GetKeywordsImpl( | |
| 124 WebDatabase* db) { | |
| 125 scoped_ptr<WDTypedResult> result_ptr; | |
| 126 WDKeywordsResult result; | |
| 127 if (KeywordTable::FromWebDatabase(db)->GetKeywords(&result.keywords)) { | |
| 128 result.default_search_provider_id = | |
| 129 KeywordTable::FromWebDatabase(db)->GetDefaultSearchProviderID(); | |
| 130 result.builtin_keyword_version = | |
| 131 KeywordTable::FromWebDatabase(db)->GetBuiltinKeywordVersion(); | |
| 132 result_ptr.reset(new WDResult<WDKeywordsResult>(KEYWORDS_RESULT, result)); | |
| 133 } | |
| 134 return result_ptr.Pass(); | |
| 135 } | |
| 136 | |
| 137 WebDatabase::State KeywordWebDataService::SetDefaultSearchProviderIDImpl( | |
| 138 TemplateURLID id, | |
| 139 WebDatabase* db) { | |
| 140 return KeywordTable::FromWebDatabase(db)->SetDefaultSearchProviderID(id) ? | |
| 141 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | |
| 142 } | |
| 143 | |
| 144 WebDatabase::State KeywordWebDataService::SetBuiltinKeywordVersionImpl( | |
| 145 int version, | |
| 146 WebDatabase* db) { | |
| 147 return KeywordTable::FromWebDatabase(db)->SetBuiltinKeywordVersion(version) ? | |
| 148 WebDatabase::COMMIT_NEEDED : WebDatabase::COMMIT_NOT_NEEDED; | |
| 149 } | |
| OLD | NEW |