| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/autocomplete/zero_suggest_provider.h" | 5 #include "chrome/browser/autocomplete/zero_suggest_provider.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/i18n/case_conversion.h" | 8 #include "base/i18n/case_conversion.h" |
| 9 #include "base/json/json_string_value_serializer.h" | 9 #include "base/json/json_string_value_serializer.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // The maximum relevance of the top match from this provider. | 69 // The maximum relevance of the top match from this provider. |
| 70 const int kDefaultVerbatimZeroSuggestRelevance = 1300; | 70 const int kDefaultVerbatimZeroSuggestRelevance = 1300; |
| 71 | 71 |
| 72 // Relevance value to use if it was not set explicitly by the server. | 72 // Relevance value to use if it was not set explicitly by the server. |
| 73 const int kDefaultZeroSuggestRelevance = 100; | 73 const int kDefaultZeroSuggestRelevance = 100; |
| 74 | 74 |
| 75 } // namespace | 75 } // namespace |
| 76 | 76 |
| 77 // static | 77 // static |
| 78 ZeroSuggestProvider* ZeroSuggestProvider::Create( | 78 ZeroSuggestProvider* ZeroSuggestProvider::Create( |
| 79 AutocompleteProviderClient* client, |
| 79 AutocompleteProviderListener* listener, | 80 AutocompleteProviderListener* listener, |
| 80 TemplateURLService* template_url_service, | 81 TemplateURLService* template_url_service, |
| 81 Profile* profile) { | 82 Profile* profile) { |
| 82 return new ZeroSuggestProvider(listener, template_url_service, profile); | 83 return new ZeroSuggestProvider(client, listener, template_url_service, |
| 84 profile); |
| 83 } | 85 } |
| 84 | 86 |
| 85 // static | 87 // static |
| 86 void ZeroSuggestProvider::RegisterProfilePrefs( | 88 void ZeroSuggestProvider::RegisterProfilePrefs( |
| 87 user_prefs::PrefRegistrySyncable* registry) { | 89 user_prefs::PrefRegistrySyncable* registry) { |
| 88 registry->RegisterStringPref(prefs::kZeroSuggestCachedResults, std::string()); | 90 registry->RegisterStringPref(prefs::kZeroSuggestCachedResults, std::string()); |
| 89 } | 91 } |
| 90 | 92 |
| 91 void ZeroSuggestProvider::Start(const AutocompleteInput& input, | 93 void ZeroSuggestProvider::Start(const AutocompleteInput& input, |
| 92 bool minimal_changes, | 94 bool minimal_changes, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 114 TemplateURLRef::SearchTermsArgs search_term_args(prefix); | 116 TemplateURLRef::SearchTermsArgs search_term_args(prefix); |
| 115 GURL suggest_url(default_provider->suggestions_url_ref().ReplaceSearchTerms( | 117 GURL suggest_url(default_provider->suggestions_url_ref().ReplaceSearchTerms( |
| 116 search_term_args, template_url_service_->search_terms_data())); | 118 search_term_args, template_url_service_->search_terms_data())); |
| 117 if (!suggest_url.is_valid()) | 119 if (!suggest_url.is_valid()) |
| 118 return; | 120 return; |
| 119 | 121 |
| 120 // No need to send the current page URL in personalized suggest or | 122 // No need to send the current page URL in personalized suggest or |
| 121 // most visited field trials. | 123 // most visited field trials. |
| 122 if (CanSendURL(input.current_url(), suggest_url, default_provider, | 124 if (CanSendURL(input.current_url(), suggest_url, default_provider, |
| 123 current_page_classification_, | 125 current_page_classification_, |
| 124 template_url_service_->search_terms_data(), client_.get()) && | 126 template_url_service_->search_terms_data(), client_) && |
| 125 !OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() && | 127 !OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() && |
| 126 !OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) { | 128 !OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) { |
| 127 // Update suggest_url to include the current_page_url. | 129 // Update suggest_url to include the current_page_url. |
| 128 search_term_args.current_page_url = current_query_; | 130 search_term_args.current_page_url = current_query_; |
| 129 suggest_url = GURL(default_provider->suggestions_url_ref(). | 131 suggest_url = GURL(default_provider->suggestions_url_ref(). |
| 130 ReplaceSearchTerms( | 132 ReplaceSearchTerms( |
| 131 search_term_args, | 133 search_term_args, |
| 132 template_url_service_->search_terms_data())); | 134 template_url_service_->search_terms_data())); |
| 133 } else if (!ShouldShowNonContextualZeroSuggest(suggest_url, | 135 } else if (!ShouldShowNonContextualZeroSuggest(suggest_url, |
| 134 input.current_url())) { | 136 input.current_url())) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 184 } |
| 183 | 185 |
| 184 void ZeroSuggestProvider::ResetSession() { | 186 void ZeroSuggestProvider::ResetSession() { |
| 185 // The user has started editing in the omnibox, so leave | 187 // The user has started editing in the omnibox, so leave |
| 186 // |field_trial_triggered_in_session_| unchanged and set | 188 // |field_trial_triggered_in_session_| unchanged and set |
| 187 // |field_trial_triggered_| to false since zero suggest is inactive now. | 189 // |field_trial_triggered_| to false since zero suggest is inactive now. |
| 188 field_trial_triggered_ = false; | 190 field_trial_triggered_ = false; |
| 189 } | 191 } |
| 190 | 192 |
| 191 ZeroSuggestProvider::ZeroSuggestProvider( | 193 ZeroSuggestProvider::ZeroSuggestProvider( |
| 192 AutocompleteProviderListener* listener, | 194 AutocompleteProviderClient* client, |
| 193 TemplateURLService* template_url_service, | 195 |
| 194 Profile* profile) | 196 AutocompleteProviderListener* listener, |
| 195 : BaseSearchProvider(template_url_service, | 197 TemplateURLService* template_url_service, |
| 196 scoped_ptr<AutocompleteProviderClient>( | 198 Profile* profile) |
| 197 new ChromeAutocompleteProviderClient(profile)), | 199 : BaseSearchProvider(AutocompleteProvider::TYPE_ZERO_SUGGEST, |
| 198 AutocompleteProvider::TYPE_ZERO_SUGGEST), | 200 client, |
| 201 template_url_service), |
| 199 listener_(listener), | 202 listener_(listener), |
| 200 profile_(profile), | 203 profile_(profile), |
| 201 results_from_cache_(false), | 204 results_from_cache_(false), |
| 202 waiting_for_most_visited_urls_request_(false), | 205 waiting_for_most_visited_urls_request_(false), |
| 203 weak_ptr_factory_(this) { | 206 weak_ptr_factory_(this) { |
| 204 } | 207 } |
| 205 | 208 |
| 206 ZeroSuggestProvider::~ZeroSuggestProvider() { | 209 ZeroSuggestProvider::~ZeroSuggestProvider() { |
| 207 } | 210 } |
| 208 | 211 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 return results_.verbatim_relevance >= 0 ? | 440 return results_.verbatim_relevance >= 0 ? |
| 438 results_.verbatim_relevance : kDefaultVerbatimZeroSuggestRelevance; | 441 results_.verbatim_relevance : kDefaultVerbatimZeroSuggestRelevance; |
| 439 } | 442 } |
| 440 | 443 |
| 441 bool ZeroSuggestProvider::ShouldShowNonContextualZeroSuggest( | 444 bool ZeroSuggestProvider::ShouldShowNonContextualZeroSuggest( |
| 442 const GURL& suggest_url, | 445 const GURL& suggest_url, |
| 443 const GURL& current_page_url) const { | 446 const GURL& current_page_url) const { |
| 444 if (!ZeroSuggestEnabled(suggest_url, | 447 if (!ZeroSuggestEnabled(suggest_url, |
| 445 template_url_service_->GetDefaultSearchProvider(), | 448 template_url_service_->GetDefaultSearchProvider(), |
| 446 current_page_classification_, | 449 current_page_classification_, |
| 447 template_url_service_->search_terms_data(), | 450 template_url_service_->search_terms_data(), client_)) |
| 448 client_.get())) | |
| 449 return false; | 451 return false; |
| 450 | 452 |
| 451 // If we cannot send URLs, then only the MostVisited and Personalized | 453 // If we cannot send URLs, then only the MostVisited and Personalized |
| 452 // variations can be shown. | 454 // variations can be shown. |
| 453 if (!OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial() && | 455 if (!OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial() && |
| 454 !OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) | 456 !OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) |
| 455 return false; | 457 return false; |
| 456 | 458 |
| 457 // Only show zero suggest for HTTP[S] pages. | 459 // Only show zero suggest for HTTP[S] pages. |
| 458 // TODO(mariakhomenko): We may be able to expand this set to include pages | 460 // TODO(mariakhomenko): We may be able to expand this set to include pages |
| (...skipping 21 matching lines...) Expand all Loading... |
| 480 if (!json_data.empty()) { | 482 if (!json_data.empty()) { |
| 481 scoped_ptr<base::Value> data( | 483 scoped_ptr<base::Value> data( |
| 482 SearchSuggestionParser::DeserializeJsonData(json_data)); | 484 SearchSuggestionParser::DeserializeJsonData(json_data)); |
| 483 if (data && ParseSuggestResults( | 485 if (data && ParseSuggestResults( |
| 484 *data, kDefaultZeroSuggestRelevance, false, &results_)) { | 486 *data, kDefaultZeroSuggestRelevance, false, &results_)) { |
| 485 ConvertResultsToAutocompleteMatches(); | 487 ConvertResultsToAutocompleteMatches(); |
| 486 results_from_cache_ = !matches_.empty(); | 488 results_from_cache_ = !matches_.empty(); |
| 487 } | 489 } |
| 488 } | 490 } |
| 489 } | 491 } |
| OLD | NEW |