X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fautocomplete%2Fzero_suggest_provider.cc;h=a81079dc7b932c7c5f32f0d6aa4d108961eaf8de;hb=ff3e2503a20db9193d323c1d19c38c68004dec4a;hp=62db13a0f99d8cc07c310794245ce2ee35a70796;hpb=7338fba38ba696536d1cc9d389afd716a6ab2fe6;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/autocomplete/zero_suggest_provider.cc b/src/chrome/browser/autocomplete/zero_suggest_provider.cc index 62db13a..a81079d 100644 --- a/src/chrome/browser/autocomplete/zero_suggest_provider.cc +++ b/src/chrome/browser/autocomplete/zero_suggest_provider.cc @@ -84,37 +84,6 @@ void ZeroSuggestProvider::Start(const AutocompleteInput& input, bool /*minimal_changes*/) { } -void ZeroSuggestProvider::Stop(bool clear_cached_results) { - if (have_pending_request_) - LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED); - have_pending_request_ = false; - fetcher_.reset(); - done_ = true; - if (clear_cached_results) { - query_matches_map_.clear(); - navigation_results_.clear(); - current_query_.clear(); - matches_.clear(); - } -} - -void ZeroSuggestProvider::AddProviderInfo(ProvidersInfo* provider_info) const { - provider_info->push_back(metrics::OmniboxEventProto_ProviderInfo()); - metrics::OmniboxEventProto_ProviderInfo& new_entry = provider_info->back(); - new_entry.set_provider(AsOmniboxEventProviderType()); - new_entry.set_provider_done(done_); - std::vector field_trial_hashes; - OmniboxFieldTrial::GetActiveSuggestFieldTrialHashes(&field_trial_hashes); - for (size_t i = 0; i < field_trial_hashes.size(); ++i) { - if (field_trial_triggered_) - new_entry.mutable_field_trial_triggered()->Add(field_trial_hashes[i]); - if (field_trial_triggered_in_session_) { - new_entry.mutable_field_trial_triggered_in_session()->Add( - field_trial_hashes[i]); - } - } -} - void ZeroSuggestProvider::ResetSession() { // The user has started editing in the omnibox, so leave // |field_trial_triggered_in_session_| unchanged and set @@ -133,8 +102,7 @@ void ZeroSuggestProvider::OnURLFetchComplete(const net::URLFetcher* source) { source->GetStatus().is_success() && source->GetResponseCode() == 200; if (request_succeeded) { - scoped_ptr data( - SearchProvider::DeserializeJsonData(json_data)); + scoped_ptr data(DeserializeJsonData(json_data)); if (data.get()) ParseSuggestResults(*data.get()); } @@ -166,8 +134,7 @@ void ZeroSuggestProvider::StartZeroSuggest( search_term_args.current_page_url = current_query_; GURL suggest_url(default_provider->suggestions_url_ref(). ReplaceSearchTerms(search_term_args)); - if (!SearchProvider::CanSendURL( - current_page_url, suggest_url, + if (!CanSendURL(current_page_url, suggest_url, template_url_service_->GetDefaultSearchProvider(), page_classification, profile_) || !OmniboxFieldTrial::InZeroSuggestFieldTrial()) @@ -183,24 +150,56 @@ void ZeroSuggestProvider::StartZeroSuggest( ZeroSuggestProvider::ZeroSuggestProvider( AutocompleteProviderListener* listener, Profile* profile) - : AutocompleteProvider(listener, profile, - AutocompleteProvider::TYPE_ZERO_SUGGEST), + : BaseSearchProvider(listener, profile, + AutocompleteProvider::TYPE_ZERO_SUGGEST), template_url_service_(TemplateURLServiceFactory::GetForProfile(profile)), have_pending_request_(false), verbatim_relevance_(kDefaultVerbatimZeroSuggestRelevance), - field_trial_triggered_(false), - field_trial_triggered_in_session_(false), weak_ptr_factory_(this) { } ZeroSuggestProvider::~ZeroSuggestProvider() { } -void ZeroSuggestProvider::FillResults( - const base::Value& root_val, - int* verbatim_relevance, - SearchProvider::SuggestResults* suggest_results, - SearchProvider::NavigationResults* navigation_results) { +const TemplateURL* ZeroSuggestProvider::GetTemplateURL( + const SuggestResult& result) const { + // Zero suggest provider should not receive keyword results. + DCHECK(!result.from_keyword_provider()); + return template_url_service_->GetDefaultSearchProvider(); +} + +const AutocompleteInput ZeroSuggestProvider::GetInput( + const SuggestResult& result) const { + AutocompleteInput input; + // Set |input|'s text to be |query_string| to avoid bolding. + input.UpdateText(result.suggestion(), base::string16::npos, input.parts()); + return input; +} + +bool ZeroSuggestProvider::ShouldAppendExtraParams( + const SuggestResult& result) const { + // We always use the default provider for search, so append the params. + return true; +} + +void ZeroSuggestProvider::StopSuggest() { + if (have_pending_request_) + LogOmniboxZeroSuggestRequest(ZERO_SUGGEST_REQUEST_INVALIDATED); + have_pending_request_ = false; + fetcher_.reset(); +} + +void ZeroSuggestProvider::ClearAllResults() { + query_matches_map_.clear(); + navigation_results_.clear(); + current_query_.clear(); + matches_.clear(); +} + +void ZeroSuggestProvider::FillResults(const base::Value& root_val, + int* verbatim_relevance, + SuggestResults* suggest_results, + NavigationResults* navigation_results) { base::string16 query; const base::ListValue* root_list = NULL; const base::ListValue* results = NULL; @@ -267,12 +266,12 @@ void ZeroSuggestProvider::FillResults( if (url.is_valid()) { if (descriptions != NULL) descriptions->GetString(index, &title); - navigation_results->push_back(SearchProvider::NavigationResult( + navigation_results->push_back(NavigationResult( *this, url, title, false, relevance, relevances != NULL, current_query_string16, languages)); } } else { - suggest_results->push_back(SearchProvider::SuggestResult( + suggest_results->push_back(SuggestResult( result, AutocompleteMatchType::SEARCH_SUGGEST, result, base::string16(), std::string(), std::string(), false, relevance, relevances != NULL, false, current_query_string16)); @@ -281,54 +280,22 @@ void ZeroSuggestProvider::FillResults( } void ZeroSuggestProvider::AddSuggestResultsToMap( - const SearchProvider::SuggestResults& results, - const TemplateURL* template_url, - SearchProvider::MatchMap* map) { + const SuggestResults& results, + MatchMap* map) { for (size_t i = 0; i < results.size(); ++i) { - AddMatchToMap(results[i].relevance(), AutocompleteMatchType::SEARCH_SUGGEST, - template_url, results[i].suggestion(), i, map); + const base::string16& query_string(results[i].suggestion()); + // TODO(mariakhomenko): Do not reconstruct SuggestResult objects with + // a different query -- create correct objects to begin with. + const SuggestResult suggestion( + query_string, AutocompleteMatchType::SEARCH_SUGGEST, query_string, + base::string16(), std::string(), std::string(), false, + results[i].relevance(), true, false, query_string); + AddMatchToMap(suggestion, std::string(), i, map); } } -void ZeroSuggestProvider::AddMatchToMap(int relevance, - AutocompleteMatch::Type type, - const TemplateURL* template_url, - const base::string16& query_string, - int accepted_suggestion, - SearchProvider::MatchMap* map) { - // Pass in query_string as the input_text to avoid bolding. - SearchProvider::SuggestResult suggestion( - query_string, type, query_string, base::string16(), std::string(), - std::string(), false, relevance, true, false, query_string); - // TODO(samarth|melevin): use the actual omnibox margin here as well instead - // of passing in -1. - AutocompleteMatch match = SearchProvider::CreateSearchSuggestion( - this, AutocompleteInput(), query_string, suggestion, template_url, - accepted_suggestion, -1, true); - if (!match.destination_url.is_valid()) - return; - - // Try to add |match| to |map|. If a match for |query_string| is already in - // |map|, replace it if |match| is more relevant. - // NOTE: Keep this ToLower() call in sync with url_database.cc. - SearchProvider::MatchKey match_key( - std::make_pair(base::i18n::ToLower(query_string), std::string())); - const std::pair i(map->insert( - std::make_pair(match_key, match))); - // NOTE: We purposefully do a direct relevance comparison here instead of - // using AutocompleteMatch::MoreRelevant(), so that we'll prefer "items added - // first" rather than "items alphabetically first" when the scores are equal. - // The only case this matters is when a user has results with the same score - // that differ only by capitalization; because the history system returns - // results sorted by recency, this means we'll pick the most recent such - // result even if the precision of our relevance score is too low to - // distinguish the two. - if (!i.second && (match.relevance > i.first->second.relevance)) - i.first->second = match; -} - AutocompleteMatch ZeroSuggestProvider::NavigationToMatch( - const SearchProvider::NavigationResult& navigation) { + const NavigationResult& navigation) { AutocompleteMatch match(this, navigation.relevance(), false, AutocompleteMatchType::NAVSUGGEST); match.destination_url = navigation.url(); @@ -385,14 +352,12 @@ void ZeroSuggestProvider::Run(const GURL& suggest_url) { } void ZeroSuggestProvider::ParseSuggestResults(const base::Value& root_val) { - SearchProvider::SuggestResults suggest_results; + SuggestResults suggest_results; FillResults(root_val, &verbatim_relevance_, &suggest_results, &navigation_results_); query_matches_map_.clear(); - AddSuggestResultsToMap(suggest_results, - template_url_service_->GetDefaultSearchProvider(), - &query_matches_map_); + AddSuggestResultsToMap(suggest_results, &query_matches_map_); } void ZeroSuggestProvider::OnMostVisitedUrlsAvailable( @@ -433,8 +398,7 @@ void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)); for (size_t i = 0; i < most_visited_urls_.size(); i++) { const history::MostVisitedURL& url = most_visited_urls_[i]; - SearchProvider::NavigationResult nav( - *this, url.url, url.title, false, relevance, true, + NavigationResult nav(*this, url.url, url.title, false, relevance, true, current_query_string16, languages); matches_.push_back(NavigationToMatch(nav)); --relevance; @@ -449,12 +413,12 @@ void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { // current typing in the omnibox. matches_.push_back(current_url_match_); - for (SearchProvider::MatchMap::const_iterator it(query_matches_map_.begin()); + for (MatchMap::const_iterator it(query_matches_map_.begin()); it != query_matches_map_.end(); ++it) matches_.push_back(it->second); - for (SearchProvider::NavigationResults::const_iterator it( - navigation_results_.begin()); it != navigation_results_.end(); ++it) + for (NavigationResults::const_iterator it(navigation_results_.begin()); + it != navigation_results_.end(); ++it) matches_.push_back(NavigationToMatch(*it)); } @@ -465,7 +429,7 @@ AutocompleteMatch ZeroSuggestProvider::MatchForCurrentURL() { AutocompleteMatch match; AutocompleteClassifierFactory::GetForProfile(profile_)->Classify( - permanent_text_, false, true, &match, NULL); + permanent_text_, false, true, current_page_classification_, &match, NULL); match.is_history_what_you_typed_match = false; match.allowed_to_be_default_match = true;