| Index: chrome/browser/autocomplete/search_provider.h
|
| diff --git a/chrome/browser/autocomplete/search_provider.h b/chrome/browser/autocomplete/search_provider.h
|
| deleted file mode 100644
|
| index 26ed2df885e4d3c4371f75e6700aa8c78a61dde2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/autocomplete/search_provider.h
|
| +++ /dev/null
|
| @@ -1,367 +0,0 @@
|
| -// 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.
|
| -//
|
| -// This file contains the Search autocomplete provider. This provider is
|
| -// responsible for all autocomplete entries that start with "Search <engine>
|
| -// for ...", including searching for the current input string, search
|
| -// history, and search suggestions. An instance of it gets created and
|
| -// managed by the autocomplete controller.
|
| -
|
| -#ifndef CHROME_BROWSER_AUTOCOMPLETE_SEARCH_PROVIDER_H_
|
| -#define CHROME_BROWSER_AUTOCOMPLETE_SEARCH_PROVIDER_H_
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "base/timer/timer.h"
|
| -#include "chrome/browser/autocomplete/answers_cache.h"
|
| -#include "chrome/browser/autocomplete/base_search_provider.h"
|
| -#include "components/metrics/proto/omnibox_input_type.pb.h"
|
| -#include "components/search_engines/template_url.h"
|
| -#include "net/url_request/url_fetcher_delegate.h"
|
| -
|
| -class AutocompleteProviderDelegate;
|
| -class AutocompleteProviderListener;
|
| -class AutocompleteResult;
|
| -class SearchProviderTest;
|
| -class TemplateURLService;
|
| -
|
| -namespace history {
|
| -struct KeywordSearchTermVisit;
|
| -}
|
| -
|
| -namespace net {
|
| -class URLFetcher;
|
| -}
|
| -
|
| -// Autocomplete provider for searches and suggestions from a search engine.
|
| -//
|
| -// After construction, the autocomplete controller repeatedly calls Start()
|
| -// with some user input, each time expecting to receive a small set of the best
|
| -// matches (either synchronously or asynchronously).
|
| -//
|
| -// Initially the provider creates a match that searches for the current input
|
| -// text. It also starts a task to query the Suggest servers. When that data
|
| -// comes back, the provider creates and returns matches for the best
|
| -// suggestions.
|
| -class SearchProvider : public BaseSearchProvider,
|
| - public net::URLFetcherDelegate {
|
| - public:
|
| - SearchProvider(AutocompleteProviderListener* listener,
|
| - TemplateURLService* template_url_service,
|
| - scoped_ptr<AutocompleteProviderDelegate> delegate);
|
| -
|
| - // Extracts the suggest response metadata which SearchProvider previously
|
| - // stored for |match|.
|
| - static std::string GetSuggestMetadata(const AutocompleteMatch& match);
|
| -
|
| - // Answers prefetch handling - register displayed answers. Takes the top
|
| - // match for Autocomplete and registers the contained answer data, if any.
|
| - void RegisterDisplayedAnswers(const AutocompleteResult& result);
|
| -
|
| - // AutocompleteProvider:
|
| - virtual void ResetSession() OVERRIDE;
|
| -
|
| - // This URL may be sent with suggest requests; see comments on CanSendURL().
|
| - void set_current_page_url(const GURL& current_page_url) {
|
| - current_page_url_ = current_page_url;
|
| - }
|
| -
|
| - protected:
|
| - virtual ~SearchProvider();
|
| -
|
| - private:
|
| - friend class SearchProviderTest;
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, CanSendURL);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInline);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineDomainClassify);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineSchemeSubstring);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, RemoveStaleResultsTest);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestRelevanceExperiment);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, TestDeleteMatch);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestQueryUsesToken);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SessionToken);
|
| - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, AnswersCache);
|
| - FRIEND_TEST_ALL_PREFIXES(AutocompleteProviderTest, GetDestinationURL);
|
| - FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, ClearPrefetchedResults);
|
| - FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, SetPrefetchQuery);
|
| -
|
| - // Manages the providers (TemplateURLs) used by SearchProvider. Two providers
|
| - // may be used:
|
| - // . The default provider. This corresponds to the user's default search
|
| - // engine. This is always used, except for the rare case of no default
|
| - // engine.
|
| - // . The keyword provider. This is used if the user has typed in a keyword.
|
| - class Providers {
|
| - public:
|
| - explicit Providers(TemplateURLService* template_url_service);
|
| -
|
| - // Returns true if the specified providers match the two providers cached
|
| - // by this class.
|
| - bool equal(const base::string16& default_provider,
|
| - const base::string16& keyword_provider) const {
|
| - return (default_provider == default_provider_) &&
|
| - (keyword_provider == keyword_provider_);
|
| - }
|
| -
|
| - // Resets the cached providers.
|
| - void set(const base::string16& default_provider,
|
| - const base::string16& keyword_provider) {
|
| - default_provider_ = default_provider;
|
| - keyword_provider_ = keyword_provider;
|
| - }
|
| -
|
| - TemplateURLService* template_url_service() { return template_url_service_; }
|
| - const base::string16& default_provider() const { return default_provider_; }
|
| - const base::string16& keyword_provider() const { return keyword_provider_; }
|
| -
|
| - // NOTE: These may return NULL even if the provider members are nonempty!
|
| - const TemplateURL* GetDefaultProviderURL() const;
|
| - const TemplateURL* GetKeywordProviderURL() const;
|
| -
|
| - // Returns true if there is a valid keyword provider.
|
| - bool has_keyword_provider() const { return !keyword_provider_.empty(); }
|
| -
|
| - private:
|
| - TemplateURLService* template_url_service_;
|
| -
|
| - // Cached across the life of a query so we behave consistently even if the
|
| - // user changes their default while the query is running.
|
| - base::string16 default_provider_;
|
| - base::string16 keyword_provider_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Providers);
|
| - };
|
| -
|
| - class CompareScoredResults;
|
| -
|
| - typedef std::vector<history::KeywordSearchTermVisit> HistoryResults;
|
| -
|
| - // Removes non-inlineable results until either the top result can inline
|
| - // autocomplete the current input or verbatim outscores the top result.
|
| - static void RemoveStaleResults(
|
| - const base::string16& input,
|
| - int verbatim_relevance,
|
| - SearchSuggestionParser::SuggestResults* suggest_results,
|
| - SearchSuggestionParser::NavigationResults* navigation_results);
|
| -
|
| - // Calculates the relevance score for the keyword verbatim result (if the
|
| - // input matches one of the profile's keyword).
|
| - static int CalculateRelevanceForKeywordVerbatim(
|
| - metrics::OmniboxInputType::Type type,
|
| - bool prefer_keyword);
|
| -
|
| - // AutocompleteProvider:
|
| - virtual void Start(const AutocompleteInput& input,
|
| - bool minimal_changes) OVERRIDE;
|
| - virtual void Stop(bool clear_cached_results) OVERRIDE;
|
| -
|
| - // BaseSearchProvider:
|
| - virtual const TemplateURL* GetTemplateURL(bool is_keyword) const OVERRIDE;
|
| - virtual const AutocompleteInput GetInput(bool is_keyword) const OVERRIDE;
|
| - virtual bool ShouldAppendExtraParams(
|
| - const SearchSuggestionParser::SuggestResult& result) const OVERRIDE;
|
| - virtual void RecordDeletionResult(bool success) OVERRIDE;
|
| -
|
| - // net::URLFetcherDelegate:
|
| - virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
|
| -
|
| - // Stops the suggest query.
|
| - // NOTE: This does not update |done_|. Callers must do so.
|
| - void StopSuggest();
|
| -
|
| - // Clears the current results.
|
| - void ClearAllResults();
|
| -
|
| - // Recalculates the match contents class of |results| to better display
|
| - // against the current input and user's language.
|
| - void UpdateMatchContentsClass(const base::string16& input_text,
|
| - SearchSuggestionParser::Results* results);
|
| -
|
| - // Called after ParseSuggestResults to rank the |results|.
|
| - void SortResults(bool is_keyword, SearchSuggestionParser::Results* results);
|
| -
|
| - // Records UMA statistics about a suggest server response.
|
| - void LogFetchComplete(bool success, bool is_keyword);
|
| -
|
| - // Updates |matches_| from the latest results; applies calculated relevances
|
| - // if suggested relevances cause undesirable behavior. Updates |done_|.
|
| - void UpdateMatches();
|
| -
|
| - // Called when timer_ expires.
|
| - void Run();
|
| -
|
| - // Runs the history query, if necessary. The history query is synchronous.
|
| - // This does not update |done_|.
|
| - void DoHistoryQuery(bool minimal_changes);
|
| -
|
| - // Determines whether an asynchronous subcomponent query should run for the
|
| - // current input. If so, starts it if necessary; otherwise stops it.
|
| - // NOTE: This function does not update |done_|. Callers must do so.
|
| - void StartOrStopSuggestQuery(bool minimal_changes);
|
| -
|
| - // Returns true when the current query can be sent to the Suggest service.
|
| - // This will be false e.g. when Suggest is disabled, the query contains
|
| - // potentially private data, etc.
|
| - bool IsQuerySuitableForSuggest() const;
|
| -
|
| - // Removes stale results for both default and keyword providers. See comments
|
| - // on RemoveStaleResults().
|
| - void RemoveAllStaleResults();
|
| -
|
| - // Apply calculated relevance scores to the current results.
|
| - void ApplyCalculatedRelevance();
|
| - void ApplyCalculatedSuggestRelevance(
|
| - SearchSuggestionParser::SuggestResults* list);
|
| - void ApplyCalculatedNavigationRelevance(
|
| - SearchSuggestionParser::NavigationResults* list);
|
| -
|
| - // Starts a new URLFetcher requesting suggest results from |template_url|;
|
| - // callers own the returned URLFetcher, which is NULL for invalid providers.
|
| - net::URLFetcher* CreateSuggestFetcher(int id,
|
| - const TemplateURL* template_url,
|
| - const AutocompleteInput& input);
|
| -
|
| - // Converts the parsed results to a set of AutocompleteMatches, |matches_|.
|
| - void ConvertResultsToAutocompleteMatches();
|
| -
|
| - // Returns an iterator to the first match in |matches_| which might
|
| - // be chosen as default.
|
| - ACMatches::const_iterator FindTopMatch() const;
|
| -
|
| - // Checks if suggested relevances violate an expected constraint.
|
| - // See UpdateMatches() for the use and explanation of this constraint
|
| - // and other constraints enforced without the use of helper functions.
|
| - bool IsTopMatchSearchWithURLInput() const;
|
| -
|
| - // Converts an appropriate number of navigation results in
|
| - // |navigation_results| to matches and adds them to |matches|.
|
| - void AddNavigationResultsToMatches(
|
| - const SearchSuggestionParser::NavigationResults& navigation_results,
|
| - ACMatches* matches);
|
| -
|
| - // Adds a match for each result in |results| to |map|. |is_keyword| indicates
|
| - // whether the results correspond to the keyword provider or default provider.
|
| - void AddHistoryResultsToMap(const HistoryResults& results,
|
| - bool is_keyword,
|
| - int did_not_accept_suggestion,
|
| - MatchMap* map);
|
| -
|
| - // Calculates relevance scores for all |results|.
|
| - SearchSuggestionParser::SuggestResults ScoreHistoryResults(
|
| - const HistoryResults& results,
|
| - bool base_prevent_inline_autocomplete,
|
| - bool input_multiple_words,
|
| - const base::string16& input_text,
|
| - bool is_keyword);
|
| -
|
| - // Adds matches for |results| to |map|.
|
| - void AddSuggestResultsToMap(
|
| - const SearchSuggestionParser::SuggestResults& results,
|
| - const std::string& metadata,
|
| - MatchMap* map);
|
| -
|
| - // Gets the relevance score for the verbatim result. This value may be
|
| - // provided by the suggest server or calculated locally; if
|
| - // |relevance_from_server| is non-NULL, it will be set to indicate which of
|
| - // those is true.
|
| - int GetVerbatimRelevance(bool* relevance_from_server) const;
|
| -
|
| - // Calculates the relevance score for the verbatim result from the
|
| - // default search engine. This version takes into account context:
|
| - // i.e., whether the user has entered a keyword-based search or not.
|
| - int CalculateRelevanceForVerbatim() const;
|
| -
|
| - // Calculates the relevance score for the verbatim result from the default
|
| - // search engine *ignoring* whether the input is a keyword-based search
|
| - // or not. This function should only be used to determine the minimum
|
| - // relevance score that the best result from this provider should have.
|
| - // For normal use, prefer the above function.
|
| - int CalculateRelevanceForVerbatimIgnoringKeywordModeState() const;
|
| -
|
| - // Gets the relevance score for the keyword verbatim result.
|
| - // |relevance_from_server| is handled as in GetVerbatimRelevance().
|
| - // TODO(mpearson): Refactor so this duplication isn't necessary or
|
| - // restructure so one static function takes all the parameters it needs
|
| - // (rather than looking at internal state).
|
| - int GetKeywordVerbatimRelevance(bool* relevance_from_server) const;
|
| -
|
| - // |time| is the time at which this query was last seen. |is_keyword|
|
| - // indicates whether the results correspond to the keyword provider or default
|
| - // provider. |use_aggressive_method| says whether this function can use a
|
| - // method that gives high scores (1200+) rather than one that gives lower
|
| - // scores. When using the aggressive method, scores may exceed 1300
|
| - // unless |prevent_search_history_inlining| is set.
|
| - int CalculateRelevanceForHistory(const base::Time& time,
|
| - bool is_keyword,
|
| - bool use_aggressive_method,
|
| - bool prevent_search_history_inlining) const;
|
| -
|
| - // Returns an AutocompleteMatch for a navigational suggestion.
|
| - AutocompleteMatch NavigationToMatch(
|
| - const SearchSuggestionParser::NavigationResult& navigation);
|
| -
|
| - // Updates the value of |done_| from the internal state.
|
| - void UpdateDone();
|
| -
|
| - // Obtains a session token, regenerating if necessary.
|
| - std::string GetSessionToken();
|
| -
|
| - // Answers prefetch handling - finds previously displayed answer matching the
|
| - // current |input| and sets |prefetch_data_|.
|
| - void DoAnswersQuery(const AutocompleteInput& input);
|
| -
|
| - // The amount of time to wait before sending a new suggest request after the
|
| - // previous one. Non-const because some unittests modify this value.
|
| - static int kMinimumTimeBetweenSuggestQueriesMs;
|
| -
|
| - AutocompleteProviderListener* listener_;
|
| -
|
| - // The number of suggest results that haven't yet arrived. If it's greater
|
| - // than 0, it indicates that one of the URLFetchers is still running.
|
| - int suggest_results_pending_;
|
| -
|
| - // Maintains the TemplateURLs used.
|
| - Providers providers_;
|
| -
|
| - // The user's input.
|
| - AutocompleteInput input_;
|
| -
|
| - // Input when searching against the keyword provider.
|
| - AutocompleteInput keyword_input_;
|
| -
|
| - // Searches in the user's history that begin with the input text.
|
| - HistoryResults keyword_history_results_;
|
| - HistoryResults default_history_results_;
|
| -
|
| - // A timer to start a query to the suggest server after the user has stopped
|
| - // typing for long enough.
|
| - base::OneShotTimer<SearchProvider> timer_;
|
| -
|
| - // The time at which we sent a query to the suggest server.
|
| - base::TimeTicks time_suggest_request_sent_;
|
| -
|
| - // Fetchers used to retrieve results for the keyword and default providers.
|
| - scoped_ptr<net::URLFetcher> keyword_fetcher_;
|
| - scoped_ptr<net::URLFetcher> default_fetcher_;
|
| -
|
| - // Results from the default and keyword search providers.
|
| - SearchSuggestionParser::Results default_results_;
|
| - SearchSuggestionParser::Results keyword_results_;
|
| -
|
| - GURL current_page_url_;
|
| -
|
| - // Session token management.
|
| - std::string current_token_;
|
| - base::TimeTicks token_expiration_time_;
|
| -
|
| - // Answers prefetch management.
|
| - AnswersCache answers_cache_; // Cache for last answers seen.
|
| - AnswersQueryData prefetch_data_; // Data to use for query prefetching.
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SearchProvider);
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_AUTOCOMPLETE_SEARCH_PROVIDER_H_
|
|
|