| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ | 5 #ifndef CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ |
| 6 #define CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ | 6 #define CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 // added in version 26. | 47 // added in version 26. |
| 48 // instant_url See TemplateURLData::instant_url. This was added in | 48 // instant_url See TemplateURLData::instant_url. This was added in |
| 49 // version 29. | 49 // version 29. |
| 50 // last_modified See TemplateURLData::last_modified. This was added | 50 // last_modified See TemplateURLData::last_modified. This was added |
| 51 // in version 38. | 51 // in version 38. |
| 52 // sync_guid See TemplateURLData::sync_guid. This was added in | 52 // sync_guid See TemplateURLData::sync_guid. This was added in |
| 53 // version 39. | 53 // version 39. |
| 54 // alternate_urls See TemplateURLData::alternate_urls. This was added | 54 // alternate_urls See TemplateURLData::alternate_urls. This was added |
| 55 // in version 47. | 55 // in version 47. |
| 56 // | 56 // |
| 57 // keywords_backup The full copy of the |keywords| table. Added in | |
| 58 // version 43. Must be in sync with |keywords| | |
| 59 // table otherwise verification of default search | |
| 60 // provider settings will fail. | |
| 61 // | |
| 62 // This class also manages some fields in the |meta| table: | 57 // This class also manages some fields in the |meta| table: |
| 63 // | 58 // |
| 64 // Default Search Provider ID The id of the default search provider. | 59 // Default Search Provider ID The id of the default search provider. |
| 65 // Default Search Provider ID Backup | |
| 66 // Backup copy of the above for restoring it | |
| 67 // in case the setting was hijacked or | |
| 68 // corrupted. This was added in version 40. | |
| 69 // Default Search Provider Backup Backup copy of the raw in |keywords| | |
| 70 // with the default search provider ID to | |
| 71 // restore all provider info. This was added | |
| 72 // in version 42. Not used in 43. | |
| 73 // Default Search Provider ID Backup Signature | |
| 74 // The signature of backup data and | |
| 75 // |keywords| table contents to be able to | |
| 76 // verify the backup and understand when the | |
| 77 // settings were changed. This was added | |
| 78 // in version 40. | |
| 79 // Builtin Keyword Version The version of builtin keywords data. | 60 // Builtin Keyword Version The version of builtin keywords data. |
| 80 // | 61 // |
| 81 class KeywordTable : public WebDatabaseTable { | 62 class KeywordTable : public WebDatabaseTable { |
| 82 public: | 63 public: |
| 83 typedef std::vector<TemplateURLData> Keywords; | 64 typedef std::vector<TemplateURLData> Keywords; |
| 84 | 65 |
| 85 // Constants exposed for the benefit of test code: | 66 // Constants exposed for the benefit of test code: |
| 86 | 67 |
| 87 static const char kDefaultSearchProviderKey[]; | 68 static const char kDefaultSearchProviderKey[]; |
| 88 // Meta table key to store backup value for the default search provider id. | |
| 89 static const char kDefaultSearchIDBackupKey[]; | |
| 90 // Meta table key to store backup value signature for the default search | |
| 91 // provider. The default search provider ID and the |keywords_backup| table | |
| 92 // are signed. | |
| 93 static const char kBackupSignatureKey[]; | |
| 94 | 69 |
| 95 KeywordTable(sql::Connection* db, sql::MetaTable* meta_table); | 70 KeywordTable(sql::Connection* db, sql::MetaTable* meta_table); |
| 96 virtual ~KeywordTable(); | 71 virtual ~KeywordTable(); |
| 97 virtual bool Init() OVERRIDE; | 72 virtual bool Init() OVERRIDE; |
| 98 virtual bool IsSyncable() OVERRIDE; | 73 virtual bool IsSyncable() OVERRIDE; |
| 99 | 74 |
| 100 // Adds a new keyword, updating the id field on success. | 75 // Adds a new keyword, updating the id field on success. |
| 101 // Returns true if successful. | 76 // Returns true if successful. |
| 102 bool AddKeyword(const TemplateURLData& data); | 77 bool AddKeyword(const TemplateURLData& data); |
| 103 | 78 |
| 104 // Removes the specified keyword. | 79 // Removes the specified keyword. |
| 105 // Returns true if successful. | 80 // Returns true if successful. |
| 106 bool RemoveKeyword(TemplateURLID id); | 81 bool RemoveKeyword(TemplateURLID id); |
| 107 | 82 |
| 108 // Loads the keywords into the specified vector. It's up to the caller to | 83 // Loads the keywords into the specified vector. It's up to the caller to |
| 109 // delete the returned objects. | 84 // delete the returned objects. |
| 110 // Returns true on success. | 85 // Returns true on success. |
| 111 bool GetKeywords(Keywords* keywords); | 86 bool GetKeywords(Keywords* keywords); |
| 112 | 87 |
| 113 // Updates the database values for the specified url. | 88 // Updates the database values for the specified url. |
| 114 // Returns true on success. | 89 // Returns true on success. |
| 115 bool UpdateKeyword(const TemplateURLData& data); | 90 bool UpdateKeyword(const TemplateURLData& data); |
| 116 | 91 |
| 117 // ID (TemplateURLData->id) of the default search provider. | 92 // ID (TemplateURLData->id) of the default search provider. |
| 118 bool SetDefaultSearchProviderID(int64 id); | 93 bool SetDefaultSearchProviderID(int64 id); |
| 119 int64 GetDefaultSearchProviderID(); | 94 int64 GetDefaultSearchProviderID(); |
| 120 | 95 |
| 121 // If the default search provider backup is valid, returns true and copies the | |
| 122 // backup into |backup|. Otherwise returns false. | |
| 123 bool GetDefaultSearchProviderBackup(TemplateURLData* backup); | |
| 124 | |
| 125 // Returns true if the default search provider has been changed out from under | |
| 126 // us. This can happen if another process modifies our database or the file | |
| 127 // was corrupted. | |
| 128 bool DidDefaultSearchProviderChange(); | |
| 129 | |
| 130 // Version of the built-in keywords. | 96 // Version of the built-in keywords. |
| 131 bool SetBuiltinKeywordVersion(int version); | 97 bool SetBuiltinKeywordVersion(int version); |
| 132 int GetBuiltinKeywordVersion(); | 98 int GetBuiltinKeywordVersion(); |
| 133 | 99 |
| 134 // Returns a comma-separated list of the keyword columns for the current | 100 // Returns a comma-separated list of the keyword columns for the current |
| 135 // version of the table. | 101 // version of the table. |
| 136 static std::string GetKeywordColumns(); | 102 static std::string GetKeywordColumns(); |
| 137 | 103 |
| 138 // Table migration functions. | 104 // Table migration functions. |
| 139 bool MigrateToVersion21AutoGenerateKeywordColumn(); | 105 bool MigrateToVersion21AutoGenerateKeywordColumn(); |
| 140 bool MigrateToVersion25AddLogoIDColumn(); | 106 bool MigrateToVersion25AddLogoIDColumn(); |
| 141 bool MigrateToVersion26AddCreatedByPolicyColumn(); | 107 bool MigrateToVersion26AddCreatedByPolicyColumn(); |
| 142 bool MigrateToVersion28SupportsInstantColumn(); | 108 bool MigrateToVersion28SupportsInstantColumn(); |
| 143 bool MigrateToVersion29InstantURLToSupportsInstant(); | 109 bool MigrateToVersion29InstantURLToSupportsInstant(); |
| 144 bool MigrateToVersion38AddLastModifiedColumn(); | 110 bool MigrateToVersion38AddLastModifiedColumn(); |
| 145 bool MigrateToVersion39AddSyncGUIDColumn(); | 111 bool MigrateToVersion39AddSyncGUIDColumn(); |
| 146 bool MigrateToVersion44AddDefaultSearchProviderBackup(); | 112 bool MigrateToVersion44AddDefaultSearchProviderBackup(); |
| 147 bool MigrateToVersion45RemoveLogoIDAndAutogenerateColumns(); | 113 bool MigrateToVersion45RemoveLogoIDAndAutogenerateColumns(); |
| 148 bool MigrateToVersion47AddAlternateURLsColumn(); | 114 bool MigrateToVersion47AddAlternateURLsColumn(); |
| 115 bool MigrateToVersion48RemoveKeywordsBackup(); |
| 149 | 116 |
| 150 private: | 117 private: |
| 151 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, DefaultSearchProviderBackup); | |
| 152 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, GetTableContents); | 118 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, GetTableContents); |
| 153 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, GetTableContentsOrdering); | 119 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, GetTableContentsOrdering); |
| 154 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, SanitizeURLs); | 120 FRIEND_TEST_ALL_PREFIXES(KeywordTableTest, SanitizeURLs); |
| 155 FRIEND_TEST_ALL_PREFIXES(WebDatabaseMigrationTest, MigrateVersion44ToCurrent); | 121 FRIEND_TEST_ALL_PREFIXES(WebDatabaseMigrationTest, MigrateVersion44ToCurrent); |
| 156 | 122 |
| 157 // NOTE: Since the table columns have changed in different versions, many | 123 // NOTE: Since the table columns have changed in different versions, many |
| 158 // functions below take a |table_version| argument which dictates which | 124 // functions below take a |table_version| argument which dictates which |
| 159 // version number's column set to use. | 125 // version number's column set to use. |
| 160 | 126 |
| 161 // Fills |data| with the data in |s|. Returns false if we couldn't fill | 127 // Fills |data| with the data in |s|. Returns false if we couldn't fill |
| 162 // |data| for some reason, e.g. |s| tried to set one of the fields to an | 128 // |data| for some reason, e.g. |s| tried to set one of the fields to an |
| 163 // illegal value. | 129 // illegal value. |
| 164 static bool GetKeywordDataFromStatement(const sql::Statement& s, | 130 static bool GetKeywordDataFromStatement(const sql::Statement& s, |
| 165 TemplateURLData* data); | 131 TemplateURLData* data); |
| 166 | 132 |
| 167 // Returns contents of |keywords_backup| table and default search provider | |
| 168 // id backup as a string through |data|. Return value is true on success, | |
| 169 // false otherwise. | |
| 170 bool GetSignatureData(int table_version, std::string* data); | |
| 171 | |
| 172 // Returns contents of selected table as a string in |contents| parameter. | 133 // Returns contents of selected table as a string in |contents| parameter. |
| 173 // Returns true on success, false otherwise. | 134 // Returns true on success, false otherwise. |
| 174 bool GetTableContents(const char* table_name, | 135 bool GetTableContents(const char* table_name, |
| 175 int table_version, | 136 int table_version, |
| 176 std::string* contents); | 137 std::string* contents); |
| 177 | 138 |
| 178 // Updates settings backup, signs it and stores the signature in the | |
| 179 // database. Returns true on success. | |
| 180 bool UpdateBackupSignature(int table_version); | |
| 181 | |
| 182 // Signs the backup table. This is a subset of what UpdateBackupSignature() | |
| 183 // does. | |
| 184 bool SignBackup(int table_version); | |
| 185 | |
| 186 // Checks the signature for the current settings backup. Returns true | |
| 187 // if signature is valid, false otherwise. | |
| 188 bool IsBackupSignatureValid(int table_version); | |
| 189 | |
| 190 // Gets a string representation for keyword with id specified. | 139 // Gets a string representation for keyword with id specified. |
| 191 // Used to store its result in |meta| table or to compare with another | 140 // Used to store its result in |meta| table or to compare with another |
| 192 // keyword. Returns true on success, false otherwise. | 141 // keyword. Returns true on success, false otherwise. |
| 193 bool GetKeywordAsString(TemplateURLID id, | 142 bool GetKeywordAsString(TemplateURLID id, |
| 194 const std::string& table_name, | 143 const std::string& table_name, |
| 195 std::string* result); | 144 std::string* result); |
| 196 | 145 |
| 197 // Updates default search provider id backup in |meta| table. Returns | |
| 198 // true on success. The id is returned back via |id| parameter. | |
| 199 bool UpdateDefaultSearchProviderIDBackup(TemplateURLID* id); | |
| 200 | |
| 201 // Migrates table |name| (which should be either "keywords" or | 146 // Migrates table |name| (which should be either "keywords" or |
| 202 // "keywords_backup") from version 44 to version 45. | 147 // "keywords_backup") from version 44 to version 45. |
| 203 bool MigrateKeywordsTableForVersion45(const std::string& name); | 148 bool MigrateKeywordsTableForVersion45(const std::string& name); |
| 204 | 149 |
| 205 // Whether the backup was overwritten during migration. | |
| 206 bool backup_overwritten_; | |
| 207 | |
| 208 DISALLOW_COPY_AND_ASSIGN(KeywordTable); | 150 DISALLOW_COPY_AND_ASSIGN(KeywordTable); |
| 209 }; | 151 }; |
| 210 | 152 |
| 211 #endif // CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ | 153 #endif // CHROME_BROWSER_WEBDATA_KEYWORD_TABLE_H_ |
| OLD | NEW |