| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/omnibox/search_provider.h" | 5 #include "components/omnibox/search_provider.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| 11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
| 12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "base/strings/string16.h" | 13 #include "base/strings/string16.h" |
| 14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
| 18 #include "build/build_config.h" | 18 #include "build/build_config.h" |
| 19 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" | 19 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" |
| 20 #include "chrome/browser/autocomplete/autocomplete_controller.h" | 20 #include "chrome/browser/autocomplete/autocomplete_controller.h" |
| 21 #include "chrome/browser/autocomplete/chrome_autocomplete_provider_delegate.h" | 21 #include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h" |
| 22 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" | 22 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" |
| 23 #include "chrome/browser/autocomplete/history_url_provider.h" | 23 #include "chrome/browser/autocomplete/history_url_provider.h" |
| 24 #include "chrome/browser/history/history_service.h" | 24 #include "chrome/browser/history/history_service.h" |
| 25 #include "chrome/browser/history/history_service_factory.h" | 25 #include "chrome/browser/history/history_service_factory.h" |
| 26 #include "chrome/browser/search_engines/template_url_service_factory.h" | 26 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 27 #include "chrome/browser/signin/signin_manager_factory.h" | 27 #include "chrome/browser/signin/signin_manager_factory.h" |
| 28 #include "chrome/browser/sync/profile_sync_service.h" | 28 #include "chrome/browser/sync/profile_sync_service.h" |
| 29 #include "chrome/browser/sync/profile_sync_service_factory.h" | 29 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 30 #include "chrome/common/chrome_switches.h" | 30 #include "chrome/common/chrome_switches.h" |
| 31 #include "chrome/common/pref_names.h" | 31 #include "chrome/common/pref_names.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 virtual void RecordDeletionResult(bool success) OVERRIDE; | 81 virtual void RecordDeletionResult(bool success) OVERRIDE; |
| 82 bool is_success_; | 82 bool is_success_; |
| 83 DISALLOW_COPY_AND_ASSIGN(SearchProviderForTest); | 83 DISALLOW_COPY_AND_ASSIGN(SearchProviderForTest); |
| 84 }; | 84 }; |
| 85 | 85 |
| 86 SearchProviderForTest::SearchProviderForTest( | 86 SearchProviderForTest::SearchProviderForTest( |
| 87 AutocompleteProviderListener* listener, | 87 AutocompleteProviderListener* listener, |
| 88 TemplateURLService* template_url_service, | 88 TemplateURLService* template_url_service, |
| 89 Profile* profile) | 89 Profile* profile) |
| 90 : SearchProvider(listener, template_url_service, | 90 : SearchProvider(listener, template_url_service, |
| 91 scoped_ptr<AutocompleteProviderDelegate>( | 91 scoped_ptr<AutocompleteProviderClient>( |
| 92 new ChromeAutocompleteProviderDelegate(profile))), | 92 new ChromeAutocompleteProviderClient(profile))), |
| 93 is_success_(false) { | 93 is_success_(false) { |
| 94 } | 94 } |
| 95 | 95 |
| 96 SearchProviderForTest::~SearchProviderForTest() { | 96 SearchProviderForTest::~SearchProviderForTest() { |
| 97 } | 97 } |
| 98 | 98 |
| 99 void SearchProviderForTest::RecordDeletionResult(bool success) { | 99 void SearchProviderForTest::RecordDeletionResult(bool success) { |
| 100 is_success_ = success; | 100 is_success_ = success; |
| 101 } | 101 } |
| 102 | 102 |
| (...skipping 2839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2942 template_url_data.SetURL("http://www.google.com/{searchTerms}"); | 2942 template_url_data.SetURL("http://www.google.com/{searchTerms}"); |
| 2943 template_url_data.suggestions_url = "http://www.google.com/{searchTerms}"; | 2943 template_url_data.suggestions_url = "http://www.google.com/{searchTerms}"; |
| 2944 template_url_data.instant_url = "http://does/not/exist?strk=1"; | 2944 template_url_data.instant_url = "http://does/not/exist?strk=1"; |
| 2945 template_url_data.search_terms_replacement_key = "strk"; | 2945 template_url_data.search_terms_replacement_key = "strk"; |
| 2946 template_url_data.id = SEARCH_ENGINE_GOOGLE; | 2946 template_url_data.id = SEARCH_ENGINE_GOOGLE; |
| 2947 TemplateURL google_template_url(template_url_data); | 2947 TemplateURL google_template_url(template_url_data); |
| 2948 | 2948 |
| 2949 // Create field trial. | 2949 // Create field trial. |
| 2950 CreateZeroSuggestFieldTrial(true); | 2950 CreateZeroSuggestFieldTrial(true); |
| 2951 | 2951 |
| 2952 ChromeAutocompleteProviderDelegate delegate(&profile_); | 2952 ChromeAutocompleteProviderClient client(&profile_); |
| 2953 | 2953 |
| 2954 // Not signed in. | 2954 // Not signed in. |
| 2955 EXPECT_FALSE(SearchProvider::CanSendURL( | 2955 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 2956 GURL("http://www.google.com/search"), | 2956 GURL("http://www.google.com/search"), |
| 2957 GURL("https://www.google.com/complete/search"), &google_template_url, | 2957 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2958 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 2958 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 2959 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(&profile_); | 2959 SigninManagerBase* signin = SigninManagerFactory::GetForProfile(&profile_); |
| 2960 signin->SetAuthenticatedUsername("test"); | 2960 signin->SetAuthenticatedUsername("test"); |
| 2961 | 2961 |
| 2962 // All conditions should be met. | 2962 // All conditions should be met. |
| 2963 EXPECT_TRUE(SearchProvider::CanSendURL( | 2963 EXPECT_TRUE(SearchProvider::CanSendURL( |
| 2964 GURL("http://www.google.com/search"), | 2964 GURL("http://www.google.com/search"), |
| 2965 GURL("https://www.google.com/complete/search"), &google_template_url, | 2965 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2966 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 2966 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 2967 | 2967 |
| 2968 // Not in field trial. | 2968 // Not in field trial. |
| 2969 ResetFieldTrialList(); | 2969 ResetFieldTrialList(); |
| 2970 CreateZeroSuggestFieldTrial(false); | 2970 CreateZeroSuggestFieldTrial(false); |
| 2971 EXPECT_FALSE(SearchProvider::CanSendURL( | 2971 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 2972 GURL("http://www.google.com/search"), | 2972 GURL("http://www.google.com/search"), |
| 2973 GURL("https://www.google.com/complete/search"), &google_template_url, | 2973 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2974 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 2974 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 2975 ResetFieldTrialList(); | 2975 ResetFieldTrialList(); |
| 2976 CreateZeroSuggestFieldTrial(true); | 2976 CreateZeroSuggestFieldTrial(true); |
| 2977 | 2977 |
| 2978 // Invalid page URL. | 2978 // Invalid page URL. |
| 2979 EXPECT_FALSE(SearchProvider::CanSendURL( | 2979 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 2980 GURL("badpageurl"), | 2980 GURL("badpageurl"), |
| 2981 GURL("https://www.google.com/complete/search"), &google_template_url, | 2981 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2982 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 2982 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 2983 | 2983 |
| 2984 // Invalid page classification. | 2984 // Invalid page classification. |
| 2985 EXPECT_FALSE(SearchProvider::CanSendURL( | 2985 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 2986 GURL("http://www.google.com/search"), | 2986 GURL("http://www.google.com/search"), |
| 2987 GURL("https://www.google.com/complete/search"), &google_template_url, | 2987 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2988 metrics::OmniboxEventProto::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, | 2988 metrics::OmniboxEventProto::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, |
| 2989 SearchTermsData(), &delegate)); | 2989 SearchTermsData(), &client)); |
| 2990 | 2990 |
| 2991 // Invalid page classification. | 2991 // Invalid page classification. |
| 2992 EXPECT_FALSE(SearchProvider::CanSendURL( | 2992 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 2993 GURL("http://www.google.com/search"), | 2993 GURL("http://www.google.com/search"), |
| 2994 GURL("https://www.google.com/complete/search"), &google_template_url, | 2994 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 2995 metrics::OmniboxEventProto::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS, | 2995 metrics::OmniboxEventProto::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS, |
| 2996 SearchTermsData(), &delegate)); | 2996 SearchTermsData(), &client)); |
| 2997 | 2997 |
| 2998 // HTTPS page URL on same domain as provider. | 2998 // HTTPS page URL on same domain as provider. |
| 2999 EXPECT_TRUE(SearchProvider::CanSendURL( | 2999 EXPECT_TRUE(SearchProvider::CanSendURL( |
| 3000 GURL("https://www.google.com/search"), | 3000 GURL("https://www.google.com/search"), |
| 3001 GURL("https://www.google.com/complete/search"), | 3001 GURL("https://www.google.com/complete/search"), |
| 3002 &google_template_url, metrics::OmniboxEventProto::OTHER, | 3002 &google_template_url, metrics::OmniboxEventProto::OTHER, |
| 3003 SearchTermsData(), &delegate)); | 3003 SearchTermsData(), &client)); |
| 3004 | 3004 |
| 3005 // Non-HTTP[S] page URL on same domain as provider. | 3005 // Non-HTTP[S] page URL on same domain as provider. |
| 3006 EXPECT_FALSE(SearchProvider::CanSendURL( | 3006 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3007 GURL("ftp://www.google.com/search"), | 3007 GURL("ftp://www.google.com/search"), |
| 3008 GURL("https://www.google.com/complete/search"), &google_template_url, | 3008 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3009 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3009 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3010 | 3010 |
| 3011 // Non-HTTP page URL on different domain. | 3011 // Non-HTTP page URL on different domain. |
| 3012 EXPECT_FALSE(SearchProvider::CanSendURL( | 3012 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3013 GURL("https://www.notgoogle.com/search"), | 3013 GURL("https://www.notgoogle.com/search"), |
| 3014 GURL("https://www.google.com/complete/search"), &google_template_url, | 3014 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3015 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3015 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3016 | 3016 |
| 3017 // Non-HTTPS provider. | 3017 // Non-HTTPS provider. |
| 3018 EXPECT_FALSE(SearchProvider::CanSendURL( | 3018 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3019 GURL("http://www.google.com/search"), | 3019 GURL("http://www.google.com/search"), |
| 3020 GURL("http://www.google.com/complete/search"), &google_template_url, | 3020 GURL("http://www.google.com/complete/search"), &google_template_url, |
| 3021 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3021 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3022 | 3022 |
| 3023 // Suggest disabled. | 3023 // Suggest disabled. |
| 3024 profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, false); | 3024 profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, false); |
| 3025 EXPECT_FALSE(SearchProvider::CanSendURL( | 3025 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3026 GURL("http://www.google.com/search"), | 3026 GURL("http://www.google.com/search"), |
| 3027 GURL("https://www.google.com/complete/search"), &google_template_url, | 3027 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3028 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3028 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3029 profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); | 3029 profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); |
| 3030 | 3030 |
| 3031 // Incognito. | 3031 // Incognito. |
| 3032 ChromeAutocompleteProviderDelegate delegate_incognito( | 3032 ChromeAutocompleteProviderClient client_incognito( |
| 3033 profile_.GetOffTheRecordProfile()); | 3033 profile_.GetOffTheRecordProfile()); |
| 3034 EXPECT_FALSE(SearchProvider::CanSendURL( | 3034 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3035 GURL("http://www.google.com/search"), | 3035 GURL("http://www.google.com/search"), |
| 3036 GURL("https://www.google.com/complete/search"), &google_template_url, | 3036 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3037 metrics::OmniboxEventProto::OTHER, SearchTermsData(), | 3037 metrics::OmniboxEventProto::OTHER, SearchTermsData(), |
| 3038 &delegate_incognito)); | 3038 &client_incognito)); |
| 3039 | 3039 |
| 3040 // Tab sync not enabled. | 3040 // Tab sync not enabled. |
| 3041 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncKeepEverythingSynced, | 3041 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncKeepEverythingSynced, |
| 3042 false); | 3042 false); |
| 3043 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, false); | 3043 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, false); |
| 3044 EXPECT_FALSE(SearchProvider::CanSendURL( | 3044 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3045 GURL("http://www.google.com/search"), | 3045 GURL("http://www.google.com/search"), |
| 3046 GURL("https://www.google.com/complete/search"), &google_template_url, | 3046 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3047 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3047 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3048 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, true); | 3048 profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, true); |
| 3049 | 3049 |
| 3050 // Tab sync is encrypted. | 3050 // Tab sync is encrypted. |
| 3051 ProfileSyncService* service = | 3051 ProfileSyncService* service = |
| 3052 ProfileSyncServiceFactory::GetInstance()->GetForProfile(&profile_); | 3052 ProfileSyncServiceFactory::GetInstance()->GetForProfile(&profile_); |
| 3053 syncer::ModelTypeSet encrypted_types = service->GetEncryptedDataTypes(); | 3053 syncer::ModelTypeSet encrypted_types = service->GetEncryptedDataTypes(); |
| 3054 encrypted_types.Put(syncer::SESSIONS); | 3054 encrypted_types.Put(syncer::SESSIONS); |
| 3055 service->OnEncryptedTypesChanged(encrypted_types, false); | 3055 service->OnEncryptedTypesChanged(encrypted_types, false); |
| 3056 EXPECT_FALSE(SearchProvider::CanSendURL( | 3056 EXPECT_FALSE(SearchProvider::CanSendURL( |
| 3057 GURL("http://www.google.com/search"), | 3057 GURL("http://www.google.com/search"), |
| 3058 GURL("https://www.google.com/complete/search"), &google_template_url, | 3058 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3059 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3059 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3060 encrypted_types.Remove(syncer::SESSIONS); | 3060 encrypted_types.Remove(syncer::SESSIONS); |
| 3061 service->OnEncryptedTypesChanged(encrypted_types, false); | 3061 service->OnEncryptedTypesChanged(encrypted_types, false); |
| 3062 | 3062 |
| 3063 // Check that there were no side effects from previous tests. | 3063 // Check that there were no side effects from previous tests. |
| 3064 EXPECT_TRUE(SearchProvider::CanSendURL( | 3064 EXPECT_TRUE(SearchProvider::CanSendURL( |
| 3065 GURL("http://www.google.com/search"), | 3065 GURL("http://www.google.com/search"), |
| 3066 GURL("https://www.google.com/complete/search"), &google_template_url, | 3066 GURL("https://www.google.com/complete/search"), &google_template_url, |
| 3067 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &delegate)); | 3067 metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); |
| 3068 } | 3068 } |
| 3069 | 3069 |
| 3070 TEST_F(SearchProviderTest, TestDeleteMatch) { | 3070 TEST_F(SearchProviderTest, TestDeleteMatch) { |
| 3071 AutocompleteMatch match( | 3071 AutocompleteMatch match( |
| 3072 provider_.get(), 0, true, AutocompleteMatchType::SEARCH_SUGGEST); | 3072 provider_.get(), 0, true, AutocompleteMatchType::SEARCH_SUGGEST); |
| 3073 match.RecordAdditionalInfo( | 3073 match.RecordAdditionalInfo( |
| 3074 SearchProvider::kDeletionUrlKey, | 3074 SearchProvider::kDeletionUrlKey, |
| 3075 "https://www.google.com/complete/deleteitem?q=foo"); | 3075 "https://www.google.com/complete/deleteitem?q=foo"); |
| 3076 | 3076 |
| 3077 // Test a successful deletion request. | 3077 // Test a successful deletion request. |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3260 AutocompleteInput input(base::ASCIIToUTF16("weather l"), | 3260 AutocompleteInput input(base::ASCIIToUTF16("weather l"), |
| 3261 base::string16::npos, base::string16(), GURL(), | 3261 base::string16::npos, base::string16(), GURL(), |
| 3262 metrics::OmniboxEventProto::INVALID_SPEC, false, | 3262 metrics::OmniboxEventProto::INVALID_SPEC, false, |
| 3263 false, true, true, | 3263 false, true, true, |
| 3264 ChromeAutocompleteSchemeClassifier(&profile_)); | 3264 ChromeAutocompleteSchemeClassifier(&profile_)); |
| 3265 provider_->DoAnswersQuery(input); | 3265 provider_->DoAnswersQuery(input); |
| 3266 EXPECT_EQ(base::ASCIIToUTF16("weather los angeles"), | 3266 EXPECT_EQ(base::ASCIIToUTF16("weather los angeles"), |
| 3267 provider_->prefetch_data_.full_query_text); | 3267 provider_->prefetch_data_.full_query_text); |
| 3268 EXPECT_EQ(base::ASCIIToUTF16("2334"), provider_->prefetch_data_.query_type); | 3268 EXPECT_EQ(base::ASCIIToUTF16("2334"), provider_->prefetch_data_.query_type); |
| 3269 } | 3269 } |
| OLD | NEW |