diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-07 01:31:54 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-07 01:31:54 +0000 |
commit | 573889f2660f7a961adac4b81caf632a467f2134 (patch) | |
tree | 9a3e74a378ef2d7bcea0a88cb2d7a20a4343090e /chrome/browser/webdata/keyword_table.cc | |
parent | 7d8b707e12ac0a18491c2810269167226cd95deb (diff) | |
download | chromium_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.cc | 113 |
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) { |