1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_HISTORY_VISITSEGMENT_DATABASE_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_HISTORY_VISITSEGMENT_DATABASE_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_types.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PageUsageData; 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace sql { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Connection; 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace history { 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tracks pages used for the most visited view. 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass VisitSegmentDatabase { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Must call InitSegmentTables before using any other part of this class. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VisitSegmentDatabase(); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~VisitSegmentDatabase(); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Compute a segment name given a URL. The segment name is currently the 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // source url spec less some information such as query strings. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::string ComputeSegmentName(const GURL& url); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the ID of the segment with the corresponding name, or 0 if there 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is no segment with that name. 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SegmentID GetSegmentNamed(const std::string& segment_name); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Update the segment identified by |out_segment_id| with the provided URL ID. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL identifies the page that will now represent the segment. If url_id 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is non zero, it is assumed to be the row id of |url|. 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool UpdateSegmentRepresentationURL(SegmentID segment_id, 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLID url_id); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return the ID of the URL currently used to represent this segment or 0 if 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // an error occured. 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLID GetSegmentRepresentationURL(SegmentID segment_id); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a segment for the provided URL ID with the given name. Returns the 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ID of the newly created segment, or 0 on failure. 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SegmentID CreateSegment(URLID url_id, const std::string& segment_name); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Increase the segment visit count by the provided amount. Return true on 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // success. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IncreaseSegmentVisitCount(SegmentID segment_id, base::Time ts, 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int amount); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Compute the segment usage since |from_time| using the provided aggregator. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A PageUsageData is added in |result| for the highest-scored segments up to 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |max_result_count|. 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void QuerySegmentUsage(base::Time from_time, 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int max_result_count, 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<PageUsageData*>* result); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete all the segment usage data which is older than the provided time 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // stamp. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DeleteSegmentData(base::Time older_than); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Change the presentation id for the segment identified by |segment_id| 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetSegmentPresentationIndex(SegmentID segment_id, int index); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delete the segment currently using the provided url for representation. 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will also delete any associated segment usage data. 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool DeleteSegmentForURL(URLID url_id); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the database for the functions in this interface. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual sql::Connection& GetDB() = 0; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates the tables used by this class if necessary. Returns true on 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // success. 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool InitSegmentTables(); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Deletes all the segment tables, returning true on success. 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool DropSegmentTables(); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(VisitSegmentDatabase); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace history 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_HISTORY_VISITSEGMENT_DATABASE_H_ 90