Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Unified Diff: chrome/browser/autocomplete/search_provider.h

Issue 489353004: Componentize SearchProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autocomplete/base_search_provider.cc ('k') | chrome/browser/autocomplete/search_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chrome/browser/autocomplete/base_search_provider.cc ('k') | chrome/browser/autocomplete/search_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698