| Index: components/search_engines/keyword_table.cc
 | 
| diff --git a/components/search_engines/keyword_table.cc b/components/search_engines/keyword_table.cc
 | 
| index 1bbd601da8fef0f9d8de798ac98a657def036458..eb9333bb10db9735fe4c4ca91116a3878e9a5081 100644
 | 
| --- a/components/search_engines/keyword_table.cc
 | 
| +++ b/components/search_engines/keyword_table.cc
 | 
| @@ -84,6 +84,10 @@ const std::string ColumnsForVersion(int version, bool concatenated) {
 | 
|      // Column added in version 53.
 | 
|      columns.push_back("new_tab_url");
 | 
|    }
 | 
| +  if (version >= 69) {
 | 
| +    // Column added in version 69.
 | 
| +    columns.push_back("last_visited");
 | 
| +  }
 | 
|  
 | 
|    return base::JoinString(columns, std::string(concatenated ? " || " : ", "));
 | 
|  }
 | 
| @@ -136,6 +140,7 @@ void BindURLToStatement(const TemplateURLData& data,
 | 
|    s->BindString(starting_column + 20, data.instant_url_post_params);
 | 
|    s->BindString(starting_column + 21, data.image_url_post_params);
 | 
|    s->BindString(starting_column + 22, data.new_tab_url);
 | 
| +  s->BindInt64(starting_column + 23, data.last_visited.ToTimeT());
 | 
|  }
 | 
|  
 | 
