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_HISTORY_TYPES_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/containers/stack_container.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_vector.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/snippet.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_id.h" 229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/common/favicon/favicon_types.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/ref_counted_util.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/thumbnail_score.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PageUsageData; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Forward declaration for friend statements. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HistoryBackend; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLDatabase; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Structure to hold redirect lists for URLs. For a redirect chain 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A -> B -> C, and entry in the map would look like "A => {B -> C}". 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, scoped_refptr<RefCountedVector<GURL> > > RedirectMap; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Container for a list of URLs. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<GURL> RedirectList; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 FaviconBitmapID; // Identifier for a bitmap in a favicon. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 SegmentID; // URL segments for the most visited view. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef int64 SegmentDurationID; // Unique identifier for segment_duration. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 IconMappingID; // For page url and icon mapping. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLRow --------------------------------------------------------------------- 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 URLID; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds all information globally associated with one URL (one row in the 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URL table). 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This keeps track of dirty bits, which are currently unused: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(brettw) the dirty bits are broken in a number of respects. First, the 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// database will want to update them on a const object, so they need to be 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mutable. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Second, there is a problem copying. If you make a copy of this structure 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (as we allow since we put this into vectors in various places) then the 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dirty bits will not be in sync for these copies. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRow { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRow(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit URLRow(const GURL& url); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to be able to set the id of a URLRow that's being passed through 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an IPC message. This constructor should probably not be used otherwise. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRow(const GURL& url, URLID id); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~URLRow(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRow& operator=(const URLRow& other); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID id() const { return id_; } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the id of the row. The id should only be manually set when a row has 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been retrieved from the history database or other dataset based on criteria 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other than its id (i.e. by URL) and when the id has not yet been set in the 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // row. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_id(URLID id) { id_ = id; } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url() const { return url_; } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title() const { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return title_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void set_title(const base::string16& title) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The title is frequently set to the same thing, so we don't bother 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // updating unless the string has changed. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title != title_) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_ = title; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The number of times this URL has been visited. This will often match the 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // number of entries in the visit table for this URL, but won't always. It's 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // really designed for autocomplete ranking, so some "useless" transitions 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from the visit table aren't counted in this tally. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count() const { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return visit_count_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_visit_count(int visit_count) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) visit_count_ = visit_count; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of times the URL was typed in the Omnibox. This "should" match 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the number of TYPED transitions in the visit table. It's used primarily 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for faster autocomplete ranking. If you need to know the actual number of 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TYPED transitions, you should query the visit table since there could be 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // something out of sync. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int typed_count() const { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return typed_count_; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_typed_count(int typed_count) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typed_count_ = typed_count; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_visit() const { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_visit_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_last_visit(base::Time last_visit) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_visit_ = last_visit; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is set, we won't autocomplete this URL. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hidden() const { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hidden_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_hidden(bool hidden) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hidden_ = hidden; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper functor that determines if an URLRow refers to a given URL. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class URLRowHasURL { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit URLRowHasURL(const GURL& url) : url_(url) {} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator()(const URLRow& row) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return row.url() == url_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Swaps the contents of this URLRow with another, which allows it to be 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructively copied without memory allocations. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Swap(URLRow* other); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This class writes directly into this structure and clears our dirty bits 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when reading out of the DB. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class URLDatabase; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class HistoryBackend; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes all values that need initialization to their defaults. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This excludes objects which autoinitialize such as strings. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Initialize(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The row ID of this URL from the history database. This is immutable except 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when retrieving the row from the database or when determining if the URL 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // referenced by the URLRow already exists in the database. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID id_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL of this row. Immutable except for the database which sets it 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when it pulls them out. If clients want to change it, they must use 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the constructor to make a new one. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Total number of times this URL has been visited. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of times this URL has been manually entered in the URL bar. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int typed_count_; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The date of the last visit of this URL, which saves us from having to 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loop up in the visit table for things like autocomplete and expiration. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_visit_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates this entry should now be shown in typical UI or queries, this 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is usually for subframes. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hidden_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We support the implicit copy constuctor and operator=. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<URLRow> URLRows; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The enumeration of all possible sources of visits is listed below. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The source will be propagated along with a URL or a visit item 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and eventually be stored in the history database, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// visit_source table specifically. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Different from page transition types, they describe the origins of visits. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (Warning): Please don't change any existing values while it is ok to add 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new values when needed. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum VisitSource { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_SYNCED = 0, // Synchronized from somewhere else. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_BROWSED = 1, // User browsed. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_EXTENSION = 2, // Added by an extension. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_FIREFOX_IMPORTED = 3, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_IE_IMPORTED = 4, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SOURCE_SAFARI_IMPORTED = 5, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 VisitID; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Structure to hold the mapping between each visit's id and its source. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<VisitID, VisitSource> VisitSourceMap; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// VisitRow ------------------------------------------------------------------- 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds all information associated with a specific visit. A visit holds time 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and referrer information for one time a URL is visited. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VisitRow { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitRow(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitRow(URLID arg_url_id, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time arg_visit_time, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitID arg_referring_visit, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition arg_transition, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SegmentID arg_segment_id); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~VisitRow(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID of this row (visit ID, used a a referrer for other visits). 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitID visit_id; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Row ID into the URL table of the URL that this page is. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time visit_time; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates another visit that was the referring page for this one. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 0 indicates no referrer. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitID referring_visit; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A combination of bits from PageTransition. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The segment id (see visitsegment_database.*). 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If 0, the segment id is null in the table. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SegmentID segment_id; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record how much time a user has this visit starting from the user 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // opened this visit to the user closed or ended this visit. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This includes both active and inactive time as long as 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the visit was present. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta visit_duration; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compares two visits based on dates, for sorting. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator<(const VisitRow& other) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return visit_time < other.visit_time; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We allow the implicit copy constuctor and operator=. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We pass around vectors of visits a lot 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<VisitRow> VisitVector; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The basic information associated with a visit (timestamp, type of visit), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// used by HistoryBackend::AddVisits() to create new visits for a URL. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::pair<base::Time, content::PageTransition> VisitInfo; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageVisit ------------------------------------------------------------------ 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents a simplified version of a visit for external users. Normally, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// views are only interested in the time, and not the other information 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// associated with a VisitRow. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PageVisit { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID page_id; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time visit_time; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLResult ------------------------------------------------------------------- 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLResult : public URLRow { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResult(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResult(const GURL& url, base::Time visit_time); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructor that create a URLResult from the specified URL and title match 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // positions from title_matches. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResult(const GURL& url, const Snippet::MatchPositions& title_matches); 289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit URLResult(const URLRow& url_row); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~URLResult(); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time visit_time() const { return visit_time_; } 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_visit_time(base::Time visit_time) { visit_time_ = visit_time; } 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Snippet& snippet() const { return snippet_; } 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool blocked_visit() const { return blocked_visit_; } 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_blocked_visit(bool blocked_visit) { 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) blocked_visit_ = blocked_visit; 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is a title match, title_match_positions contains an entry for 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // every word in the title that matched one of the query parameters. Each 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry contains the start and end of the match. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Snippet::MatchPositions& title_match_positions() const { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return title_match_positions_; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SwapResult(URLResult* other); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static bool CompareVisitTime(const URLResult& lhs, const URLResult& rhs); 312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class HistoryBackend; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time that this result corresponds to. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time visit_time_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These values are typically set by HistoryBackend. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Snippet snippet_; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Snippet::MatchPositions title_match_positions_; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether a managed user was blocked when attempting to visit this URL. 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool blocked_visit_; 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We support the implicit copy constructor and operator=. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// QueryResults ---------------------------------------------------------------- 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Encapsulates the results of a history query. It supports an ordered list of 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLResult objects, plus an efficient way of looking up the index of each time 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a given URL appears in those results. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QueryResults { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<URLResult*> URLResultVector; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryResults(); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~QueryResults(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates the first time that the query includes results for (queries are 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clipped at the beginning, so it will always include to the end of the time 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // queried). 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the number of results was clipped as a result of the max count, this 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be the time of the first query returned. If there were fewer results 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // than we were allowed to return, this represents the first date considered 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in the query (this will be before the first result if there was time 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // queried with no results). 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(brettw): bug 1203054: This field is not currently set properly! Do 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not use until the bug is fixed. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time first_time_searched() const { return first_time_searched_; } 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_first_time_searched(base::Time t) { first_time_searched_ = t; } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: If you need end_time_searched, it can be added. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_reached_beginning(bool reached) { reached_beginning_ = reached; } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reached_beginning() { return reached_beginning_; } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size() const { return results_.size(); } 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty() const { return results_.empty(); } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) URLResult& back() { return *results_.back(); } 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const URLResult& back() const { return *results_.back(); } 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResult& operator[](size_t i) { return *results_[i]; } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLResult& operator[](size_t i) const { return *results_[i]; } 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResultVector::const_iterator begin() const { return results_.begin(); } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResultVector::const_iterator end() const { return results_.end(); } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResultVector::const_reverse_iterator rbegin() const { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return results_.rbegin(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLResultVector::const_reverse_iterator rend() const { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return results_.rend(); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the beginning of an array of all matching indices 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for entries with the given URL. The array will be |*num_matches| long. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |num_matches| can be NULL if the caller is not interested in the number of 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // results (commonly it will only be interested in the first one and can test 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the pointer for NULL). 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When there is no match, it will return NULL and |*num_matches| will be 0. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t* MatchesForURL(const GURL& url, size_t* num_matches) const; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Swaps the current result with another. This allows ownership to be 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // efficiently transferred without copying. 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Swap(QueryResults* other); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds the given result to the map, using swap() on the members to avoid 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // copying (there are a lot of strings and vectors). This means the parameter 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // object will be cleared after this call. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AppendURLBySwapping(URLResult* result); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes all instances of the given URL from the result set. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteURL(const GURL& url); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes the given range of items in the result set. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteRange(size_t begin, size_t end); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maps the given URL to a list of indices into results_ which identify each 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // time an entry with that URL appears. Normally, each URL will have one or 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // very few indices after it, so we optimize this to use statically allocated 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // memory when possible. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<GURL, base::StackVector<size_t, 4> > URLToResultIndices; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inserts an entry into the |url_to_results_| map saying that the given URL 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is at the given index in the results_. 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddURLUsageAtIndex(const GURL& url, size_t index); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds |delta| to each index in url_to_results_ in the range [begin,end] 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (this is inclusive). This is used when inserting or deleting. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time first_time_searched_; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the query reaches the beginning of the database. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool reached_beginning_; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ordered list of results. The pointers inside this are owned by this 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // QueryResults object. 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedVector<URLResult> results_; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maps URLs to entries in results_. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLToResultIndices url_to_results_; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QueryResults); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// QueryOptions ---------------------------------------------------------------- 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct QueryOptions { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryOptions(); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The time range to search for matches in. The beginning is inclusive and 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the ending is exclusive. Either one (or both) may be null. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This will match only the one recent visit of a URL. For text search 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // queries, if the URL was visited in the given time period, but has also 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // been visited more recently than that, it will not be returned. When the 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // text query is empty, this will return the most recent visit within the 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // time range. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time begin_time; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time end_time; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the query time to the last |days_ago| days to the present time. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRecentDayRange(int days_ago); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The maximum number of results to return. The results will be sorted with 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the most recent first, so older results may not be returned if there is not 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enough room. When 0, this will return everything (the default). 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_count; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum DuplicateHandling { 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Omit visits for which there is a more recent visit to the same URL. 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Each URL in the results will appear only once. 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) REMOVE_ALL_DUPLICATES, 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Omit visits for which there is a more recent visit to the same URL on 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the same day. Each URL will appear no more than once per day, where the 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // day is defined by the local timezone. 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) REMOVE_DUPLICATES_PER_DAY, 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Return all visits without deduping. 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KEEP_ALL_DUPLICATES 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allows the caller to specify how duplicate URLs in the result set should 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be handled. The default is REMOVE_DUPLICATES. 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DuplicateHandling duplicate_policy; 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helpers to get the effective parameters values, since a value of 0 means 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "unspecified". 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int EffectiveMaxCount() const; 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 EffectiveBeginTime() const; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 EffectiveEndTime() const; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermVisit ----------------------------------------------------- 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermVisit is returned from GetMostRecentKeywordSearchTerms. It 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gives the time and search term of the keyword visit. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct KeywordSearchTermVisit { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeywordSearchTermVisit(); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~KeywordSearchTermVisit(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 489a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term; // The search term that was used. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visits; // The visit count. 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time; // The time of the most recent visit. 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermRow -------------------------------------------------------- 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for URLs that have a search term associated with them. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct KeywordSearchTermRow { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KeywordSearchTermRow(); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~KeywordSearchTermRow(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID keyword_id; // ID of the keyword. 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id; // ID of the url. 503a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term; // The search term that was used. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MostVisitedURL -------------------------------------------------------------- 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds the per-URL information of the most visited query. 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MostVisitedURL { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL(); 511a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MostVisitedURL(const GURL& url, const base::string16& title); 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) MostVisitedURL(const GURL& url, 513a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Time& last_forced_time); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MostVisitedURL(); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 518a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If this is a URL for which we want to force a thumbnail, records the last 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // time it was forced so we can evict it when more recent URLs are requested. 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If it's not a forced thumbnail, keep a time of 0. 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Time last_forced_time; 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RedirectList redirects; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator==(const MostVisitedURL& other) { 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url == other.url; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FilteredURL ----------------------------------------------------------------- 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds the per-URL information of the filterd url query. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FilteredURL { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct ExtendedInfo { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtendedInfo(); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The absolute number of visits. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int total_visits; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The number of visits, as seen by the Most Visited NTP pane. 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int visits; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The total number of seconds that the page was open. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 duration_opened; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time when the page was last visited. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_visit_time; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilteredURL(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit FilteredURL(const PageUsageData& data); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FilteredURL(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 553a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double score; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtendedInfo extended_info; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Navigation ----------------------------------------------------------------- 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Marshalling structure for AddPage. 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HistoryAddPageArgs { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default constructor is equivalent to: 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HistoryAddPageArgs( 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GURL(), base::Time(), NULL, 0, GURL(), 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // history::RedirectList(), content::PAGE_TRANSITION_LINK, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SOURCE_BROWSED, false) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryAddPageArgs(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryAddPageArgs(const GURL& url, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* id_scope, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id, 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& referrer, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const history::RedirectList& redirects, 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition, 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitSource source, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_replace_entry); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HistoryAddPageArgs(); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* id_scope; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL referrer; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::RedirectList redirects; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisitSource visit_source; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_replace_entry; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TopSites ------------------------------------------------------------------- 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<MostVisitedURL> MostVisitedURLList; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<FilteredURL> FilteredURLList; 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by TopSites to store the thumbnails. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct Images { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Images(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Images(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 603a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) scoped_refptr<base::RefCountedMemory> thumbnail; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore thumbnail_score; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(brettw): this will eventually store the favicon. 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scoped_refptr<base::RefCountedBytes> favicon; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MostVisitedURLWithRank { 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url; 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rank; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<MostVisitedURLWithRank> MostVisitedURLWithRankList; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TopSitesDelta { 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesDelta(); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~TopSitesDelta(); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList deleted; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLWithRankList added; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLWithRankList moved; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, scoped_refptr<base::RefCountedBytes> > URLToThumbnailMap; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used when migrating most visited thumbnails out of history and into topsites. 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ThumbnailMigration { 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailMigration(); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ThumbnailMigration(); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList most_visited; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLToThumbnailMap url_to_thumbnail_map; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, Images> URLToImagesMap; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MostVisitedThumbnails 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public base::RefCountedThreadSafe<MostVisitedThumbnails> { 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedThumbnails(); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList most_visited; 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLToImagesMap url_to_images_map; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCountedThreadSafe<MostVisitedThumbnails>; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MostVisitedThumbnails(); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MostVisitedThumbnails); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Autocomplete thresholds ----------------------------------------------------- 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Constants which specify, when considered altogether, 'significant' 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// history items. These are used to filter out insignificant items 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for consideration as autocomplete candidates. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchTypedLimit; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchVisitLimit; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchAgeLimitInDays; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the date threshold for considering an history item as significant. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time AutocompleteAgeThreshold(); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return true if |row| qualifies as an autocomplete candidate. If |time_cache| 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is_null() then this function determines a new time threshold each time it is 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// called. Since getting system time can be costly (such as for cases where 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this function will be called in a loop over many history items), you can 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// provide a non-null |time_cache| by simply initializing |time_cache| with 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteAgeThreshold() (or any other desired time in the past). 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RowQualifiesAsSignificant(const URLRow& row, const base::Time& threshold); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Favicons ------------------------------------------------------------------- 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for the mapping between the page and icon. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IconMapping { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconMapping(); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~IconMapping(); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the mapping. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IconMappingID mapping_id; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The url of a web page. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL page_url; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the icon. 68890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::FaviconID icon_id; 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The url of the icon. 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL icon_url; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The type of icon. 69490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::IconType icon_type; 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a favicon bitmap and its associated pixel size. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconBitmapIDSize { 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconBitmapIDSize(); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FaviconBitmapIDSize(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the favicon bitmap. 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconBitmapID bitmap_id; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pixel dimensions of the associated bitmap. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pixel_size; 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a favicon bitmap stored in the history backend. 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconBitmap { 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconBitmap(); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~FaviconBitmap(); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique id of the bitmap. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconBitmapID bitmap_id; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The id of the favicon to which the bitmap belongs to. 71890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) chrome::FaviconID icon_id; 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time at which |bitmap_data| was last updated. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_updated; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The bits of the bitmap. 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> bitmap_data; 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pixel dimensions of bitmap_data. 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pixel_size; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Abbreviated information about a visit. 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BriefVisitInfo { 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLID url_id; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition; 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An observer of VisitDatabase. 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VisitDatabaseObserver { 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~VisitDatabaseObserver(); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAddVisit(const BriefVisitInfo& info) = 0; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ExpireHistoryArgs { 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpireHistoryArgs(); 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~ExpireHistoryArgs(); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets |begin_time| and |end_time| to the beginning and end of the day (in 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // local time) on which |time| occurs. 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTimeRangeForOneDay(base::Time time); 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<GURL> urls; 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time begin_time; 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time end_time; 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace history 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_ 760