1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
|
// 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 COMPONENTS_SEARCH_ENGINES_KEYWORD_TABLE_H_
#define COMPONENTS_SEARCH_ENGINES_KEYWORD_TABLE_H_
#include <string>
#include <vector>
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/strings/string16.h"
#include "components/search_engines/template_url_id.h"
#include "components/webdata/common/web_database_table.h"
struct TemplateURLData;
class WebDatabase;
namespace sql {
class Statement;
} // namespace sql
// This class manages the |keywords| MetaTable within the SQLite database
// passed to the constructor. It expects the following schema:
//
// Note: The database stores time in seconds, UTC.
//
// keywords Most of the columns mirror that of a field in
// TemplateURLData. See that struct for more details.
// id
// short_name
// keyword
// favicon_url
// url
// show_in_default_list
// safe_for_autoreplace
// originating_url
// date_created This column was added after we allowed keywords.
// Keywords created before we started tracking
// creation date have a value of 0 for this.
// usage_count
// input_encodings Semicolon separated list of supported input
// encodings, may be empty.
// suggest_url
// prepopulate_id See TemplateURLData::prepopulate_id.
// created_by_policy See TemplateURLData::created_by_policy. This was
// added in version 26.
// instant_url See TemplateURLData::instant_url. This was added in
// version 29.
// last_modified See TemplateURLData::last_modified. This was added
// in version 38.
// sync_guid See TemplateURLData::sync_guid. This was added in
// version 39.
// alternate_urls See TemplateURLData::alternate_urls. This was added
// in version 47.
// search_terms_replacement_key
// See TemplateURLData::search_terms_replacement_key.
// This was added in version 49.
// image_url See TemplateURLData::image_url. This was added in
// version 52.
// search_url_post_params See TemplateURLData::search_url_post_params. This
// was added in version 52.
// suggest_url_post_params See TemplateURLData::suggestions_url_post_params.
// This was added in version 52.
// instant_url_post_params See TemplateURLData::instant_url_post_params. This
// was added in version 52.
// image_url_post_params See TemplateURLData::image_url_post_params. This
// was added in version 52.
// new_tab_url See TemplateURLData::new_tab_url. This was added in
// version 53.
//
// This class also manages some fields in the |meta| table:
//
// Default Search Provider ID The id of the default search provider.
// Builtin Keyword Version The version of builtin keywords data.
//
class KeywordTable : public WebDatabaseTable {
public:
enum OperationType {
ADD,
REMOVE,
UPDATE,
};
typedef std::pair<OperationType, TemplateURLData> Operation;
typedef std::vector<Operation> Operations;
typedef std::vector<TemplateURLData> Keywords;
// Constants exposed for the benefit of test code:
static const char kDefaultSearchProviderKey[];
KeywordTable();
~KeywordTable() override;
// Retrieves the KeywordTable* owned by |database|.
static KeywordTable* FromWebDatabase(WebDatabase* db);
WebDatabaseTable::TypeKey GetTypeKey() const override;
bool CreateTablesIfNecessary() override;
bool IsSyncable() override;
bool MigrateToVersion(int version, bool* update_compatible_version) override;
// Performs an arbitrary number of Add/Remove/Update operations as a single
// transaction. This is provided for efficiency reasons: if the caller needs
// to perform a large number of operations, doing them in a single transaction
// instead of one-per-transaction can be dramatically more efficient.
bool PerformOperations(const Operations& operations);
// Loads the keywords into the specified vector. It's up to the caller to
// delete the returned objects.
// Returns true on success.
bool GetKeywords(Keywords* keywords);
// ID (TemplateURLData->id) of the default search provider.
bool SetDefaultSearchProviderID(int64 id);
int64 GetDefaultSearchProviderID();
// Version of the built-in keywords.
bool SetBuiltinKeywordVersion(int version);
int GetBuiltinKeywordVersion();
// Returns a comma-separated list of the keyword columns for the current
// version of the table.
static std::string GetKeywordColumns();
// Table migration functions.
bool MigrateToVersion21AutoGenerateKeywordColumn();
bool MigrateToVersion25AddLogoIDColumn();
bool MigrateToVersion26AddCreatedByPolicyColumn();
bool MigrateToVersion28SupportsInstantColumn();
bool MigrateToVersion29InstantURLToSupportsInstant();
bool MigrateToVersion38AddLastModifiedColumn();
bool MigrateToVersion39AddSyncGUIDColumn();
bool MigrateToVersion44AddDefaultSearchProviderBackup();
bool MigrateToVersion45RemoveLogoIDAndAutogenerateColumns();
bool MigrateToVersion47AddAlternateURLsColumn();
bool MigrateToVersion48RemoveKeywordsBackup();
bool MigrateToVersion49AddSearchTermsReplacementKeyColumn();
bool MigrateToVersion52AddImageSearchAndPOSTSupport();
bool MigrateToVersion53AddNewTabURLColumn();
bool MigrateToVersion59RemoveExtensionKeywords();
private:
friend class KeywordTableTest;
FRIEND_TEST_ALL_PREFIXES(WebDatabaseMigrationTest, MigrateVersion44ToCurrent);
// NOTE: Since the table columns have changed in different versions, many
// functions below take a |table_version| argument which dictates which
// version number's column set to use.
// Fills |data| with the data in |s|. Returns false if we couldn't fill
// |data| for some reason, e.g. |s| tried to set one of the fields to an
// illegal value.
static bool GetKeywordDataFromStatement(const sql::Statement& s,
TemplateURLData* data);
// Adds a new keyword, updating the id field on success.
// Returns true if successful.
bool AddKeyword(const TemplateURLData& data);
// Removes the specified keyword.
// Returns true if successful.
bool RemoveKeyword(TemplateURLID id);
// Updates the database values for the specified url.
// Returns true on success.
bool UpdateKeyword(const TemplateURLData& data);
// Gets a string representation for keyword with id specified.
// Used to store its result in |meta| table or to compare with another
// keyword. Returns true on success, false otherwise.
bool GetKeywordAsString(TemplateURLID id,
const std::string& table_name,
std::string* result);
// Migrates table |name| (which should be either "keywords" or
// "keywords_backup") from version 44 to version 45.
bool MigrateKeywordsTableForVersion45(const std::string& name);
DISALLOW_COPY_AND_ASSIGN(KeywordTable);
};
#endif // COMPONENTS_SEARCH_ENGINES_KEYWORD_TABLE_H_
|