// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_HISTORY_CORE_BROWSER_URL_DATABASE_H_ #define COMPONENTS_HISTORY_CORE_BROWSER_URL_DATABASE_H_ #include <stddef.h> #include <string> #include <vector> #include "base/time/time.h" #include "components/history/core/browser/history_types.h" #include "components/history/core/browser/keyword_id.h" #include "components/history/core/browser/url_row.h" #include "components/query_parser/query_parser.h" #include "sql/statement.h" class GURL; namespace base { class Time; } namespace sql { class Database; } namespace history { class KeywordSearchTermVisitEnumerator; struct KeywordSearchTermRow; class VisitDatabase; // For friend statement. // Encapsulates an SQL database that holds URL info. This is a subset of the // full history data. We split this class' functionality out from the larger // HistoryDatabase class to support maintaining separate databases of URLs with // different capabilities (for example, the in-memory database). // // This is refcounted to support calling InvokeLater() with some of its methods // (necessary to maintain ordering of DB operations). class URLDatabase { … }; // The fields and order expected by FillURLRow(). ID is guaranteed to be first // so that DISTINCT can be prepended to get distinct URLs. // // This is available BOTH as a macro and a static string (kURLRowFields). Use // the macro if you want to put this in the middle of an otherwise constant // string, it will save time doing string appends. If you have to build a SQL // string dynamically anyway, use the constant, it will save space. #define HISTORY_URL_ROW_FIELDS … // Constants which specify, when considered altogether, 'significant' // history items. These are used to filter out insignificant items // for consideration as autocomplete candidates. extern const int kLowQualityMatchTypedLimit; extern const int kLowQualityMatchVisitLimit; extern const int kLowQualityMatchAgeLimitInDays; // Returns the date threshold for considering an history item as significant. base::Time AutocompleteAgeThreshold(); // Return true if `row` qualifies as an autocomplete candidate. If `threshold` // is_null() then this function determines a new time threshold each time it is // called. Since getting system time can be costly (such as for cases where // this function will be called in a loop over many history items), you can // provide a non-null `threshold` by simply initializing `threshold` with // AutocompleteAgeThreshold() (or any other desired time in the past). bool RowQualifiesAsSignificant(const URLRow& row, const base::Time& threshold); } // namespace history #endif // COMPONENTS_HISTORY_CORE_BROWSER_URL_DATABASE_H_