1// Copyright (c) 2011 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_QUICK_PROVIDER_H_ 6#define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_ 7#pragma once 8 9#include <string> 10 11#include "chrome/browser/autocomplete/autocomplete_match.h" 12#include "chrome/browser/autocomplete/history_provider.h" 13#include "chrome/browser/history/history_types.h" 14#include "chrome/browser/history/in_memory_url_index.h" 15 16class Profile; 17class TermMatches; 18 19namespace history { 20class HistoryBackend; 21} // namespace history 22 23// This class is an autocomplete provider (a pseudo-internal component of 24// the history system) which quickly (and synchronously) provides matching 25// results from recently or frequently visited sites in the profile's 26// history. 27class HistoryQuickProvider : public HistoryProvider { 28 public: 29 HistoryQuickProvider(ACProviderListener* listener, Profile* profile); 30 31 ~HistoryQuickProvider(); 32 33 // AutocompleteProvider. |minimal_changes| is ignored since there 34 // is no asynch completion performed. 35 virtual void Start(const AutocompleteInput& input, 36 bool minimal_changes) OVERRIDE; 37 38 virtual void DeleteMatch(const AutocompleteMatch& match) OVERRIDE; 39 40 // Performs the autocomplete matching and scoring. 41 void DoAutocomplete(); 42 43 private: 44 friend class HistoryQuickProviderTest; 45 FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Spans); 46 47 AutocompleteMatch QuickMatchToACMatch( 48 const history::ScoredHistoryMatch& history_match, 49 size_t match_number, 50 bool prevent_inline_autocomplete, 51 int* next_dont_inline_score); 52 53 // Determines the relevance for some input, given its type and which match it 54 // is. If |match_type| is NORMAL, |match_number| is a number 55 // [0, kMaxSuggestions) indicating the relevance of the match (higher == more 56 // relevant). For other values of |match_type|, |match_number| is ignored. 57 static int CalculateRelevance(int raw_score, 58 AutocompleteInput::Type input_type, 59 MatchType match_type, 60 size_t match_number); 61 62 // Returns the index that should be used for history lookups. 63 history::InMemoryURLIndex* GetIndex(); 64 65 // Fill and return an ACMatchClassifications structure given the term 66 // matches (|matches|) to highlight where terms were found. 67 static ACMatchClassifications SpansFromTermMatch( 68 const history::TermMatches& matches, 69 size_t text_length); 70 71 // Only for use in unittests. Takes ownership of |index|. 72 void SetIndexForTesting(history::InMemoryURLIndex* index); 73 AutocompleteInput autocomplete_input_; 74 std::string languages_; 75 76 // Only used for testing. 77 scoped_ptr<history::InMemoryURLIndex> index_for_testing_; 78}; 79 80#endif // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_ 81