1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef COMPONENTS_SEARCH_ENGINES_KEYWORD_WEB_DATA_SERVICE_H__ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define COMPONENTS_SEARCH_ENGINES_KEYWORD_WEB_DATA_SERVICE_H__ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/ref_counted.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/keyword_table.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_id.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/webdata/common/web_data_service_base.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/webdata/common/web_database.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace base { 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MessageLoopProxy; 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WDTypedResult; 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebDatabaseService; 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct TemplateURLData; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct WDKeywordsResult { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WDKeywordsResult(); 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~WDKeywordsResult(); 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeywordTable::Keywords keywords; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Identifies the ID of the TemplateURL that is the default search. A value of 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 0 indicates there is no default search provider. 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int64 default_search_provider_id; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Version of the built-in keywords. A value of 0 indicates a first run. 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int builtin_keyword_version; 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebDataServiceConsumer; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass KeywordWebDataService : public WebDataServiceBase { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Instantiate this to turn on batch mode on the provided |service| 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // until the scoper is destroyed. When batch mode is on, calls to any of the 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // three keyword table modification functions below will result in locally 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // queueing the operation; on setting this back to false, all the 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // modifications will be performed at once. This is a performance 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // optimization; see comments on KeywordTable::PerformOperations(). 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // If multiple scopers are in-scope simultaneously, batch mode will only be 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // exited when all are destroyed. If |service| is NULL, the object will do 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // nothing. 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class BatchModeScoper { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit BatchModeScoper(KeywordWebDataService* service); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~BatchModeScoper(); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeywordWebDataService* service_; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BatchModeScoper); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeywordWebDataService(scoped_refptr<WebDatabaseService> wdbs, 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<base::MessageLoopProxy> ui_thread, 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ProfileErrorCallback& callback); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // As the database processes requests at a later date, all deletion is 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // done on the background thread. 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Many of the keyword related methods do not return a handle. This is because 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the caller (TemplateURLService) does not need to know when the request is 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // done. 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AddKeyword(const TemplateURLData& data); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RemoveKeyword(TemplateURLID id); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void UpdateKeyword(const TemplateURLData& data); 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Fetches the keywords. 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // On success, consumer is notified with WDResult<KeywordTable::Keywords>. 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Handle GetKeywords(WebDataServiceConsumer* consumer); 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Sets the ID of the default search provider. 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetDefaultSearchProviderID(TemplateURLID id); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Sets the version of the builtin keywords. 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetBuiltinKeywordVersion(int version); 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~KeywordWebDataService(); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Called by the BatchModeScoper (see comments there). 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AdjustBatchModeLevel(bool entering_batch_mode); 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ////////////////////////////////////////////////////////////////////////////// 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The following methods are only invoked on the DB thread. 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ////////////////////////////////////////////////////////////////////////////// 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDatabase::State PerformKeywordOperationsImpl( 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const KeywordTable::Operations& operations, 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDatabase* db); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<WDTypedResult> GetKeywordsImpl(WebDatabase* db); 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDatabase::State SetDefaultSearchProviderIDImpl(TemplateURLID id, 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDatabase* db); 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDatabase::State SetBuiltinKeywordVersionImpl(int version, WebDatabase* db); 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t batch_mode_level_; 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeywordTable::Operations queued_keyword_operations_; 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(KeywordWebDataService); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // COMPONENTS_SEARCH_ENGINES_KEYWORD_WEB_DATA_SERVICE_H__ 111