summaryrefslogtreecommitdiffstats
path: root/chrome/browser/webdata/keyword_web_data_service.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/webdata/keyword_web_data_service.h')
-rw-r--r--chrome/browser/webdata/keyword_web_data_service.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/chrome/browser/webdata/keyword_web_data_service.h b/chrome/browser/webdata/keyword_web_data_service.h
new file mode 100644
index 0000000..3659b09
--- /dev/null
+++ b/chrome/browser/webdata/keyword_web_data_service.h
@@ -0,0 +1,110 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEBDATA_KEYWORD_WEB_DATA_SERVICE_H__
+#define CHROME_BROWSER_WEBDATA_KEYWORD_WEB_DATA_SERVICE_H__
+
+#include "base/memory/ref_counted.h"
+#include "chrome/browser/webdata/keyword_table.h"
+#include "components/search_engines/template_url_id.h"
+#include "components/webdata/common/web_data_service_base.h"
+#include "components/webdata/common/web_database.h"
+
+namespace base {
+class MessageLoopProxy;
+}
+
+class WDTypedResult;
+class WebDatabaseService;
+struct TemplateURLData;
+
+struct WDKeywordsResult {
+ WDKeywordsResult();
+ ~WDKeywordsResult();
+
+ KeywordTable::Keywords keywords;
+ // Identifies the ID of the TemplateURL that is the default search. A value of
+ // 0 indicates there is no default search provider.
+ int64 default_search_provider_id;
+ // Version of the built-in keywords. A value of 0 indicates a first run.
+ int builtin_keyword_version;
+};
+
+class WebDataServiceConsumer;
+
+class KeywordWebDataService : public WebDataServiceBase {
+ public:
+ // Instantiate this to turn on batch mode on the provided |service|
+ // until the scoper is destroyed. When batch mode is on, calls to any of the
+ // three keyword table modification functions below will result in locally
+ // queueing the operation; on setting this back to false, all the
+ // modifications will be performed at once. This is a performance
+ // optimization; see comments on KeywordTable::PerformOperations().
+ //
+ // If multiple scopers are in-scope simultaneously, batch mode will only be
+ // exited when all are destroyed. If |service| is NULL, the object will do
+ // nothing.
+ class BatchModeScoper {
+ public:
+ explicit BatchModeScoper(KeywordWebDataService* service);
+ ~BatchModeScoper();
+
+ private:
+ KeywordWebDataService* service_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatchModeScoper);
+ };
+
+ KeywordWebDataService(scoped_refptr<WebDatabaseService> wdbs,
+ scoped_refptr<base::MessageLoopProxy> ui_thread,
+ const ProfileErrorCallback& callback);
+
+ // As the database processes requests at a later date, all deletion is
+ // done on the background thread.
+ //
+ // Many of the keyword related methods do not return a handle. This is because
+ // the caller (TemplateURLService) does not need to know when the request is
+ // done.
+
+ void AddKeyword(const TemplateURLData& data);
+ void RemoveKeyword(TemplateURLID id);
+ void UpdateKeyword(const TemplateURLData& data);
+
+ // Fetches the keywords.
+ // On success, consumer is notified with WDResult<KeywordTable::Keywords>.
+ Handle GetKeywords(WebDataServiceConsumer* consumer);
+
+ // Sets the ID of the default search provider.
+ void SetDefaultSearchProviderID(TemplateURLID id);
+
+ // Sets the version of the builtin keywords.
+ void SetBuiltinKeywordVersion(int version);
+
+ protected:
+ virtual ~KeywordWebDataService();
+
+ private:
+ // Called by the BatchModeScoper (see comments there).
+ void AdjustBatchModeLevel(bool entering_batch_mode);
+
+ //////////////////////////////////////////////////////////////////////////////
+ //
+ // The following methods are only invoked on the DB thread.
+ //
+ //////////////////////////////////////////////////////////////////////////////
+ WebDatabase::State PerformKeywordOperationsImpl(
+ const KeywordTable::Operations& operations,
+ WebDatabase* db);
+ scoped_ptr<WDTypedResult> GetKeywordsImpl(WebDatabase* db);
+ WebDatabase::State SetDefaultSearchProviderIDImpl(TemplateURLID id,
+ WebDatabase* db);
+ WebDatabase::State SetBuiltinKeywordVersionImpl(int version, WebDatabase* db);
+
+ size_t batch_mode_level_;
+ KeywordTable::Operations queued_keyword_operations_;
+
+ DISALLOW_COPY_AND_ASSIGN(KeywordWebDataService);
+};
+
+#endif // CHROME_BROWSER_WEBDATA_KEYWORD_WEB_DATA_SERVICE_H__