history_types.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/snippet.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_id.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/ref_counted_util.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/thumbnail_score.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PageUsageData;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Forward declaration for friend statements.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HistoryBackend;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLDatabase;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Structure to hold redirect lists for URLs.  For a redirect chain
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A -> B -> C, and entry in the map would look like "A => {B -> C}".
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, scoped_refptr<RefCountedVector<GURL> > > RedirectMap;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Container for a list of URLs.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<GURL> RedirectList;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 DownloadID;   // Identifier for a download.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 FaviconID;  // For favicons.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 FaviconBitmapID; // Identifier for a bitmap in a favicon.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 SegmentID;  // URL segments for the most visited view.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef int64 SegmentDurationID;  // Unique identifier for segment_duration.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 IconMappingID; // For page url and icon mapping.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLRow ---------------------------------------------------------------------
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 URLID;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds all information globally associated with one URL (one row in the
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URL table).
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This keeps track of dirty bits, which are currently unused:
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(brettw) the dirty bits are broken in a number of respects. First, the
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// database will want to update them on a const object, so they need to be
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mutable.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Second, there is a problem copying. If you make a copy of this structure
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (as we allow since we put this into vectors in various places) then the
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dirty bits will not be in sync for these copies.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRow {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRow();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit URLRow(const GURL& url);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We need to be able to set the id of a URLRow that's being passed through
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // an IPC message.  This constructor should probably not be used otherwise.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRow(const GURL& url, URLID id);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~URLRow();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLRow& operator=(const URLRow& other);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID id() const { return id_; }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the id of the row. The id should only be manually set when a row has
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // been retrieved from the history database or other dataset based on criteria
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // other than its id (i.e. by URL) and when the id has not yet been set in the
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // row.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_id(URLID id) { id_ = id; }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL& url() const { return url_; }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16& title() const {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return title_;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_title(const string16& title) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The title is frequently set to the same thing, so we don't bother
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // updating unless the string has changed.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (title != title_) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      title_ = title;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The number of times this URL has been visited. This will often match the
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // number of entries in the visit table for this URL, but won't always. It's
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // really designed for autocomplete ranking, so some "useless" transitions
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // from the visit table aren't counted in this tally.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int visit_count() const {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return visit_count_;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_visit_count(int visit_count) {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    visit_count_ = visit_count;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Number of times the URL was typed in the Omnibox. This "should" match
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the number of TYPED transitions in the visit table. It's used primarily
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for faster autocomplete ranking. If you need to know the actual number of
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TYPED transitions, you should query the visit table since there could be
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // something out of sync.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int typed_count() const {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return typed_count_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_typed_count(int typed_count) {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typed_count_ = typed_count;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time last_visit() const {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return last_visit_;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_last_visit(base::Time last_visit) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    last_visit_ = last_visit;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this is set, we won't autocomplete this URL.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool hidden() const {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return hidden_;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_hidden(bool hidden) {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hidden_ = hidden;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper functor that determines if an URLRow refers to a given URL.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class URLRowHasURL {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit URLRowHasURL(const GURL& url) : url_(url) {}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool operator()(const URLRow& row) {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return row.url() == url_;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GURL& url_;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Swaps the contents of this URLRow with another, which allows it to be
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // destructively copied without memory allocations.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Swap(URLRow* other);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This class writes directly into this structure and clears our dirty bits
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when reading out of the DB.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class URLDatabase;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class HistoryBackend;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes all values that need initialization to their defaults.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This excludes objects which autoinitialize such as strings.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Initialize();
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The row ID of this URL from the history database. This is immutable except
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when retrieving the row from the database or when determining if the URL
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // referenced by the URLRow already exists in the database.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID id_;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL of this row. Immutable except for the database which sets it
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when it pulls them out. If clients want to change it, they must use
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the constructor to make a new one.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 title_;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Total number of times this URL has been visited.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int visit_count_;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Number of times this URL has been manually entered in the URL bar.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int typed_count_;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The date of the last visit of this URL, which saves us from having to
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // loop up in the visit table for things like autocomplete and expiration.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time last_visit_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates this entry should now be shown in typical UI or queries, this
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is usually for subframes.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool hidden_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We support the implicit copy constuctor and operator=.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<URLRow> URLRows;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The enumeration of all possible sources of visits is listed below.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The source will be propagated along with a URL or a visit item
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and eventually be stored in the history database,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// visit_source table specifically.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Different from page transition types, they describe the origins of visits.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (Warning): Please don't change any existing values while it is ok to add
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// new values when needed.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum VisitSource {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_SYNCED = 0,         // Synchronized from somewhere else.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_BROWSED = 1,        // User browsed.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_EXTENSION = 2,      // Added by an extension.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_FIREFOX_IMPORTED = 3,
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_IE_IMPORTED = 4,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOURCE_SAFARI_IMPORTED = 5,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int64 VisitID;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Structure to hold the mapping between each visit's id and its source.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<VisitID, VisitSource> VisitSourceMap;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// VisitRow -------------------------------------------------------------------
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds all information associated with a specific visit. A visit holds time
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and referrer information for one time a URL is visited.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VisitRow {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisitRow();
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisitRow(URLID arg_url_id,
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           base::Time arg_visit_time,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           VisitID arg_referring_visit,
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           content::PageTransition arg_transition,
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           SegmentID arg_segment_id);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~VisitRow();
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ID of this row (visit ID, used a a referrer for other visits).
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisitID visit_id;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Row ID into the URL table of the URL that this page is.
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID url_id;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time visit_time;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates another visit that was the referring page for this one.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 0 indicates no referrer.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisitID referring_visit;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A combination of bits from PageTransition.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::PageTransition transition;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The segment id (see visitsegment_database.*).
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If 0, the segment id is null in the table.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SegmentID segment_id;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True when this visit has indexed data for it. We try to keep this in sync
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with the full text index: when we add or remove things from there, we will
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // update the visit table as well. However, that file could get deleted, or
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // out of sync in various ways, so this flag should be false when things
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // change.
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_indexed;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Record how much time a user has this visit starting from the user
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // opened this visit to the user closed or ended this visit.
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This includes both active and inactive time as long as
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the visit was present.
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta visit_duration;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Compares two visits based on dates, for sorting.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool operator<(const VisitRow& other) {
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return visit_time < other.visit_time;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We allow the implicit copy constuctor and operator=.
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We pass around vectors of visits a lot
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<VisitRow> VisitVector;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The basic information associated with a visit (timestamp, type of visit),
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// used by HistoryBackend::AddVisits() to create new visits for a URL.
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::pair<base::Time, content::PageTransition> VisitInfo;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageVisit ------------------------------------------------------------------
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents a simplified version of a visit for external users. Normally,
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// views are only interested in the time, and not the other information
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// associated with a VisitRow.
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PageVisit {
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID page_id;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time visit_time;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLResult -------------------------------------------------------------------
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLResult : public URLRow {
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResult();
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResult(const GURL& url, base::Time visit_time);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Constructor that create a URLResult from the specified URL and title match
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // positions from title_matches.
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResult(const GURL& url, const Snippet::MatchPositions& title_matches);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~URLResult();
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time visit_time() const { return visit_time_; }
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_visit_time(base::Time visit_time) { visit_time_ = visit_time; }
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Snippet& snippet() const { return snippet_; }
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool blocked_visit() const { return blocked_visit_; }
305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void set_blocked_visit(bool blocked_visit) {
306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    blocked_visit_ = blocked_visit;
307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this is a title match, title_match_positions contains an entry for
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // every word in the title that matched one of the query parameters. Each
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // entry contains the start and end of the match.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Snippet::MatchPositions& title_match_positions() const {
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return title_match_positions_;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SwapResult(URLResult* other);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class HistoryBackend;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The time that this result corresponds to.
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time visit_time_;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These values are typically set by HistoryBackend.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Snippet snippet_;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Snippet::MatchPositions title_match_positions_;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Whether a managed user was blocked when attempting to visit this URL.
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool blocked_visit_;
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We support the implicit copy constructor and operator=.
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// QueryResults ----------------------------------------------------------------
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Encapsulates the results of a history query. It supports an ordered list of
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URLResult objects, plus an efficient way of looking up the index of each time
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a given URL appears in those results.
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QueryResults {
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::vector<URLResult*> URLResultVector;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  QueryResults();
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~QueryResults();
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates the first time that the query includes results for (queries are
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // clipped at the beginning, so it will always include to the end of the time
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // queried).
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the number of results was clipped as a result of the max count, this
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will be the time of the first query returned. If there were fewer results
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // than we were allowed to return, this represents the first date considered
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in the query (this will be before the first result if there was time
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // queried with no results).
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(brettw): bug 1203054: This field is not currently set properly! Do
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not use until the bug is fixed.
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_time_searched() const { return first_time_searched_; }
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_first_time_searched(base::Time t) { first_time_searched_ = t; }
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: If you need end_time_searched, it can be added.
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_reached_beginning(bool reached) { reached_beginning_ = reached; }
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reached_beginning() { return reached_beginning_; }
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t size() const { return results_.size(); }
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool empty() const { return results_.empty(); }
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  URLResult& back() { return *results_.back(); }
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const URLResult& back() const { return *results_.back(); }
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResult& operator[](size_t i) { return *results_[i]; }
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const URLResult& operator[](size_t i) const { return *results_[i]; }
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResultVector::const_iterator begin() const { return results_.begin(); }
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResultVector::const_iterator end() const { return results_.end(); }
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResultVector::const_reverse_iterator rbegin() const {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return results_.rbegin();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLResultVector::const_reverse_iterator rend() const {
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return results_.rend();
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the beginning of an array of all matching indices
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for entries with the given URL. The array will be |*num_matches| long.
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |num_matches| can be NULL if the caller is not interested in the number of
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // results (commonly it will only be interested in the first one and can test
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the pointer for NULL).
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When there is no match, it will return NULL and |*num_matches| will be 0.
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t* MatchesForURL(const GURL& url, size_t* num_matches) const;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Swaps the current result with another. This allows ownership to be
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // efficiently transferred without copying.
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Swap(QueryResults* other);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds the given result to the map, using swap() on the members to avoid
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // copying (there are a lot of strings and vectors). This means the parameter
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // object will be cleared after this call.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AppendURLBySwapping(URLResult* result);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removes all instances of the given URL from the result set.
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DeleteURL(const GURL& url);
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Deletes the given range of items in the result set.
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DeleteRange(size_t begin, size_t end);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Maps the given URL to a list of indices into results_ which identify each
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // time an entry with that URL appears. Normally, each URL will have one or
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // very few indices after it, so we optimize this to use statically allocated
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // memory when possible.
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<GURL, base::StackVector<size_t, 4> > URLToResultIndices;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inserts an entry into the |url_to_results_| map saying that the given URL
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is at the given index in the results_.
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddURLUsageAtIndex(const GURL& url, size_t index);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds |delta| to each index in url_to_results_ in the range [begin,end]
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (this is inclusive). This is used when inserting or deleting.
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AdjustResultMap(size_t begin, size_t end, ptrdiff_t delta);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time first_time_searched_;
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the query reaches the beginning of the database.
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool reached_beginning_;
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The ordered list of results. The pointers inside this are owned by this
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // QueryResults object.
429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedVector<URLResult> results_;
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Maps URLs to entries in results_.
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLToResultIndices url_to_results_;
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(QueryResults);
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// QueryOptions ----------------------------------------------------------------
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct QueryOptions {
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  QueryOptions();
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The time range to search for matches in. The beginning is inclusive and
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the ending is exclusive. Either one (or both) may be null.
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This will match only the one recent visit of a URL. For text search
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // queries, if the URL was visited in the given time period, but has also
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // been visited more recently than that, it will not be returned. When the
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // text query is empty, this will return the most recent visit within the
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // time range.
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time begin_time;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time end_time;
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the query time to the last |days_ago| days to the present time.
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetRecentDayRange(int days_ago);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The maximum number of results to return. The results will be sorted with
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the most recent first, so older results may not be returned if there is not
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough room. When 0, this will return everything (the default).
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int max_count;
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only search within the page body if true, otherwise search all columns
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // including url and time. Defaults to false.
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool body_only;
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum DuplicateHandling {
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Omit visits for which there is a more recent visit to the same URL.
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Each URL in the results will appear only once.
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    REMOVE_ALL_DUPLICATES,
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Omit visits for which there is a more recent visit to the same URL on
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // the same day. Each URL will appear no more than once per day, where the
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // day is defined by the local timezone.
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    REMOVE_DUPLICATES_PER_DAY,
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Return all visits without deduping.
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    KEEP_ALL_DUPLICATES
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Allows the caller to specify how duplicate URLs in the result set should
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // be handled. The default is REMOVE_DUPLICATES.
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DuplicateHandling duplicate_policy;
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Helpers to get the effective parameters values, since a value of 0 means
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // "unspecified".
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int EffectiveMaxCount() const;
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int64 EffectiveBeginTime() const;
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int64 EffectiveEndTime() const;
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermVisit -----------------------------------------------------
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermVisit is returned from GetMostRecentKeywordSearchTerms. It
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gives the time and search term of the keyword visit.
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct KeywordSearchTermVisit {
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  KeywordSearchTermVisit();
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~KeywordSearchTermVisit();
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 term;    // The search term that was used.
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int visits;       // The visit count.
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time time;  // The time of the most recent visit.
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// KeywordSearchTermRow --------------------------------------------------------
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for URLs that have a search term associated with them.
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct KeywordSearchTermRow {
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  KeywordSearchTermRow();
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~KeywordSearchTermRow();
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLID keyword_id;  // ID of the keyword.
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID url_id;              // ID of the url.
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 term;             // The search term that was used.
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MostVisitedURL --------------------------------------------------------------
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds the per-URL information of the most visited query.
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MostVisitedURL {
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURL();
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURL(const GURL& url, const string16& title);
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~MostVisitedURL();
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url;
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 title;
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RedirectList redirects;
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool operator==(const MostVisitedURL& other) {
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return url == other.url;
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FilteredURL -----------------------------------------------------------------
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Holds the per-URL information of the filterd url query.
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FilteredURL {
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct ExtendedInfo {
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtendedInfo();
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The absolute number of visits.
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned int total_visits;
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The number of visits, as seen by the Most Visited NTP pane.
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned int visits;
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The total number of seconds that the page was open.
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 duration_opened;
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The time when the page was last visited.
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time last_visit_time;
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FilteredURL();
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit FilteredURL(const PageUsageData& data);
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FilteredURL();
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url;
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 title;
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double score;
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExtendedInfo extended_info;
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Navigation -----------------------------------------------------------------
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Marshalling structure for AddPage.
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HistoryAddPageArgs {
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The default constructor is equivalent to:
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   HistoryAddPageArgs(
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       GURL(), base::Time(), NULL, 0, GURL(),
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       history::RedirectList(), content::PAGE_TRANSITION_LINK,
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       SOURCE_BROWSED, false)
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HistoryAddPageArgs();
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HistoryAddPageArgs(const GURL& url,
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     base::Time time,
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const void* id_scope,
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int32 page_id,
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const GURL& referrer,
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const history::RedirectList& redirects,
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     content::PageTransition transition,
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     VisitSource source,
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     bool did_replace_entry);
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~HistoryAddPageArgs();
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url;
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time time;
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const void* id_scope;
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 page_id;
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL referrer;
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  history::RedirectList redirects;
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::PageTransition transition;
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VisitSource visit_source;
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool did_replace_entry;
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TopSites -------------------------------------------------------------------
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<MostVisitedURL> MostVisitedURLList;
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<FilteredURL> FilteredURLList;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by TopSites to store the thumbnails.
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct Images {
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Images();
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~Images();
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedBytes> thumbnail;
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThumbnailScore thumbnail_score;
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(brettw): this will eventually store the favicon.
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // scoped_refptr<base::RefCountedBytes> favicon;
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<MostVisitedURL> MostVisitedURLList;
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MostVisitedURLWithRank {
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURL url;
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int rank;
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<MostVisitedURLWithRank> MostVisitedURLWithRankList;
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TopSitesDelta {
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TopSitesDelta();
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~TopSitesDelta();
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURLList deleted;
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURLWithRankList added;
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURLWithRankList moved;
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, scoped_refptr<base::RefCountedBytes> > URLToThumbnailMap;
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used when migrating most visited thumbnails out of history and into topsites.
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ThumbnailMigration {
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ThumbnailMigration();
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ThumbnailMigration();
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURLList most_visited;
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLToThumbnailMap url_to_thumbnail_map;
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<GURL, Images> URLToImagesMap;
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MostVisitedThumbnails
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public base::RefCountedThreadSafe<MostVisitedThumbnails> {
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedThumbnails();
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MostVisitedURLList most_visited;
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLToImagesMap url_to_images_map;
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class base::RefCountedThreadSafe<MostVisitedThumbnails>;
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MostVisitedThumbnails();
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MostVisitedThumbnails);
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Autocomplete thresholds -----------------------------------------------------
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Constants which specify, when considered altogether, 'significant'
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// history items. These are used to filter out insignificant items
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for consideration as autocomplete candidates.
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchTypedLimit;
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchVisitLimit;
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int kLowQualityMatchAgeLimitInDays;
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the date threshold for considering an history item as significant.
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time AutocompleteAgeThreshold();
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return true if |row| qualifies as an autocomplete candidate. If |time_cache|
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is_null() then this function determines a new time threshold each time it is
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// called. Since getting system time can be costly (such as for cases where
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this function will be called in a loop over many history items), you can
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// provide a non-null |time_cache| by simply initializing |time_cache| with
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteAgeThreshold() (or any other desired time in the past).
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RowQualifiesAsSignificant(const URLRow& row, const base::Time& threshold);
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Favicons -------------------------------------------------------------------
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines the icon types. They are also stored in icon_type field of favicons
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// table.
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The values of the IconTypes are used to select the priority in which favicon
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// data is returned in HistoryBackend and ThumbnailDatabase. Data for the
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// largest IconType takes priority if data for multiple IconTypes is available.
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum IconType {
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  INVALID_ICON = 0x0,
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FAVICON = 1 << 0,
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TOUCH_ICON = 1 << 1,
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TOUCH_PRECOMPOSED_ICON = 1 << 2
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for the mapping between the page and icon.
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IconMapping {
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IconMapping();
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~IconMapping();
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The unique id of the mapping.
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IconMappingID mapping_id;
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The url of a web page.
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL page_url;
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The unique id of the icon.
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconID icon_id;
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The url of the icon.
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL icon_url;
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The type of icon.
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IconType icon_type;
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a favicon bitmap which best matches the desired DIP size and one of
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the desired scale factors.
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconBitmapResult {
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconBitmapResult();
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FaviconBitmapResult();
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |bitmap_data| contains a valid bitmap.
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_valid() const { return bitmap_data.get() && bitmap_data->size(); }
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates whether |bitmap_data| is expired.
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool expired;
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The bits of the bitmap.
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedMemory> bitmap_data;
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The pixel dimensions of |bitmap_data|.
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Size pixel_size;
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL of the containing favicon.
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL icon_url;
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The icon type of the containing favicon.
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IconType icon_type;
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Define type with same structure as FaviconBitmapResult for passing data to
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HistoryBackend::SetFavicons().
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef FaviconBitmapResult FaviconBitmapData;
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a gfx::Image of size desired_size_in_dip composed of image
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// representations for each of the desired scale factors.
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconImageResult {
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconImageResult();
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FaviconImageResult();
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The resulting image.
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Image image;
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL of the favicon which contains all of the image representations of
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |image|.
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(pkotwicz): Return multiple |icon_urls| to allow |image| to have
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // representations from several favicons once content::FaviconStatus supports
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // multiple URLs.
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL icon_url;
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FaviconSizes represents the sizes that the thumbnail database knows a
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// favicon is available from the web. FaviconSizes has several entries
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only if FaviconSizes is for an .ico file. FaviconSizes can be different
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from the pixel sizes of the entries in the |favicon_bitmaps| table. For
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instance, if a web page has a .ico favicon with bitmaps of pixel sizes
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (16x16, 32x32), FaviconSizes will have both sizes regardless of whether
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// either of these bitmaps is cached in the favicon_bitmaps database table.
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<gfx::Size> FaviconSizes;
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the default FaviconSizes to use if the favicon sizes for a FaviconID
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are unknown.
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const FaviconSizes& GetDefaultFaviconSizes();
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a favicon bitmap and its associated pixel size.
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconBitmapIDSize {
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconBitmapIDSize();
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FaviconBitmapIDSize();
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The unique id of the favicon bitmap.
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconBitmapID bitmap_id;
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The pixel dimensions of the associated bitmap.
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Size pixel_size;
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a favicon bitmap stored in the history backend.
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FaviconBitmap {
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconBitmap();
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FaviconBitmap();
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The unique id of the bitmap.
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconBitmapID bitmap_id;
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The id of the favicon to which the bitmap belongs to.
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconID icon_id;
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Time at which |bitmap_data| was last updated.
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time last_updated;
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The bits of the bitmap.
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::RefCountedMemory> bitmap_data;
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The pixel dimensions of bitmap_data.
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Size pixel_size;
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by the importer to set favicons for imported bookmarks.
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ImportedFaviconUsage {
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ImportedFaviconUsage();
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ImportedFaviconUsage();
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL of the favicon.
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL favicon_url;
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The raw png-encoded data.
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<unsigned char> png_data;
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The list of URLs using this favicon.
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<GURL> urls;
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Abbreviated information about a visit.
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BriefVisitInfo {
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLID url_id;
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time time;
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::PageTransition transition;
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An observer of VisitDatabase.
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VisitDatabaseObserver {
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VisitDatabaseObserver();
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAddVisit(const BriefVisitInfo& info) = 0;
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ExpireHistoryArgs {
8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ExpireHistoryArgs();
8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~ExpireHistoryArgs();
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Sets |begin_time| and |end_time| to the beginning and end of the day (in
8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // local time) on which |time| occurs.
8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTimeRangeForOneDay(base::Time time);
8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::set<GURL> urls;
8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time begin_time;
8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::Time end_time;
8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace history
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_HISTORY_HISTORY_TYPES_H_
849