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

Side by Side Diff: components/search_engines/keyword_table.cc

Issue 2487633003: Change behaivor to decide whether a search engine should be shown in the default list (Closed)
Patch Set: Update based on Ian and Peter's comments. Created 4 years, 1 month 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/search_engines/keyword_table.h" 5 #include "components/search_engines/keyword_table.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <set> 10 #include <set>
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 columns.push_back("id"); 42 columns.push_back("id");
43 columns.push_back("short_name"); 43 columns.push_back("short_name");
44 columns.push_back("keyword"); 44 columns.push_back("keyword");
45 columns.push_back("favicon_url"); 45 columns.push_back("favicon_url");
46 columns.push_back("url"); 46 columns.push_back("url");
47 columns.push_back("safe_for_autoreplace"); 47 columns.push_back("safe_for_autoreplace");
48 columns.push_back("originating_url"); 48 columns.push_back("originating_url");
49 columns.push_back("date_created"); 49 columns.push_back("date_created");
50 columns.push_back("usage_count"); 50 columns.push_back("usage_count");
51 columns.push_back("input_encodings"); 51 columns.push_back("input_encodings");
52 columns.push_back("show_in_default_list"); 52 if (version <= 67) {
53 // Column removed after version 67.
54 columns.push_back("show_in_default_list");
55 }
53 columns.push_back("suggest_url"); 56 columns.push_back("suggest_url");
54 columns.push_back("prepopulate_id"); 57 columns.push_back("prepopulate_id");
55 if (version <= 44) { 58 if (version <= 44) {
56 // Columns removed after version 44. 59 // Columns removed after version 44.
57 columns.push_back("autogenerate_keyword"); 60 columns.push_back("autogenerate_keyword");
58 columns.push_back("logo_id"); 61 columns.push_back("logo_id");
59 } 62 }
60 columns.push_back("created_by_policy"); 63 columns.push_back("created_by_policy");
61 columns.push_back("instant_url"); 64 columns.push_back("instant_url");
62 columns.push_back("last_modified"); 65 columns.push_back("last_modified");
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 std::string()); 115 std::string());
113 s->BindString(starting_column + 3, data.url()); 116 s->BindString(starting_column + 3, data.url());
114 s->BindBool(starting_column + 4, data.safe_for_autoreplace); 117 s->BindBool(starting_column + 4, data.safe_for_autoreplace);
115 s->BindString(starting_column + 5, data.originating_url.is_valid() ? 118 s->BindString(starting_column + 5, data.originating_url.is_valid() ?
116 history::URLDatabase::GURLToDatabaseURL(data.originating_url) : 119 history::URLDatabase::GURLToDatabaseURL(data.originating_url) :
117 std::string()); 120 std::string());
118 s->BindInt64(starting_column + 6, data.date_created.ToTimeT()); 121 s->BindInt64(starting_column + 6, data.date_created.ToTimeT());
119 s->BindInt(starting_column + 7, data.usage_count); 122 s->BindInt(starting_column + 7, data.usage_count);
120 s->BindString(starting_column + 8, 123 s->BindString(starting_column + 8,
121 base::JoinString(data.input_encodings, ";")); 124 base::JoinString(data.input_encodings, ";"));
122 s->BindBool(starting_column + 9, data.show_in_default_list); 125 s->BindString(starting_column + 9, data.suggestions_url);
123 s->BindString(starting_column + 10, data.suggestions_url); 126 s->BindInt(starting_column + 10, data.prepopulate_id);
124 s->BindInt(starting_column + 11, data.prepopulate_id); 127 s->BindBool(starting_column + 11, data.created_by_policy);
125 s->BindBool(starting_column + 12, data.created_by_policy); 128 s->BindString(starting_column + 12, data.instant_url);
126 s->BindString(starting_column + 13, data.instant_url); 129 s->BindInt64(starting_column + 13, data.last_modified.ToTimeT());
127 s->BindInt64(starting_column + 14, data.last_modified.ToTimeT()); 130 s->BindString(starting_column + 14, data.sync_guid);
128 s->BindString(starting_column + 15, data.sync_guid); 131 s->BindString(starting_column + 15, alternate_urls);
129 s->BindString(starting_column + 16, alternate_urls); 132 s->BindString(starting_column + 16, data.search_terms_replacement_key);
130 s->BindString(starting_column + 17, data.search_terms_replacement_key); 133 s->BindString(starting_column + 17, data.image_url);
131 s->BindString(starting_column + 18, data.image_url); 134 s->BindString(starting_column + 18, data.search_url_post_params);
132 s->BindString(starting_column + 19, data.search_url_post_params); 135 s->BindString(starting_column + 19, data.suggestions_url_post_params);
133 s->BindString(starting_column + 20, data.suggestions_url_post_params); 136 s->BindString(starting_column + 20, data.instant_url_post_params);
134 s->BindString(starting_column + 21, data.instant_url_post_params); 137 s->BindString(starting_column + 21, data.image_url_post_params);
135 s->BindString(starting_column + 22, data.image_url_post_params); 138 s->BindString(starting_column + 22, data.new_tab_url);
136 s->BindString(starting_column + 23, data.new_tab_url);
137 } 139 }
138 140
139 WebDatabaseTable::TypeKey GetKey() { 141 WebDatabaseTable::TypeKey GetKey() {
140 // We just need a unique constant. Use the address of a static that 142 // We just need a unique constant. Use the address of a static that
141 // COMDAT folding won't touch in an optimizing linker. 143 // COMDAT folding won't touch in an optimizing linker.
142 static int table_key = 0; 144 static int table_key = 0;
143 return reinterpret_cast<void*>(&table_key); 145 return reinterpret_cast<void*>(&table_key);
144 } 146 }
145 147
146 } // namespace 148 } // namespace
(...skipping 17 matching lines...) Expand all
164 "id INTEGER PRIMARY KEY," 166 "id INTEGER PRIMARY KEY,"
165 "short_name VARCHAR NOT NULL," 167 "short_name VARCHAR NOT NULL,"
166 "keyword VARCHAR NOT NULL," 168 "keyword VARCHAR NOT NULL,"
167 "favicon_url VARCHAR NOT NULL," 169 "favicon_url VARCHAR NOT NULL,"
168 "url VARCHAR NOT NULL," 170 "url VARCHAR NOT NULL,"
169 "safe_for_autoreplace INTEGER," 171 "safe_for_autoreplace INTEGER,"
170 "originating_url VARCHAR," 172 "originating_url VARCHAR,"
171 "date_created INTEGER DEFAULT 0," 173 "date_created INTEGER DEFAULT 0,"
172 "usage_count INTEGER DEFAULT 0," 174 "usage_count INTEGER DEFAULT 0,"
173 "input_encodings VARCHAR," 175 "input_encodings VARCHAR,"
174 "show_in_default_list INTEGER,"
175 "suggest_url VARCHAR," 176 "suggest_url VARCHAR,"
176 "prepopulate_id INTEGER DEFAULT 0," 177 "prepopulate_id INTEGER DEFAULT 0,"
177 "created_by_policy INTEGER DEFAULT 0," 178 "created_by_policy INTEGER DEFAULT 0,"
178 "instant_url VARCHAR," 179 "instant_url VARCHAR,"
179 "last_modified INTEGER DEFAULT 0," 180 "last_modified INTEGER DEFAULT 0,"
180 "sync_guid VARCHAR," 181 "sync_guid VARCHAR,"
181 "alternate_urls VARCHAR," 182 "alternate_urls VARCHAR,"
182 "search_terms_replacement_key VARCHAR," 183 "search_terms_replacement_key VARCHAR,"
183 "image_url VARCHAR," 184 "image_url VARCHAR,"
184 "search_url_post_params VARCHAR," 185 "search_url_post_params VARCHAR,"
(...skipping 10 matching lines...) Expand all
195 bool KeywordTable::MigrateToVersion(int version, 196 bool KeywordTable::MigrateToVersion(int version,
196 bool* update_compatible_version) { 197 bool* update_compatible_version) {
197 // Migrate if necessary. 198 // Migrate if necessary.
198 switch (version) { 199 switch (version) {
199 case 53: 200 case 53:
200 *update_compatible_version = true; 201 *update_compatible_version = true;
201 return MigrateToVersion53AddNewTabURLColumn(); 202 return MigrateToVersion53AddNewTabURLColumn();
202 case 59: 203 case 59:
203 *update_compatible_version = true; 204 *update_compatible_version = true;
204 return MigrateToVersion59RemoveExtensionKeywords(); 205 return MigrateToVersion59RemoveExtensionKeywords();
206 case 68:
207 *update_compatible_version = true;
208 return MigrateToVersion68RemoveShowInDefaultListColumn();
205 } 209 }
206 210
207 return true; 211 return true;
208 } 212 }
209 213
210 bool KeywordTable::PerformOperations(const Operations& operations) { 214 bool KeywordTable::PerformOperations(const Operations& operations) {
211 sql::Transaction transaction(db_); 215 sql::Transaction transaction(db_);
212 if (!transaction.Begin()) 216 if (!transaction.Begin())
213 return false; 217 return false;
214 218
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 bool KeywordTable::MigrateToVersion53AddNewTabURLColumn() { 286 bool KeywordTable::MigrateToVersion53AddNewTabURLColumn() {
283 return db_->Execute("ALTER TABLE keywords ADD COLUMN new_tab_url " 287 return db_->Execute("ALTER TABLE keywords ADD COLUMN new_tab_url "
284 "VARCHAR DEFAULT ''"); 288 "VARCHAR DEFAULT ''");
285 } 289 }
286 290
287 bool KeywordTable::MigrateToVersion59RemoveExtensionKeywords() { 291 bool KeywordTable::MigrateToVersion59RemoveExtensionKeywords() {
288 return db_->Execute("DELETE FROM keywords " 292 return db_->Execute("DELETE FROM keywords "
289 "WHERE url LIKE 'chrome-extension://%'"); 293 "WHERE url LIKE 'chrome-extension://%'");
290 } 294 }
291 295
296 // SQLite does not support DROP COLUMN operation. So A new table is created
297 // without the show_in_default_list column. Data from all but the dropped column
298 // of the old table is copied into it. After that, the old table is dropped and
299 // the new table is renamed to it.
300 bool KeywordTable::MigrateToVersion68RemoveShowInDefaultListColumn() {
301 sql::Transaction transaction(db_);
302 return transaction.Begin() &&
303 db_->Execute(
304 "CREATE TABLE temp_keywords ("
305 "id INTEGER PRIMARY KEY,"
306 "short_name VARCHAR NOT NULL,"
307 "keyword VARCHAR NOT NULL,"
308 "favicon_url VARCHAR NOT NULL,"
309 "url VARCHAR NOT NULL,"
310 "safe_for_autoreplace INTEGER,"
311 "originating_url VARCHAR,"
312 "date_created INTEGER DEFAULT 0,"
313 "usage_count INTEGER DEFAULT 0,"
314 "input_encodings VARCHAR,"
315 "suggest_url VARCHAR,"
316 "prepopulate_id INTEGER DEFAULT 0,"
317 "created_by_policy INTEGER DEFAULT 0,"
318 "instant_url VARCHAR,"
319 "last_modified INTEGER DEFAULT 0,"
320 "sync_guid VARCHAR,"
321 "alternate_urls VARCHAR,"
322 "search_terms_replacement_key VARCHAR,"
323 "image_url VARCHAR,"
324 "search_url_post_params VARCHAR,"
325 "suggest_url_post_params VARCHAR,"
326 "instant_url_post_params VARCHAR,"
327 "image_url_post_params VARCHAR,"
328 "new_tab_url VARCHAR)") &&
329 db_->Execute(
330 "INSERT INTO temp_keywords SELECT "
331 "id, short_name, keyword, favicon_url, url, "
332 "safe_for_autoreplace, originating_url, "
333 "date_created, usage_count, input_encodings, "
334 "suggest_url, prepopulate_id, created_by_policy, "
335 "instant_url, last_modified, sync_guid, "
336 "alternate_urls, search_terms_replacement_key, "
337 "image_url, search_url_post_params, "
338 "suggest_url_post_params, instant_url_post_params,"
339 "image_url_post_params, new_tab_url FROM keywords") &&
Peter Kasting 2016/11/14 19:59:16 Nit: Can ColumnsForVersion() be used to shorten th
340 db_->Execute("DROP TABLE keywords") &&
341 db_->Execute("ALTER TABLE temp_keywords RENAME TO keywords") &&
342 transaction.Commit();
343 }
344
292 // static 345 // static
293 bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, 346 bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
294 TemplateURLData* data) { 347 TemplateURLData* data) {
295 DCHECK(data); 348 DCHECK(data);
296 349
297 data->SetShortName(s.ColumnString16(1)); 350 data->SetShortName(s.ColumnString16(1));
298 data->SetKeyword(s.ColumnString16(2)); 351 data->SetKeyword(s.ColumnString16(2));
299 // Due to past bugs, we might have persisted entries with empty URLs. Avoid 352 // Due to past bugs, we might have persisted entries with empty URLs. Avoid
300 // reading these out. (GetKeywords() will delete these entries on return.) 353 // reading these out. (GetKeywords() will delete these entries on return.)
301 // NOTE: This code should only be needed as long as we might be reading such 354 // NOTE: This code should only be needed as long as we might be reading such
302 // potentially-old data and can be removed afterward. 355 // potentially-old data and can be removed afterward.
303 if (s.ColumnString(4).empty()) 356 if (s.ColumnString(4).empty())
304 return false; 357 return false;
305 data->SetURL(s.ColumnString(4)); 358 data->SetURL(s.ColumnString(4));
306 data->suggestions_url = s.ColumnString(11); 359 data->suggestions_url = s.ColumnString(10);
307 data->instant_url = s.ColumnString(14); 360 data->instant_url = s.ColumnString(13);
308 data->image_url = s.ColumnString(19); 361 data->image_url = s.ColumnString(18);
309 data->new_tab_url = s.ColumnString(24); 362 data->new_tab_url = s.ColumnString(23);
310 data->search_url_post_params = s.ColumnString(20); 363 data->search_url_post_params = s.ColumnString(19);
311 data->suggestions_url_post_params = s.ColumnString(21); 364 data->suggestions_url_post_params = s.ColumnString(20);
312 data->instant_url_post_params = s.ColumnString(22); 365 data->instant_url_post_params = s.ColumnString(21);
313 data->image_url_post_params = s.ColumnString(23); 366 data->image_url_post_params = s.ColumnString(22);
314 data->favicon_url = GURL(s.ColumnString(3)); 367 data->favicon_url = GURL(s.ColumnString(3));
315 data->originating_url = GURL(s.ColumnString(6)); 368 data->originating_url = GURL(s.ColumnString(6));
316 data->show_in_default_list = s.ColumnBool(10);
317 data->safe_for_autoreplace = s.ColumnBool(5); 369 data->safe_for_autoreplace = s.ColumnBool(5);
318 data->input_encodings = base::SplitString( 370 data->input_encodings = base::SplitString(
319 s.ColumnString(9), ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 371 s.ColumnString(9), ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
320 data->id = s.ColumnInt64(0); 372 data->id = s.ColumnInt64(0);
321 data->date_created = Time::FromTimeT(s.ColumnInt64(7)); 373 data->date_created = Time::FromTimeT(s.ColumnInt64(7));
322 data->last_modified = Time::FromTimeT(s.ColumnInt64(15)); 374 data->last_modified = Time::FromTimeT(s.ColumnInt64(14));
323 data->created_by_policy = s.ColumnBool(13); 375 data->created_by_policy = s.ColumnBool(12);
324 data->usage_count = s.ColumnInt(8); 376 data->usage_count = s.ColumnInt(8);
325 data->prepopulate_id = s.ColumnInt(12); 377 data->prepopulate_id = s.ColumnInt(11);
326 data->sync_guid = s.ColumnString(16); 378 data->sync_guid = s.ColumnString(15);
327 379
328 data->alternate_urls.clear(); 380 data->alternate_urls.clear();
329 base::JSONReader json_reader; 381 base::JSONReader json_reader;
330 std::unique_ptr<base::Value> value( 382 std::unique_ptr<base::Value> value(
331 json_reader.ReadToValue(s.ColumnString(17))); 383 json_reader.ReadToValue(s.ColumnString(16)));
332 base::ListValue* alternate_urls_value; 384 base::ListValue* alternate_urls_value;
333 if (value.get() && value->GetAsList(&alternate_urls_value)) { 385 if (value.get() && value->GetAsList(&alternate_urls_value)) {
334 std::string alternate_url; 386 std::string alternate_url;
335 for (size_t i = 0; i < alternate_urls_value->GetSize(); ++i) { 387 for (size_t i = 0; i < alternate_urls_value->GetSize(); ++i) {
336 if (alternate_urls_value->GetString(i, &alternate_url)) 388 if (alternate_urls_value->GetString(i, &alternate_url))
337 data->alternate_urls.push_back(alternate_url); 389 data->alternate_urls.push_back(alternate_url);
338 } 390 }
339 } 391 }
340 392
341 data->search_terms_replacement_key = s.ColumnString(18); 393 data->search_terms_replacement_key = s.ColumnString(17);
342 394
343 return true; 395 return true;
344 } 396 }
345 397
346 bool KeywordTable::AddKeyword(const TemplateURLData& data) { 398 bool KeywordTable::AddKeyword(const TemplateURLData& data) {
347 DCHECK(data.id); 399 DCHECK(data.id);
348 std::string query("INSERT INTO keywords (" + GetKeywordColumns() + ") " 400 std::string query("INSERT INTO keywords (" + GetKeywordColumns() + ") "
349 "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," 401 "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"
350 " ?)"); 402 " ?)");
351 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query.c_str())); 403 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query.c_str()));
352 BindURLToStatement(data, &s, 0, 1); 404 BindURLToStatement(data, &s, 0, 1);
353 405
354 return s.Run(); 406 return s.Run();
355 } 407 }
356 408
357 bool KeywordTable::RemoveKeyword(TemplateURLID id) { 409 bool KeywordTable::RemoveKeyword(TemplateURLID id) {
358 DCHECK(id); 410 DCHECK(id);
359 sql::Statement s(db_->GetCachedStatement( 411 sql::Statement s(db_->GetCachedStatement(
360 SQL_FROM_HERE, "DELETE FROM keywords WHERE id = ?")); 412 SQL_FROM_HERE, "DELETE FROM keywords WHERE id = ?"));
361 s.BindInt64(0, id); 413 s.BindInt64(0, id);
362 414
363 return s.Run(); 415 return s.Run();
364 } 416 }
365 417
366 bool KeywordTable::UpdateKeyword(const TemplateURLData& data) { 418 bool KeywordTable::UpdateKeyword(const TemplateURLData& data) {
367 DCHECK(data.id); 419 DCHECK(data.id);
368 sql::Statement s(db_->GetCachedStatement( 420 sql::Statement s(db_->GetCachedStatement(
369 SQL_FROM_HERE, 421 SQL_FROM_HERE,
370 "UPDATE keywords SET short_name=?, keyword=?, favicon_url=?, url=?, " 422 "UPDATE keywords SET short_name=?, keyword=?, favicon_url=?, url=?, "
371 "safe_for_autoreplace=?, originating_url=?, date_created=?, " 423 "safe_for_autoreplace=?, originating_url=?, date_created=?, "
372 "usage_count=?, input_encodings=?, show_in_default_list=?, " 424 "usage_count=?, input_encodings=?, suggest_url=?, "
373 "suggest_url=?, prepopulate_id=?, created_by_policy=?, instant_url=?, " 425 "prepopulate_id=?, created_by_policy=?, instant_url=?, "
374 "last_modified=?, sync_guid=?, alternate_urls=?, " 426 "last_modified=?, sync_guid=?, alternate_urls=?, "
375 "search_terms_replacement_key=?, image_url=?, search_url_post_params=?, " 427 "search_terms_replacement_key=?, image_url=?, search_url_post_params=?, "
376 "suggest_url_post_params=?, instant_url_post_params=?, " 428 "suggest_url_post_params=?, instant_url_post_params=?, "
377 "image_url_post_params=?, new_tab_url=? WHERE id=?")); 429 "image_url_post_params=?, new_tab_url=? WHERE id=?"));
378 BindURLToStatement(data, &s, 24, 0); // "24" binds id() as the last item. 430 BindURLToStatement(data, &s, 23, 0); // "23" binds id() as the last item.
379 431
380 return s.Run(); 432 return s.Run();
381 } 433 }
382 434
383 bool KeywordTable::GetKeywordAsString(TemplateURLID id, 435 bool KeywordTable::GetKeywordAsString(TemplateURLID id,
384 const std::string& table_name, 436 const std::string& table_name,
385 std::string* result) { 437 std::string* result) {
386 std::string query("SELECT " + 438 std::string query("SELECT " +
387 ColumnsForVersion(WebDatabase::kCurrentVersionNumber, true) + 439 ColumnsForVersion(WebDatabase::kCurrentVersionNumber, true) +
388 " FROM " + table_name + " WHERE id=?"); 440 " FROM " + table_name + " WHERE id=?");
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 } 530 }
479 } 531 }
480 532
481 // Replace the old table with the new one. 533 // Replace the old table with the new one.
482 sql = "DROP TABLE " + name; 534 sql = "DROP TABLE " + name;
483 if (!db_->Execute(sql.c_str())) 535 if (!db_->Execute(sql.c_str()))
484 return false; 536 return false;
485 sql = "ALTER TABLE keywords_temp RENAME TO " + name; 537 sql = "ALTER TABLE keywords_temp RENAME TO " + name;
486 return db_->Execute(sql.c_str()); 538 return db_->Execute(sql.c_str());
487 } 539 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698