blob: 314e0d1a939b85f4c8bc4afba24a9792cafcb8e5 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_HISTORY_ANDROID_ANDROID_CACHE_DATABASE_H_
#define CHROME_BROWSER_HISTORY_ANDROID_ANDROID_CACHE_DATABASE_H_
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
#include "base/time/time.h"
#include "chrome/browser/history/android/android_history_types.h"
#include "sql/connection.h"
#include "sql/init_status.h"
namespace history {
// This database is used to support Android ContentProvider APIs.
// It will be created only when it used, and deleted by HistoryBackend when
// history system shutdown.
class AndroidCacheDatabase {
public:
AndroidCacheDatabase();
virtual ~AndroidCacheDatabase();
// Creates the database, deletes existing one if any; also attach it to the
// database returned by GetDB(). Returns sql::INIT_OK on success, otherwise
// sql::INIT_FAILURE returned.
sql::InitStatus InitAndroidCacheDatabase(const base::FilePath& db_name);
// The bookmark_cache table ------------------------------------------------
//
// Adds a row to the bookmark_cache table. Returns true on success.
bool AddBookmarkCacheRow(const base::Time& created_time,
const base::Time& last_visit_time,
URLID url_id);
// Clears all rows in the bookmark_cache table; returns true on success.
bool ClearAllBookmarkCache();
// Marks the given |url_ids| as bookmarked; Returns true on success.
bool MarkURLsAsBookmarked(const std::vector<URLID>& url_id);
// Set the given |url_id|'s favicon column to |favicon_id|. Returns true on
// success.
bool SetFaviconID(URLID url_id, chrome::FaviconID favicon_id);
// The search_terms table -------------------------------------------------
//
// Add a row in the search_term table with the given |term| and
// |last_visit_time|. Return the new row's id on success, otherwise 0 is
// returned.
SearchTermID AddSearchTerm(const base::string16& term,
const base::Time& last_visit_time);
// Updates the |id|'s row with the given |row|; returns true on success.
bool UpdateSearchTerm(SearchTermID id, const SearchTermRow& row);
// Get SearchTermRow of the given |term|; return the row id on success.
// otherwise 0 is returned.
// The found row is return in |row| if it is not NULL.
SearchTermID GetSearchTerm(const base::string16& term, SearchTermRow* row);
// Delete the search terms which don't exist in keyword_search_terms table.
bool DeleteUnusedSearchTerms();
protected:
// Returns the database for the functions in this interface. The decendent of
// this class implements these functions to return its objects.
virtual sql::Connection& GetDB() = 0;
private:
FRIEND_TEST_ALL_PREFIXES(AndroidCacheDatabaseTest, InitAndroidCacheDatabase);
// Creates the database and make it ready for attaching; returns true on
// success.
bool CreateDatabase(const base::FilePath& db_name);
// Creates the bookmark_cache table in attached DB; returns true on success.
// The created_time, last_visit_time, favicon_id and bookmark are stored.
//
// The created_time and last_visit_time are cached because Android use the
// millisecond for the time unit, and we don't want to convert it in the
// runtime for it requires to parsing the SQL.
//
// The favicon_id is also cached because it is in thumbnail database. Its
// default value is set to null as the type of favicon column in Android APIs
// is blob. To use default value null, we can support client query by
// 'WHERE favicon IS NULL'.
//
// Bookmark column is used to indicate whether the url is bookmarked.
bool CreateBookmarkCacheTable();
// Creates the search_terms table in attached DB; returns true on success.
// This table has _id, search, and date fields which match the Android's
// definition.
//
// When Android Client require update the search term, the search term can't
// be updated as it always associated a URL. We simulate the update by
// deleting the old search term then inserting a new one, but the ID given
// to client can not be changed, so it appears to client as update. This
// table is used to mapping the ID given to client to the search term.
//
// The search term last visit time is stored in date as Android needs the time
// in milliseconds.
bool CreateSearchTermsTable();
// Attachs to history database; returns true on success.
bool Attach();
// Does the real attach. Returns true on success.
bool DoAttach();
base::FilePath db_name_;
DISALLOW_COPY_AND_ASSIGN(AndroidCacheDatabase);
};
} // namespace history
#endif // CHROME_BROWSER_HISTORY_ANDROID_ANDROID_CACHE_DATABASE_H_