1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_
6#define CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_
7#pragma once
8
9#include <vector>
10
11#include "chrome/browser/webdata/web_database_table.h"
12#include "chrome/browser/search_engines/template_url_id.h"
13
14class GURL;
15class TemplateURL;
16
17namespace base {
18class Time;
19}
20
21// This class manages the |keywords| MetaTable within the SQLite database
22// passed to the constructor. It expects the following schema:
23//
24// Note: The database stores time in seconds, UTC.
25//
26// keywords                 Most of the columns mirror that of a field in
27//                          TemplateURL. See TemplateURL for more details.
28//   id
29//   short_name
30//   keyword
31//   favicon_url
32//   url
33//   show_in_default_list
34//   safe_for_autoreplace
35//   originating_url
36//   date_created           This column was added after we allowed keywords.
37//                          Keywords created before we started tracking
38//                          creation date have a value of 0 for this.
39//   usage_count
40//   input_encodings        Semicolon separated list of supported input
41//                          encodings, may be empty.
42//   suggest_url
43//   prepopulate_id         See TemplateURL::prepopulate_id.
44//   autogenerate_keyword
45//   logo_id                See TemplateURL::logo_id
46//   created_by_policy      See TemplateURL::created_by_policy.  This was added
47//                          in version 26.
48//   instant_url            See TemplateURL::instant_url.  This was added
49//                          in version 29.
50//
51class KeywordTable : public WebDatabaseTable {
52 public:
53  KeywordTable(sql::Connection* db, sql::MetaTable* meta_table)
54      : WebDatabaseTable(db, meta_table) {}
55  virtual ~KeywordTable();
56  virtual bool Init();
57  virtual bool IsSyncable();
58
59  // Adds a new keyword, updating the id field on success.
60  // Returns true if successful.
61  bool AddKeyword(const TemplateURL& url);
62
63  // Removes the specified keyword.
64  // Returns true if successful.
65  bool RemoveKeyword(TemplateURLID id);
66
67  // Loads the keywords into the specified vector. It's up to the caller to
68  // delete the returned objects.
69  // Returns true on success.
70  bool GetKeywords(std::vector<TemplateURL*>* urls);
71
72  // Updates the database values for the specified url.
73  // Returns true on success.
74  bool UpdateKeyword(const TemplateURL& url);
75
76  // ID (TemplateURL->id) of the default search provider.
77  bool SetDefaultSearchProviderID(int64 id);
78  int64 GetDefaulSearchProviderID();
79
80  // Version of the built-in keywords.
81  bool SetBuitinKeywordVersion(int version);
82  int GetBuitinKeywordVersion();
83
84  // Table migration functions.
85  bool MigrateToVersion21AutoGenerateKeywordColumn();
86  bool MigrateToVersion25AddLogoIDColumn();
87  bool MigrateToVersion26AddCreatedByPolicyColumn();
88  bool MigrateToVersion28SupportsInstantColumn();
89  bool MigrateToVersion29InstantUrlToSupportsInstant();
90
91 private:
92  DISALLOW_COPY_AND_ASSIGN(KeywordTable);
93};
94
95#endif  // CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_
96