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

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

Issue 131003011: Part 1 of search provider refactoring. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: change wrapping back Created 6 years, 11 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
Index: chrome/browser/autocomplete/search_provider.cc
diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc
index e93cb02c5b79772f1ef5b90bc03d3ed07f09e5ec..8aa7165646c0cbd482504e2738d61cf8a1bf3f12 100644
--- a/chrome/browser/autocomplete/search_provider.cc
+++ b/chrome/browser/autocomplete/search_provider.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/autocomplete/autocomplete_match.h"
msw 2014/02/03 22:53:14 nit: remove redundant includes from search_provide
Maria 2014/02/04 03:16:39 Done.
#include "chrome/browser/autocomplete/autocomplete_provider_listener.h"
#include "chrome/browser/autocomplete/autocomplete_result.h"
+#include "chrome/browser/autocomplete/base_search_provider.h"
msw 2014/02/03 22:53:14 nit: remove this; it's included in search_provider
Maria 2014/02/04 03:16:39 Done.
#include "chrome/browser/autocomplete/keyword_provider.h"
#include "chrome/browser/autocomplete/url_prefix.h"
#include "chrome/browser/google/google_util.h"
@@ -175,8 +176,7 @@ void SuggestionDeletionHandler::OnURLFetchComplete(
// SearchProvider::Providers --------------------------------------------------
SearchProvider::Providers::Providers(TemplateURLService* template_url_service)
- : template_url_service_(template_url_service) {
-}
+ : template_url_service_(template_url_service) {}
const TemplateURL* SearchProvider::Providers::GetDefaultProviderURL() const {
return default_provider_.empty() ? NULL :
@@ -189,178 +189,6 @@ const TemplateURL* SearchProvider::Providers::GetKeywordProviderURL() const {
}
-// SearchProvider::Result -----------------------------------------------------
-
-SearchProvider::Result::Result(bool from_keyword_provider,
- int relevance,
- bool relevance_from_server)
- : from_keyword_provider_(from_keyword_provider),
- relevance_(relevance),
- relevance_from_server_(relevance_from_server) {
-}
-
-SearchProvider::Result::~Result() {
-}
-
-
-// SearchProvider::SuggestResult ----------------------------------------------
-
-SearchProvider::SuggestResult::SuggestResult(
- const base::string16& suggestion,
- AutocompleteMatchType::Type type,
- const base::string16& match_contents,
- const base::string16& annotation,
- const std::string& suggest_query_params,
- const std::string& deletion_url,
- bool from_keyword_provider,
- int relevance,
- bool relevance_from_server,
- bool should_prefetch,
- const base::string16& input_text)
- : Result(from_keyword_provider, relevance, relevance_from_server),
- suggestion_(suggestion),
- type_(type),
- annotation_(annotation),
- suggest_query_params_(suggest_query_params),
- deletion_url_(deletion_url),
- should_prefetch_(should_prefetch) {
- match_contents_ = match_contents;
- DCHECK(!match_contents_.empty());
- ClassifyMatchContents(true, input_text);
-}
-
-SearchProvider::SuggestResult::~SuggestResult() {
-}
-
-void SearchProvider::SuggestResult::ClassifyMatchContents(
- const bool allow_bolding_all,
- const base::string16& input_text) {
- size_t input_position = match_contents_.find(input_text);
- if (!allow_bolding_all && (input_position == base::string16::npos)) {
- // Bail if the code below to update the bolding would bold the whole
- // string. Note that the string may already be entirely bolded; if
- // so, leave it as is.
- return;
- }
- match_contents_class_.clear();
- // We do intra-string highlighting for suggestions - the suggested segment
- // will be highlighted, e.g. for input_text = "you" the suggestion may be
- // "youtube", so we'll bold the "tube" section: you*tube*.
- if (input_text != match_contents_) {
- if (input_position == base::string16::npos) {
- // The input text is not a substring of the query string, e.g. input
- // text is "slasdot" and the query string is "slashdot", so we bold the
- // whole thing.
- match_contents_class_.push_back(ACMatchClassification(
- 0, ACMatchClassification::MATCH));
- } else {
- // We don't iterate over the string here annotating all matches because
- // it looks odd to have every occurrence of a substring that may be as
- // short as a single character highlighted in a query suggestion result,
- // e.g. for input text "s" and query string "southwest airlines", it
- // looks odd if both the first and last s are highlighted.
- if (input_position != 0) {
- match_contents_class_.push_back(ACMatchClassification(
- 0, ACMatchClassification::MATCH));
- }
- match_contents_class_.push_back(
- ACMatchClassification(input_position, ACMatchClassification::NONE));
- size_t next_fragment_position = input_position + input_text.length();
- if (next_fragment_position < match_contents_.length()) {
- match_contents_class_.push_back(ACMatchClassification(
- next_fragment_position, ACMatchClassification::MATCH));
- }
- }
- } else {
- // Otherwise, match_contents_ is a verbatim (what-you-typed) match, either
- // for the default provider or a keyword search provider.
- match_contents_class_.push_back(ACMatchClassification(
- 0, ACMatchClassification::NONE));
- }
-}
-
-bool SearchProvider::SuggestResult::IsInlineable(
- const base::string16& input) const {
- return StartsWith(suggestion_, input, false);
-}
-
-int SearchProvider::SuggestResult::CalculateRelevance(
- const AutocompleteInput& input,
- bool keyword_provider_requested) const {
- if (!from_keyword_provider_ && keyword_provider_requested)
- return 100;
- return ((input.type() == AutocompleteInput::URL) ? 300 : 600);
-}
-
-
-// SearchProvider::NavigationResult -------------------------------------------
-
-SearchProvider::NavigationResult::NavigationResult(
- const AutocompleteProvider& provider,
- const GURL& url,
- const base::string16& description,
- bool from_keyword_provider,
- int relevance,
- bool relevance_from_server,
- const base::string16& input_text,
- const std::string& languages)
- : Result(from_keyword_provider, relevance, relevance_from_server),
- url_(url),
- formatted_url_(AutocompleteInput::FormattedStringWithEquivalentMeaning(
- url, provider.StringForURLDisplay(url, true, false))),
- description_(description) {
- DCHECK(url_.is_valid());
- CalculateAndClassifyMatchContents(true, input_text, languages);
-}
-
-SearchProvider::NavigationResult::~NavigationResult() {
-}
-
-void SearchProvider::NavigationResult::CalculateAndClassifyMatchContents(
- const bool allow_bolding_nothing,
- const base::string16& input_text,
- const std::string& languages) {
- // First look for the user's input inside the formatted url as it would be
- // without trimming the scheme, so we can find matches at the beginning of the
- // scheme.
- const URLPrefix* prefix =
- URLPrefix::BestURLPrefix(formatted_url_, input_text);
- size_t match_start = (prefix == NULL) ?
- formatted_url_.find(input_text) : prefix->prefix.length();
- bool trim_http = !AutocompleteInput::HasHTTPScheme(input_text) &&
- (!prefix || (match_start != 0));
- const net::FormatUrlTypes format_types =
- net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP);
-
- base::string16 match_contents = net::FormatUrl(url_, languages, format_types,
- net::UnescapeRule::SPACES, NULL, NULL, &match_start);
- // If the first match in the untrimmed string was inside a scheme that we
- // trimmed, look for a subsequent match.
- if (match_start == base::string16::npos)
- match_start = match_contents.find(input_text);
- // Update |match_contents_| and |match_contents_class_| if it's allowed.
- if (allow_bolding_nothing || (match_start != base::string16::npos)) {
- match_contents_ = match_contents;
- // Safe if |match_start| is npos; also safe if the input is longer than the
- // remaining contents after |match_start|.
- AutocompleteMatch::ClassifyLocationInString(match_start,
- input_text.length(), match_contents_.length(),
- ACMatchClassification::URL, &match_contents_class_);
- }
-}
-
-bool SearchProvider::NavigationResult::IsInlineable(
- const base::string16& input) const {
- return URLPrefix::BestURLPrefix(formatted_url_, input) != NULL;
-}
-
-int SearchProvider::NavigationResult::CalculateRelevance(
- const AutocompleteInput& input,
- bool keyword_provider_requested) const {
- return (from_keyword_provider_ || !keyword_provider_requested) ? 800 : 150;
-}
-
-
// SearchProvider::CompareScoredResults ---------------------------------------
class SearchProvider::CompareScoredResults {
@@ -372,43 +200,6 @@ class SearchProvider::CompareScoredResults {
};
-// SearchProvider::Results ----------------------------------------------------
-
-SearchProvider::Results::Results() : verbatim_relevance(-1) {
-}
-
-SearchProvider::Results::~Results() {
-}
-
-void SearchProvider::Results::Clear() {
- suggest_results.clear();
- navigation_results.clear();
- verbatim_relevance = -1;
- metadata.clear();
-}
-
-bool SearchProvider::Results::HasServerProvidedScores() const {
- if (verbatim_relevance >= 0)
- return true;
-
- // Right now either all results of one type will be server-scored or they will
- // all be locally scored, but in case we change this later, we'll just check
- // them all.
- for (SuggestResults::const_iterator i(suggest_results.begin());
- i != suggest_results.end(); ++i) {
- if (i->relevance_from_server())
- return true;
- }
- for (NavigationResults::const_iterator i(navigation_results.begin());
- i != navigation_results.end(); ++i) {
- if (i->relevance_from_server())
- return true;
- }
-
- return false;
-}
-
-
// SearchProvider -------------------------------------------------------------
// static
@@ -425,8 +216,7 @@ const char SearchProvider::kFalse[] = "false";
SearchProvider::SearchProvider(AutocompleteProviderListener* listener,
Profile* profile)
- : AutocompleteProvider(listener, profile,
- AutocompleteProvider::TYPE_SEARCH),
+ : BaseSearchProvider(listener, profile, AutocompleteProvider::TYPE_SEARCH),
providers_(TemplateURLServiceFactory::GetForProfile(profile)),
suggest_results_pending_(0),
field_trial_triggered_(false),

Powered by Google App Engine
This is Rietveld 408576698