|  WebDatabaseTable::TypeKey GetKey() {
 | 
| @@ -163,30 +168,31 @@ WebDatabaseTable::TypeKey KeywordTable::GetTypeKey() const {
 | 
|  bool KeywordTable::CreateTablesIfNecessary() {
 | 
|    return db_->DoesTableExist("keywords") ||
 | 
|        db_->Execute("CREATE TABLE keywords ("
 | 
| -                   "id INTEGER PRIMARY KEY,"
 | 
| -                   "short_name VARCHAR NOT NULL,"
 | 
| -                   "keyword VARCHAR NOT NULL,"
 | 
| -                   "favicon_url VARCHAR NOT NULL,"
 | 
| -                   "url VARCHAR NOT NULL,"
 | 
| -                   "safe_for_autoreplace INTEGER,"
 | 
| -                   "originating_url VARCHAR,"
 | 
| -                   "date_created INTEGER DEFAULT 0,"
 | 
| -                   "usage_count INTEGER DEFAULT 0,"
 | 
| -                   "input_encodings VARCHAR,"
 | 
| -                   "suggest_url VARCHAR,"
 | 
| -                   "prepopulate_id INTEGER DEFAULT 0,"
 | 
| -                   "created_by_policy INTEGER DEFAULT 0,"
 | 
| -                   "instant_url VARCHAR,"
 | 
| -                   "last_modified INTEGER DEFAULT 0,"
 | 
| -                   "sync_guid VARCHAR,"
 | 
| -                   "alternate_urls VARCHAR,"
 | 
| -                   "search_terms_replacement_key VARCHAR,"
 | 
| -                   "image_url VARCHAR,"
 | 
| -                   "search_url_post_params VARCHAR,"
 | 
| -                   "suggest_url_post_params VARCHAR,"
 | 
| -                   "instant_url_post_params VARCHAR,"
 | 
| -                   "image_url_post_params VARCHAR,"
 | 
| -                   "new_tab_url VARCHAR)");
 | 
| +          "id INTEGER PRIMARY KEY,"
 | 
| +          "short_name VARCHAR NOT NULL,"
 | 
| +          "keyword VARCHAR NOT NULL,"
 | 
| +          "favicon_url VARCHAR NOT NULL,"
 | 
| +          "url VARCHAR NOT NULL,"
 | 
| +          "safe_for_autoreplace INTEGER,"
 | 
| +          "originating_url VARCHAR,"
 | 
| +          "date_created INTEGER DEFAULT 0,"
 | 
| +          "usage_count INTEGER DEFAULT 0,"
 | 
| +          "input_encodings VARCHAR,"
 | 
| +          "suggest_url VARCHAR,"
 | 
| +          "prepopulate_id INTEGER DEFAULT 0,"
 | 
| +          "created_by_policy INTEGER DEFAULT 0,"
 | 
| +          "instant_url VARCHAR,"
 | 
| +          "last_modified INTEGER DEFAULT 0,"
 | 
| +          "sync_guid VARCHAR,"
 | 
| +          "alternate_urls VARCHAR,"
 | 
| +          "search_terms_replacement_key VARCHAR,"
 | 
| +          "image_url VARCHAR,"
 | 
| +          "search_url_post_params VARCHAR,"
 | 
| +          "suggest_url_post_params VARCHAR,"
 | 
| +          "instant_url_post_params VARCHAR,"
 | 
| +          "image_url_post_params VARCHAR,"
 | 
| +          "new_tab_url VARCHAR,"
 | 
| +          " last_visited INTEGER DEFAULT 0)");
 | 
|  }
 | 
|  
 | 
|  bool KeywordTable::IsSyncable() {
 | 
| @@ -206,6 +212,8 @@ bool KeywordTable::MigrateToVersion(int version,
 | 
|      case 68:
 | 
|        *update_compatible_version = true;
 | 
|        return MigrateToVersion68RemoveShowInDefaultListColumn();
 | 
| +    case 69:
 | 
| +      return MigrateToVersion69AddLastVisitedColumn();
 | 
|    }
 | 
|  
 | 
|    return true;
 | 
| @@ -335,6 +343,11 @@ bool KeywordTable::MigrateToVersion68RemoveShowInDefaultListColumn() {
 | 
|           transaction.Commit();
 | 
|  }
 | 
|  
 | 
| +bool KeywordTable::MigrateToVersion69AddLastVisitedColumn() {
 | 
| +  return db_->Execute("ALTER TABLE keywords ADD COLUMN last_visited "
 | 
| +                      "INTEGER DEFAULT 0");
 | 
| +}
 | 
| +
 | 
|  // static
 | 
|  bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
 | 
|                                                 TemplateURLData* data) {
 | 
| @@ -384,6 +397,7 @@ bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s,
 | 
|    }
 | 
|  
 | 
|    data->search_terms_replacement_key = s.ColumnString(17);
 | 
| +  data->last_visited = Time::FromTimeT(s.ColumnInt64(24));
 | 
|  
 | 
|    return true;
 | 
|  }
 | 
| @@ -392,7 +406,7 @@ bool KeywordTable::AddKeyword(const TemplateURLData& data) {
 | 
|    DCHECK(data.id);
 | 
|    std::string query("INSERT INTO keywords (" + GetKeywordColumns() + ") "
 | 
|                      "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"
 | 
| -                    "        ?)");
 | 
| +                    "        ?,?)");
 | 
|    sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query.c_str()));
 | 
|    BindURLToStatement(data, &s, 0, 1);
 | 
|  
 | 
| @@ -419,8 +433,8 @@ bool KeywordTable::UpdateKeyword(const TemplateURLData& data) {
 | 
|        "last_modified=?, sync_guid=?, alternate_urls=?, "
 | 
|        "search_terms_replacement_key=?, image_url=?, search_url_post_params=?, "
 | 
|        "suggest_url_post_params=?, instant_url_post_params=?, "
 | 
| -      "image_url_post_params=?, new_tab_url=? WHERE id=?"));
 | 
| -  BindURLToStatement(data, &s, 23, 0);  // "23" binds id() as the last item.
 | 
| +      "image_url_post_params=?, new_tab_url=?, last_visited=? WHERE id=?"));
 | 
| +  BindURLToStatement(data, &s, 24, 0);  // "24" binds id() as the last item.
 | 
|  
 | 
|    return s.Run();
 | 
|  }
 | 
| 
 |