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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 } | 132 } |
133 | 133 |
134 done_ = false; | 134 done_ = false; |
135 // TODO(jered): Consider adding locally-sourced zero-suggestions here too. | 135 // TODO(jered): Consider adding locally-sourced zero-suggestions here too. |
136 // These may be useful on the NTP or more relevant to the user than server | 136 // These may be useful on the NTP or more relevant to the user than server |
137 // suggestions, if based on local browsing history. | 137 // suggestions, if based on local browsing history. |
138 MaybeUseCachedSuggestions(); | 138 MaybeUseCachedSuggestions(); |
139 Run(suggest_url); | 139 Run(suggest_url); |
140 } | 140 } |
141 | 141 |
| 142 void ZeroSuggestProvider::Stop(bool clear_cached_results) { |
| 143 if (fetcher_) |
| 144 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED); |
| 145 fetcher_.reset(); |
| 146 done_ = true; |
| 147 |
| 148 if (clear_cached_results) { |
| 149 // We do not call Clear() on |results_| to retain |verbatim_relevance| |
| 150 // value in the |results_| object. |verbatim_relevance| is used at the |
| 151 // beginning of the next StartZeroSuggest() call to determine the current |
| 152 // url match relevance. |
| 153 results_.suggest_results.clear(); |
| 154 results_.navigation_results.clear(); |
| 155 current_query_.clear(); |
| 156 } |
| 157 } |
| 158 |
142 void ZeroSuggestProvider::DeleteMatch(const AutocompleteMatch& match) { | 159 void ZeroSuggestProvider::DeleteMatch(const AutocompleteMatch& match) { |
143 if (OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) { | 160 if (OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) { |
144 // Remove the deleted match from the cache, so it is not shown to the user | 161 // Remove the deleted match from the cache, so it is not shown to the user |
145 // again. Since we cannot remove just one result, blow away the cache. | 162 // again. Since we cannot remove just one result, blow away the cache. |
146 profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, | 163 profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, |
147 std::string()); | 164 std::string()); |
148 } | 165 } |
149 BaseSearchProvider::DeleteMatch(match); | 166 BaseSearchProvider::DeleteMatch(match); |
150 } | 167 } |
151 | 168 |
| 169 void ZeroSuggestProvider::AddProviderInfo(ProvidersInfo* provider_info) const { |
| 170 BaseSearchProvider::AddProviderInfo(provider_info); |
| 171 if (!results_.suggest_results.empty() || !results_.navigation_results.empty()) |
| 172 provider_info->back().set_times_returned_results_in_session(1); |
| 173 } |
| 174 |
152 void ZeroSuggestProvider::ResetSession() { | 175 void ZeroSuggestProvider::ResetSession() { |
153 // The user has started editing in the omnibox, so leave | 176 // The user has started editing in the omnibox, so leave |
154 // |field_trial_triggered_in_session_| unchanged and set | 177 // |field_trial_triggered_in_session_| unchanged and set |
155 // |field_trial_triggered_| to false since zero suggest is inactive now. | 178 // |field_trial_triggered_| to false since zero suggest is inactive now. |
156 field_trial_triggered_ = false; | 179 field_trial_triggered_ = false; |
157 } | 180 } |
158 | 181 |
159 void ZeroSuggestProvider::ModifyProviderInfo( | |
160 metrics::OmniboxEventProto_ProviderInfo* provider_info) const { | |
161 if (!results_.suggest_results.empty() || !results_.navigation_results.empty()) | |
162 provider_info->set_times_returned_results_in_session(1); | |
163 } | |
164 | |
165 ZeroSuggestProvider::ZeroSuggestProvider( | 182 ZeroSuggestProvider::ZeroSuggestProvider( |
166 AutocompleteProviderListener* listener, | 183 AutocompleteProviderListener* listener, |
167 TemplateURLService* template_url_service, | 184 TemplateURLService* template_url_service, |
168 Profile* profile) | 185 Profile* profile) |
169 : BaseSearchProvider(template_url_service, profile, | 186 : BaseSearchProvider(template_url_service, profile, |
170 AutocompleteProvider::TYPE_ZERO_SUGGEST), | 187 AutocompleteProvider::TYPE_ZERO_SUGGEST), |
171 listener_(listener), | 188 listener_(listener), |
172 results_from_cache_(false), | 189 results_from_cache_(false), |
173 weak_ptr_factory_(this) { | 190 weak_ptr_factory_(this) { |
174 } | 191 } |
(...skipping 13 matching lines...) Expand all Loading... |
188 GURL(current_query_), current_page_classification_, true, false, false, | 205 GURL(current_query_), current_page_classification_, true, false, false, |
189 true, ChromeAutocompleteSchemeClassifier(profile_)); | 206 true, ChromeAutocompleteSchemeClassifier(profile_)); |
190 } | 207 } |
191 | 208 |
192 bool ZeroSuggestProvider::ShouldAppendExtraParams( | 209 bool ZeroSuggestProvider::ShouldAppendExtraParams( |
193 const SearchSuggestionParser::SuggestResult& result) const { | 210 const SearchSuggestionParser::SuggestResult& result) const { |
194 // We always use the default provider for search, so append the params. | 211 // We always use the default provider for search, so append the params. |
195 return true; | 212 return true; |
196 } | 213 } |
197 | 214 |
198 void ZeroSuggestProvider::StopSuggest() { | |
199 if (fetcher_) | |
200 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED); | |
201 fetcher_.reset(); | |
202 } | |
203 | |
204 void ZeroSuggestProvider::ClearAllResults() { | |
205 // We do not call Clear() on |results_| to retain |verbatim_relevance| | |
206 // value in the |results_| object. |verbatim_relevance| is used at the | |
207 // beginning of the next StartZeroSuggest() call to determine the current url | |
208 // match relevance. | |
209 results_.suggest_results.clear(); | |
210 results_.navigation_results.clear(); | |
211 current_query_.clear(); | |
212 } | |
213 | |
214 void ZeroSuggestProvider::RecordDeletionResult(bool success) { | 215 void ZeroSuggestProvider::RecordDeletionResult(bool success) { |
215 if (success) { | 216 if (success) { |
216 base::RecordAction( | 217 base::RecordAction( |
217 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Success")); | 218 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Success")); |
218 } else { | 219 } else { |
219 base::RecordAction( | 220 base::RecordAction( |
220 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Failure")); | 221 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Failure")); |
221 } | 222 } |
222 } | 223 } |
223 | 224 |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 if (!json_data.empty()) { | 456 if (!json_data.empty()) { |
456 scoped_ptr<base::Value> data( | 457 scoped_ptr<base::Value> data( |
457 SearchSuggestionParser::DeserializeJsonData(json_data)); | 458 SearchSuggestionParser::DeserializeJsonData(json_data)); |
458 if (data && ParseSuggestResults( | 459 if (data && ParseSuggestResults( |
459 *data, kDefaultZeroSuggestRelevance, false, &results_)) { | 460 *data, kDefaultZeroSuggestRelevance, false, &results_)) { |
460 ConvertResultsToAutocompleteMatches(); | 461 ConvertResultsToAutocompleteMatches(); |
461 results_from_cache_ = !matches_.empty(); | 462 results_from_cache_ = !matches_.empty(); |
462 } | 463 } |
463 } | 464 } |
464 } | 465 } |
OLD | NEW |