diff options
author | blundell <blundell@chromium.org> | 2015-06-21 12:29:13 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-21 19:29:51 +0000 |
commit | d130d599dd7b02b9bdc4ea606c77117afbb91c57 (patch) | |
tree | f07038dfd53100f4650041ceea48fe8683a61625 | |
parent | 8db3efc9bb514d4e55a17fbd4d654c4ec4e72487 (diff) | |
download | chromium_src-d130d599dd7b02b9bdc4ea606c77117afbb91c57.zip chromium_src-d130d599dd7b02b9bdc4ea606c77117afbb91c57.tar.gz chromium_src-d130d599dd7b02b9bdc4ea606c77117afbb91c57.tar.bz2 |
Prepare ZeroSuggestProvider for componentization
- Abstracts //chrome-level dependencies via AutocompleteProviderClient.
- Moves the kZeroSuggestCachedResults pref name to live in the component.
- Also takes the opportunity to eliminate protected data members in
BaseSearchProvider.
BUG=371538
TBR=sdefresne, mkwst
Review URL: https://codereview.chromium.org/1197533003
Cr-Commit-Position: refs/heads/master@{#335456}
30 files changed, 335 insertions, 257 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_controller.cc b/chrome/browser/autocomplete/autocomplete_controller.cc index e3d2e55..a75c373 100644 --- a/chrome/browser/autocomplete/autocomplete_controller.cc +++ b/chrome/browser/autocomplete/autocomplete_controller.cc @@ -208,15 +208,14 @@ AutocompleteController::AutocompleteController( } #endif if (provider_types & AutocompleteProvider::TYPE_SEARCH) { - search_provider_ = - new SearchProvider(provider_client_.get(), this, template_url_service); + search_provider_ = new SearchProvider(provider_client_.get(), this); providers_.push_back(search_provider_); } if (provider_types & AutocompleteProvider::TYPE_SHORTCUTS) providers_.push_back(new ShortcutsProvider(provider_client_.get())); if (provider_types & AutocompleteProvider::TYPE_ZERO_SUGGEST) { - zero_suggest_provider_ = ZeroSuggestProvider::Create( - provider_client_.get(), this, template_url_service, profile); + zero_suggest_provider_ = + ZeroSuggestProvider::Create(provider_client_.get(), this); if (zero_suggest_provider_) providers_.push_back(zero_suggest_provider_); } diff --git a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc b/chrome/browser/autocomplete/autocomplete_provider_unittest.cc index d78a860..19b5c9a 100644 --- a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc +++ b/chrome/browser/autocomplete/autocomplete_provider_unittest.cc @@ -215,7 +215,7 @@ class AutocompleteProviderTest : public testing::Test, base::TimeDelta query_formulation_time) const; void set_search_provider_field_trial_triggered_in_session(bool val) { - controller_->search_provider_->field_trial_triggered_in_session_ = val; + controller_->search_provider_->set_field_trial_triggered_in_session(val); } bool search_provider_field_trial_triggered_in_session() { return controller_->search_provider_->field_trial_triggered_in_session(); diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc index 0eeba30..32f3767 100644 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc @@ -13,6 +13,7 @@ #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/history/history_service_factory.h" +#include "chrome/browser/history/top_sites_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/sync/profile_sync_service.h" @@ -36,16 +37,30 @@ ChromeAutocompleteProviderClient::GetRequestContext() { return profile_->GetRequestContext(); } +PrefService* ChromeAutocompleteProviderClient::GetPrefs() { + return profile_->GetPrefs(); +} + const AutocompleteSchemeClassifier& -ChromeAutocompleteProviderClient::GetSchemeClassifier() { +ChromeAutocompleteProviderClient::GetSchemeClassifier() const { return scheme_classifier_; } +AutocompleteClassifier* +ChromeAutocompleteProviderClient::GetAutocompleteClassifier() { + return AutocompleteClassifierFactory::GetForProfile(profile_); +} + history::HistoryService* ChromeAutocompleteProviderClient::GetHistoryService() { return HistoryServiceFactory::GetForProfile( profile_, ServiceAccessType::EXPLICIT_ACCESS); } +scoped_refptr<history::TopSites> +ChromeAutocompleteProviderClient::GetTopSites() { + return TopSitesFactory::GetForProfile(profile_); +} + bookmarks::BookmarkModel* ChromeAutocompleteProviderClient::GetBookmarkModel() { return BookmarkModelFactory::GetForProfile(profile_); } @@ -62,7 +77,13 @@ TemplateURLService* ChromeAutocompleteProviderClient::GetTemplateURLService() { return TemplateURLServiceFactory::GetForProfile(profile_); } -const SearchTermsData& ChromeAutocompleteProviderClient::GetSearchTermsData() { +const TemplateURLService* +ChromeAutocompleteProviderClient::GetTemplateURLService() const { + return TemplateURLServiceFactory::GetForProfile(profile_); +} + +const +SearchTermsData& ChromeAutocompleteProviderClient::GetSearchTermsData() const { return search_terms_data_; } @@ -76,23 +97,23 @@ ChromeAutocompleteProviderClient::GetShortcutsBackendIfExists() { return ShortcutsBackendFactory::GetForProfileIfExists(profile_); } -std::string ChromeAutocompleteProviderClient::GetAcceptLanguages() { +std::string ChromeAutocompleteProviderClient::GetAcceptLanguages() const { return profile_->GetPrefs()->GetString(prefs::kAcceptLanguages); } -bool ChromeAutocompleteProviderClient::IsOffTheRecord() { +bool ChromeAutocompleteProviderClient::IsOffTheRecord() const { return profile_->IsOffTheRecord(); } -bool ChromeAutocompleteProviderClient::SearchSuggestEnabled() { +bool ChromeAutocompleteProviderClient::SearchSuggestEnabled() const { return profile_->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled); } -bool ChromeAutocompleteProviderClient::ShowBookmarkBar() { +bool ChromeAutocompleteProviderClient::BookmarkBarIsVisible() const { return profile_->GetPrefs()->GetBoolean(bookmarks::prefs::kShowBookmarkBar); } -bool ChromeAutocompleteProviderClient::TabSyncEnabledAndUnencrypted() { +bool ChromeAutocompleteProviderClient::TabSyncEnabledAndUnencrypted() const { // Check field trials and settings allow sending the URL on suggest requests. ProfileSyncService* service = ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); @@ -110,8 +131,7 @@ void ChromeAutocompleteProviderClient::Classify( metrics::OmniboxEventProto::PageClassification page_classification, AutocompleteMatch* match, GURL* alternate_nav_url) { - AutocompleteClassifier* classifier = - AutocompleteClassifierFactory::GetForProfile(profile_); + AutocompleteClassifier* classifier = GetAutocompleteClassifier(); DCHECK(classifier); classifier->Classify(text, prefer_keyword, allow_exact_keyword_match, page_classification, match, alternate_nav_url); diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h index 3d6bd2b..ef14b10 100644 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h @@ -18,19 +18,23 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { // AutocompleteProviderClient: net::URLRequestContextGetter* GetRequestContext() override; - const AutocompleteSchemeClassifier& GetSchemeClassifier() override; + PrefService* GetPrefs() override; + const AutocompleteSchemeClassifier& GetSchemeClassifier() const override; + AutocompleteClassifier* GetAutocompleteClassifier() override; history::HistoryService* GetHistoryService() override; + scoped_refptr<history::TopSites> GetTopSites() override; bookmarks::BookmarkModel* GetBookmarkModel() override; history::URLDatabase* GetInMemoryDatabase() override; TemplateURLService* GetTemplateURLService() override; - const SearchTermsData& GetSearchTermsData() override; + const TemplateURLService* GetTemplateURLService() const override; + const SearchTermsData& GetSearchTermsData() const override; scoped_refptr<ShortcutsBackend> GetShortcutsBackend() override; scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() override; - std::string GetAcceptLanguages() override; - bool IsOffTheRecord() override; - bool SearchSuggestEnabled() override; - bool ShowBookmarkBar() override; - bool TabSyncEnabledAndUnencrypted() override; + std::string GetAcceptLanguages() const override; + bool IsOffTheRecord() const override; + bool SearchSuggestEnabled() const override; + bool BookmarkBarIsVisible() const override; + bool TabSyncEnabledAndUnencrypted() const override; void Classify( const base::string16& text, bool prefer_keyword, diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc index e659637..05c2b49 100644 --- a/chrome/browser/autocomplete/search_provider_unittest.cc +++ b/chrome/browser/autocomplete/search_provider_unittest.cc @@ -74,7 +74,6 @@ class SearchProviderForTest : public SearchProvider { public: SearchProviderForTest(ChromeAutocompleteProviderClient* client, AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, Profile* profile); bool is_success() { return is_success_; } @@ -90,10 +89,8 @@ class SearchProviderForTest : public SearchProvider { SearchProviderForTest::SearchProviderForTest( ChromeAutocompleteProviderClient* client, AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, Profile* profile) - : SearchProvider(client, listener, template_url_service), - is_success_(false) { + : SearchProvider(client, listener), is_success_(false) { } SearchProviderForTest::~SearchProviderForTest() { @@ -323,8 +320,7 @@ void SearchProviderTest::SetUp() { AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); - provider_ = - new SearchProviderForTest(client_.get(), this, turl_model, &profile_); + provider_ = new SearchProviderForTest(client_.get(), this, &profile_); OmniboxFieldTrial::kDefaultMinimumTimeBetweenSuggestQueriesMs = 0; } diff --git a/chrome/browser/autocomplete/zero_suggest_provider.cc b/chrome/browser/autocomplete/zero_suggest_provider.cc index 4e12588..68c8019 100644 --- a/chrome/browser/autocomplete/zero_suggest_provider.cc +++ b/chrome/browser/autocomplete/zero_suggest_provider.cc @@ -15,13 +15,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "chrome/browser/autocomplete/autocomplete_classifier.h" -#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" -#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h" -#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" -#include "chrome/browser/history/top_sites_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/search_engines/template_url_service_factory.h" -#include "chrome/common/pref_names.h" #include "components/history/core/browser/history_types.h" #include "components/history/core/browser/top_sites.h" #include "components/metrics/proto/omnibox_input_type.pb.h" @@ -30,6 +23,7 @@ #include "components/omnibox/autocomplete_provider_listener.h" #include "components/omnibox/history_url_provider.h" #include "components/omnibox/omnibox_field_trial.h" +#include "components/omnibox/omnibox_pref_names.h" #include "components/omnibox/search_provider.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/search_engines/template_url_service.h" @@ -77,17 +71,15 @@ const int kDefaultZeroSuggestRelevance = 100; // static ZeroSuggestProvider* ZeroSuggestProvider::Create( AutocompleteProviderClient* client, - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, - Profile* profile) { - return new ZeroSuggestProvider(client, listener, template_url_service, - profile); + AutocompleteProviderListener* listener) { + return new ZeroSuggestProvider(client, listener); } // static void ZeroSuggestProvider::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterStringPref(prefs::kZeroSuggestCachedResults, std::string()); + registry->RegisterStringPref(omnibox::kZeroSuggestCachedResults, + std::string()); } void ZeroSuggestProvider::Start(const AutocompleteInput& input, @@ -98,23 +90,24 @@ void ZeroSuggestProvider::Start(const AutocompleteInput& input, return; Stop(true, false); - field_trial_triggered_ = false; - field_trial_triggered_in_session_ = false; + set_field_trial_triggered(false); + set_field_trial_triggered_in_session(false); results_from_cache_ = false; permanent_text_ = input.text(); current_query_ = input.current_url().spec(); current_page_classification_ = input.current_page_classification(); current_url_match_ = MatchForCurrentURL(); + TemplateURLService* template_url_service = client()->GetTemplateURLService(); const TemplateURL* default_provider = - template_url_service_->GetDefaultSearchProvider(); + template_url_service->GetDefaultSearchProvider(); if (default_provider == NULL) return; base::string16 prefix; TemplateURLRef::SearchTermsArgs search_term_args(prefix); GURL suggest_url(default_provider->suggestions_url_ref().ReplaceSearchTerms( - search_term_args, template_url_service_->search_terms_data())); + search_term_args, template_url_service->search_terms_data())); if (!suggest_url.is_valid()) return; @@ -122,15 +115,14 @@ void ZeroSuggestProvider::Start(const AutocompleteInput& input, // most visited field trials. if (CanSendURL(input.current_url(), suggest_url, default_provider, current_page_classification_, - template_url_service_->search_terms_data(), client_) && + template_url_service->search_terms_data(), client()) && !OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() && !OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) { // Update suggest_url to include the current_page_url. search_term_args.current_page_url = current_query_; - suggest_url = GURL(default_provider->suggestions_url_ref(). - ReplaceSearchTerms( - search_term_args, - template_url_service_->search_terms_data())); + suggest_url = + GURL(default_provider->suggestions_url_ref().ReplaceSearchTerms( + search_term_args, template_url_service->search_terms_data())); } else if (!ShouldShowNonContextualZeroSuggest(suggest_url, input.current_url())) { return; @@ -168,7 +160,7 @@ void ZeroSuggestProvider::DeleteMatch(const AutocompleteMatch& match) { if (OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) { // Remove the deleted match from the cache, so it is not shown to the user // again. Since we cannot remove just one result, blow away the cache. - profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, + client()->GetPrefs()->SetString(omnibox::kZeroSuggestCachedResults, std::string()); } BaseSearchProvider::DeleteMatch(match); @@ -184,22 +176,15 @@ void ZeroSuggestProvider::AddProviderInfo(ProvidersInfo* provider_info) const { void ZeroSuggestProvider::ResetSession() { // The user has started editing in the omnibox, so leave - // |field_trial_triggered_in_session_| unchanged and set - // |field_trial_triggered_| to false since zero suggest is inactive now. - field_trial_triggered_ = false; + // |field_trial_triggered_in_session| unchanged and set + // |field_trial_triggered| to false since zero suggest is inactive now. + set_field_trial_triggered(false); } -ZeroSuggestProvider::ZeroSuggestProvider( - AutocompleteProviderClient* client, - - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, - Profile* profile) - : BaseSearchProvider(AutocompleteProvider::TYPE_ZERO_SUGGEST, - client, - template_url_service), +ZeroSuggestProvider::ZeroSuggestProvider(AutocompleteProviderClient* client, + AutocompleteProviderListener* listener) + : BaseSearchProvider(AutocompleteProvider::TYPE_ZERO_SUGGEST, client), listener_(listener), - profile_(profile), results_from_cache_(false), waiting_for_most_visited_urls_request_(false), weak_ptr_factory_(this) { @@ -211,16 +196,16 @@ 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(); + return client()->GetTemplateURLService()->GetDefaultSearchProvider(); } const AutocompleteInput ZeroSuggestProvider::GetInput(bool is_keyword) const { // The callers of this method won't look at the AutocompleteInput's // |from_omnibox_focus| member, so we can set its value to false. - return AutocompleteInput( - base::string16(), base::string16::npos, std::string(), - GURL(current_query_), current_page_classification_, true, false, false, - true, false, ChromeAutocompleteSchemeClassifier(profile_)); + return AutocompleteInput(base::string16(), base::string16::npos, + std::string(), GURL(current_query_), + current_page_classification_, true, false, false, + true, false, client()->GetSchemeClassifier()); } bool ZeroSuggestProvider::ShouldAppendExtraParams( @@ -269,7 +254,8 @@ bool ZeroSuggestProvider::StoreSuggestionResponse( if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial() || json_data.empty()) return false; - profile_->GetPrefs()->SetString(prefs::kZeroSuggestCachedResults, json_data); + client()->GetPrefs()->SetString(omnibox::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. @@ -301,13 +287,12 @@ AutocompleteMatch ZeroSuggestProvider::NavigationToMatch( match.destination_url = navigation.url(); // Zero suggest results should always omit protocols and never appear bold. - const std::string languages( - profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)); + const std::string languages(client()->GetAcceptLanguages()); match.contents = net::FormatUrl(navigation.url(), languages, net::kFormatUrlOmitAll, net::UnescapeRule::SPACES, NULL, NULL, NULL); match.fill_into_edit += - AutocompleteInput::FormattedStringWithEquivalentMeaning(navigation.url(), - match.contents, ChromeAutocompleteSchemeClassifier(profile_)); + AutocompleteInput::FormattedStringWithEquivalentMeaning( + navigation.url(), match.contents, client()->GetSchemeClassifier()); AutocompleteMatch::ClassifyLocationInString(base::string16::npos, 0, match.contents.length(), ACMatchClassification::URL, @@ -324,8 +309,7 @@ AutocompleteMatch ZeroSuggestProvider::NavigationToMatch( void ZeroSuggestProvider::Run(const GURL& suggest_url) { if (OmniboxFieldTrial::InZeroSuggestMostVisitedFieldTrial()) { most_visited_urls_.clear(); - scoped_refptr<history::TopSites> ts = - TopSitesFactory::GetForProfile(profile_); + scoped_refptr<history::TopSites> ts = client()->GetTopSites(); if (ts) { waiting_for_most_visited_urls_request_ = true; ts->GetMostVisitedURLs( @@ -336,12 +320,12 @@ void ZeroSuggestProvider::Run(const GURL& suggest_url) { const int kFetcherID = 1; fetcher_ = net::URLFetcher::Create(kFetcherID, suggest_url, net::URLFetcher::GET, this); - fetcher_->SetRequestContext(profile_->GetRequestContext()); + fetcher_->SetRequestContext(client()->GetRequestContext()); fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders( - fetcher_->GetOriginalURL(), profile_->IsOffTheRecord(), false, + fetcher_->GetOriginalURL(), client()->IsOffTheRecord(), false, &headers); fetcher_->SetExtraRequestHeaders(headers.ToString()); fetcher_->Start(); @@ -362,11 +346,13 @@ void ZeroSuggestProvider::OnMostVisitedUrlsAvailable( void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { matches_.clear(); + TemplateURLService* template_url_service = client()->GetTemplateURLService(); const TemplateURL* default_provider = - template_url_service_->GetDefaultSearchProvider(); + template_url_service->GetDefaultSearchProvider(); // Fail if we can't set the clickthrough URL for query suggestions. - if (default_provider == NULL || !default_provider->SupportsReplacement( - template_url_service_->search_terms_data())) + if (default_provider == NULL || + !default_provider->SupportsReplacement( + template_url_service->search_terms_data())) return; MatchMap map; @@ -392,12 +378,11 @@ void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { } const base::string16 current_query_string16( base::ASCIIToUTF16(current_query_)); - const std::string languages( - profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)); + const std::string languages(client()->GetAcceptLanguages()); for (size_t i = 0; i < most_visited_urls_.size(); i++) { const history::MostVisitedURL& url = most_visited_urls_[i]; SearchSuggestionParser::NavigationResult nav( - ChromeAutocompleteSchemeClassifier(profile_), url.url, + client()->GetSchemeClassifier(), url.url, AutocompleteMatchType::NAVSUGGEST, url.title, std::string(), false, relevance, true, current_query_string16, languages); matches_.push_back(NavigationToMatch(nav)); @@ -425,7 +410,7 @@ void ZeroSuggestProvider::ConvertResultsToAutocompleteMatches() { AutocompleteMatch ZeroSuggestProvider::MatchForCurrentURL() { AutocompleteMatch match; - AutocompleteClassifierFactory::GetForProfile(profile_)->Classify( + client()->GetAutocompleteClassifier()->Classify( permanent_text_, false, true, current_page_classification_, &match, NULL); match.allowed_to_be_default_match = true; @@ -445,10 +430,12 @@ int ZeroSuggestProvider::GetVerbatimRelevance() const { bool ZeroSuggestProvider::ShouldShowNonContextualZeroSuggest( const GURL& suggest_url, const GURL& current_page_url) const { + const TemplateURLService* template_url_service = + client()->GetTemplateURLService(); if (!ZeroSuggestEnabled(suggest_url, - template_url_service_->GetDefaultSearchProvider(), + template_url_service->GetDefaultSearchProvider(), current_page_classification_, - template_url_service_->search_terms_data(), client_)) + template_url_service->search_terms_data(), client())) return false; // If we cannot send URLs, then only the MostVisited and Personalized @@ -467,8 +454,9 @@ bool ZeroSuggestProvider::ShouldShowNonContextualZeroSuggest( return false; if (OmniboxFieldTrial::InZeroSuggestMostVisitedWithoutSerpFieldTrial() && - template_url_service_-> - IsSearchResultsPageFromDefaultSearchProvider(current_page_url)) + client() + ->GetTemplateURLService() + ->IsSearchResultsPageFromDefaultSearchProvider(current_page_url)) return false; return true; @@ -478,8 +466,8 @@ void ZeroSuggestProvider::MaybeUseCachedSuggestions() { if (!OmniboxFieldTrial::InZeroSuggestPersonalizedFieldTrial()) return; - std::string json_data = profile_->GetPrefs()->GetString( - prefs::kZeroSuggestCachedResults); + std::string json_data = + client()->GetPrefs()->GetString(omnibox::kZeroSuggestCachedResults); if (!json_data.empty()) { scoped_ptr<base::Value> data( SearchSuggestionParser::DeserializeJsonData(json_data)); diff --git a/chrome/browser/autocomplete/zero_suggest_provider.h b/chrome/browser/autocomplete/zero_suggest_provider.h index af53895..481b04e1 100644 --- a/chrome/browser/autocomplete/zero_suggest_provider.h +++ b/chrome/browser/autocomplete/zero_suggest_provider.h @@ -19,8 +19,6 @@ #include "net/url_request/url_fetcher_delegate.h" class AutocompleteProviderListener; -class Profile; -class TemplateURLService; namespace base { class ListValue; @@ -50,9 +48,7 @@ class ZeroSuggestProvider : public BaseSearchProvider, public: // Creates and returns an instance of this provider. static ZeroSuggestProvider* Create(AutocompleteProviderClient* client, - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, - Profile* profile); + AutocompleteProviderListener* listener); // Registers a preference used to cache zero suggest results. static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); @@ -69,9 +65,7 @@ class ZeroSuggestProvider : public BaseSearchProvider, private: ZeroSuggestProvider(AutocompleteProviderClient* client, - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service, - Profile* profile); + AutocompleteProviderListener* listener); ~ZeroSuggestProvider() override; @@ -133,7 +127,6 @@ class ZeroSuggestProvider : public BaseSearchProvider, void MaybeUseCachedSuggestions(); AutocompleteProviderListener* listener_; - Profile* profile_; // The URL for which a suggestion fetch is pending. std::string current_query_; diff --git a/chrome/browser/autocomplete/zero_suggest_provider_unittest.cc b/chrome/browser/autocomplete/zero_suggest_provider_unittest.cc index 4b965a0d..d00670e 100644 --- a/chrome/browser/autocomplete/zero_suggest_provider_unittest.cc +++ b/chrome/browser/autocomplete/zero_suggest_provider_unittest.cc @@ -19,6 +19,7 @@ #include "components/metrics/proto/omnibox_event.pb.h" #include "components/omnibox/autocomplete_provider_listener.h" #include "components/omnibox/omnibox_field_trial.h" +#include "components/omnibox/omnibox_pref_names.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_service.h" #include "components/variations/entropy_provider.h" @@ -180,8 +181,7 @@ void ZeroSuggestProviderTest::SetUp() { TopSitesFactory* top_sites_factory = TopSitesFactory::GetInstance(); top_sites_factory->SetTestingFactory(&profile_, BuildFakeEmptyTopSites); - provider_ = - ZeroSuggestProvider::Create(client_.get(), this, turl_model, &profile_); + provider_ = ZeroSuggestProvider::Create(client_.get(), this); } void ZeroSuggestProviderTest::TearDown() { @@ -237,7 +237,7 @@ TEST_F(ZeroSuggestProviderTest, TestDoesNotReturnMatchesForPrefix) { "[],[],{\"google:suggestrelevance\":[602, 601, 600]," "\"google:verbatimrelevance\":1300}]"); PrefService* prefs = profile_.GetPrefs(); - prefs->SetString(prefs::kZeroSuggestCachedResults, json_response); + prefs->SetString(omnibox::kZeroSuggestCachedResults, json_response); provider_->Start(input, false); @@ -322,7 +322,7 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestCachingFirstRun) { // Ensure the cache is empty. PrefService* prefs = profile_.GetPrefs(); - prefs->SetString(prefs::kZeroSuggestCachedResults, std::string()); + prefs->SetString(omnibox::kZeroSuggestCachedResults, std::string()); std::string url("http://www.cnn.com/"); AutocompleteInput input( @@ -332,7 +332,7 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestCachingFirstRun) { provider_->Start(input, false); - EXPECT_TRUE(prefs->GetString(prefs::kZeroSuggestCachedResults).empty()); + EXPECT_TRUE(prefs->GetString(omnibox::kZeroSuggestCachedResults).empty()); EXPECT_TRUE(provider_->matches().empty()); net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID(1); @@ -347,7 +347,8 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestCachingFirstRun) { base::RunLoop().RunUntilIdle(); EXPECT_EQ(4U, provider_->matches().size()); // 3 results + verbatim - EXPECT_EQ(json_response, prefs->GetString(prefs::kZeroSuggestCachedResults)); + EXPECT_EQ(json_response, + prefs->GetString(omnibox::kZeroSuggestCachedResults)); } TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestHasCachedResults) { @@ -364,7 +365,7 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestHasCachedResults) { "[],[],{\"google:suggestrelevance\":[602, 601, 600]," "\"google:verbatimrelevance\":1300}]"); PrefService* prefs = profile_.GetPrefs(); - prefs->SetString(prefs::kZeroSuggestCachedResults, json_response); + prefs->SetString(omnibox::kZeroSuggestCachedResults, json_response); provider_->Start(input, false); @@ -393,7 +394,7 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestHasCachedResults) { // Expect the new results have been stored. EXPECT_EQ(json_response2, - prefs->GetString(prefs::kZeroSuggestCachedResults)); + prefs->GetString(omnibox::kZeroSuggestCachedResults)); } TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestReceivedEmptyResults) { @@ -410,7 +411,7 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestReceivedEmptyResults) { "[],[],{\"google:suggestrelevance\":[602, 601, 600]," "\"google:verbatimrelevance\":1300}]"); PrefService* prefs = profile_.GetPrefs(); - prefs->SetString(prefs::kZeroSuggestCachedResults, json_response); + prefs->SetString(omnibox::kZeroSuggestCachedResults, json_response); provider_->Start(input, false); @@ -434,5 +435,5 @@ TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestReceivedEmptyResults) { // Expect the new results have been stored. EXPECT_EQ(empty_response, - prefs->GetString(prefs::kZeroSuggestCachedResults)); + prefs->GetString(omnibox::kZeroSuggestCachedResults)); } diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc index f657658..bc4cf60 100644 --- a/chrome/browser/browsing_data/browsing_data_remover.cc +++ b/chrome/browser/browsing_data/browsing_data_remover.cc @@ -46,6 +46,7 @@ #include "components/history/core/browser/history_service.h" #include "components/nacl/browser/nacl_browser.h" #include "components/nacl/browser/pnacl_host.h" +#include "components/omnibox/omnibox_pref_names.h" #include "components/password_manager/core/browser/password_store.h" #include "components/power/origin_power_map.h" #include "components/power/origin_power_map_factory.h" @@ -713,7 +714,7 @@ void BrowsingDataRemover::RemoveImpl(int remove_mask, // Remove omnibox zero-suggest cache results. if ((remove_mask & (REMOVE_CACHE | REMOVE_COOKIES))) - prefs->SetString(prefs::kZeroSuggestCachedResults, std::string()); + prefs->SetString(omnibox::kZeroSuggestCachedResults, std::string()); // Always wipe accumulated network related data (TransportSecurityState and // HttpServerPropertiesManager data). diff --git a/chrome/browser/browsing_data/browsing_data_remover_unittest.cc b/chrome/browser/browsing_data/browsing_data_remover_unittest.cc index e6d7c9a..094a826b52 100644 --- a/chrome/browser/browsing_data/browsing_data_remover_unittest.cc +++ b/chrome/browser/browsing_data/browsing_data_remover_unittest.cc @@ -42,6 +42,7 @@ #include "components/domain_reliability/service.h" #include "components/favicon/core/favicon_service.h" #include "components/history/core/browser/history_service.h" +#include "components/omnibox/omnibox_pref_names.h" #include "content/public/browser/cookie_store_factory.h" #include "content/public/browser/dom_storage_context.h" #include "content/public/browser/local_storage_usage_info.h" @@ -1882,14 +1883,14 @@ TEST_F(BrowsingDataRemoverTest, CompletionInhibition) { TEST_F(BrowsingDataRemoverTest, ZeroSuggestCacheClear) { PrefService* prefs = GetProfile()->GetPrefs(); - prefs->SetString(prefs::kZeroSuggestCachedResults, + prefs->SetString(omnibox::kZeroSuggestCachedResults, "[\"\", [\"foo\", \"bar\"]]"); BlockUntilBrowsingDataRemoved(BrowsingDataRemover::EVERYTHING, BrowsingDataRemover::REMOVE_COOKIES, false); // Expect the prefs to be cleared when cookies are removed. - EXPECT_TRUE(prefs->GetString(prefs::kZeroSuggestCachedResults).empty()); + EXPECT_TRUE(prefs->GetString(omnibox::kZeroSuggestCachedResults).empty()); EXPECT_EQ(BrowsingDataRemover::REMOVE_COOKIES, GetRemovalMask()); EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask()); } diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index a964e15..037c82d 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -1199,9 +1199,6 @@ const char kEasyUnlockPairing[] = "easy_unlock.pairing"; // in order to use Easy Unlock. const char kEasyUnlockProximityRequired[] = "easy_unlock.proximity_required"; -// A cache of zero suggest results using JSON serialized into a string. -const char kZeroSuggestCachedResults[] = "zerosuggest.cachedresults"; - #if defined(ENABLE_EXTENSIONS) && !defined(OS_ANDROID) && !defined(OS_IOS) // These device IDs are used by the copresence component, to uniquely identify // this device to the server. For privacy, authenticated and unauthenticated diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 3337025..aedb9de 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -411,8 +411,6 @@ extern const char kEasyUnlockEnabled[]; extern const char kEasyUnlockPairing[]; extern const char kEasyUnlockProximityRequired[]; -extern const char kZeroSuggestCachedResults[]; - #if defined(ENABLE_EXTENSIONS) && !defined(OS_ANDROID) && !defined(OS_IOS) extern const char kCopresenceAuthenticatedDeviceId[]; extern const char kCopresenceAnonymousDeviceId[]; diff --git a/components/history.gypi b/components/history.gypi index 9ecec9f..5204782 100644 --- a/components/history.gypi +++ b/components/history.gypi @@ -30,6 +30,9 @@ 'query_parser', 'signin_core_browser', ], + 'export_dependent_settings': [ + '../skia/skia.gyp:skia', + ], 'sources': [ # Note: sources list duplicated in GN build. 'history/core/browser/delete_directive_handler.cc', diff --git a/components/history/core/browser/BUILD.gn b/components/history/core/browser/BUILD.gn index d0f5008..eaaf3f4 100644 --- a/components/history/core/browser/BUILD.gn +++ b/components/history/core/browser/BUILD.gn @@ -80,6 +80,10 @@ static_library("browser") { "web_history_service.h", ] + public_deps = [ + "//skia", + ] + deps = [ "//base", "//base:i18n", @@ -91,7 +95,6 @@ static_library("browser") { "//components/signin/core/browser", "//google_apis", "//net", - "//skia", "//sql", "//sync", "//third_party/sqlite", diff --git a/components/omnibox.gypi b/components/omnibox.gypi index aa58ea8..c228804 100644 --- a/components/omnibox.gypi +++ b/components/omnibox.gypi @@ -31,6 +31,7 @@ ], 'export_dependent_settings': [ 'component_metrics_proto', + 'history_core_browser', ], 'include_dirs': [ '..', @@ -74,6 +75,8 @@ 'omnibox/omnibox_field_trial.h', 'omnibox/omnibox_log.cc', 'omnibox/omnibox_log.h', + 'omnibox/omnibox_pref_names.cc', + 'omnibox/omnibox_pref_names.h', 'omnibox/omnibox_switches.cc', 'omnibox/omnibox_switches.h', 'omnibox/scored_history_match.cc', diff --git a/components/omnibox/BUILD.gn b/components/omnibox/BUILD.gn index b88d201..6d669bd 100644 --- a/components/omnibox/BUILD.gn +++ b/components/omnibox/BUILD.gn @@ -41,6 +41,8 @@ static_library("omnibox") { "omnibox_field_trial.h", "omnibox_log.cc", "omnibox_log.h", + "omnibox_pref_names.cc", + "omnibox_pref_names.h", "omnibox_switches.cc", "omnibox_switches.h", "scored_history_match.cc", @@ -64,6 +66,7 @@ static_library("omnibox") { ] public_deps = [ + "//components/history/core/browser", "//components/metrics/proto", ] deps = [ @@ -71,7 +74,6 @@ static_library("omnibox") { "//base", "//base:i18n", "//components/bookmarks/browser", - "//components/history/core/browser", "//components/keyed_service/core", "//components/query_parser", "//components/resources", diff --git a/components/omnibox/autocomplete_provider_client.h b/components/omnibox/autocomplete_provider_client.h index 97d1134..32dd416 100644 --- a/components/omnibox/autocomplete_provider_client.h +++ b/components/omnibox/autocomplete_provider_client.h @@ -8,13 +8,16 @@ #include "base/memory/ref_counted.h" #include "base/strings/string16.h" #include "components/history/core/browser/keyword_id.h" +#include "components/history/core/browser/top_sites.h" #include "components/metrics/proto/omnibox_event.pb.h" #include "components/omnibox/shortcuts_backend.h" class AutocompleteController; struct AutocompleteMatch; +class AutocompleteClassifier; class AutocompleteSchemeClassifier; class GURL; +class PrefService; class ShortcutsBackend; namespace bookmarks { @@ -38,26 +41,30 @@ class AutocompleteProviderClient { virtual ~AutocompleteProviderClient() {} virtual net::URLRequestContextGetter* GetRequestContext() = 0; - virtual const AutocompleteSchemeClassifier& GetSchemeClassifier() = 0; + virtual PrefService* GetPrefs() = 0; + virtual const AutocompleteSchemeClassifier& GetSchemeClassifier() const = 0; + virtual AutocompleteClassifier* GetAutocompleteClassifier() = 0; virtual history::HistoryService* GetHistoryService() = 0; + virtual scoped_refptr<history::TopSites> GetTopSites() = 0; virtual bookmarks::BookmarkModel* GetBookmarkModel() = 0; virtual history::URLDatabase* GetInMemoryDatabase() = 0; virtual TemplateURLService* GetTemplateURLService() = 0; - virtual const SearchTermsData& GetSearchTermsData() = 0; + virtual const TemplateURLService* GetTemplateURLService() const = 0; + virtual const SearchTermsData& GetSearchTermsData() const = 0; virtual scoped_refptr<ShortcutsBackend> GetShortcutsBackend() = 0; virtual scoped_refptr<ShortcutsBackend> GetShortcutsBackendIfExists() = 0; // The value to use for Accept-Languages HTTP header when making an HTTP // request. - virtual std::string GetAcceptLanguages() = 0; + virtual std::string GetAcceptLanguages() const = 0; - virtual bool IsOffTheRecord() = 0; - virtual bool SearchSuggestEnabled() = 0; + virtual bool IsOffTheRecord() const = 0; + virtual bool SearchSuggestEnabled() const = 0; // Returns whether the bookmark bar is visible on all tabs. - virtual bool ShowBookmarkBar() = 0; + virtual bool BookmarkBarIsVisible() const = 0; - virtual bool TabSyncEnabledAndUnencrypted() = 0; + virtual bool TabSyncEnabledAndUnencrypted() const = 0; // Given some string |text| that the user wants to use for navigation, // determines how it should be interpreted. diff --git a/components/omnibox/base_search_provider.cc b/components/omnibox/base_search_provider.cc index 3d74c51..31b0c28 100644 --- a/components/omnibox/base_search_provider.cc +++ b/components/omnibox/base_search_provider.cc @@ -82,12 +82,9 @@ const int BaseSearchProvider::kKeywordProviderURLFetcherID = 2; const int BaseSearchProvider::kDeletionURLFetcherID = 3; BaseSearchProvider::BaseSearchProvider(AutocompleteProvider::Type type, - AutocompleteProviderClient* client, - - TemplateURLService* template_url_service) + AutocompleteProviderClient* client) : AutocompleteProvider(type), client_(client), - template_url_service_(template_url_service), field_trial_triggered_(false), field_trial_triggered_in_session_(false) { } @@ -129,7 +126,7 @@ void BaseSearchProvider::DeleteMatch(const AutocompleteMatch& match) { } TemplateURL* template_url = - match.GetTemplateURL(template_url_service_, false); + match.GetTemplateURL(client_->GetTemplateURLService(), false); // This may be NULL if the template corresponding to the keyword has been // deleted or there is no keyword set. if (template_url != NULL) { @@ -174,11 +171,13 @@ void BaseSearchProvider::SetDeletionURL(const std::string& deletion_url, AutocompleteMatch* match) { if (deletion_url.empty()) return; - if (!template_url_service_) + + TemplateURLService* template_url_service = client_->GetTemplateURLService(); + if (!template_url_service) return; GURL url = - template_url_service_->GetDefaultSearchProvider()->GenerateSearchURL( - template_url_service_->search_terms_data()); + template_url_service->GetDefaultSearchProvider()->GenerateSearchURL( + template_url_service->search_terms_data()); url = url.GetOrigin().Resolve(deletion_url); if (url.is_valid()) { match->RecordAdditionalInfo(BaseSearchProvider::kDeletionUrlKey, @@ -282,7 +281,7 @@ bool BaseSearchProvider::ZeroSuggestEnabled( const TemplateURL* template_url, OmniboxEventProto::PageClassification page_classification, const SearchTermsData& search_terms_data, - AutocompleteProviderClient* client) { + const AutocompleteProviderClient* client) { if (!OmniboxFieldTrial::InZeroSuggestFieldTrial()) return false; @@ -360,11 +359,12 @@ void BaseSearchProvider::AddMatchToMap( AutocompleteMatch match = CreateSearchSuggestion( this, GetInput(result.from_keyword_provider()), in_keyword_mode, result, GetTemplateURL(result.from_keyword_provider()), - template_url_service_->search_terms_data(), accepted_suggestion, - ShouldAppendExtraParams(result)); + client_->GetTemplateURLService()->search_terms_data(), + accepted_suggestion, ShouldAppendExtraParams(result)); if (!match.destination_url.is_valid()) return; - match.search_terms_args->bookmark_bar_pinned = client_->ShowBookmarkBar(); + match.search_terms_args->bookmark_bar_pinned = + client_->BookmarkBarIsVisible(); match.RecordAdditionalInfo(kRelevanceFromServerKey, result.relevance_from_server() ? kTrue : kFalse); match.RecordAdditionalInfo(kShouldPrefetchKey, diff --git a/components/omnibox/base_search_provider.h b/components/omnibox/base_search_provider.h index 25d0fe6..edddc57 100644 --- a/components/omnibox/base_search_provider.h +++ b/components/omnibox/base_search_provider.h @@ -27,7 +27,6 @@ class GURL; class SearchTermsData; class SuggestionDeletionHandler; class TemplateURL; -class TemplateURLService; namespace base { class DictionaryValue; @@ -50,8 +49,7 @@ class BaseSearchProvider : public AutocompleteProvider { static const int kDeletionURLFetcherID; BaseSearchProvider(AutocompleteProvider::Type type, - AutocompleteProviderClient* client, - TemplateURLService* template_url_service); + AutocompleteProviderClient* client); // Returns whether |match| is flagged as a query that should be prefetched. static bool ShouldPrefetch(const AutocompleteMatch& match); @@ -141,11 +139,11 @@ class BaseSearchProvider : public AutocompleteProvider { // providers to see this data someday, but for now this has only been // implemented for Google. static bool ZeroSuggestEnabled( - const GURL& suggest_url, - const TemplateURL* template_url, - metrics::OmniboxEventProto::PageClassification page_classification, - const SearchTermsData& search_terms_data, - AutocompleteProviderClient* client); + const GURL& suggest_url, + const TemplateURL* template_url, + metrics::OmniboxEventProto::PageClassification page_classification, + const SearchTermsData& search_terms_data, + const AutocompleteProviderClient* client); // Returns whether we can send the URL of the current page in any suggest // requests. Doing this requires that all the following hold: @@ -220,18 +218,17 @@ class BaseSearchProvider : public AutocompleteProvider { // Records in UMA whether the deletion request resulted in success. virtual void RecordDeletionResult(bool success) = 0; - AutocompleteProviderClient* client_; - TemplateURLService* template_url_service_; + AutocompleteProviderClient* client() { return client_; } + const AutocompleteProviderClient* client() const { return client_; } - // Whether a field trial, if any, has triggered in the most recent - // autocomplete query. This field is set to true only if the suggestion - // provider has completed and the response contained - // '"google:fieldtrialtriggered":true'. - bool field_trial_triggered_; + bool field_trial_triggered() const { return field_trial_triggered_; } - // Same as above except that it is maintained across the current Omnibox - // session. - bool field_trial_triggered_in_session_; + void set_field_trial_triggered(bool triggered) { + field_trial_triggered_ = triggered; + } + void set_field_trial_triggered_in_session(bool triggered) { + field_trial_triggered_in_session_ = triggered; + } private: friend class SearchProviderTest; @@ -246,6 +243,18 @@ class BaseSearchProvider : public AutocompleteProvider { void OnDeletionComplete(bool success, SuggestionDeletionHandler* handler); + AutocompleteProviderClient* client_; + + // Whether a field trial, if any, has triggered in the most recent + // autocomplete query. This field is set to true only if the suggestion + // provider has completed and the response contained + // '"google:fieldtrialtriggered":true'. + bool field_trial_triggered_; + + // Same as above except that it is maintained across the current Omnibox + // session. + bool field_trial_triggered_in_session_; + // Each deletion handler in this vector corresponds to an outstanding request // that a server delete a personalized suggestion. Making this a ScopedVector // causes us to auto-cancel all such requests on shutdown. diff --git a/components/omnibox/base_search_provider_unittest.cc b/components/omnibox/base_search_provider_unittest.cc index c790d13..ba17890 100644 --- a/components/omnibox/base_search_provider_unittest.cc +++ b/components/omnibox/base_search_provider_unittest.cc @@ -24,14 +24,33 @@ using testing::_; class MockAutocompleteProviderClient : public AutocompleteProviderClient { public: - MockAutocompleteProviderClient() {} + MockAutocompleteProviderClient() { + template_url_service_.reset(new TemplateURLService( + nullptr, scoped_ptr<SearchTermsData>(new SearchTermsData), nullptr, + scoped_ptr<TemplateURLServiceClient>(), nullptr, nullptr, + base::Closure())); + } MOCK_METHOD0(GetRequestContext, net::URLRequestContextGetter*()); - MOCK_METHOD0(GetSchemeClassifier, const AutocompleteSchemeClassifier&()); + MOCK_METHOD0(GetPrefs, PrefService*()); + MOCK_CONST_METHOD0(GetSchemeClassifier, + const AutocompleteSchemeClassifier&()); + MOCK_METHOD0(GetAutocompleteClassifier, AutocompleteClassifier*()); MOCK_METHOD0(GetHistoryService, history::HistoryService*()); + + // Can't mock scoped_refptr :\. + scoped_refptr<history::TopSites> GetTopSites() override { return nullptr; } + MOCK_METHOD0(GetBookmarkModel, bookmarks::BookmarkModel*()); MOCK_METHOD0(GetInMemoryDatabase, history::URLDatabase*()); - MOCK_METHOD0(GetTemplateURLService, TemplateURLService*()); - MOCK_METHOD0(GetSearchTermsData, const SearchTermsData&()); + + TemplateURLService* GetTemplateURLService() override { + return template_url_service_.get(); + } + const TemplateURLService* GetTemplateURLService() const override { + return template_url_service_.get(); + } + + MOCK_CONST_METHOD0(GetSearchTermsData, const SearchTermsData&()); // Can't mock scoped_refptr :\. scoped_refptr<ShortcutsBackend> GetShortcutsBackend() override { @@ -41,11 +60,11 @@ class MockAutocompleteProviderClient : public AutocompleteProviderClient { return nullptr; } - MOCK_METHOD0(GetAcceptLanguages, std::string()); - MOCK_METHOD0(IsOffTheRecord, bool()); - MOCK_METHOD0(SearchSuggestEnabled, bool()); - MOCK_METHOD0(ShowBookmarkBar, bool()); - MOCK_METHOD0(TabSyncEnabledAndUnencrypted, bool()); + MOCK_CONST_METHOD0(GetAcceptLanguages, std::string()); + MOCK_CONST_METHOD0(IsOffTheRecord, bool()); + MOCK_CONST_METHOD0(SearchSuggestEnabled, bool()); + MOCK_CONST_METHOD0(BookmarkBarIsVisible, bool()); + MOCK_CONST_METHOD0(TabSyncEnabledAndUnencrypted, bool()); MOCK_METHOD6( Classify, void(const base::string16& text, @@ -59,6 +78,8 @@ class MockAutocompleteProviderClient : public AutocompleteProviderClient { MOCK_METHOD1(PrefetchImage, void(const GURL& url)); private: + scoped_ptr<TemplateURLService> template_url_service_; + DISALLOW_COPY_AND_ASSIGN(MockAutocompleteProviderClient); }; @@ -67,9 +88,8 @@ class TestBaseSearchProvider : public BaseSearchProvider { typedef BaseSearchProvider::MatchMap MatchMap; TestBaseSearchProvider(AutocompleteProvider::Type type, - AutocompleteProviderClient* client, - TemplateURLService* template_url_service) - : BaseSearchProvider(type, client, template_url_service) {} + AutocompleteProviderClient* client) + : BaseSearchProvider(type, client) {} MOCK_METHOD1(DeleteMatch, void(const AutocompleteMatch& match)); MOCK_CONST_METHOD1(AddProviderInfo, void(ProvidersInfo* provider_info)); MOCK_CONST_METHOD1(GetTemplateURL, const TemplateURL*(bool is_keyword)); @@ -107,21 +127,12 @@ class BaseSearchProviderTest : public testing::Test { protected: void SetUp() override { - service_.reset( - new TemplateURLService(NULL, - scoped_ptr<SearchTermsData>(new SearchTermsData), - NULL, - scoped_ptr<TemplateURLServiceClient>(), - NULL, - NULL, - base::Closure())); client_.reset(new NiceMock<MockAutocompleteProviderClient>()); provider_ = new NiceMock<TestBaseSearchProvider>( - AutocompleteProvider::TYPE_SEARCH, client_.get(), service_.get()); + AutocompleteProvider::TYPE_SEARCH, client_.get()); } scoped_refptr<NiceMock<TestBaseSearchProvider> > provider_; - scoped_ptr<TemplateURLService> service_; scoped_ptr<NiceMock<MockAutocompleteProviderClient>> client_; }; diff --git a/components/omnibox/omnibox_pref_names.cc b/components/omnibox/omnibox_pref_names.cc new file mode 100644 index 0000000..ea18080 --- /dev/null +++ b/components/omnibox/omnibox_pref_names.cc @@ -0,0 +1,12 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/omnibox/omnibox_pref_names.h" + +namespace omnibox { + +// A cache of zero suggest results using JSON serialized into a string. +const char kZeroSuggestCachedResults[] = "zerosuggest.cachedresults"; + +} // namespace omnibox diff --git a/components/omnibox/omnibox_pref_names.h b/components/omnibox/omnibox_pref_names.h new file mode 100644 index 0000000..b24a4c9 --- /dev/null +++ b/components/omnibox/omnibox_pref_names.h @@ -0,0 +1,17 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_OMNIBOX_OMNIBOX_PREF_NAMES_H_ +#define COMPONENTS_OMNIBOX_OMNIBOX_PREF_NAMES_H_ + +namespace omnibox { + +// Alphabetical list of preference names specific to the omnibox component. +// Keep alphabetized, and document each in the .cc file. + +extern const char kZeroSuggestCachedResults[]; + +} // namespace metrics + +#endif // COMPONENTS_OMNIBOX_OMNIBOX_PREF_NAMES_H_ diff --git a/components/omnibox/search_provider.cc b/components/omnibox/search_provider.cc index 4b518d3..2b904b6 100644 --- a/components/omnibox/search_provider.cc +++ b/components/omnibox/search_provider.cc @@ -119,17 +119,16 @@ class SearchProvider::CompareScoredResults { // SearchProvider ------------------------------------------------------------- SearchProvider::SearchProvider(AutocompleteProviderClient* client, - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service) - : BaseSearchProvider(AutocompleteProvider::TYPE_SEARCH, - client, - template_url_service), + AutocompleteProviderListener* listener) + : BaseSearchProvider(AutocompleteProvider::TYPE_SEARCH, client), listener_(listener), - providers_(template_url_service), + providers_(client->GetTemplateURLService()), answers_cache_(10) { - // |template_url_service_| can be null in tests. - if (template_url_service_) - template_url_service_->AddObserver(this); + TemplateURLService* template_url_service = client->GetTemplateURLService(); + + // |template_url_service| can be null in tests. + if (template_url_service) + template_url_service->AddObserver(this); } // static @@ -138,7 +137,7 @@ std::string SearchProvider::GetSuggestMetadata(const AutocompleteMatch& match) { } void SearchProvider::ResetSession() { - field_trial_triggered_in_session_ = false; + set_field_trial_triggered_in_session(false); } void SearchProvider::OnTemplateURLServiceChanged() { @@ -159,7 +158,10 @@ void SearchProvider::OnTemplateURLServiceChanged() { if (!template_url) { CancelFetcher(&default_fetcher_); default_results_.Clear(); - providers_.set(template_url_service_->GetDefaultSearchProvider()->keyword(), + providers_.set(client() + ->GetTemplateURLService() + ->GetDefaultSearchProvider() + ->keyword(), providers_.keyword_provider()); } template_url = providers_.GetKeywordProviderURL(); @@ -179,8 +181,9 @@ void SearchProvider::OnTemplateURLServiceChanged() { } SearchProvider::~SearchProvider() { - if (template_url_service_) - template_url_service_->RemoveObserver(this); + TemplateURLService* template_url_service = client()->GetTemplateURLService(); + if (template_url_service) + template_url_service->RemoveObserver(this); } // static @@ -234,12 +237,12 @@ void SearchProvider::Start(const AutocompleteInput& input, bool minimal_changes) { // Do our best to load the model as early as possible. This will reduce // odds of having the model not ready when really needed (a non-empty input). - TemplateURLService* model = providers_.template_url_service(); + TemplateURLService* model = client()->GetTemplateURLService(); DCHECK(model); model->Load(); matches_.clear(); - field_trial_triggered_ = false; + set_field_trial_triggered(false); // Can't return search/suggest results for bogus input. if (input.from_omnibox_focus() || @@ -417,7 +420,7 @@ void SearchProvider::UpdateMatchContentsClass( sug_it != results->suggest_results.end(); ++sug_it) { sug_it->ClassifyMatchContents(false, input_text); } - const std::string languages(client_->GetAcceptLanguages()); + const std::string languages(client()->GetAcceptLanguages()); for (SearchSuggestionParser::NavigationResults::iterator nav_it = results->navigation_results.begin(); nav_it != results->navigation_results.end(); ++nav_it) { @@ -460,8 +463,8 @@ void SearchProvider::LogFetchComplete(bool success, bool is_keyword) { const TemplateURL* default_url = providers_.GetDefaultProviderURL(); if (!is_keyword && default_url && (TemplateURLPrepopulateData::GetEngineType( - *default_url, - providers_.template_url_service()->search_terms_data()) == + *default_url, + client()->GetTemplateURLService()->search_terms_data()) == SEARCH_ENGINE_GOOGLE)) { const base::TimeDelta elapsed_time = base::TimeTicks::Now() - time_suggest_request_sent_; @@ -588,7 +591,7 @@ void SearchProvider::DoHistoryQuery(bool minimal_changes) { input_.current_page_classification())) return; - history::URLDatabase* url_db = client_->GetInMemoryDatabase(); + history::URLDatabase* url_db = client()->GetInMemoryDatabase(); if (!url_db) return; @@ -706,10 +709,10 @@ bool SearchProvider::IsQuerySuitableForSuggest(bool* query_is_private) const { // keyword input to a keyword suggest server, if any.) const TemplateURL* default_url = providers_.GetDefaultProviderURL(); const TemplateURL* keyword_url = providers_.GetKeywordProviderURL(); - return !client_->IsOffTheRecord() && client_->SearchSuggestEnabled() && - ((default_url && !default_url->suggestions_url().empty() && - !*query_is_private) || - (keyword_url && !keyword_url->suggestions_url().empty())); + return !client()->IsOffTheRecord() && client()->SearchSuggestEnabled() && + ((default_url && !default_url->suggestions_url().empty() && + !*query_is_private) || + (keyword_url && !keyword_url->suggestions_url().empty())); } bool SearchProvider::IsQueryPotentionallyPrivate() const { @@ -842,32 +845,32 @@ scoped_ptr<net::URLFetcher> SearchProvider::CreateSuggestFetcher( } GURL suggest_url(template_url->suggestions_url_ref().ReplaceSearchTerms( search_term_args, - providers_.template_url_service()->search_terms_data())); + client()->GetTemplateURLService()->search_terms_data())); if (!suggest_url.is_valid()) return NULL; // Send the current page URL if user setting and URL requirements are met and // the user is in the field trial. + TemplateURLService* template_url_service = client()->GetTemplateURLService(); if (CanSendURL(input.current_url(), suggest_url, template_url, input.current_page_classification(), - template_url_service_->search_terms_data(), client_) && + template_url_service->search_terms_data(), client()) && OmniboxFieldTrial::InZeroSuggestAfterTypingFieldTrial()) { search_term_args.current_page_url = input.current_url().spec(); // Create the suggest URL again with the current page URL. suggest_url = GURL(template_url->suggestions_url_ref().ReplaceSearchTerms( - search_term_args, - providers_.template_url_service()->search_terms_data())); + search_term_args, template_url_service->search_terms_data())); } LogOmniboxSuggestRequest(REQUEST_SENT); scoped_ptr<net::URLFetcher> fetcher = net::URLFetcher::Create(id, suggest_url, net::URLFetcher::GET, this); - fetcher->SetRequestContext(client_->GetRequestContext()); + fetcher->SetRequestContext(client()->GetRequestContext()); fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES); // Add Chrome experiment state to the request headers. net::HttpRequestHeaders headers; variations::VariationsHttpHeaderProvider::GetInstance()->AppendHeaders( - fetcher->GetOriginalURL(), client_->IsOffTheRecord(), false, &headers); + fetcher->GetOriginalURL(), client()->IsOffTheRecord(), false, &headers); fetcher->SetExtraRequestHeaders(headers.ToString()); fetcher->Start(); return fetcher; @@ -1185,8 +1188,8 @@ SearchProvider::ScoreHistoryResultsHelper(const HistoryResults& results, if (!base_prevent_inline_autocomplete && !found_what_you_typed_match && scored_results.front().relevance() >= 1200) { AutocompleteMatch match; - client_->Classify(scored_results.front().suggestion(), false, false, - input_.current_page_classification(), &match, NULL); + client()->Classify(scored_results.front().suggestion(), false, false, + input_.current_page_classification(), &match, NULL); // Demote this match that would normally be interpreted as a URL to have // the highest score a previously-issued search query could have when // scoring with the non-aggressive method. A consequence of demoting @@ -1397,7 +1400,7 @@ AutocompleteMatch SearchProvider::NavigationToMatch( const net::FormatUrlTypes format_types = net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP); - const std::string languages(client_->GetAcceptLanguages()); + const std::string languages(client()->GetAcceptLanguages()); size_t inline_autocomplete_offset = (prefix == NULL) ? base::string16::npos : (match_start + input.length()); match.fill_into_edit += @@ -1406,7 +1409,7 @@ AutocompleteMatch SearchProvider::NavigationToMatch( net::FormatUrl(navigation.url(), languages, format_types, net::UnescapeRule::SPACES, NULL, NULL, &inline_autocomplete_offset), - client_->GetSchemeClassifier()); + client()->GetSchemeClassifier()); // Preserve the forced query '?' prefix in |match.fill_into_edit|. // Otherwise, user edits to a suggestion would show non-Search results. if (input_.type() == metrics::OmniboxInputType::FORCED_QUERY) { @@ -1435,8 +1438,8 @@ AutocompleteMatch SearchProvider::NavigationToMatch( !navigation.received_after_last_keystroke() && (match.inline_autocompletion.empty() || (!input_.prevent_inline_autocomplete() && !trimmed_whitespace)); - match.EnsureUWYTIsAllowedToBeDefault( - input_.canonicalized_url(), providers_.template_url_service()); + match.EnsureUWYTIsAllowedToBeDefault(input_.canonicalized_url(), + client()->GetTemplateURLService()); match.contents = navigation.match_contents(); match.contents_class = navigation.match_contents_class(); diff --git a/components/omnibox/search_provider.h b/components/omnibox/search_provider.h index 1c63368..fc5b900 100644 --- a/components/omnibox/search_provider.h +++ b/components/omnibox/search_provider.h @@ -55,8 +55,7 @@ class SearchProvider : public BaseSearchProvider, public net::URLFetcherDelegate { public: SearchProvider(AutocompleteProviderClient* client, - AutocompleteProviderListener* listener, - TemplateURLService* template_url_service); + AutocompleteProviderListener* listener); // Extracts the suggest response metadata which SearchProvider previously // stored for |match|. diff --git a/components/omnibox/shortcuts_provider.cc b/components/omnibox/shortcuts_provider.cc index fd51148..fe6a048 100644 --- a/components/omnibox/shortcuts_provider.cc +++ b/components/omnibox/shortcuts_provider.cc @@ -38,6 +38,7 @@ class DestinationURLEqualsURL { bool operator()(const AutocompleteMatch& match) const { return match.destination_url == url_; } + private: const GURL url_; }; @@ -74,7 +75,7 @@ void ShortcutsProvider::Start(const AutocompleteInput& input, if (input.text().length() < 6) { base::TimeTicks end_time = base::TimeTicks::Now(); std::string name = "ShortcutsProvider.QueryIndexTime." + - base::IntToString(input.text().size()); + base::IntToString(input.text().size()); base::HistogramBase* counter = base::Histogram::FactoryGet( name, 1, 1000, 50, base::Histogram::kUmaTargetedHistogramFlag); counter->Add(static_cast<int>((end_time - start_time).InMilliseconds())); @@ -128,7 +129,7 @@ void ShortcutsProvider::GetMatches(const AutocompleteInput& input) { int max_relevance; if (!OmniboxFieldTrial::ShortcutsScoringMaxRelevance( - input.current_page_classification(), &max_relevance)) + input.current_page_classification(), &max_relevance)) max_relevance = kShortcutsProviderDefaultMaxRelevance; TemplateURLService* template_url_service = client_->GetTemplateURLService(); const base::string16 fixed_up_input(FixupUserInput(input).second); @@ -140,8 +141,8 @@ void ShortcutsProvider::GetMatches(const AutocompleteInput& input) { // Don't return shortcuts with zero relevance. int relevance = CalculateScore(term_string, it->second, max_relevance); if (relevance) { - matches_.push_back(ShortcutToACMatch(it->second, relevance, input, - fixed_up_input)); + matches_.push_back( + ShortcutToACMatch(it->second, relevance, input, fixed_up_input)); matches_.back().ComputeStrippedDestinationURL(template_url_service); } } @@ -151,7 +152,8 @@ void ShortcutsProvider::GetMatches(const AutocompleteInput& input) { AutocompleteResult::DedupMatchesByDestination( input.current_page_classification(), false, &matches_); // Find best matches. - std::partial_sort(matches_.begin(), + std::partial_sort( + matches_.begin(), matches_.begin() + std::min(AutocompleteProvider::kMaxMatches, matches_.size()), matches_.end(), &AutocompleteMatch::MoreRelevant); @@ -233,10 +235,10 @@ AutocompleteMatch ShortcutsProvider::ShortcutToACMatch( const base::string16 term_string = base::i18n::ToLower(input.text()); WordMap terms_map(CreateWordMapForString(term_string)); if (!terms_map.empty()) { - match.contents_class = ClassifyAllMatchesInString(term_string, terms_map, - match.contents, match.contents_class); - match.description_class = ClassifyAllMatchesInString(term_string, terms_map, - match.description, match.description_class); + match.contents_class = ClassifyAllMatchesInString( + term_string, terms_map, match.contents, match.contents_class); + match.description_class = ClassifyAllMatchesInString( + term_string, terms_map, match.description, match.description_class); } return match; } @@ -332,8 +334,8 @@ ACMatchClassifications ShortcutsProvider::ClassifyAllMatchesInString( if (match_class.back().offset == last_position) match_class.pop_back(); - AutocompleteMatch::AddLastClassificationIfNecessary(&match_class, - last_position, ACMatchClassification::MATCH); + AutocompleteMatch::AddLastClassificationIfNecessary( + &match_class, last_position, ACMatchClassification::MATCH); if (word_end < text_lowercase.length()) { match_class.push_back( ACMatchClassification(word_end, ACMatchClassification::NONE)); @@ -348,9 +350,9 @@ ACMatchClassifications ShortcutsProvider::ClassifyAllMatchesInString( return AutocompleteMatch::MergeClassifications(original_class, match_class); } -ShortcutsBackend::ShortcutMap::const_iterator - ShortcutsProvider::FindFirstMatch(const base::string16& keyword, - ShortcutsBackend* backend) { +ShortcutsBackend::ShortcutMap::const_iterator ShortcutsProvider::FindFirstMatch( + const base::string16& keyword, + ShortcutsBackend* backend) { DCHECK(backend); ShortcutsBackend::ShortcutMap::const_iterator it = backend->shortcuts_map().lower_bound(keyword); @@ -375,15 +377,16 @@ int ShortcutsProvider::CalculateScore( // directly. This makes sense since the first characters typed are much more // important for determining how likely it is a user wants a particular // shortcut than are the remaining continued characters. - double base_score = max_relevance * - sqrt(static_cast<double>(terms.length()) / shortcut.text.length()); + double base_score = max_relevance * sqrt(static_cast<double>(terms.length()) / + shortcut.text.length()); // Then we decay this by half each week. const double kLn2 = 0.6931471805599453; base::TimeDelta time_passed = base::Time::Now() - shortcut.last_access_time; // Clamp to 0 in case time jumps backwards (e.g. due to DST). - double decay_exponent = std::max(0.0, kLn2 * static_cast<double>( - time_passed.InMicroseconds()) / base::Time::kMicrosecondsPerWeek); + double decay_exponent = + std::max(0.0, kLn2 * static_cast<double>(time_passed.InMicroseconds()) / + base::Time::kMicrosecondsPerWeek); // We modulate the decay factor based on how many times the shortcut has been // used. Newly created shortcuts decay at full speed; otherwise, decaying by @@ -391,10 +394,11 @@ int ShortcutsProvider::CalculateScore( // (1.0 / each 5 additional hits), up to a maximum of 5x as long. const double kMaxDecaySpeedDivisor = 5.0; const double kNumUsesPerDecaySpeedDivisorIncrement = 5.0; - double decay_divisor = std::min(kMaxDecaySpeedDivisor, + double decay_divisor = std::min( + kMaxDecaySpeedDivisor, (shortcut.number_of_hits + kNumUsesPerDecaySpeedDivisorIncrement - 1) / - kNumUsesPerDecaySpeedDivisorIncrement); + kNumUsesPerDecaySpeedDivisorIncrement); return static_cast<int>((base_score / exp(decay_exponent / decay_divisor)) + - 0.5); + 0.5); } diff --git a/components/omnibox/shortcuts_provider.h b/components/omnibox/shortcuts_provider.h index a37fb3a..ccc53dc 100644 --- a/components/omnibox/shortcuts_provider.h +++ b/components/omnibox/shortcuts_provider.h @@ -20,9 +20,8 @@ class ShortcutsProviderTest; // from previously selected suggestions. The more often a user selects a // suggestion for a given search term the higher will be that suggestion's // ranking for future uses of that search term. -class ShortcutsProvider - : public AutocompleteProvider, - public ShortcutsBackend::ShortcutsBackendObserver { +class ShortcutsProvider : public AutocompleteProvider, + public ShortcutsBackend::ShortcutsBackendObserver { public: explicit ShortcutsProvider(AutocompleteProviderClient* client); diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc index 553c8f6..5c35d78 100644 --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc @@ -207,7 +207,7 @@ TemplateURLRef::SearchTermsArgs::ContextualSearchParams:: // TemplateURLRef ------------------------------------------------------------- -TemplateURLRef::TemplateURLRef(TemplateURL* owner, Type type) +TemplateURLRef::TemplateURLRef(const TemplateURL* owner, Type type) : owner_(owner), type_(type), index_in_owner_(0), @@ -221,7 +221,7 @@ TemplateURLRef::TemplateURLRef(TemplateURL* owner, Type type) DCHECK_NE(INDEXED, type_); } -TemplateURLRef::TemplateURLRef(TemplateURL* owner, size_t index_in_owner) +TemplateURLRef::TemplateURLRef(const TemplateURL* owner, size_t index_in_owner) : owner_(owner), type_(INDEXED), index_in_owner_(index_in_owner), @@ -1331,13 +1331,12 @@ const std::string& TemplateURL::GetURL(size_t index) const { bool TemplateURL::ExtractSearchTermsFromURL( const GURL& url, const SearchTermsData& search_terms_data, - base::string16* search_terms) { + base::string16* search_terms) const { return FindSearchTermsInURL(url, search_terms_data, search_terms, NULL, NULL); } -bool TemplateURL::IsSearchURL( - const GURL& url, - const SearchTermsData& search_terms_data) { +bool TemplateURL::IsSearchURL(const GURL& url, + const SearchTermsData& search_terms_data) const { base::string16 search_terms; return ExtractSearchTermsFromURL(url, search_terms_data, &search_terms) && !search_terms.empty(); @@ -1494,7 +1493,7 @@ bool TemplateURL::FindSearchTermsInURL( const SearchTermsData& search_terms_data, base::string16* search_terms, url::Parsed::ComponentType* search_term_component, - url::Component* search_terms_position) { + url::Component* search_terms_position) const { DCHECK(search_terms); search_terms->clear(); diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h index 393c20f..73006be 100644 --- a/components/search_engines/template_url.h +++ b/components/search_engines/template_url.h @@ -201,8 +201,8 @@ class TemplateURLRef { ContextualSearchParams contextual_search_params; }; - TemplateURLRef(TemplateURL* owner, Type type); - TemplateURLRef(TemplateURL* owner, size_t index_in_owner); + TemplateURLRef(const TemplateURL* owner, Type type); + TemplateURLRef(const TemplateURL* owner, size_t index_in_owner); ~TemplateURLRef(); // Returns the raw URL. None of the parameters will have been replaced. @@ -433,7 +433,7 @@ class TemplateURLRef { PostContent* post_content) const; // The TemplateURL that contains us. This should outlive us. - TemplateURL* const owner_; + const TemplateURL* const owner_; // What kind of URL we are. const Type type_; @@ -663,12 +663,13 @@ class TemplateURL { // search term will be "b". bool ExtractSearchTermsFromURL(const GURL& url, const SearchTermsData& search_terms_data, - base::string16* search_terms); + base::string16* search_terms) const; // Returns true if non-empty search terms could be extracted from |url| using // ExtractSearchTermsFromURL(). In other words, this returns whether |url| // could be the result of performing a search with |this|. - bool IsSearchURL(const GURL& url, const SearchTermsData& search_terms_data); + bool IsSearchURL(const GURL& url, + const SearchTermsData& search_terms_data) const; // Returns true if the specified |url| contains the search terms replacement // key in either the query or the ref. This method does not verify anything @@ -729,7 +730,7 @@ class TemplateURL { const SearchTermsData& search_terms_data, base::string16* search_terms, url::Parsed::ComponentType* search_terms_component, - url::Component* search_terms_position); + url::Component* search_terms_position) const; TemplateURLData data_; TemplateURLRef url_ref_; diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc index 9fee795..f0c4d8e 100644 --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc @@ -549,13 +549,18 @@ void TemplateURLService::SetUserSelectedDefaultSearchProvider( } TemplateURL* TemplateURLService::GetDefaultSearchProvider() { - return loaded_ ? - default_search_provider_ : initial_default_search_provider_.get(); + return const_cast<TemplateURL*>( + static_cast<const TemplateURLService*>(this)->GetDefaultSearchProvider()); +} + +const TemplateURL* TemplateURLService::GetDefaultSearchProvider() const { + return loaded_ ? default_search_provider_ + : initial_default_search_provider_.get(); } bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider( - const GURL& url) { - TemplateURL* default_provider = GetDefaultSearchProvider(); + const GURL& url) const { + const TemplateURL* default_provider = GetDefaultSearchProvider(); return default_provider && default_provider->IsSearchURL(url, search_terms_data()); } diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h index bd17246..ccf0db40 100644 --- a/components/search_engines/template_url_service.h +++ b/components/search_engines/template_url_service.h @@ -215,11 +215,14 @@ class TemplateURLService : public WebDataServiceConsumer, // loaded, the default search provider is pulled from preferences. // // NOTE: At least in unittest mode, this may return NULL. + // TODO(blundell): See if all callers can be converted to take in const + // pointers and eliminate this version of the method. TemplateURL* GetDefaultSearchProvider(); + const TemplateURL* GetDefaultSearchProvider() const; // Returns true if the |url| is a search results page from the default search // provider. - bool IsSearchResultsPageFromDefaultSearchProvider(const GURL& url); + bool IsSearchResultsPageFromDefaultSearchProvider(const GURL& url) const; // Returns true if the default search is managed through group policy. bool is_default_search_managed() const { |