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

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

Issue 10021008: Reland r131019: Move most TemplateURL data members to a new struct, TemplateURLData. This allows us… (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=?, "
(...skipping 10 matching lines...) Expand all
173 return meta_table_->SetValue(kDefaultSearchProviderKey, id) && 176 return meta_table_->SetValue(kDefaultSearchProviderKey, id) &&
174 UpdateBackupSignature(); 177 UpdateBackupSignature();
175 } 178 }
176 179
177 int64 KeywordTable::GetDefaultSearchProviderID() { 180 int64 KeywordTable::GetDefaultSearchProviderID() {
178 int64 value = kInvalidTemplateURLID; 181 int64 value = kInvalidTemplateURLID;
179 meta_table_->GetValue(kDefaultSearchProviderKey, &value); 182 meta_table_->GetValue(kDefaultSearchProviderKey, &value);
180 return value; 183 return value;
181 } 184 }
182 185
183 TemplateURL* KeywordTable::GetDefaultSearchProviderBackup() { 186 bool KeywordTable::GetDefaultSearchProviderBackup(TemplateURLData* backup) {
184 if (!IsBackupSignatureValid()) 187 if (!IsBackupSignatureValid())
185 return NULL; 188 return false;
186 189
187 int64 backup_id = kInvalidTemplateURLID; 190 int64 backup_id = kInvalidTemplateURLID;
188 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_id)) { 191 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_id)) {
189 LOG(ERROR) << "No default search id backup found."; 192 LOG(ERROR) << "No default search id backup found.";
190 return NULL; 193 return false;
191 } 194 }
192 std::string query("SELECT " + std::string(kKeywordColumns) + 195 std::string query("SELECT " + std::string(kKeywordColumns) +
193 " FROM keywords_backup WHERE id=?"); 196 " FROM keywords_backup WHERE id=?");
194 sql::Statement s(db_->GetUniqueStatement(query.c_str())); 197 sql::Statement s(db_->GetUniqueStatement(query.c_str()));
195 s.BindInt64(0, backup_id); 198 s.BindInt64(0, backup_id);
196 199
197 if (!s.Step()) { 200 if (!s.Step()) {
198 LOG_IF(ERROR, s.Succeeded()) 201 LOG_IF(ERROR, s.Succeeded())
199 << "No default search provider with backup id."; 202 << "No default search provider with backup id.";
200 return NULL; 203 return NULL;
201 } 204 }
202 205
203 TemplateURL* template_url = GetKeywordDataFromStatement(s); 206 GetKeywordDataFromStatement(s, backup);
204 // ID has no meaning for the backup and should be kInvalidTemplateURLID in 207 // ID has no meaning for the backup and should be kInvalidTemplateURLID in
205 // case the TemplateURL will be added to keywords if missing. 208 // case the TemplateURL will be added to keywords if missing.
206 template_url->set_id(kInvalidTemplateURLID); 209 backup->id = kInvalidTemplateURLID;
207 return template_url; 210 return true;
208 } 211 }
209 212
210 bool KeywordTable::DidDefaultSearchProviderChange() { 213 bool KeywordTable::DidDefaultSearchProviderChange() {
211 if (!IsBackupSignatureValid()) { 214 if (!IsBackupSignatureValid()) {
212 UMA_HISTOGRAM_ENUMERATION( 215 UMA_HISTOGRAM_ENUMERATION(
213 protector::kProtectorHistogramDefaultSearchProvider, 216 protector::kProtectorHistogramDefaultSearchProvider,
214 protector::kProtectorErrorBackupInvalid, 217 protector::kProtectorErrorBackupInvalid,
215 protector::kProtectorErrorCount); 218 protector::kProtectorErrorCount);
216 LOG(ERROR) << "Backup signature is invalid."; 219 LOG(ERROR) << "Backup signature is invalid.";
217 return true; 220 return true;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 323
321 bool KeywordTable::MigrateToVersion39AddSyncGUIDColumn() { 324 bool KeywordTable::MigrateToVersion39AddSyncGUIDColumn() {
322 return db_->Execute("ALTER TABLE keywords ADD COLUMN sync_guid VARCHAR"); 325 return db_->Execute("ALTER TABLE keywords ADD COLUMN sync_guid VARCHAR");
323 } 326 }
324 327
325 bool KeywordTable::MigrateToVersion44AddDefaultSearchProviderBackup() { 328 bool KeywordTable::MigrateToVersion44AddDefaultSearchProviderBackup() {
326 return IsBackupSignatureValid() || UpdateBackupSignature(); 329 return IsBackupSignatureValid() || UpdateBackupSignature();
327 } 330 }
328 331
329 // static 332 // static
330 TemplateURL* KeywordTable::GetKeywordDataFromStatement( 333 void KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
331 const sql::Statement& s) { 334 TemplateURLData* data) {
332 TemplateURL* url = new TemplateURL; 335 DCHECK(data);
333 url->set_id(s.ColumnInt64(0)); 336 data->short_name = s.ColumnString16(1);
334 url->set_short_name(s.ColumnString16(1)); 337 data->SetKeyword(s.ColumnString16(2));
335 url->set_keyword(s.ColumnString16(2)); 338 data->SetAutogenerateKeyword(s.ColumnBool(13));
336 std::string tmp(s.ColumnString(3)); 339 data->SetURL(s.ColumnString(4));
337 if (!tmp.empty()) 340 data->suggestions_url = s.ColumnString(11);
338 url->set_favicon_url(GURL(tmp)); 341 data->instant_url = s.ColumnString(16);
339 url->SetURL(s.ColumnString(4)); 342 data->favicon_url = GURL(s.ColumnString(3));
340 url->set_safe_for_autoreplace(s.ColumnBool(5)); 343 data->originating_url = GURL(s.ColumnString(6));
341 tmp = s.ColumnString(6); 344 data->show_in_default_list = s.ColumnBool(10);
342 if (!tmp.empty()) 345 data->safe_for_autoreplace = s.ColumnBool(5);
343 url->set_originating_url(GURL(tmp)); 346 base::SplitString(s.ColumnString(9), ';', &data->input_encodings);
344 url->set_date_created(Time::FromTimeT(s.ColumnInt64(7))); 347 data->id = s.ColumnInt64(0);
345 url->set_usage_count(s.ColumnInt(8)); 348 data->date_created = Time::FromTimeT(s.ColumnInt64(7));
346 std::vector<std::string> encodings; 349 data->last_modified = Time::FromTimeT(s.ColumnInt64(17));
347 base::SplitString(s.ColumnString(9), ';', &encodings); 350 data->created_by_policy = s.ColumnBool(15);
348 url->set_input_encodings(encodings); 351 data->usage_count = s.ColumnInt(8);
349 url->set_show_in_default_list(s.ColumnBool(10)); 352 data->prepopulate_id = s.ColumnInt(12);
350 url->SetSuggestionsURL(s.ColumnString(11)); 353 data->sync_guid = s.ColumnString(18);
351 url->SetPrepopulateId(s.ColumnInt(12));
352 url->set_autogenerate_keyword(s.ColumnBool(13));
353 url->set_created_by_policy(s.ColumnBool(15));
354 url->SetInstantURL(s.ColumnString(16));
355 url->set_last_modified(Time::FromTimeT(s.ColumnInt64(17)));
356 url->set_sync_guid(s.ColumnString(18));
357
358 return url;
359 } 354 }
360 355
361 bool KeywordTable::GetSignatureData(std::string* backup) { 356 bool KeywordTable::GetSignatureData(std::string* backup) {
362 DCHECK(backup); 357 DCHECK(backup);
363 358
364 int64 backup_value = kInvalidTemplateURLID; 359 int64 backup_value = kInvalidTemplateURLID;
365 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_value)) { 360 if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_value)) {
366 LOG(ERROR) << "No backup id for signing."; 361 LOG(ERROR) << "No backup id for signing.";
367 return false; 362 return false;
368 } 363 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 int64 default_search_id = GetDefaultSearchProviderID(); 461 int64 default_search_id = GetDefaultSearchProviderID();
467 if (!meta_table_->SetValue(kDefaultSearchIDBackupKey, 462 if (!meta_table_->SetValue(kDefaultSearchIDBackupKey,
468 default_search_id)) { 463 default_search_id)) {
469 LOG(ERROR) << "Can't write default search id backup."; 464 LOG(ERROR) << "Can't write default search id backup.";
470 return false; 465 return false;
471 } 466 }
472 467
473 *id = default_search_id; 468 *id = default_search_id;
474 return true; 469 return true;
475 } 470 }
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