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

Side by Side Diff: chrome/browser/autocomplete/search_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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/search_provider.h" 5 #include "chrome/browser/autocomplete/search_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 125
126 126
127 // SearchProvider ------------------------------------------------------------- 127 // SearchProvider -------------------------------------------------------------
128 128
129 // static 129 // static
130 int SearchProvider::kMinimumTimeBetweenSuggestQueriesMs = 100; 130 int SearchProvider::kMinimumTimeBetweenSuggestQueriesMs = 100;
131 131
132 SearchProvider::SearchProvider(AutocompleteProviderListener* listener, 132 SearchProvider::SearchProvider(AutocompleteProviderListener* listener,
133 TemplateURLService* template_url_service, 133 TemplateURLService* template_url_service,
134 Profile* profile) 134 Profile* profile)
135 : BaseSearchProvider(listener, template_url_service, profile, 135 : BaseSearchProvider(template_url_service, profile,
136 AutocompleteProvider::TYPE_SEARCH), 136 AutocompleteProvider::TYPE_SEARCH),
137 listener_(listener),
138 suggest_results_pending_(0),
137 providers_(template_url_service) { 139 providers_(template_url_service) {
138 } 140 }
139 141
140 // static 142 // static
141 std::string SearchProvider::GetSuggestMetadata(const AutocompleteMatch& match) { 143 std::string SearchProvider::GetSuggestMetadata(const AutocompleteMatch& match) {
142 return match.GetAdditionalInfo(kSuggestMetadataKey); 144 return match.GetAdditionalInfo(kSuggestMetadataKey);
143 } 145 }
144 146
145 void SearchProvider::ResetSession() { 147 void SearchProvider::ResetSession() {
146 field_trial_triggered_in_session_ = false; 148 field_trial_triggered_in_session_ = false;
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 296
295 const TemplateURL* SearchProvider::GetTemplateURL(bool is_keyword) const { 297 const TemplateURL* SearchProvider::GetTemplateURL(bool is_keyword) const {
296 return is_keyword ? providers_.GetKeywordProviderURL() 298 return is_keyword ? providers_.GetKeywordProviderURL()
297 : providers_.GetDefaultProviderURL(); 299 : providers_.GetDefaultProviderURL();
298 } 300 }
299 301
300 const AutocompleteInput SearchProvider::GetInput(bool is_keyword) const { 302 const AutocompleteInput SearchProvider::GetInput(bool is_keyword) const {
301 return is_keyword ? keyword_input_ : input_; 303 return is_keyword ? keyword_input_ : input_;
302 } 304 }
303 305
304 SearchSuggestionParser::Results* SearchProvider::GetResultsToFill(
305 bool is_keyword) {
306 return is_keyword ? &keyword_results_ : &default_results_;
307 }
308
309 bool SearchProvider::ShouldAppendExtraParams( 306 bool SearchProvider::ShouldAppendExtraParams(
310 const SearchSuggestionParser::SuggestResult& result) const { 307 const SearchSuggestionParser::SuggestResult& result) const {
311 return !result.from_keyword_provider() || 308 return !result.from_keyword_provider() ||
312 providers_.default_provider().empty(); 309 providers_.default_provider().empty();
313 } 310 }
314 311
315 void SearchProvider::StopSuggest() { 312 void SearchProvider::StopSuggest() {
316 // Increment the appropriate field in the histogram by the number of 313 // Increment the appropriate field in the histogram by the number of
317 // pending requests that were invalidated. 314 // pending requests that were invalidated.
318 for (int i = 0; i < suggest_results_pending_; ++i) 315 for (int i = 0; i < suggest_results_pending_; ++i)
319 LogOmniboxSuggestRequest(REQUEST_INVALIDATED); 316 LogOmniboxSuggestRequest(REQUEST_INVALIDATED);
320 suggest_results_pending_ = 0; 317 suggest_results_pending_ = 0;
321 timer_.Stop(); 318 timer_.Stop();
322 // Stop any in-progress URL fetches. 319 // Stop any in-progress URL fetches.
323 keyword_fetcher_.reset(); 320 keyword_fetcher_.reset();
324 default_fetcher_.reset(); 321 default_fetcher_.reset();
325 } 322 }
326 323
327 void SearchProvider::ClearAllResults() { 324 void SearchProvider::ClearAllResults() {
328 keyword_results_.Clear(); 325 keyword_results_.Clear();
329 default_results_.Clear(); 326 default_results_.Clear();
330 } 327 }
331 328
332 int SearchProvider::GetDefaultResultRelevance() const {
333 return -1;
334 }
335
336 void SearchProvider::RecordDeletionResult(bool success) { 329 void SearchProvider::RecordDeletionResult(bool success) {
337 if (success) { 330 if (success) {
338 content::RecordAction( 331 content::RecordAction(
339 base::UserMetricsAction("Omnibox.ServerSuggestDelete.Success")); 332 base::UserMetricsAction("Omnibox.ServerSuggestDelete.Success"));
340 } else { 333 } else {
341 content::RecordAction( 334 content::RecordAction(
342 base::UserMetricsAction("Omnibox.ServerSuggestDelete.Failure")); 335 base::UserMetricsAction("Omnibox.ServerSuggestDelete.Failure"));
343 } 336 }
344 } 337 }
345 338
(...skipping 13 matching lines...) Expand all
359 if (success) { 352 if (success) {
360 UMA_HISTOGRAM_TIMES("Omnibox.SuggestRequest.Success.GoogleResponseTime", 353 UMA_HISTOGRAM_TIMES("Omnibox.SuggestRequest.Success.GoogleResponseTime",
361 elapsed_time); 354 elapsed_time);
362 } else { 355 } else {
363 UMA_HISTOGRAM_TIMES("Omnibox.SuggestRequest.Failure.GoogleResponseTime", 356 UMA_HISTOGRAM_TIMES("Omnibox.SuggestRequest.Failure.GoogleResponseTime",
364 elapsed_time); 357 elapsed_time);
365 } 358 }
366 } 359 }
367 } 360 }
368 361
369 bool SearchProvider::IsKeywordFetcher(const net::URLFetcher* fetcher) const {
370 return fetcher == keyword_fetcher_.get();
371 }
372
373 void SearchProvider::UpdateMatches() { 362 void SearchProvider::UpdateMatches() {
374 ConvertResultsToAutocompleteMatches(); 363 ConvertResultsToAutocompleteMatches();
375 364
376 // Check constraints that may be violated by suggested relevances. 365 // Check constraints that may be violated by suggested relevances.
377 if (!matches_.empty() && 366 if (!matches_.empty() &&
378 (default_results_.HasServerProvidedScores() || 367 (default_results_.HasServerProvidedScores() ||
379 keyword_results_.HasServerProvidedScores())) { 368 keyword_results_.HasServerProvidedScores())) {
380 // These blocks attempt to repair undesirable behavior by suggested 369 // These blocks attempt to repair undesirable behavior by suggested
381 // relevances with minimal impact, preserving other suggested relevances. 370 // relevances with minimal impact, preserving other suggested relevances.
382 371
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); 674 fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
686 // Add Chrome experiment state to the request headers. 675 // Add Chrome experiment state to the request headers.
687 net::HttpRequestHeaders headers; 676 net::HttpRequestHeaders headers;
688 variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders( 677 variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders(
689 fetcher->GetOriginalURL(), profile_->IsOffTheRecord(), false, &headers); 678 fetcher->GetOriginalURL(), profile_->IsOffTheRecord(), false, &headers);
690 fetcher->SetExtraRequestHeaders(headers.ToString()); 679 fetcher->SetExtraRequestHeaders(headers.ToString());
691 fetcher->Start(); 680 fetcher->Start();
692 return fetcher; 681 return fetcher;
693 } 682 }
694 683
684 void SearchProvider::OnURLFetchComplete(const net::URLFetcher* source) {
685 DCHECK(!done_);
686 suggest_results_pending_--;
Peter Kasting 2014/08/08 17:33:23 Nit: Predecrement
hashimoto 2014/08/11 05:15:04 Done.
687 DCHECK_GE(suggest_results_pending_, 0); // Should never go negative.
688
689 const bool is_keyword = source == keyword_fetcher_.get();
690
691 // Ensure the request succeeded and that the provider used is still available.
692 // A verbatim match cannot be generated without this provider, causing errors.
693 const bool request_succeeded =
694 source->GetStatus().is_success() && (source->GetResponseCode() == 200) &&
695 GetTemplateURL(is_keyword);
696
697 LogFetchComplete(request_succeeded, is_keyword);
698
699 bool results_updated = false;
700 if (request_succeeded) {
701 scoped_ptr<base::Value> data(SearchSuggestionParser::DeserializeJsonData(
702 SearchSuggestionParser::ExtractJsonData(source)));
703 if (data) {
704 SearchSuggestionParser::Results* results =
705 is_keyword ? &keyword_results_ : &default_results_;
706 results_updated = ParseSuggestResults(*data, -1, is_keyword, results);
707 if (results_updated)
708 SortResults(is_keyword, results);
709 }
710 }
711 UpdateMatches();
712 if (done_ || results_updated)
713 listener_->OnProviderUpdate(results_updated);
714 }
715
695 void SearchProvider::ConvertResultsToAutocompleteMatches() { 716 void SearchProvider::ConvertResultsToAutocompleteMatches() {
696 // Convert all the results to matches and add them to a map, so we can keep 717 // Convert all the results to matches and add them to a map, so we can keep
697 // the most relevant match for each result. 718 // the most relevant match for each result.
698 base::TimeTicks start_time(base::TimeTicks::Now()); 719 base::TimeTicks start_time(base::TimeTicks::Now());
699 MatchMap map; 720 MatchMap map;
700 const base::Time no_time; 721 const base::Time no_time;
701 int did_not_accept_keyword_suggestion = 722 int did_not_accept_keyword_suggestion =
702 keyword_results_.suggest_results.empty() ? 723 keyword_results_.suggest_results.empty() ?
703 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE : 724 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE :
704 TemplateURLRef::NO_SUGGESTION_CHOSEN; 725 TemplateURLRef::NO_SUGGESTION_CHOSEN;
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 last_answer_seen_.query_type = match->answer_type; 1262 last_answer_seen_.query_type = match->answer_type;
1242 } 1263 }
1243 1264
1244 void SearchProvider::DoAnswersQuery(const AutocompleteInput& input) { 1265 void SearchProvider::DoAnswersQuery(const AutocompleteInput& input) {
1245 // If the query text starts with trimmed input, this is valid prefetch data. 1266 // If the query text starts with trimmed input, this is valid prefetch data.
1246 prefetch_data_ = StartsWith(last_answer_seen_.full_query_text, 1267 prefetch_data_ = StartsWith(last_answer_seen_.full_query_text,
1247 base::CollapseWhitespace(input.text(), false), 1268 base::CollapseWhitespace(input.text(), false),
1248 false) ? 1269 false) ?
1249 last_answer_seen_ : AnswersQueryData(); 1270 last_answer_seen_ : AnswersQueryData();
1250 } 1271 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698