Index: chrome/browser/autocomplete/search_provider.cc |
diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc |
index 9d062749592927769a9bf8d3610ece1863f8325c..8bc59657078180771715290c28a3c91984f80f23 100644 |
--- a/chrome/browser/autocomplete/search_provider.cc |
+++ b/chrome/browser/autocomplete/search_provider.cc |
@@ -132,8 +132,10 @@ int SearchProvider::kMinimumTimeBetweenSuggestQueriesMs = 100; |
SearchProvider::SearchProvider(AutocompleteProviderListener* listener, |
TemplateURLService* template_url_service, |
Profile* profile) |
- : BaseSearchProvider(listener, template_url_service, profile, |
+ : BaseSearchProvider(template_url_service, profile, |
AutocompleteProvider::TYPE_SEARCH), |
+ listener_(listener), |
+ suggest_results_pending_(0), |
providers_(template_url_service) { |
} |
@@ -301,11 +303,6 @@ const AutocompleteInput SearchProvider::GetInput(bool is_keyword) const { |
return is_keyword ? keyword_input_ : input_; |
} |
-SearchSuggestionParser::Results* SearchProvider::GetResultsToFill( |
- bool is_keyword) { |
- return is_keyword ? &keyword_results_ : &default_results_; |
-} |
- |
bool SearchProvider::ShouldAppendExtraParams( |
const SearchSuggestionParser::SuggestResult& result) const { |
return !result.from_keyword_provider() || |
@@ -329,10 +326,6 @@ void SearchProvider::ClearAllResults() { |
default_results_.Clear(); |
} |
-int SearchProvider::GetDefaultResultRelevance() const { |
- return -1; |
-} |
- |
void SearchProvider::RecordDeletionResult(bool success) { |
if (success) { |
content::RecordAction( |
@@ -366,10 +359,6 @@ void SearchProvider::LogFetchComplete(bool success, bool is_keyword) { |
} |
} |
-bool SearchProvider::IsKeywordFetcher(const net::URLFetcher* fetcher) const { |
- return fetcher == keyword_fetcher_.get(); |
-} |
- |
void SearchProvider::UpdateMatches() { |
ConvertResultsToAutocompleteMatches(); |
@@ -692,6 +681,38 @@ net::URLFetcher* SearchProvider::CreateSuggestFetcher( |
return fetcher; |
} |
+void SearchProvider::OnURLFetchComplete(const net::URLFetcher* source) { |
+ DCHECK(!done_); |
+ suggest_results_pending_--; |
Peter Kasting
2014/08/08 17:33:23
Nit: Predecrement
hashimoto
2014/08/11 05:15:04
Done.
|
+ DCHECK_GE(suggest_results_pending_, 0); // Should never go negative. |
+ |
+ const bool is_keyword = source == keyword_fetcher_.get(); |
+ |
+ // Ensure the request succeeded and that the provider used is still available. |
+ // A verbatim match cannot be generated without this provider, causing errors. |
+ const bool request_succeeded = |
+ source->GetStatus().is_success() && (source->GetResponseCode() == 200) && |
+ GetTemplateURL(is_keyword); |
+ |
+ LogFetchComplete(request_succeeded, is_keyword); |
+ |
+ bool results_updated = false; |
+ if (request_succeeded) { |
+ scoped_ptr<base::Value> data(SearchSuggestionParser::DeserializeJsonData( |
+ SearchSuggestionParser::ExtractJsonData(source))); |
+ if (data) { |
+ SearchSuggestionParser::Results* results = |
+ is_keyword ? &keyword_results_ : &default_results_; |
+ results_updated = ParseSuggestResults(*data, -1, is_keyword, results); |
+ if (results_updated) |
+ SortResults(is_keyword, results); |
+ } |
+ } |
+ UpdateMatches(); |
+ if (done_ || results_updated) |
+ listener_->OnProviderUpdate(results_updated); |
+} |
+ |
void SearchProvider::ConvertResultsToAutocompleteMatches() { |
// Convert all the results to matches and add them to a map, so we can keep |
// the most relevant match for each result. |