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

Side by Side Diff: chrome/browser/autocomplete/zero_suggest_provider.cc

Issue 436833002: Stop sharing BaseSearchProvider::OnURLFetchComplete between 2 providers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 void ZeroSuggestProvider::ModifyProviderInfo( 159 void ZeroSuggestProvider::ModifyProviderInfo(
160 metrics::OmniboxEventProto_ProviderInfo* provider_info) const { 160 metrics::OmniboxEventProto_ProviderInfo* provider_info) const {
161 if (!results_.suggest_results.empty() || !results_.navigation_results.empty()) 161 if (!results_.suggest_results.empty() || !results_.navigation_results.empty())
162 provider_info->set_times_returned_results_in_session(1); 162 provider_info->set_times_returned_results_in_session(1);
163 } 163 }
164 164
165 ZeroSuggestProvider::ZeroSuggestProvider( 165 ZeroSuggestProvider::ZeroSuggestProvider(
166 AutocompleteProviderListener* listener, 166 AutocompleteProviderListener* listener,
167 TemplateURLService* template_url_service, 167 TemplateURLService* template_url_service,
168 Profile* profile) 168 Profile* profile)
169 : BaseSearchProvider(listener, template_url_service, profile, 169 : BaseSearchProvider(template_url_service, profile,
170 AutocompleteProvider::TYPE_ZERO_SUGGEST), 170 AutocompleteProvider::TYPE_ZERO_SUGGEST),
171 listener_(listener),
171 results_from_cache_(false), 172 results_from_cache_(false),
172 weak_ptr_factory_(this) { 173 weak_ptr_factory_(this) {
173 } 174 }
174 175
175 ZeroSuggestProvider::~ZeroSuggestProvider() { 176 ZeroSuggestProvider::~ZeroSuggestProvider() {
176 } 177 }
177 178
178 bool ZeroSuggestProvider::StoreSuggestionResponse( 179 bool ZeroSuggestProvider::StoreSuggestionResponse(
179 const std::string& json_data, 180 const std::string& json_data,
180 const base::Value& parsed_data) { 181 const base::Value& parsed_data) {
(...skipping 24 matching lines...) Expand all
205 return template_url_service_->GetDefaultSearchProvider(); 206 return template_url_service_->GetDefaultSearchProvider();
206 } 207 }
207 208
208 const AutocompleteInput ZeroSuggestProvider::GetInput(bool is_keyword) const { 209 const AutocompleteInput ZeroSuggestProvider::GetInput(bool is_keyword) const {
209 return AutocompleteInput( 210 return AutocompleteInput(
210 base::string16(), base::string16::npos, base::string16(), 211 base::string16(), base::string16::npos, base::string16(),
211 GURL(current_query_), current_page_classification_, true, false, false, 212 GURL(current_query_), current_page_classification_, true, false, false,
212 true, ChromeAutocompleteSchemeClassifier(profile_)); 213 true, ChromeAutocompleteSchemeClassifier(profile_));
213 } 214 }
214 215
215 SearchSuggestionParser::Results* ZeroSuggestProvider::GetResultsToFill(
216 bool is_keyword) {
217 DCHECK(!is_keyword);
218 return &results_;
219 }
220
221 bool ZeroSuggestProvider::ShouldAppendExtraParams( 216 bool ZeroSuggestProvider::ShouldAppendExtraParams(
222 const SearchSuggestionParser::SuggestResult& result) const { 217 const SearchSuggestionParser::SuggestResult& result) const {
223 // We always use the default provider for search, so append the params. 218 // We always use the default provider for search, so append the params.
224 return true; 219 return true;
225 } 220 }
226 221
227 void ZeroSuggestProvider::StopSuggest() { 222 void ZeroSuggestProvider::StopSuggest() {
228 if (suggest_results_pending_ > 0) 223 if (fetcher_)
229 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED); 224 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED);
230 suggest_results_pending_ = 0;
231 fetcher_.reset(); 225 fetcher_.reset();
232 } 226 }
233 227
234 void ZeroSuggestProvider::ClearAllResults() { 228 void ZeroSuggestProvider::ClearAllResults() {
235 // We do not call Clear() on |results_| to retain |verbatim_relevance| 229 // We do not call Clear() on |results_| to retain |verbatim_relevance|
236 // value in the |results_| object. |verbatim_relevance| is used at the 230 // value in the |results_| object. |verbatim_relevance| is used at the
237 // beginning of the next StartZeroSuggest() call to determine the current url 231 // beginning of the next StartZeroSuggest() call to determine the current url
238 // match relevance. 232 // match relevance.
239 results_.suggest_results.clear(); 233 results_.suggest_results.clear();
240 results_.navigation_results.clear(); 234 results_.navigation_results.clear();
241 current_query_.clear(); 235 current_query_.clear();
242 } 236 }
243 237
244 int ZeroSuggestProvider::GetDefaultResultRelevance() const {
245 return kDefaultZeroSuggestRelevance;
246 }
247
248 void ZeroSuggestProvider::RecordDeletionResult(bool success) { 238 void ZeroSuggestProvider::RecordDeletionResult(bool success) {
249 if (success) { 239 if (success) {
250 content::RecordAction( 240 content::RecordAction(
251 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Success")); 241 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Success"));
252 } else { 242 } else {
253 content::RecordAction( 243 content::RecordAction(
254 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Failure")); 244 base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Failure"));
255 } 245 }
256 } 246 }
257 247
258 void ZeroSuggestProvider::LogFetchComplete(bool success, bool is_keyword) {
259 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REPLY_RECEIVED);
260 }
261
262 bool ZeroSuggestProvider::IsKeywordFetcher(
263 const net::URLFetcher* fetcher) const {
264 // ZeroSuggestProvider does not have a keyword provider.
265 DCHECK_EQ(fetcher, fetcher_.get());
266 return false;
267 }
268
269 void ZeroSuggestProvider::UpdateMatches() {
270 done_ = true;
271 ConvertResultsToAutocompleteMatches();
272 }
273
274 void ZeroSuggestProvider::AddSuggestResultsToMap( 248 void ZeroSuggestProvider::AddSuggestResultsToMap(
275 const SearchSuggestionParser::SuggestResults& results, 249 const SearchSuggestionParser::SuggestResults& results,
276 MatchMap* map) { 250 MatchMap* map) {
277 for (size_t i = 0; i < results.size(); ++i) 251 for (size_t i = 0; i < results.size(); ++i)
278 AddMatchToMap(results[i], std::string(), i, false, map); 252 AddMatchToMap(results[i], std::string(), i, false, map);
279 } 253 }
280 254
281 AutocompleteMatch ZeroSuggestProvider::NavigationToMatch( 255 AutocompleteMatch ZeroSuggestProvider::NavigationToMatch(
282 const SearchSuggestionParser::NavigationResult& navigation) { 256 const SearchSuggestionParser::NavigationResult& navigation) {
283 AutocompleteMatch match(this, navigation.relevance(), false, 257 AutocompleteMatch match(this, navigation.relevance(), false,
(...skipping 15 matching lines...) Expand all
299 273
300 match.description = 274 match.description =
301 AutocompleteMatch::SanitizeString(navigation.description()); 275 AutocompleteMatch::SanitizeString(navigation.description());
302 AutocompleteMatch::ClassifyLocationInString(base::string16::npos, 0, 276 AutocompleteMatch::ClassifyLocationInString(base::string16::npos, 0,
303 match.description.length(), ACMatchClassification::NONE, 277 match.description.length(), ACMatchClassification::NONE,
304 &match.description_class); 278 &match.description_class);
305 return match; 279 return match;
306 } 280 }
307 281
308 void ZeroSuggestProvider::Run(const GURL& suggest_url) { 282 void ZeroSuggestProvider::Run(const GURL& suggest_url) {
309 suggest_results_pending_ = 0;
310 const int kFetcherID = 1; 283 const int kFetcherID = 1;
311 fetcher_.reset( 284 fetcher_.reset(
312 net::URLFetcher::Create(kFetcherID, 285 net::URLFetcher::Create(kFetcherID,
313 suggest_url, 286 suggest_url,
314 net::URLFetcher::GET, this)); 287 net::URLFetcher::GET, this));
315 fetcher_->SetRequestContext(profile_->GetRequestContext()); 288 fetcher_->SetRequestContext(profile_->GetRequestContext());
316 fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); 289 fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
317 // Add Chrome experiment state to the request headers. 290 // Add Chrome experiment state to the request headers.
318 net::HttpRequestHeaders headers; 291 net::HttpRequestHeaders headers;
319 variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders( 292 variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders(
320 fetcher_->GetOriginalURL(), profile_->IsOffTheRecord(), false, &headers); 293 fetcher_->GetOriginalURL(), profile_->IsOffTheRecord(), false, &headers);
321 fetcher_->SetExtraRequestHeaders(headers.ToString()); 294 fetcher_->SetExtraRequestHeaders(headers.ToString());
322 fetcher_->Start(); 295 fetcher_->Start();
323 296
324 if (OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) { 297 if (OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) {
325 most_visited_urls_.clear(); 298 most_visited_urls_.clear();
326 history::TopSites* ts = profile_->GetTopSites(); 299 history::TopSites* ts = profile_->GetTopSites();
327 if (ts) { 300 if (ts) {
328 ts->GetMostVisitedURLs( 301 ts->GetMostVisitedURLs(
329 base::Bind(&ZeroSuggestProvider::OnMostVisitedUrlsAvailable, 302 base::Bind(&ZeroSuggestProvider::OnMostVisitedUrlsAvailable,
330 weak_ptr_factory_.GetWeakPtr()), false); 303 weak_ptr_factory_.GetWeakPtr()), false);
331 } 304 }
332 } 305 }
333 suggest_results_pending_ = 1;
334 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_SENT); 306 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_SENT);
335 } 307 }
336 308
309 void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) {
310 DCHECK(!done_);
311 DCHECK_EQ(fetcher_.get(), source);
312
313 LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REPLY_RECEIVED);
314
315 bool results_updated = false;
316 if (source->GetStatus().is_success() && source->GetResponseCode() == 200) {
317 std::string json_data = SearchSuggestionParser::ExtractJsonData(source);
Peter Kasting 2014/08/08 17:33:24 Nit: Would it make sense to have just these condit
hashimoto 2014/08/11 05:15:04 I guess it doesn't benefit us much because ZeroSug
318 scoped_ptr<base::Value> data(
319 SearchSuggestionParser::DeserializeJsonData(json_data));
320 if (data) {
321 if (StoreSuggestionResponse(json_data, *data))
322 return;
323 results_updated = ParseSuggestResults(
324 *data, kDefaultZeroSuggestRelevance, false, &results_);
325 }
326 }
327 fetcher_.reset();
328 done_ = true;
329 ConvertResultsToAutocompleteMatches();
330 listener_->OnProviderUpdate(results_updated);
331 }
332
337 void ZeroSuggestProvider::OnMostVisitedUrlsAvailable( 333 void ZeroSuggestProvider::OnMostVisitedUrlsAvailable(
338 const history::MostVisitedURLList& urls) { 334 const history::MostVisitedURLList& urls) {
339 most_visited_urls_ = urls; 335 most_visited_urls_ = urls;
340 } 336 }
341 337
342 void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { 338 void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() {
343 matches_.clear(); 339 matches_.clear();
344 340
345 const TemplateURL* default_provider = 341 const TemplateURL* default_provider =
346 template_url_service_->GetDefaultSearchProvider(); 342 template_url_service_->GetDefaultSearchProvider();
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 448
453 void ZeroSuggestProvider::MaybeUseCachedSuggestions() { 449 void ZeroSuggestProvider::MaybeUseCachedSuggestions() {
454 if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) 450 if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial())
455 return; 451 return;
456 452
457 std::string json_data = profile_->GetPrefs()->GetString( 453 std::string json_data = profile_->GetPrefs()->GetString(
458 prefs::kZeroSuggestCachedResults); 454 prefs::kZeroSuggestCachedResults);
459 if (!json_data.empty()) { 455 if (!json_data.empty()) {
460 scoped_ptr<base::Value> data( 456 scoped_ptr<base::Value> data(
461 SearchSuggestionParser::DeserializeJsonData(json_data)); 457 SearchSuggestionParser::DeserializeJsonData(json_data));
462 if (data && ParseSuggestResults(*data.get(), false, &results_)) { 458 if (data && ParseSuggestResults(
459 *data, kDefaultZeroSuggestRelevance, false, &results_)) {
463 ConvertResultsToAutocompleteMatches(); 460 ConvertResultsToAutocompleteMatches();
464 results_from_cache_ = !matches_.empty(); 461 results_from_cache_ = !matches_.empty();
465 } 462 }
466 } 463 }
467 } 464 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698