blob: 50c2e30c9e88b3222c76299f756ad35ad4947a28 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_
#define CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_
#pragma once
#include <set>
#include <string>
#include "base/gtest_prod_util.h"
#include "base/time.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/autocomplete/history_provider.h"
#include "chrome/browser/history/shortcuts_backend.h"
class Profile;
// Provider of recently autocompleted links. Provides autocomplete suggestions
// from previously selected suggestions. The more often a user selects a
// suggestion for a given search term the higher will be that suggestion's
// ranking for future uses of that search term.
class ShortcutsProvider
: public AutocompleteProvider,
public history::ShortcutsBackend::ShortcutsBackendObserver {
public:
ShortcutsProvider(ACProviderListener* listener, Profile* profile);
// Performs the autocompletion synchronously. Since no asynch completion is
// performed |minimal_changes| is ignored.
virtual void Start(const AutocompleteInput& input,
bool minimal_changes) OVERRIDE;
virtual void DeleteMatch(const AutocompleteMatch& match) OVERRIDE;
private:
friend class ShortcutsProviderTest;
FRIEND_TEST_ALL_PREFIXES(ShortcutsProviderTest, ClassifyAllMatchesInString);
FRIEND_TEST_ALL_PREFIXES(ShortcutsProviderTest, CalculateScore);
FRIEND_TEST_ALL_PREFIXES(ShortcutsProviderTest, DeleteMatch);
virtual ~ShortcutsProvider();
// ShortcutsBackendObserver:
virtual void OnShortcutsLoaded() OVERRIDE;
void DeleteMatchesWithURLs(const std::set<GURL>& urls);
void DeleteShortcutsWithURLs(const std::set<GURL>& urls);
// Performs the autocomplete matching and scoring.
void GetMatches(const AutocompleteInput& input);
AutocompleteMatch ShortcutToACMatch(
const AutocompleteInput& input,
const string16& terms,
const history::ShortcutsBackend::Shortcut& shortcut);
// Given |text| and a corresponding base set of classifications
// |original_class|, adds ACMatchClassification::MATCH markers for all
// instances of the words from |find_text| within |text| and returns the
// resulting classifications.
//
// For example, given the |text|
// "Sports and News at sports.somesite.com - visit us!" and |original_class|
// {{0, NONE}, {18, URL}, {37, NONE}} (marking "sports.somesite.com" as a
// URL), calling with |find_text| set to "sp ew" would return
// {{0, MATCH}, {2, NONE}, {12, MATCH}, {14, NONE}, {18, URL|MATCH},
// {20, URL}, {37, NONE}}
static ACMatchClassifications ClassifyAllMatchesInString(
const string16& find_text,
const string16& text,
const ACMatchClassifications& original_class);
// Returns iterator to first item in |shortcuts_map_| matching |keyword|.
// Returns shortcuts_map_.end() if there are no matches.
history::ShortcutsBackend::ShortcutMap::const_iterator FindFirstMatch(
const string16& keyword);
static int CalculateScore(
const string16& terms,
const history::ShortcutsBackend::Shortcut& shortcut);
// For unit-test only.
void set_shortcuts_backend(history::ShortcutsBackend* shortcuts_backend);
std::string languages_;
bool initialized_;
scoped_refptr<history::ShortcutsBackend> shortcuts_backend_;
};
#endif // CHROME_BROWSER_AUTOCOMPLETE_SHORTCUTS_PROVIDER_H_