• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_
6 #define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_
7 #pragma once
8 
9 #include "chrome/browser/autocomplete/history_provider.h"
10 #include "chrome/browser/history/history.h"
11 
12 namespace bookmark_utils {
13 struct TitleMatch;
14 }
15 
16 // HistoryContentsProvider is an AutocompleteProvider that provides results from
17 // the contents (body and/or title) of previously visited pages.
18 // HistoryContentsProvider gets results from two sources:
19 // . HistoryService: this provides results for matches in the body/title of
20 //   previously viewed pages. This is asynchronous.
21 // . BookmarkModel: provides results for matches in the titles of bookmarks.
22 //   This is synchronous.
23 class HistoryContentsProvider : public HistoryProvider {
24  public:
25   HistoryContentsProvider(ACProviderListener* listener, Profile* profile);
26 
27   // As necessary asks the history service for the relevant results. When
28   // done SetResults is invoked.
29   virtual void Start(const AutocompleteInput& input,
30                      bool minimal_changes) OVERRIDE;
31   virtual void Stop() OVERRIDE;
32 
33  private:
34   ~HistoryContentsProvider();
35 
36   void QueryComplete(HistoryService::Handle handle,
37                      history::QueryResults* results);
38 
39   // Converts each MatchingPageResult in results_ to an AutocompleteMatch and
40   // adds it to matches_.
41   void ConvertResults();
42 
43   // Creates and returns an AutocompleteMatch from a MatchingPageResult.
44   AutocompleteMatch ResultToMatch(const history::URLResult& result,
45                                   int score);
46 
47   // Adds ACMatchClassifications to match from the offset positions in
48   // page_result.
49   void ClassifyDescription(const history::URLResult& result,
50                            AutocompleteMatch* match) const;
51 
52   // Calculates and returns the relevance of a particular result. See the
53   // chart in autocomplete.h for the list of values this returns.
54   int CalculateRelevance(const history::URLResult& result);
55 
56   // Queries the bookmarks for any bookmarks whose title matches input. All
57   // matches are added directly to results_.
58   void QueryBookmarks(const AutocompleteInput& input);
59 
60   // Converts a BookmarkModel::TitleMatch to a QueryResult and adds it to
61   // results_.
62   void AddBookmarkTitleMatchToResults(const bookmark_utils::TitleMatch& match);
63 
64   CancelableRequestConsumerT<int, 0> request_consumer_;
65 
66   // The number of times we're returned each different type of result. These are
67   // used by CalculateRelevance. Initialized in Start.
68   int star_title_count_;
69   int star_contents_count_;
70   int title_count_;
71   int contents_count_;
72 
73   // Current autocomplete input type.
74   AutocompleteInput::Type input_type_;
75 
76   // Whether we should trim "http://" from results.
77   bool trim_http_;
78 
79   // Results from most recent query. These are cached so we don't have to
80   // re-issue queries for "minor changes" (which don't affect this provider).
81   history::QueryResults results_;
82 
83   // Whether results_ is valid (so we can tell invalid apart from empty).
84   bool have_results_;
85 
86   // Current query string.
87   string16 query_;
88 
89   DISALLOW_COPY_AND_ASSIGN(HistoryContentsProvider);
90 };
91 
92 #endif  // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_
93