| 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 7cc12e8a8f8a6fbbb230e2ab3e473b43b1247039..d45fcea5909db9edba05edbd009c62e33b1f3159 100644
|
| --- a/chrome/browser/autocomplete/zero_suggest_provider.cc
|
| +++ b/chrome/browser/autocomplete/zero_suggest_provider.cc
|
| @@ -8,7 +8,6 @@
|
| #include "base/i18n/case_conversion.h"
|
| #include "base/json/json_string_value_serializer.h"
|
| #include "base/metrics/histogram.h"
|
| -#include "base/metrics/user_metrics.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/string_util.h"
|
| @@ -57,6 +56,12 @@ enum ZeroSuggestRequestsHistogramValue {
|
| ZERO_SUGGEST_MAX_REQUEST_HISTOGRAM_VALUE
|
| };
|
|
|
| +// User metrics action strings.
|
| +const char kUserMetricsActionDeletionSuccess[] =
|
| + "Omnibox.ZeroSuggestDelete.Success";
|
| +const char kUserMetricsActionDeletionFailure[] =
|
| + "Omnibox.ZeroSuggestDelete.Failure";
|
| +
|
| void LogOmniboxZeroSuggestRequest(
|
| ZeroSuggestRequestsHistogramValue request_value) {
|
| UMA_HISTOGRAM_ENUMERATION("Omnibox.ZeroSuggestRequests", request_value,
|
| @@ -139,6 +144,23 @@ void ZeroSuggestProvider::Start(const AutocompleteInput& input,
|
| Run(suggest_url);
|
| }
|
|
|
| +void ZeroSuggestProvider::Stop(bool clear_cached_results) {
|
| + if (fetcher_)
|
| + LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED);
|
| + fetcher_.reset();
|
| + done_ = true;
|
| +
|
| + if (clear_cached_results) {
|
| + // We do not call Clear() on |results_| to retain |verbatim_relevance|
|
| + // value in the |results_| object. |verbatim_relevance| is used at the
|
| + // beginning of the next StartZeroSuggest() call to determine the current
|
| + // url match relevance.
|
| + results_.suggest_results.clear();
|
| + results_.navigation_results.clear();
|
| + current_query_.clear();
|
| + }
|
| +}
|
| +
|
| void ZeroSuggestProvider::DeleteMatch(const AutocompleteMatch& match) {
|
| if (OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) {
|
| // Remove the deleted match from the cache, so it is not shown to the user
|
| @@ -149,6 +171,12 @@ void ZeroSuggestProvider::DeleteMatch(const AutocompleteMatch& match) {
|
| BaseSearchProvider::DeleteMatch(match);
|
| }
|
|
|
| +void ZeroSuggestProvider::AddProviderInfo(ProvidersInfo* provider_info) const {
|
| + BaseSearchProvider::AddProviderInfo(provider_info);
|
| + if (!results_.suggest_results.empty() || !results_.navigation_results.empty())
|
| + provider_info->back().set_times_returned_results_in_session(1);
|
| +}
|
| +
|
| void ZeroSuggestProvider::ResetSession() {
|
| // The user has started editing in the omnibox, so leave
|
| // |field_trial_triggered_in_session_| unchanged and set
|
| @@ -156,18 +184,15 @@ void ZeroSuggestProvider::ResetSession() {
|
| field_trial_triggered_ = false;
|
| }
|
|
|
| -void ZeroSuggestProvider::ModifyProviderInfo(
|
| - metrics::OmniboxEventProto_ProviderInfo* provider_info) const {
|
| - if (!results_.suggest_results.empty() || !results_.navigation_results.empty())
|
| - provider_info->set_times_returned_results_in_session(1);
|
| -}
|
| -
|
| ZeroSuggestProvider::ZeroSuggestProvider(
|
| AutocompleteProviderListener* listener,
|
| TemplateURLService* template_url_service,
|
| Profile* profile)
|
| - : BaseSearchProvider(template_url_service, profile,
|
| - AutocompleteProvider::TYPE_ZERO_SUGGEST),
|
| + : BaseSearchProvider(
|
| + template_url_service, profile,
|
| + base::UserMetricsAction(kUserMetricsActionDeletionSuccess),
|
| + base::UserMetricsAction(kUserMetricsActionDeletionFailure),
|
| + AutocompleteProvider::TYPE_ZERO_SUGGEST),
|
| listener_(listener),
|
| results_from_cache_(false),
|
| weak_ptr_factory_(this) {
|
| @@ -176,51 +201,6 @@ ZeroSuggestProvider::ZeroSuggestProvider(
|
| ZeroSuggestProvider::~ZeroSuggestProvider() {
|
| }
|
|
|
| -const TemplateURL* ZeroSuggestProvider::GetTemplateURL(bool is_keyword) const {
|
| - // Zero suggest provider should not receive keyword results.
|
| - DCHECK(!is_keyword);
|
| - return template_url_service_->GetDefaultSearchProvider();
|
| -}
|
| -
|
| -const AutocompleteInput ZeroSuggestProvider::GetInput(bool is_keyword) const {
|
| - return AutocompleteInput(
|
| - base::string16(), base::string16::npos, base::string16(),
|
| - GURL(current_query_), current_page_classification_, true, false, false,
|
| - true, ChromeAutocompleteSchemeClassifier(profile_));
|
| -}
|
| -
|
| -bool ZeroSuggestProvider::ShouldAppendExtraParams(
|
| - const SearchSuggestionParser::SuggestResult& result) const {
|
| - // We always use the default provider for search, so append the params.
|
| - return true;
|
| -}
|
| -
|
| -void ZeroSuggestProvider::StopSuggest() {
|
| - if (fetcher_)
|
| - LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED);
|
| - fetcher_.reset();
|
| -}
|
| -
|
| -void ZeroSuggestProvider::ClearAllResults() {
|
| - // We do not call Clear() on |results_| to retain |verbatim_relevance|
|
| - // value in the |results_| object. |verbatim_relevance| is used at the
|
| - // beginning of the next StartZeroSuggest() call to determine the current url
|
| - // match relevance.
|
| - results_.suggest_results.clear();
|
| - results_.navigation_results.clear();
|
| - current_query_.clear();
|
| -}
|
| -
|
| -void ZeroSuggestProvider::RecordDeletionResult(bool success) {
|
| - if (success) {
|
| - base::RecordAction(
|
| - base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Success"));
|
| - } else {
|
| - base::RecordAction(
|
| - base::UserMetricsAction("Omnibox.ZeroSuggestDelete.Failure"));
|
| - }
|
| -}
|
| -
|
| void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) {
|
| DCHECK(!done_);
|
| DCHECK_EQ(fetcher_.get(), source);
|
| @@ -236,7 +216,7 @@ void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) {
|
| if (StoreSuggestionResponse(json_data, *data))
|
| return;
|
| results_updated = ParseSuggestResults(
|
| - *data, kDefaultZeroSuggestRelevance, false, &results_);
|
| + *data, GetInput(), kDefaultZeroSuggestRelevance, false, &results_);
|
| }
|
| }
|
| fetcher_.reset();
|
| @@ -245,6 +225,13 @@ void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) {
|
| listener_->OnProviderUpdate(results_updated);
|
| }
|
|
|
| +AutocompleteInput ZeroSuggestProvider::GetInput() const {
|
| + return AutocompleteInput(
|
| + base::string16(), base::string16::npos, base::string16(),
|
| + GURL(current_query_), current_page_classification_, true, false, false,
|
| + true, ChromeAutocompleteSchemeClassifier(profile_));
|
| +}
|
| +
|
| bool ZeroSuggestProvider::StoreSuggestionResponse(
|
| const std::string& json_data,
|
| const base::Value& parsed_data) {
|
| @@ -272,8 +259,11 @@ bool ZeroSuggestProvider::StoreSuggestionResponse(
|
| void ZeroSuggestProvider::AddSuggestResultsToMap(
|
| const SearchSuggestionParser::SuggestResults& results,
|
| MatchMap* map) {
|
| - for (size_t i = 0; i < results.size(); ++i)
|
| - AddMatchToMap(results[i], std::string(), i, false, map);
|
| + for (size_t i = 0; i < results.size(); ++i) {
|
| + AddMatchToMap(GetInput(), results[i],
|
| + template_url_service_->GetDefaultSearchProvider(),
|
| + std::string(), i, true, false, map);
|
| + }
|
| }
|
|
|
| AutocompleteMatch ZeroSuggestProvider::NavigationToMatch(
|
| @@ -455,8 +445,9 @@ void ZeroSuggestProvider::MaybeUseCachedSuggestions() {
|
| if (!json_data.empty()) {
|
| scoped_ptr<base::Value> data(
|
| SearchSuggestionParser::DeserializeJsonData(json_data));
|
| - if (data && ParseSuggestResults(
|
| - *data, kDefaultZeroSuggestRelevance, false, &results_)) {
|
| + if (data &&
|
| + ParseSuggestResults(*data, GetInput(), kDefaultZeroSuggestRelevance,
|
| + false, &results_)) {
|
| ConvertResultsToAutocompleteMatches();
|
| results_from_cache_ = !matches_.empty();
|
| }
|
|
|