1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include <string>
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autocomplete/autocomplete_match.h"
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autocomplete/history_provider.h"
13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/history/history_types.h"
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/history/in_memory_url_index.h"
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass Profile;
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TermMatches;
18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
19731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace history {
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass HistoryBackend;
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}  // namespace history
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This class is an autocomplete provider (a pseudo-internal component of
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// the history system) which quickly (and synchronously) provides matching
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// results from recently or frequently visited sites in the profile's
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// history.
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass HistoryQuickProvider : public HistoryProvider {
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  HistoryQuickProvider(ACProviderListener* listener, Profile* profile);
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~HistoryQuickProvider();
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // AutocompleteProvider. |minimal_changes| is ignored since there
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // is no asynch completion performed.
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Start(const AutocompleteInput& input,
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                     bool minimal_changes) OVERRIDE;
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void DeleteMatch(const AutocompleteMatch& match) OVERRIDE;
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Performs the autocomplete matching and scoring.
41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void DoAutocomplete();
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  friend class HistoryQuickProviderTest;
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Spans);
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AutocompleteMatch QuickMatchToACMatch(
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      const history::ScoredHistoryMatch& history_match,
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      size_t match_number,
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      bool prevent_inline_autocomplete,
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      int* next_dont_inline_score);
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Determines the relevance for some input, given its type and which match it
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // is.  If |match_type| is NORMAL, |match_number| is a number
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // [0, kMaxSuggestions) indicating the relevance of the match (higher == more
56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // relevant).  For other values of |match_type|, |match_number| is ignored.
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static int CalculateRelevance(int raw_score,
58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                AutocompleteInput::Type input_type,
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                MatchType match_type,
60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                size_t match_number);
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Returns the index that should be used for history lookups.
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  history::InMemoryURLIndex* GetIndex();
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Fill and return an ACMatchClassifications structure given the term
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // matches (|matches|) to highlight where terms were found.
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static ACMatchClassifications SpansFromTermMatch(
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const history::TermMatches& matches,
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      size_t text_length);
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Only for use in unittests.  Takes ownership of |index|.
72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void SetIndexForTesting(history::InMemoryURLIndex* index);
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  AutocompleteInput autocomplete_input_;
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  std::string languages_;
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Only used for testing.
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_ptr<history::InMemoryURLIndex> index_for_testing_;
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_QUICK_PROVIDER_H_
81