Disable TabDragController tests that fail with a real compositor.
[chromium-blink-merge.git] / chrome / browser / autocomplete / shortcuts_provider.h
blobe93fbd20b78bcf0b5149a5d8c5a348c49090b643
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.
5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_
6 #define CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_
8 #include <map>
9 #include <set>
10 #include <string>
12 #include "base/gtest_prod_util.h"
13 #include "chrome/browser/autocomplete/autocomplete_provider.h"
14 #include "chrome/browser/autocomplete/url_prefix.h"
15 #include "chrome/browser/history/shortcuts_backend.h"
17 class Profile;
19 namespace history {
20 class ShortcutsProviderTest;
23 // Provider of recently autocompleted links. Provides autocomplete suggestions
24 // from previously selected suggestions. The more often a user selects a
25 // suggestion for a given search term the higher will be that suggestion's
26 // ranking for future uses of that search term.
27 class ShortcutsProvider
28 : public AutocompleteProvider,
29 public history::ShortcutsBackend::ShortcutsBackendObserver {
30 public:
31 ShortcutsProvider(AutocompleteProviderListener* listener, Profile* profile);
33 // Performs the autocompletion synchronously. Since no asynch completion is
34 // performed |minimal_changes| is ignored.
35 virtual void Start(const AutocompleteInput& input,
36 bool minimal_changes) OVERRIDE;
38 virtual void DeleteMatch(const AutocompleteMatch& match) OVERRIDE;
40 private:
41 friend class ClassifyTest;
42 friend class history::ShortcutsProviderTest;
44 typedef std::multimap<base::char16, base::string16> WordMap;
46 virtual ~ShortcutsProvider();
48 // ShortcutsBackendObserver:
49 virtual void OnShortcutsLoaded() OVERRIDE;
51 // Performs the autocomplete matching and scoring.
52 void GetMatches(const AutocompleteInput& input);
54 // Returns an AutocompleteMatch corresponding to |shortcut|. Assigns it
55 // |relevance| score in the process, and highlights the description and
56 // contents against |term_string|, which should be the lower-cased version
57 // of the user's input. |term_string| and |fixed_up_term_string| are used
58 // to decide what can be inlined. If |prevent_inline_autocomplete|, no
59 // matches with inline completions will be allowed to be the default match.
60 AutocompleteMatch ShortcutToACMatch(
61 const history::ShortcutsBackend::Shortcut& shortcut,
62 int relevance,
63 const base::string16& term_string,
64 const base::string16& fixed_up_term_string,
65 const bool prevent_inline_autocomplete);
67 // Returns a map mapping characters to groups of words from |text| that start
68 // with those characters, ordered lexicographically descending so that longer
69 // words appear before their prefixes (if any) within a particular
70 // equal_range().
71 static WordMap CreateWordMapForString(const base::string16& text);
73 // Given |text| and a corresponding base set of classifications
74 // |original_class|, adds ACMatchClassification::MATCH markers for all
75 // instances of the words from |find_words| within |text| and returns the
76 // resulting classifications. (|find_text| is provided as the original string
77 // used to create |find_words|. This is supplied because it's common for this
78 // to be a prefix of |text|, so we can quickly check for that and mark that
79 // entire substring as a match before proceeding with the more generic
80 // algorithm.)
82 // For example, given the |text|
83 // "Sports and News at sports.somesite.com - visit us!" and |original_class|
84 // {{0, NONE}, {18, URL}, {37, NONE}} (marking "sports.somesite.com" as a
85 // URL), calling with |find_text| set to "sp ew" would return
86 // {{0, MATCH}, {2, NONE}, {12, MATCH}, {14, NONE}, {18, URL|MATCH},
87 // {20, URL}, {37, NONE}}.
89 // |find_words| should be as constructed by CreateWordMapForString(find_text).
91 // |find_text| (and thus |find_words|) are expected to be lowercase. |text|
92 // will be lowercased in this function.
93 static ACMatchClassifications ClassifyAllMatchesInString(
94 const base::string16& find_text,
95 const WordMap& find_words,
96 const base::string16& text,
97 const ACMatchClassifications& original_class);
99 // Returns iterator to first item in |shortcuts_map_| matching |keyword|.
100 // Returns shortcuts_map_.end() if there are no matches.
101 history::ShortcutsBackend::ShortcutMap::const_iterator FindFirstMatch(
102 const base::string16& keyword,
103 history::ShortcutsBackend* backend);
105 int CalculateScore(
106 const base::string16& terms,
107 const history::ShortcutsBackend::Shortcut& shortcut,
108 int max_relevance);
110 std::string languages_;
111 bool initialized_;
114 #endif // CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_