history_quick_provider.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright (c) 2012 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 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "chrome/browser/autocomplete/autocomplete_input.h" 13#include "chrome/browser/autocomplete/autocomplete_match.h" 14#include "chrome/browser/autocomplete/history_provider.h" 15#include "chrome/browser/history/history_types.h" 16#include "chrome/browser/history/in_memory_url_index.h" 17 18class Profile; 19class TermMatches; 20 21namespace history { 22struct ScoredHistoryMatch; 23} // namespace history 24 25// This class is an autocomplete provider (a pseudo-internal component of 26// the history system) which quickly (and synchronously) provides matching 27// results from recently or frequently visited sites in the profile's 28// history. 29class HistoryQuickProvider : public HistoryProvider { 30 public: 31 HistoryQuickProvider(AutocompleteProviderListener* listener, 32 Profile* profile); 33 34 // AutocompleteProvider. |minimal_changes| is ignored since there is no asynch 35 // completion performed. 36 virtual void Start(const AutocompleteInput& input, 37 bool minimal_changes) OVERRIDE; 38 39 virtual void DeleteMatch(const AutocompleteMatch& match) OVERRIDE; 40 41 // Disable this provider. For unit testing purposes only. This is required 42 // because this provider is closely associated with the HistoryURLProvider 43 // and in order to properly test the latter the HistoryQuickProvider must 44 // be disabled. 45 // TODO(mrossetti): Eliminate this once the HUP has been refactored. 46 static void set_disabled(bool disabled) { disabled_ = disabled; } 47 48 private: 49 friend class HistoryQuickProviderTest; 50 FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Spans); 51 FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Relevance); 52 53 virtual ~HistoryQuickProvider(); 54 55 // Performs the autocomplete matching and scoring. 56 void DoAutocomplete(); 57 58 // Creates an AutocompleteMatch from |history_match|, assigning it 59 // the score |score|. 60 AutocompleteMatch QuickMatchToACMatch( 61 const history::ScoredHistoryMatch& history_match, 62 int score); 63 64 // Returns the index that should be used for history lookups. 65 history::InMemoryURLIndex* GetIndex(); 66 67 // Fill and return an ACMatchClassifications structure given the term 68 // matches (|matches|) to highlight where terms were found. 69 static ACMatchClassifications SpansFromTermMatch( 70 const history::TermMatches& matches, 71 size_t text_length, 72 bool is_url); 73 74 // Only for use in unittests. Takes ownership of |index|. 75 void set_index(history::InMemoryURLIndex* index) { 76 index_for_testing_.reset(index); 77 } 78 79 AutocompleteInput autocomplete_input_; 80 std::string languages_; 81 82 // Only used for testing. 83 scoped_ptr<history::InMemoryURLIndex> index_for_testing_; 84 85 // This provider is disabled when true. 86 static bool disabled_; 87 88 DISALLOW_COPY_AND_ASSIGN(HistoryQuickProvider); 89}; 90 91#endif // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_ 92