15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_TYPES_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_TYPES_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_id.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sql { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Statement; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 AndroidURLID; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 SearchTermID; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Wraps all columns needed to support android.provider.Browser.BookmarkColumns. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is used in insert() and update() to specify the columns need to insert or 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// update. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The column is not valid until it set. Using is_valid() to find out whether 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the specific column could be used. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The defult copy constructor is used. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HistoryAndBookmarkRow { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ColumnID { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URL, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TITLE, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREATED, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAST_VISIT_TIME, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VISIT_COUNT, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FAVICON, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOOKMARK, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RAW_URL, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PARENT_ID, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URL_ID, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COLUMN_END // This must be the last. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryAndBookmarkRow(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~HistoryAndBookmarkRow(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the column name defined in Android. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetAndroidName(ColumnID id); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ColumnID GetColumnID(const std::string& name); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLs for the page. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_url(const GURL& url) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(URL); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_ = url; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url() const { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url_; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Raw input URL 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_raw_url(const std::string& raw_url) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(RAW_URL); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raw_url_ = raw_url; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& raw_url() const { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return raw_url_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The title of page. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_title(const string16& title) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(TITLE); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_ = title; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& title() const { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return title_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The page's first visit time. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_created(const base::Time created) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(CREATED); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) created_ = created; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& created() const { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return created_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The page's last visit time. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_last_visit_time(const base::Time last_visit_time) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(LAST_VISIT_TIME); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_visit_time_ = last_visit_time; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& last_visit_time() const { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_visit_time_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The visit times 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_visit_count(int visit_count) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(VISIT_COUNT); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) visit_count_ = visit_count; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count() const { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return visit_count_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the page is bookmarked. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_is_bookmark(bool is_bookmark) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(BOOKMARK); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_bookmark_ = is_bookmark; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_bookmark() const { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_bookmark_; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The favicon related to page if any. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_favicon(const scoped_refptr<base::RefCountedMemory>& data) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(FAVICON); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) favicon_ = data; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<base::RefCountedMemory>& favicon() const { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return favicon_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool favicon_valid() const { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return favicon_.get() && favicon_->size(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The id of android url. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_id(AndroidURLID id) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(ID); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id_ = id; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidURLID id() const { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The id of the parent folder containing the bookmark, if any. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_parent_id(int64 parent_id) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(PARENT_ID); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_id_ = parent_id; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 parent_id() const { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return parent_id_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The internal URLID 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_url_id(URLID url_id) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(URL_ID); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_id_ = url_id; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id() const { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url_id_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the given |id| has been set explicitly. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_value_set_explicitly(ColumnID id) const { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return values_set_.find(id) != values_set_.end(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_value_explicitly(ColumnID id) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values_set_.insert(id); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidURLID id_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string raw_url_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 title_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time created_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_visit_time_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> favicon_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_bookmark_; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_id_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to find whether a column has been set a value explicitly. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<ColumnID> values_set_; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We support the implicit copy constuctor and operator=. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Wraps all columns needed to support android.provider.Browser.SearchColumns. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is used in insert() and update() to specify the columns need to insert or 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// update. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The column is not valid until it set. Using is_valid() to find out whether 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the specific column could be used. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The defult copy constructor is used. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchRow { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ColumnID { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEARCH_TERM, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEARCH_TIME, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URL, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEMPLATE_URL, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COLUMN_END 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchRow(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SearchRow(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the column name defined in Android. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetAndroidName(ColumnID id); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ColumnID GetColumnID(const std::string& name); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchTermID id() const { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id_; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_id(SearchTermID id) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(SearchRow::ID); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id_ = id; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& search_term() const { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return search_term_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_search_term(const string16& search_term) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(SearchRow::SEARCH_TERM); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_term_ = search_term; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time search_time() const { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return search_time_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_search_time(const base::Time& time) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(SearchRow::SEARCH_TIME); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_time_ = time; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url() const { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_url(const GURL& url) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(SearchRow::URL); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_ = url; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID template_url_id() const { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return template_url_id_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_template_url_id(TemplateURLID template_url_id) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_value_explicitly(SearchRow::TEMPLATE_URL); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_id_ = template_url_id; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the given |id| has been set explicitly. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_value_set_explicitly(ColumnID id) const { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return values_set_.find(id) != values_set_.end(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_value_explicitly(ColumnID id) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values_set_.insert(id); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchTermID id_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 search_term_; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time search_time_; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID template_url_id_; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to find whether a column has been set a value. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<ColumnID> values_set_; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We support the implicit copy constuctor and operator=. 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines the row stored in android_urls table. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct AndroidURLRow { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidURLRow(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AndroidURLRow(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the row 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidURLID id; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The corresponding URLID in the url table. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The orignal URL string passed in by client. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string raw_url; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines the row of keyword_cache table. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SearchTermRow { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchTermRow(); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SearchTermRow(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the row. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchTermID id; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The keyword. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last visit time. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_visit_time; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class wraps the sql statement and favicon column index in statement if 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// any. It is returned by AndroidProviderBackend::Query(). 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Using favicon_index() to get the index of favicon; The value of that column 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is the Favicon ID, Client should call HistoryService::GetFavicon() to get the 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// actual value. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AndroidStatement { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AndroidStatement(sql::Statement* statement, int favicon_index); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AndroidStatement(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement* statement() { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return statement_.get(); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The favicon index in statement; -1 is returned if favicon is not in 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the statement. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int favicon_index() const { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return favicon_index_; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<sql::Statement> statement_; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int favicon_index_; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AndroidStatement); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace history 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_HISTORY_ANDROID_ANDROID_HISTORY_TYPES_H_ 333