1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_HISTORY_THUMBNAIL_DATABASE_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_HISTORY_THUMBNAIL_DATABASE_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/connection.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/init_status.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/meta_table.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/gtest_prod_util.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_types.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FilePath; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RefCountedMemory; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ThumbnailScore; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace base { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Time; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace history { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExpireHistoryBackend; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass HistoryPublisher; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This database interface is owned by the history backend and runs on the 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// history thread. It is a totally separate component from history partially 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// because we may want to move it to its own thread in the future. The 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// operations we will do on this database will be slow, but we can tolerate 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// higher latency (it's OK for thumbnails to come in slower than the rest 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of the data). Moving this to a separate thread would not block potentially 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// higher priority history operations. 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ThumbnailDatabase { 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ThumbnailDatabase(); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~ThumbnailDatabase(); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Must be called after creation but before any other methods are called. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // When not INIT_OK, no other functions should be called. 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sql::InitStatus Init(const FilePath& db_name, 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const HistoryPublisher* history_publisher, 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen URLDatabase* url_database); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open database on a given filename. If the file does not exist, 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // it is created. 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |db| is the database to open. 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |db_name| is a path to the database file. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static sql::InitStatus OpenDatabase(sql::Connection* db, 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& db_name); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Transactions on the database. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void BeginTransaction(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CommitTransaction(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int transaction_nesting() const { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return db_.transaction_nesting(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Vacuums the database. This will cause sqlite to defragment and collect 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // unused space in the file. It can be VERY SLOW. 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Vacuum(); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Thumbnails ---------------------------------------------------------------- 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the given data to be the thumbnail for the given URL, 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // overwriting any previous data. If the SkBitmap contains no pixel 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // data, the thumbnail will be deleted. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetPageThumbnail(const GURL& url, 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLID id, 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkBitmap& thumbnail, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ThumbnailScore& score, 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time time); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Retrieves thumbnail data for the given URL, returning true on success, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // false if there is no such thumbnail or there was some other error. 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetPageThumbnail(URLID id, std::vector<unsigned char>* data); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete the thumbnail with the provided id. Returns false on failure 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool DeleteThumbnail(URLID id); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If there is a thumbnail score for the id provided, retrieves the 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // current thumbnail score and places it in |score| and returns 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // true. Returns false otherwise. 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ThumbnailScoreForId(URLID id, ThumbnailScore* score); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called by the to delete all old thumbnails and make a clean table. 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true on success. 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool RecreateThumbnailTable(); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Favicons ------------------------------------------------------------------ 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the bits for a favicon. This should be png encoded data. 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time indicates the access time, and is used to detect when the favicon 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // should be refreshed. 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetFavicon(FaviconID icon_id, 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<RefCountedMemory> icon_data, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time time); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the time the favicon was last updated. 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool SetFaviconLastUpdateTime(FaviconID icon_id, base::Time time); 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the id of the entry in the favicon database with the specified url 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and icon type. If |required_icon_type| contains multiple icon types and 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // there are more than one matched icon in database, only one icon will be 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // returned in the priority of TOUCH_PRECOMPOSED_ICON, TOUCH_ICON, and 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // FAVICON, and the icon type is returned in icon_type parameter if it is not 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NULL. 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns 0 if no entry exists for the specified url. 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FaviconID GetFaviconIDForFaviconURL(const GURL& icon_url, 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int required_icon_type, 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconType* icon_type); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets the png encoded favicon and last updated time for the specified 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // favicon id. 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetFavicon(FaviconID icon_id, 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time* last_updated, 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<unsigned char>* png_icon_data, 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL* icon_url); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Adds the favicon URL and icon type to the favicon db, returning its id. 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FaviconID AddFavicon(const GURL& icon_url, IconType icon_type); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete the favicon with the provided id. Returns false on failure 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool DeleteFavicon(FaviconID id); 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Icon Mapping -------------------------------------------------------------- 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if there is a matched icon mapping for the given page and 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // icon type. 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The matched icon mapping is returned in the icon_mapping parameter if it is 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // not NULL. 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetIconMappingForPageURL(const GURL& page_url, 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconType required_icon_type, 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconMapping* icon_mapping); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if there is any matched icon mapping for the given page. 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // All matched icon mappings are returned in descent order of IconType if 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // mapping_data is not NULL. 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetIconMappingsForPageURL(const GURL& page_url, 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<IconMapping>* mapping_data); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Adds a mapping between the given page_url and icon_id. 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the new mapping id if the adding succeeds, otherwise 0 is returned. 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconMappingID AddIconMapping(const GURL& page_url, FaviconID icon_id); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Updates the page and icon mapping for the given mapping_id with the given 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // icon_id. 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if the update succeeded. 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool UpdateIconMapping(IconMappingID mapping_id, FaviconID icon_id); 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Deletes the icon mapping entries for the given page url. 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if the deletion succeeded. 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool DeleteIconMappings(const GURL& page_url); 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Checks whether a favicon is used by any URLs in the database. 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool HasMappingFor(FaviconID id); 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Temporary IconMapping ----------------------------------------------------- 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Creates a temporary table to store icon mapping. Icon mapping will be 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // copied to this table by AddToTemporaryIconMappingTable() and then the 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // original table will be dropped, leaving only those copied mapping 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // remaining. This is used to quickly delete most of the icon mapping when 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // clearing history. 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool InitTemporaryIconMappingTable() { 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return InitIconMappingTable(&db_, true); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Copies the given icon mapping from the "main" icon_mapping table to the 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // temporary one. This is only valid in between calls to 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // InitTemporaryIconMappingTable() 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and CommitTemporaryIconMappingTable(). 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The ID of the favicon will change when this copy takes place. The new ID 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // is returned, or 0 on failure. 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconMappingID AddToTemporaryIconMappingTable(const GURL& page_url, 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const FaviconID icon_id); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Replaces the main icon mapping table with the temporary table created by 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // InitTemporaryIconMappingTable(). This will mean all icon mapping not copied 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // over will be deleted. Returns true on success. 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool CommitTemporaryIconMappingTable(); 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Temporary Favicons -------------------------------------------------------- 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a temporary table to store favicons. Favicons will be copied to 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // this table by CopyToTemporaryFaviconTable() and then the original table 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // will be dropped, leaving only those copied favicons remaining. This is 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // used to quickly delete most of the favicons when clearing history. 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool InitTemporaryFaviconsTable() { 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return InitFaviconsTable(&db_, true); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Copies the given favicon from the "main" favicon table to the temporary 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // one. This is only valid in between calls to InitTemporaryFaviconsTable() 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // and CommitTemporaryFaviconTable(). 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The ID of the favicon will change when this copy takes place. The new ID 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is returned, or 0 on failure. 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FaviconID CopyToTemporaryFaviconTable(FaviconID source); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Replaces the main URL table with the temporary table created by 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // InitTemporaryFaviconsTable(). This will mean all favicons not copied over 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // will be deleted. Returns true on success. 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool CommitTemporaryFaviconTable(); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true iff the thumbnails table exists. 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Migrating to TopSites is dropping the thumbnails table. 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool NeedsMigrationToTopSites(); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Renames the database file and drops the Thumbnails table. 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool RenameAndDropThumbnails(const FilePath& old_db_file, 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& new_db_file); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class ExpireHistoryBackend; 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(ThumbnailDatabaseTest, UpgradeToVersion4); 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationIconMapping); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates the thumbnail table, returning true if the table already exists 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // or was successfully created. 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool InitThumbnailTable(); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates the favicon table, returning true if the table already exists, 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // or was successfully created. |is_temporary| will be false when generating 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the "regular" favicons table. The expirer sets this to true to generate the 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // temporary table, which will have a different name but the same schema. 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |db| is the connection to use for initializing the table. 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A different connection is used in RenameAndDropThumbnails, when we 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // need to copy the favicons between two database files. 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool InitFaviconsTable(sql::Connection* db, bool is_temporary); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Adds support for the new metadata on web page thumbnails. 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool UpgradeToVersion3(); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Adds support for the icon_type in favicon table. 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool UpgradeToVersion4(); 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Migrates the icon mapping data from URL database to Thumbnail database. 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Return whether the migration succeeds. 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool MigrateIconMappingData(URLDatabase* url_db); 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates the index over the favicon table. This will be called during 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // initialization after the table is created. This is a separate function 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // because it is used by SwapFaviconTables to create an index over the 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // newly-renamed favicons table (formerly the temporary table with no index). 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void InitFaviconsIndex(); 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Creates the icon_map table, return true if the table already exists or was 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // successfully created. 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool InitIconMappingTable(sql::Connection* db, bool is_temporary); 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Creates the index over the icon_mapping table, This will be called during 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // initialization after the table is created. This is a separate function 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // because it is used by CommitTemporaryIconMappingTable to create an index 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // over the newly-renamed icon_mapping table (formerly the temporary table 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // with no index). 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void InitIconMappingIndex(); 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Adds a mapping between the given page_url and icon_id; The mapping will be 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // added to temp_icon_mapping table if is_temporary is true. 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the new mapping id if the adding succeeds, otherwise 0 is returned. 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IconMappingID AddIconMapping(const GURL& page_url, 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FaviconID icon_id, 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_temporary); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sql::Connection db_; 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sql::MetaTable meta_table_; 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This object is created and managed by the history backend. We maintain an 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // opaque pointer to the object for our use. 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This can be NULL if there are no indexers registered to receive indexing 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // data from us. 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const HistoryPublisher* history_publisher_; 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if migration to TopSites has been done and the thumbnails 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // table should not be used. 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool use_top_sites_; 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace history 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_HISTORY_THUMBNAIL_DATABASE_H_ 290