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 |