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

Unified 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: Address comments 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autocomplete/zero_suggest_provider.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « chrome/browser/autocomplete/zero_suggest_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698