Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: chrome/browser/webdata/keyword_table.cc

Issue 9982018: Move most TemplateURL data members to a new struct, TemplateURLData. This allows us to eliminate t… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/webdata/keyword_table.h" 5 #include "chrome/browser/webdata/keyword_table.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/stats_counters.h" 10 #include "base/metrics/stats_counters.h"
(...skipping 29 matching lines...) Expand all
40 40
41 // Keys used in the meta table. 41 // Keys used in the meta table.
42 const char kBuiltinKeywordVersion[] = "Builtin Keyword Version"; 42 const char kBuiltinKeywordVersion[] = "Builtin Keyword Version";
43 43
44 const char kKeywordColumnsConcatenated[] = "id || short_name || keyword || " 44 const char kKeywordColumnsConcatenated[] = "id || short_name || keyword || "
45 "favicon_url || url || safe_for_autoreplace || originating_url || " 45 "favicon_url || url || safe_for_autoreplace || originating_url || "
46 "date_created || usage_count || input_encodings || show_in_default_list || " 46 "date_created || usage_count || input_encodings || show_in_default_list || "
47 "suggest_url || prepopulate_id || autogenerate_keyword || logo_id || " 47 "suggest_url || prepopulate_id || autogenerate_keyword || logo_id || "
48 "created_by_policy || instant_url || last_modified || sync_guid"; 48 "created_by_policy || instant_url || last_modified || sync_guid";
49 49
50 // Inserts the data from |url| into |s|. |s| is assumed to have slots for all 50 // Inserts the data from |data| into |s|. |s| is assumed to have slots for all
51 // the columns in the keyword table. |id_column| is the slot number to bind 51 // the columns in the keyword table. |id_column| is the slot number to bind
52 // |url|'s id() to; |starting_column| is the slot number of the first of a 52 // |data|'s id() to; |starting_column| is the slot number of the first of a
53 // contiguous set of slots to bind all the other fields to. 53 // contiguous set of slots to bind all the other fields to.
54 void BindURLToStatement(const TemplateURL& url, 54 void BindURLToStatement(const TemplateURL& url,
55 sql::Statement* s, 55 sql::Statement* s,
56 int id_column, 56 int id_column,
57 int starting_column) { 57 int starting_column) {
58 s->BindInt64(id_column, url.id()); 58 const TemplateURLData& data = url.data();
59 s->BindString16(starting_column, url.short_name()); 59 s->BindInt64(id_column, data.id);
60 s->BindString16(starting_column + 1, url.keyword()); 60 s->BindString16(starting_column, data.short_name);
61 s->BindString(starting_column + 2, url.favicon_url().is_valid() ? 61 s->BindString16(starting_column + 1, data.keyword(&url));
62 history::HistoryDatabase::GURLToDatabaseURL(url.favicon_url()) : 62 s->BindString(starting_column + 2, data.favicon_url.is_valid() ?
63 history::HistoryDatabase::GURLToDatabaseURL(data.favicon_url) :
63 std::string()); 64 std::string());
64 s->BindString(starting_column + 3, url.url()); 65 s->BindString(starting_column + 3, data.url());
65 s->BindBool(starting_column + 4, url.safe_for_autoreplace()); 66 s->BindBool(starting_column + 4, data.safe_for_autoreplace);
66 s->BindString(starting_column + 5, url.originating_url().is_valid() ? 67 s->BindString(starting_column + 5, data.originating_url.is_valid() ?
67 history::HistoryDatabase::GURLToDatabaseURL(url.originating_url()) : 68 history::HistoryDatabase::GURLToDatabaseURL(data.originating_url) :
68 std::string()); 69 std::string());
69 s->BindInt64(starting_column + 6, url.date_created().ToTimeT()); 70 s->BindInt64(starting_column + 6, data.date_created.ToTimeT());
70 s->BindInt(starting_column + 7, url.usage_count()); 71 s->BindInt(starting_column + 7, data.usage_count);
71 s->BindString(starting_column + 8, JoinString(url.input_encodings(), ';')); 72 s->BindString(starting_column + 8, JoinString(data.input_encodings, ';'));
72 s->BindBool(starting_column + 9, url.show_in_default_list()); 73 s->BindBool(starting_column + 9, data.show_in_default_list);
73 s->BindString(starting_column + 10, url.suggestions_url()); 74 s->BindString(starting_column + 10, data.suggestions_url);
74 s->BindInt(starting_column + 11, url.prepopulate_id()); 75 s->BindInt(starting_column + 11, data.prepopulate_id);
75 s->BindInt(starting_column + 12, url.autogenerate_keyword() ? 1 : 0); 76 s->BindBool(starting_column + 12, data.autogenerate_keyword());
76 s->BindInt(starting_column + 13, 0); 77 s->BindInt(starting_column + 13, 0);
77 s->BindBool(starting_column + 14, url.created_by_policy()); 78 s->BindBool(starting_column + 14, data.created_by_policy);
78 s->BindString(starting_column + 15, url.instant_url()); 79 s->BindString(starting_column + 15, data.instant_url);
79 s->BindInt64(starting_column + 16, url.last_modified().ToTimeT()); 80 s->BindInt64(starting_column + 16, data.last_modified.ToTimeT());
80 s->BindString(starting_column + 17, url.sync_guid()); 81 s->BindString(starting_column + 17, data.sync_guid);
81 } 82 }
82 83
83 // Signs search provider id and returns its signature. 84 // Signs search provider id and returns its signature.
84 std::string GetSearchProviderIDSignature(int64 id) { 85 std::string GetSearchProviderIDSignature(int64 id) {
85 return protector::SignSetting(base::Int64ToString(id)); 86 return protector::SignSetting(base::Int64ToString(id));
86 } 87 }
87 88
88 // Checks if signature for search provider id is correct and returns the 89 // Checks if signature for search provider id is correct and returns the
89 // result. 90 // result.
90 bool IsSearchProviderIDValid(int64 id, const std::string& signature) { 91 bool IsSearchProviderIDValid(int64 id, const std::string& signature) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 s.BindInt64(0, id); 142 s.BindInt64(0, id);
142 143
143 return s.Run() && UpdateBackupSignature(); 144 return s.Run() && UpdateBackupSignature();
144 } 145 }
145 146
146 bool KeywordTable::GetKeywords(Keywords* keywords) { 147 bool KeywordTable::GetKeywords(Keywords* keywords) {
147 std::string query("SELECT " + std::string(kKeywordColumns) + 148 std::string query("SELECT " + std::string(kKeywordColumns) +
148 " FROM keywords ORDER BY id ASC"); 149 " FROM keywords ORDER BY id ASC");
149 sql::Statement s(db_->GetUniqueStatement(query.c_str())); 150 sql::Statement s(db_->GetUniqueStatement(query.c_str()));
150 151
151 while (s.Step()) 152 while (s.Step()) {
152 keywords->push_back(GetKeywordDataFromStatement(s)); 153 keywords->push_back(TemplateURLData());
154 GetKeywordDataFromStatement(s, &keywords->back());
155 }
153 return s.Succeeded(); 156 return s.Succeeded();
154 } 157 }
155 158
156 bool KeywordTable::UpdateKeyword(const TemplateURL& url) { 159 bool KeywordTable::UpdateKeyword(const TemplateURL& url) {
157 DCHECK(url.id()); 160 DCHECK(url.id());
158 sql::Statement s(db_->GetUniqueStatement("UPDATE keywords SET short_name=?, " 161 sql::Statement s(db_->GetUniqueStatement("UPDATE keywords SET short_name=?, "
159 "keyword=?, favicon_url=?, url=?, safe_for_autoreplace=?, " 162 "keyword=?, favicon_url=?, url=?, safe_for_autoreplace=?, "
160 "originating_url=?, date_created=?, usage_count=?, input_encodings=?, " 163 "originating_url=?, date_created=?, usage_count=?, input_encodings=?, "
161 "show_in_default_list=?, suggest_url=?, prepopulate_id=?, " 164 "show_in_default_list=?, suggest_url=?, prepopulate_id=?, "
162 "autogenerate_keyword=?, logo_id=?, created_by_policy=?, instant_url=?, " 165 "autogenerate_keyword=?, logo_id=?, created_by_policy=?, instant_url=?, "
163 "last_modified=?, sync_guid=? WHERE id=?")); 166 "last_modified=?, sync_guid=? WHERE id=?"));
164 BindURLToStatement(url, &s, 18, 0); // "18" binds id() as the last item. 167 BindURLToStatement(url, &s, 18, 0); // "18" binds id() as the last item.
165 168
166 return s.Run() && UpdateBackupSignature(); 169 return s.Run() && UpdateBackupSignature();
167 } 170 }
168 171
169 bool KeywordTable::SetDefaultSearchProviderID(int64 id) { 172 bool KeywordTable::SetDefaultSearchProviderID(int64 id) {
170 return meta_table_->SetValue(kDefaultSearchProviderKey, id) && 173 return meta_table_->SetValue(kDefaultSearchProviderKey, id) &&
171 UpdateBackupSignature(); 174 UpdateBackupSignature();
172 } 175 }
173 176
174 int64 KeywordTable::GetDefaultSearchProviderID() { 177 int64 KeywordTable::GetDefaultSearchProviderID() {
175 int64 value = kInvalidTemplateURLID; 178 int64 value = kInvalidTemplateURLID;
176 meta_table_->GetValue(kDefaultSearchProviderKey, &value); 179 meta_table_->GetValue(kDefaultSearchProviderKey, &value);
177 return value; 180 return value;
178 } 181 }
179 182
180 TemplateURL* KeywordTable::GetDefaultSearchProviderBackup() { 183 bool KeywordTable::GetDefaultSearchProviderBackup(TemplateURLData* backup) {
181 if (!IsBackupSignatureValid()) 184 if (!IsBackupSignatureValid())
182 return NULL; 185 return false;
183 186
184 int64 backup_id = kInvalidTemplateURLID; 187 int64 backup_id = kInvalidTemplateURLID;
185 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_id)) { 188 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_id)) {
186 LOG(ERROR) << "No default search id backup found."; 189 LOG(ERROR) << "No default search id backup found.";
187 return NULL; 190 return false;
188 } 191 }
189 std::string query("SELECT " + std::string(kKeywordColumns) + 192 std::string query("SELECT " + std::string(kKeywordColumns) +
190 " FROM keywords_backup WHERE id=?"); 193 " FROM keywords_backup WHERE id=?");
191 sql::Statement s(db_->GetUniqueStatement(query.c_str())); 194 sql::Statement s(db_->GetUniqueStatement(query.c_str()));
192 s.BindInt64(0, backup_id); 195 s.BindInt64(0, backup_id);
193 196
194 if (!s.Step()) { 197 if (!s.Step()) {
195 LOG_IF(ERROR, s.Succeeded()) 198 LOG_IF(ERROR, s.Succeeded())
196 << "No default search provider with backup id."; 199 << "No default search provider with backup id.";
197 return NULL; 200 return NULL;
198 } 201 }
199 202
200 TemplateURL* template_url = GetKeywordDataFromStatement(s); 203 GetKeywordDataFromStatement(s, backup);
201 // ID has no meaning for the backup and should be kInvalidTemplateURLID in 204 // ID has no meaning for the backup and should be kInvalidTemplateURLID in
202 // case the TemplateURL will be added to keywords if missing. 205 // case the TemplateURL will be added to keywords if missing.
203 template_url->set_id(kInvalidTemplateURLID); 206 backup->id = kInvalidTemplateURLID;
204 return template_url; 207 return true;
205 } 208 }
206 209
207 bool KeywordTable::DidDefaultSearchProviderChange() { 210 bool KeywordTable::DidDefaultSearchProviderChange() {
208 if (!IsBackupSignatureValid()) { 211 if (!IsBackupSignatureValid()) {
209 UMA_HISTOGRAM_ENUMERATION( 212 UMA_HISTOGRAM_ENUMERATION(
210 protector::kProtectorHistogramDefaultSearchProvider, 213 protector::kProtectorHistogramDefaultSearchProvider,
211 protector::kProtectorErrorBackupInvalid, 214 protector::kProtectorErrorBackupInvalid,
212 protector::kProtectorErrorCount); 215 protector::kProtectorErrorCount);
213 LOG(ERROR) << "Backup signature is invalid."; 216 LOG(ERROR) << "Backup signature is invalid.";
214 return true; 217 return true;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 320
318 bool KeywordTable::MigrateToVersion39AddSyncGUIDColumn() { 321 bool KeywordTable::MigrateToVersion39AddSyncGUIDColumn() {
319 return db_->Execute("ALTER TABLE keywords ADD COLUMN sync_guid VARCHAR"); 322 return db_->Execute("ALTER TABLE keywords ADD COLUMN sync_guid VARCHAR");
320 } 323 }
321 324
322 bool KeywordTable::MigrateToVersion44AddDefaultSearchProviderBackup() { 325 bool KeywordTable::MigrateToVersion44AddDefaultSearchProviderBackup() {
323 return IsBackupSignatureValid() || UpdateBackupSignature(); 326 return IsBackupSignatureValid() || UpdateBackupSignature();
324 } 327 }
325 328
326 // static 329 // static
327 TemplateURL* KeywordTable::GetKeywordDataFromStatement( 330 void KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
328 const sql::Statement& s) { 331 TemplateURLData* data) {
329 TemplateURL* url = new TemplateURL; 332 DCHECK(data);
330 url->set_id(s.ColumnInt64(0)); 333 data->short_name = s.ColumnString16(1);
331 url->set_short_name(s.ColumnString16(1)); 334 data->SetKeyword(s.ColumnString16(2));
332 url->set_keyword(s.ColumnString16(2)); 335 data->SetAutogenerateKeyword(s.ColumnBool(13));
333 std::string tmp(s.ColumnString(3)); 336 data->SetURL(s.ColumnString(4));
334 if (!tmp.empty()) 337 data->suggestions_url = s.ColumnString(11);
335 url->set_favicon_url(GURL(tmp)); 338 data->instant_url = s.ColumnString(16);
336 url->SetURL(s.ColumnString(4)); 339 data->favicon_url = GURL(s.ColumnString(3));
337 url->set_safe_for_autoreplace(s.ColumnBool(5)); 340 data->originating_url = GURL(s.ColumnString(6));
338 tmp = s.ColumnString(6); 341 data->show_in_default_list = s.ColumnBool(10);
339 if (!tmp.empty()) 342 data->safe_for_autoreplace = s.ColumnBool(5);
340 url->set_originating_url(GURL(tmp)); 343 base::SplitString(s.ColumnString(9), ';', &data->input_encodings);
341 url->set_date_created(Time::FromTimeT(s.ColumnInt64(7))); 344 data->id = s.ColumnInt64(0);
342 url->set_usage_count(s.ColumnInt(8)); 345 data->date_created = Time::FromTimeT(s.ColumnInt64(7));
343 std::vector<std::string> encodings; 346 data->last_modified = Time::FromTimeT(s.ColumnInt64(17));
344 base::SplitString(s.ColumnString(9), ';', &encodings); 347 data->created_by_policy = s.ColumnBool(15);
345 url->set_input_encodings(encodings); 348 data->usage_count = s.ColumnInt(8);
346 url->set_show_in_default_list(s.ColumnBool(10)); 349 data->prepopulate_id = s.ColumnInt(12);
347 url->SetSuggestionsURL(s.ColumnString(11)); 350 data->sync_guid = s.ColumnString(18);
348 url->SetPrepopulateId(s.ColumnInt(12));
349 url->set_autogenerate_keyword(s.ColumnBool(13));
350 url->set_created_by_policy(s.ColumnBool(15));
351 url->SetInstantURL(s.ColumnString(16));
352 url->set_last_modified(Time::FromTimeT(s.ColumnInt64(17)));
353 url->set_sync_guid(s.ColumnString(18));
354
355 return url;
356 } 351 }
357 352
358 bool KeywordTable::GetSignatureData(std::string* backup) { 353 bool KeywordTable::GetSignatureData(std::string* backup) {
359 DCHECK(backup); 354 DCHECK(backup);
360 355
361 int64 backup_value = kInvalidTemplateURLID; 356 int64 backup_value = kInvalidTemplateURLID;
362 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_value)) { 357 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_value)) {
363 LOG(ERROR) << "No backup id for signing."; 358 LOG(ERROR) << "No backup id for signing.";
364 return false; 359 return false;
365 } 360 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 int64 default_search_id = GetDefaultSearchProviderID(); 458 int64 default_search_id = GetDefaultSearchProviderID();
464 if (!meta_table_->SetValue(kDefaultSearchIDBackupKey, 459 if (!meta_table_->SetValue(kDefaultSearchIDBackupKey,
465 default_search_id)) { 460 default_search_id)) {
466 LOG(ERROR) << "Can't write default search id backup."; 461 LOG(ERROR) << "Can't write default search id backup.";
467 return false; 462 return false;
468 } 463 }
469 464
470 *id = default_search_id; 465 *id = default_search_id;
471 return true; 466 return true;
472 } 467 }
OLDNEW
« no previous file with comments | « chrome/browser/webdata/keyword_table.h ('k') | chrome/browser/webdata/keyword_table_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698