| Index: chrome/browser/autocomplete/zero_suggest_provider.cc
|
| diff --git a/chrome/browser/autocomplete/zero_suggest_provider.cc b/chrome/browser/autocomplete/zero_suggest_provider.cc
|
| index ba7a8cc648abdf9fe5ae0b4af30fa61d54804023..7cc12e8a8f8a6fbbb230e2ab3e473b43b1247039 100644
|
| --- a/chrome/browser/autocomplete/zero_suggest_provider.cc
|
| +++ b/chrome/browser/autocomplete/zero_suggest_provider.cc
|
| @@ -166,8 +166,9 @@ ZeroSuggestProvider::ZeroSuggestProvider(
|
| AutocompleteProviderListener* listener,
|
| TemplateURLService* template_url_service,
|
| Profile* profile)
|
| - : BaseSearchProvider(listener, template_url_service, profile,
|
| + : BaseSearchProvider(template_url_service, profile,
|
| AutocompleteProvider::TYPE_ZERO_SUGGEST),
|
| + listener_(listener),
|
| results_from_cache_(false),
|
| weak_ptr_factory_(this) {
|
| }
|
| @@ -175,30 +176,6 @@ ZeroSuggestProvider::ZeroSuggestProvider(
|
| ZeroSuggestProvider::~ZeroSuggestProvider() {
|
| }
|
|
|
| -bool ZeroSuggestProvider::StoreSuggestionResponse(
|
| - const std::string& json_data,
|
| - const base::Value& parsed_data) {
|
| - if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() ||
|
| - json_data.empty())
|
| - return false;
|
| - profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, json_data);
|
| -
|
| - // If we received an empty result list, we should update the display, as it
|
| - // may be showing cached results that should not be shown.
|
| - const base::ListValue* root_list = NULL;
|
| - const base::ListValue* results_list = NULL;
|
| - if (parsed_data.GetAsList(&root_list) &&
|
| - root_list->GetList(1, &results_list) &&
|
| - results_list->empty())
|
| - return false;
|
| -
|
| - // We are finished with the request and want to bail early.
|
| - if (results_from_cache_)
|
| - done_ = true;
|
| -
|
| - return results_from_cache_;
|
| -}
|
| -
|
| const TemplateURL* ZeroSuggestProvider::GetTemplateURL(bool is_keyword) const {
|
| // Zero suggest provider should not receive keyword results.
|
| DCHECK(!is_keyword);
|
| @@ -212,12 +189,6 @@ const AutocompleteInput ZeroSuggestProvider::GetInput(bool is_keyword) const {
|
| true, ChromeAutocompleteSchemeClassifier(profile_));
|
| }
|
|
|
| -SearchSuggestionParser::Results* ZeroSuggestProvider::GetResultsToFill(
|
| - bool is_keyword) {
|
| - DCHECK(!is_keyword);
|
| - return &results_;
|
| -}
|
| -
|
| bool ZeroSuggestProvider::ShouldAppendExtraParams(
|
| const SearchSuggestionParser::SuggestResult& result) const {
|
| // We always use the default provider for search, so append the params.
|
| @@ -225,9 +196,8 @@ bool ZeroSuggestProvider::ShouldAppendExtraParams(
|
| }
|
|
|
| void ZeroSuggestProvider::StopSuggest() {
|
| - if (suggest_results_pending_ > 0)
|
| + if (fetcher_)
|
| LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED);
|
| - suggest_results_pending_ = 0;
|
| fetcher_.reset();
|
| }
|
|
|
| @@ -241,10 +211,6 @@ void ZeroSuggestProvider::ClearAllResults() {
|
| current_query_.clear();
|
| }
|
|
|
| -int ZeroSuggestProvider::GetDefaultResultRelevance() const {
|
| - return kDefaultZeroSuggestRelevance;
|
| -}
|
| -
|
| void ZeroSuggestProvider::RecordDeletionResult(bool success) {
|
| if (success) {
|
| base::RecordAction(
|
| @@ -255,20 +221,52 @@ void ZeroSuggestProvider::RecordDeletionResult(bool success) {
|
| }
|
| }
|
|
|
| -void ZeroSuggestProvider::LogFetchComplete(bool success, bool is_keyword) {
|
| - LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REPLY_RECEIVED);
|
| -}
|
| +void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) {
|
| + DCHECK(!done_);
|
| + DCHECK_EQ(fetcher_.get(), source);
|
|
|
| -bool ZeroSuggestProvider::IsKeywordFetcher(
|
| - const net::URLFetcher* fetcher) const {
|
| - // ZeroSuggestProvider does not have a keyword provider.
|
| - DCHECK_EQ(fetcher, fetcher_.get());
|
| - return false;
|
| -}
|
| + LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REPLY_RECEIVED);
|
|
|
| -void ZeroSuggestProvider::UpdateMatches() {
|
| + bool results_updated = false;
|
| + if (source->GetStatus().is_success() && source->GetResponseCode() == 200) {
|
| + std::string json_data = SearchSuggestionParser::ExtractJsonData(source);
|
| + scoped_ptr<base::Value> data(
|
| + SearchSuggestionParser::DeserializeJsonData(json_data));
|
| + if (data) {
|
| + if (StoreSuggestionResponse(json_data, *data))
|
| + return;
|
| + results_updated = ParseSuggestResults(
|
| + *data, kDefaultZeroSuggestRelevance, false, &results_);
|
| + }
|
| + }
|
| + fetcher_.reset();
|
| done_ = true;
|
| ConvertResultsToAutocompleteMatches();
|
| + listener_->OnProviderUpdate(results_updated);
|
| +}
|
| +
|
| +bool ZeroSuggestProvider::StoreSuggestionResponse(
|
| + const std::string& json_data,
|
| + const base::Value& parsed_data) {
|
| + if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() ||
|
| + json_data.empty())
|
| + return false;
|
| + profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, json_data);
|
| +
|
| + // If we received an empty result list, we should update the display, as it
|
| + // may be showing cached results that should not be shown.
|
| + const base::ListValue* root_list = NULL;
|
| + const base::ListValue* results_list = NULL;
|
| + if (parsed_data.GetAsList(&root_list) &&
|
| + root_list->GetList(1, &results_list) &&
|
| + results_list->empty())
|
| + return false;
|
| +
|
| + // We are finished with the request and want to bail early.
|
| + if (results_from_cache_)
|
| + done_ = true;
|
| +
|
| + return results_from_cache_;
|
| }
|
|
|
| void ZeroSuggestProvider::AddSuggestResultsToMap(
|
| @@ -306,7 +304,6 @@ AutocompleteMatch ZeroSuggestProvider::NavigationToMatch(
|
| }
|
|
|
| void ZeroSuggestProvider::Run(const GURL& suggest_url) {
|
| - suggest_results_pending_ = 0;
|
| const int kFetcherID = 1;
|
| fetcher_.reset(
|
| net::URLFetcher::Create(kFetcherID,
|
| @@ -330,7 +327,6 @@ void ZeroSuggestProvider::Run(const GURL& suggest_url) {
|
| weak_ptr_factory_.GetWeakPtr()), false);
|
| }
|
| }
|
| - suggest_results_pending_ = 1;
|
| LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_SENT);
|
| }
|
|
|
| @@ -459,7 +455,8 @@ void ZeroSuggestProvider::MaybeUseCachedSuggestions() {
|
| if (!json_data.empty()) {
|
| scoped_ptr<base::Value> data(
|
| SearchSuggestionParser::DeserializeJsonData(json_data));
|
| - if (data && ParseSuggestResults(*data.get(), false, &results_)) {
|
| + if (data && ParseSuggestResults(
|
| + *data, kDefaultZeroSuggestRelevance, false, &results_)) {
|
| ConvertResultsToAutocompleteMatches();
|
| results_from_cache_ = !matches_.empty();
|
| }
|
|
|