| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_ |
| #define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_ |
| #pragma once |
| |
| #include "chrome/browser/autocomplete/history_provider.h" |
| #include "chrome/browser/history/history.h" |
| |
| namespace bookmark_utils { |
| struct TitleMatch; |
| } |
| |
| // HistoryContentsProvider is an AutocompleteProvider that provides results from |
| // the contents (body and/or title) of previously visited pages. |
| // HistoryContentsProvider gets results from two sources: |
| // . HistoryService: this provides results for matches in the body/title of |
| // previously viewed pages. This is asynchronous. |
| // . BookmarkModel: provides results for matches in the titles of bookmarks. |
| // This is synchronous. |
| class HistoryContentsProvider : public HistoryProvider { |
| public: |
| HistoryContentsProvider(ACProviderListener* listener, Profile* profile); |
| |
| // As necessary asks the history service for the relevant results. When |
| // done SetResults is invoked. |
| virtual void Start(const AutocompleteInput& input, |
| bool minimal_changes) OVERRIDE; |
| virtual void Stop() OVERRIDE; |
| |
| private: |
| ~HistoryContentsProvider(); |
| |
| void QueryComplete(HistoryService::Handle handle, |
| history::QueryResults* results); |
| |
| // Converts each MatchingPageResult in results_ to an AutocompleteMatch and |
| // adds it to matches_. |
| void ConvertResults(); |
| |
| // Creates and returns an AutocompleteMatch from a MatchingPageResult. |
| AutocompleteMatch ResultToMatch(const history::URLResult& result, |
| int score); |
| |
| // Adds ACMatchClassifications to match from the offset positions in |
| // page_result. |
| void ClassifyDescription(const history::URLResult& result, |
| AutocompleteMatch* match) const; |
| |
| // Calculates and returns the relevance of a particular result. See the |
| // chart in autocomplete.h for the list of values this returns. |
| int CalculateRelevance(const history::URLResult& result); |
| |
| // Queries the bookmarks for any bookmarks whose title matches input. All |
| // matches are added directly to results_. |
| void QueryBookmarks(const AutocompleteInput& input); |
| |
| // Converts a BookmarkModel::TitleMatch to a QueryResult and adds it to |
| // results_. |
| void AddBookmarkTitleMatchToResults(const bookmark_utils::TitleMatch& match); |
| |
| CancelableRequestConsumerT<int, 0> request_consumer_; |
| |
| // The number of times we're returned each different type of result. These are |
| // used by CalculateRelevance. Initialized in Start. |
| int star_title_count_; |
| int star_contents_count_; |
| int title_count_; |
| int contents_count_; |
| |
| // Current autocomplete input type. |
| AutocompleteInput::Type input_type_; |
| |
| // Whether we should trim "http://" from results. |
| bool trim_http_; |
| |
| // Results from most recent query. These are cached so we don't have to |
| // re-issue queries for "minor changes" (which don't affect this provider). |
| history::QueryResults results_; |
| |
| // Whether results_ is valid (so we can tell invalid apart from empty). |
| bool have_results_; |
| |
| // Current query string. |
| string16 query_; |
| |
| DISALLOW_COPY_AND_ASSIGN(HistoryContentsProvider); |
| }; |
| |
| #endif // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_CONTENTS_PROVIDER_H_ |