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