summaryrefslogtreecommitdiffstats
path: root/chrome/browser/webdata/keyword_table.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-07 01:31:54 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-07 01:31:54 +0000
commit573889f2660f7a961adac4b81caf632a467f2134 (patch)
tree9a3e74a378ef2d7bcea0a88cb2d7a20a4343090e /chrome/browser/webdata/keyword_table.cc
parent7d8b707e12ac0a18491c2810269167226cd95deb (diff)
downloadchromium_src-573889f2660f7a961adac4b81caf632a467f2134.zip
chromium_src-573889f2660f7a961adac4b81caf632a467f2134.tar.gz
chromium_src-573889f2660f7a961adac4b81caf632a467f2134.tar.bz2
Reland r131019: Move most TemplateURL data members to a new struct, TemplateURLData. This allows us to eliminate the TemplateURL NULL constructor, most public non-const TemplateURL functions, and most TemplateURL friend declarations.
This is also a necessary precursor to changing TemplateURLService's APIs to convert most "const TemplateURL*" cases to "TemplateURL*", which I'll explain once I actually make the change. There is some awkwardness here around keywords, as keyword autogeneration requires a TemplateURL but the state bits are kept on TemplateURLData. This will go away in the future when I remove keyword autogeneration from TemplateURL entirely. This differs from r131019 in that it fixes a memory error in chrome/browser/search_engines/util.cc:MergeEnginesFromPrepopulateData() where when we updated the vector to contain a new TemplateURL*, we didn't also update |default_search_engine| to point at the new URL if necessary. BUG=none TEST=none TBR=sky,mnissler,atwilson Review URL: https://chromiumcodereview.appspot.com/10021008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131224 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/webdata/keyword_table.cc')
-rw-r--r--chrome/browser/webdata/keyword_table.cc113
1 files changed, 54 insertions, 59 deletions
diff --git a/chrome/browser/webdata/keyword_table.cc b/chrome/browser/webdata/keyword_table.cc
index acf571d..0b59e71 100644
--- a/chrome/browser/webdata/keyword_table.cc
+++ b/chrome/browser/webdata/keyword_table.cc
@@ -47,37 +47,38 @@ const char kKeywordColumnsConcatenated[] = "id || short_name || keyword || "
"suggest_url || prepopulate_id || autogenerate_keyword || logo_id || "
"created_by_policy || instant_url || last_modified || sync_guid";
-// Inserts the data from |url| into |s|. |s| is assumed to have slots for all
+// Inserts the data from |data| into |s|. |s| is assumed to have slots for all
// the columns in the keyword table. |id_column| is the slot number to bind
-// |url|'s id() to; |starting_column| is the slot number of the first of a
+// |data|'s id() to; |starting_column| is the slot number of the first of a
// contiguous set of slots to bind all the other fields to.
void BindURLToStatement(const TemplateURL& url,
sql::Statement* s,
int id_column,
int starting_column) {
- s->BindInt64(id_column, url.id());
- s->BindString16(starting_column, url.short_name());
- s->BindString16(starting_column + 1, url.keyword());
- s->BindString(starting_column + 2, url.favicon_url().is_valid() ?
- history::HistoryDatabase::GURLToDatabaseURL(url.favicon_url()) :
+ const TemplateURLData& data = url.data();
+ s->BindInt64(id_column, data.id);
+ s->BindString16(starting_column, data.short_name);
+ s->BindString16(starting_column + 1, data.keyword(&url));
+ s->BindString(starting_column + 2, data.favicon_url.is_valid() ?
+ history::HistoryDatabase::GURLToDatabaseURL(data.favicon_url) :
std::string());
- s->BindString(starting_column + 3, url.url());
- s->BindBool(starting_column + 4, url.safe_for_autoreplace());
- s->BindString(starting_column + 5, url.originating_url().is_valid() ?
- history::HistoryDatabase::GURLToDatabaseURL(url.originating_url()) :
+ s->BindString(starting_column + 3, data.url());
+ s->BindBool(starting_column + 4, data.safe_for_autoreplace);
+ s->BindString(starting_column + 5, data.originating_url.is_valid() ?
+ history::HistoryDatabase::GURLToDatabaseURL(data.originating_url) :
std::string());
- s->BindInt64(starting_column + 6, url.date_created().ToTimeT());
- s->BindInt(starting_column + 7, url.usage_count());
- s->BindString(starting_column + 8, JoinString(url.input_encodings(), ';'));
- s->BindBool(starting_column + 9, url.show_in_default_list());
- s->BindString(starting_column + 10, url.suggestions_url());
- s->BindInt(starting_column + 11, url.prepopulate_id());
- s->BindInt(starting_column + 12, url.autogenerate_keyword() ? 1 : 0);
+ s->BindInt64(starting_column + 6, data.date_created.ToTimeT());
+ s->BindInt(starting_column + 7, data.usage_count);
+ s->BindString(starting_column + 8, JoinString(data.input_encodings, ';'));
+ s->BindBool(starting_column + 9, data.show_in_default_list);
+ s->BindString(starting_column + 10, data.suggestions_url);
+ s->BindInt(starting_column + 11, data.prepopulate_id);
+ s->BindBool(starting_column + 12, data.autogenerate_keyword());
s->BindInt(starting_column + 13, 0);
- s->BindBool(starting_column + 14, url.created_by_policy());
- s->BindString(starting_column + 15, url.instant_url());
- s->BindInt64(starting_column + 16, url.last_modified().ToTimeT());
- s->BindString(starting_column + 17, url.sync_guid());
+ s->BindBool(starting_column + 14, data.created_by_policy);
+ s->BindString(starting_column + 15, data.instant_url);
+ s->BindInt64(starting_column + 16, data.last_modified.ToTimeT());
+ s->BindString(starting_column + 17, data.sync_guid);
}
// Signs search provider id and returns its signature.
@@ -148,8 +149,10 @@ bool KeywordTable::GetKeywords(Keywords* keywords) {
" FROM keywords ORDER BY id ASC");
sql::Statement s(db_->GetUniqueStatement(query.c_str()));
- while (s.Step())
- keywords->push_back(GetKeywordDataFromStatement(s));
+ while (s.Step()) {
+ keywords->push_back(TemplateURLData());
+ GetKeywordDataFromStatement(s, &keywords->back());
+ }
return s.Succeeded();
}
@@ -180,14 +183,14 @@ int64 KeywordTable::GetDefaultSearchProviderID() {
return value;
}
-TemplateURL* KeywordTable::GetDefaultSearchProviderBackup() {
+bool KeywordTable::GetDefaultSearchProviderBackup(TemplateURLData* backup) {
if (!IsBackupSignatureValid())
- return NULL;
+ return false;
int64 backup_id = kInvalidTemplateURLID;
if (!meta_table_->GetValue(kDefaultSearchIDBackupKey, &backup_id)) {
LOG(ERROR) << "No default search id backup found.";
- return NULL;
+ return false;
}
std::string query("SELECT " + std::string(kKeywordColumns) +
" FROM keywords_backup WHERE id=?");
@@ -200,11 +203,11 @@ TemplateURL* KeywordTable::GetDefaultSearchProviderBackup() {
return NULL;
}
- TemplateURL* template_url = GetKeywordDataFromStatement(s);
+ GetKeywordDataFromStatement(s, backup);
// ID has no meaning for the backup and should be kInvalidTemplateURLID in
// case the TemplateURL will be added to keywords if missing.
- template_url->set_id(kInvalidTemplateURLID);
- return template_url;
+ backup->id = kInvalidTemplateURLID;
+ return true;
}
bool KeywordTable::DidDefaultSearchProviderChange() {
@@ -327,35 +330,27 @@ bool KeywordTable::MigrateToVersion44AddDefaultSearchProviderBackup() {
}
// static
-TemplateURL* KeywordTable::GetKeywordDataFromStatement(
- const sql::Statement& s) {
- TemplateURL* url = new TemplateURL;
- url->set_id(s.ColumnInt64(0));
- url->set_short_name(s.ColumnString16(1));
- url->set_keyword(s.ColumnString16(2));
- std::string tmp(s.ColumnString(3));
- if (!tmp.empty())
- url->set_favicon_url(GURL(tmp));
- url->SetURL(s.ColumnString(4));
- url->set_safe_for_autoreplace(s.ColumnBool(5));
- tmp = s.ColumnString(6);
- if (!tmp.empty())
- url->set_originating_url(GURL(tmp));
- url->set_date_created(Time::FromTimeT(s.ColumnInt64(7)));
- url->set_usage_count(s.ColumnInt(8));
- std::vector<std::string> encodings;
- base::SplitString(s.ColumnString(9), ';', &encodings);
- url->set_input_encodings(encodings);
- url->set_show_in_default_list(s.ColumnBool(10));
- url->SetSuggestionsURL(s.ColumnString(11));
- url->SetPrepopulateId(s.ColumnInt(12));
- url->set_autogenerate_keyword(s.ColumnBool(13));
- url->set_created_by_policy(s.ColumnBool(15));
- url->SetInstantURL(s.ColumnString(16));
- url->set_last_modified(Time::FromTimeT(s.ColumnInt64(17)));
- url->set_sync_guid(s.ColumnString(18));
-
- return url;
+void KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
+ TemplateURLData* data) {
+ DCHECK(data);
+ data->short_name = s.ColumnString16(1);
+ data->SetKeyword(s.ColumnString16(2));
+ data->SetAutogenerateKeyword(s.ColumnBool(13));
+ data->SetURL(s.ColumnString(4));
+ data->suggestions_url = s.ColumnString(11);
+ data->instant_url = s.ColumnString(16);
+ data->favicon_url = GURL(s.ColumnString(3));
+ data->originating_url = GURL(s.ColumnString(6));
+ data->show_in_default_list = s.ColumnBool(10);
+ data->safe_for_autoreplace = s.ColumnBool(5);
+ base::SplitString(s.ColumnString(9), ';', &data->input_encodings);
+ data->id = s.ColumnInt64(0);
+ data->date_created = Time::FromTimeT(s.ColumnInt64(7));
+ data->last_modified = Time::FromTimeT(s.ColumnInt64(17));
+ data->created_by_policy = s.ColumnBool(15);
+ data->usage_count = s.ColumnInt(8);
+ data->prepopulate_id = s.ColumnInt(12);
+ data->sync_guid = s.ColumnString(18);
}
bool KeywordTable::GetSignatureData(std::string* backup) {