OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/command_line.h" | |
6 #include "base/files/scoped_temp_dir.h" | |
7 #include "base/memory/scoped_vector.h" | |
8 #include "base/strings/utf_string_conversions.h" | |
9 #include "components/google/core/browser/google_switches.h" | |
10 #include "components/pref_registry/testing_pref_service_syncable.h" | |
11 #include "components/search_engines/prepopulated_engines.h" | |
12 #include "components/search_engines/search_engines_pref_names.h" | |
13 #include "components/search_engines/search_terms_data.h" | |
14 #include "components/search_engines/template_url.h" | |
15 #include "components/search_engines/template_url_prepopulate_data.h" | |
16 #include "components/search_engines/template_url_service.h" | |
17 #include "grit/generated_resources.h" | |
18 #include "testing/gtest/include/gtest/gtest.h" | |
19 #include "ui/base/l10n/l10n_util.h" | |
20 | |
21 using base::ASCIIToUTF16; | |
22 | |
23 namespace { | |
24 | |
25 SearchEngineType GetEngineType(const std::string& url) { | |
26 TemplateURLData data; | |
27 data.SetURL(url); | |
28 return TemplateURLPrepopulateData::GetEngineType(TemplateURL(data), | |
29 SearchTermsData()); | |
30 } | |
31 | |
32 std::string GetHostFromTemplateURLData(const TemplateURLData& data) { | |
33 return TemplateURL(data).url_ref().GetHost(SearchTermsData()); | |
34 } | |
35 | |
36 } // namespace | |
37 | |
38 class TemplateURLPrepopulateDataTest : public testing::Test { | |
39 public: | |
40 virtual void SetUp() OVERRIDE { | |
41 TemplateURLPrepopulateData::RegisterProfilePrefs(prefs_.registry()); | |
42 } | |
43 | |
44 protected: | |
45 user_prefs::TestingPrefServiceSyncable prefs_; | |
46 }; | |
47 | |
48 // Verifies the set of prepopulate data doesn't contain entries with duplicate | |
49 // ids. | |
50 TEST_F(TemplateURLPrepopulateDataTest, UniqueIDs) { | |
51 const int kCountryIds[] = { | |
52 'A'<<8|'D', 'A'<<8|'E', 'A'<<8|'F', 'A'<<8|'G', 'A'<<8|'I', | |
53 'A'<<8|'L', 'A'<<8|'M', 'A'<<8|'N', 'A'<<8|'O', 'A'<<8|'Q', | |
54 'A'<<8|'R', 'A'<<8|'S', 'A'<<8|'T', 'A'<<8|'U', 'A'<<8|'W', | |
55 'A'<<8|'X', 'A'<<8|'Z', 'B'<<8|'A', 'B'<<8|'B', 'B'<<8|'D', | |
56 'B'<<8|'E', 'B'<<8|'F', 'B'<<8|'G', 'B'<<8|'H', 'B'<<8|'I', | |
57 'B'<<8|'J', 'B'<<8|'M', 'B'<<8|'N', 'B'<<8|'O', 'B'<<8|'R', | |
58 'B'<<8|'S', 'B'<<8|'T', 'B'<<8|'V', 'B'<<8|'W', 'B'<<8|'Y', | |
59 'B'<<8|'Z', 'C'<<8|'A', 'C'<<8|'C', 'C'<<8|'D', 'C'<<8|'F', | |
60 'C'<<8|'G', 'C'<<8|'H', 'C'<<8|'I', 'C'<<8|'K', 'C'<<8|'L', | |
61 'C'<<8|'M', 'C'<<8|'N', 'C'<<8|'O', 'C'<<8|'R', 'C'<<8|'U', | |
62 'C'<<8|'V', 'C'<<8|'X', 'C'<<8|'Y', 'C'<<8|'Z', 'D'<<8|'E', | |
63 'D'<<8|'J', 'D'<<8|'K', 'D'<<8|'M', 'D'<<8|'O', 'D'<<8|'Z', | |
64 'E'<<8|'C', 'E'<<8|'E', 'E'<<8|'G', 'E'<<8|'R', 'E'<<8|'S', | |
65 'E'<<8|'T', 'F'<<8|'I', 'F'<<8|'J', 'F'<<8|'K', 'F'<<8|'M', | |
66 'F'<<8|'O', 'F'<<8|'R', 'G'<<8|'A', 'G'<<8|'B', 'G'<<8|'D', | |
67 'G'<<8|'E', 'G'<<8|'F', 'G'<<8|'G', 'G'<<8|'H', 'G'<<8|'I', | |
68 'G'<<8|'L', 'G'<<8|'M', 'G'<<8|'N', 'G'<<8|'P', 'G'<<8|'Q', | |
69 'G'<<8|'R', 'G'<<8|'S', 'G'<<8|'T', 'G'<<8|'U', 'G'<<8|'W', | |
70 'G'<<8|'Y', 'H'<<8|'K', 'H'<<8|'M', 'H'<<8|'N', 'H'<<8|'R', | |
71 'H'<<8|'T', 'H'<<8|'U', 'I'<<8|'D', 'I'<<8|'E', 'I'<<8|'L', | |
72 'I'<<8|'M', 'I'<<8|'N', 'I'<<8|'O', 'I'<<8|'P', 'I'<<8|'Q', | |
73 'I'<<8|'R', 'I'<<8|'S', 'I'<<8|'T', 'J'<<8|'E', 'J'<<8|'M', | |
74 'J'<<8|'O', 'J'<<8|'P', 'K'<<8|'E', 'K'<<8|'G', 'K'<<8|'H', | |
75 'K'<<8|'I', 'K'<<8|'M', 'K'<<8|'N', 'K'<<8|'P', 'K'<<8|'R', | |
76 'K'<<8|'W', 'K'<<8|'Y', 'K'<<8|'Z', 'L'<<8|'A', 'L'<<8|'B', | |
77 'L'<<8|'C', 'L'<<8|'I', 'L'<<8|'K', 'L'<<8|'R', 'L'<<8|'S', | |
78 'L'<<8|'T', 'L'<<8|'U', 'L'<<8|'V', 'L'<<8|'Y', 'M'<<8|'A', | |
79 'M'<<8|'C', 'M'<<8|'D', 'M'<<8|'E', 'M'<<8|'G', 'M'<<8|'H', | |
80 'M'<<8|'K', 'M'<<8|'L', 'M'<<8|'M', 'M'<<8|'N', 'M'<<8|'O', | |
81 'M'<<8|'P', 'M'<<8|'Q', 'M'<<8|'R', 'M'<<8|'S', 'M'<<8|'T', | |
82 'M'<<8|'U', 'M'<<8|'V', 'M'<<8|'W', 'M'<<8|'X', 'M'<<8|'Y', | |
83 'M'<<8|'Z', 'N'<<8|'A', 'N'<<8|'C', 'N'<<8|'E', 'N'<<8|'F', | |
84 'N'<<8|'G', 'N'<<8|'I', 'N'<<8|'L', 'N'<<8|'O', 'N'<<8|'P', | |
85 'N'<<8|'R', 'N'<<8|'U', 'N'<<8|'Z', 'O'<<8|'M', 'P'<<8|'A', | |
86 'P'<<8|'E', 'P'<<8|'F', 'P'<<8|'G', 'P'<<8|'H', 'P'<<8|'K', | |
87 'P'<<8|'L', 'P'<<8|'M', 'P'<<8|'N', 'P'<<8|'R', 'P'<<8|'S', | |
88 'P'<<8|'T', 'P'<<8|'W', 'P'<<8|'Y', 'Q'<<8|'A', 'R'<<8|'E', | |
89 'R'<<8|'O', 'R'<<8|'S', 'R'<<8|'U', 'R'<<8|'W', 'S'<<8|'A', | |
90 'S'<<8|'B', 'S'<<8|'C', 'S'<<8|'D', 'S'<<8|'E', 'S'<<8|'G', | |
91 'S'<<8|'H', 'S'<<8|'I', 'S'<<8|'J', 'S'<<8|'K', 'S'<<8|'L', | |
92 'S'<<8|'M', 'S'<<8|'N', 'S'<<8|'O', 'S'<<8|'R', 'S'<<8|'T', | |
93 'S'<<8|'V', 'S'<<8|'Y', 'S'<<8|'Z', 'T'<<8|'C', 'T'<<8|'D', | |
94 'T'<<8|'F', 'T'<<8|'G', 'T'<<8|'H', 'T'<<8|'J', 'T'<<8|'K', | |
95 'T'<<8|'L', 'T'<<8|'M', 'T'<<8|'N', 'T'<<8|'O', 'T'<<8|'R', | |
96 'T'<<8|'T', 'T'<<8|'V', 'T'<<8|'W', 'T'<<8|'Z', 'U'<<8|'A', | |
97 'U'<<8|'G', 'U'<<8|'M', 'U'<<8|'S', 'U'<<8|'Y', 'U'<<8|'Z', | |
98 'V'<<8|'A', 'V'<<8|'C', 'V'<<8|'E', 'V'<<8|'G', 'V'<<8|'I', | |
99 'V'<<8|'N', 'V'<<8|'U', 'W'<<8|'F', 'W'<<8|'S', 'Y'<<8|'E', | |
100 'Y'<<8|'T', 'Z'<<8|'A', 'Z'<<8|'M', 'Z'<<8|'W', -1 }; | |
101 | |
102 for (size_t i = 0; i < arraysize(kCountryIds); ++i) { | |
103 prefs_.SetInteger(prefs::kCountryIDAtInstall, kCountryIds[i]); | |
104 size_t default_index; | |
105 ScopedVector<TemplateURLData> urls = | |
106 TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, | |
107 &default_index); | |
108 std::set<int> unique_ids; | |
109 for (size_t turl_i = 0; turl_i < urls.size(); ++turl_i) { | |
110 ASSERT_TRUE(unique_ids.find(urls[turl_i]->prepopulate_id) == | |
111 unique_ids.end()); | |
112 unique_ids.insert(urls[turl_i]->prepopulate_id); | |
113 } | |
114 } | |
115 } | |
116 | |
117 // Verifies that default search providers from the preferences file | |
118 // override the built-in ones. | |
119 TEST_F(TemplateURLPrepopulateDataTest, ProvidersFromPrefs) { | |
120 prefs_.SetUserPref(prefs::kSearchProviderOverridesVersion, | |
121 base::Value::CreateIntegerValue(1)); | |
122 base::ListValue* overrides = new base::ListValue; | |
123 scoped_ptr<base::DictionaryValue> entry(new base::DictionaryValue); | |
124 // Set only the minimal required settings for a search provider configuration. | |
125 entry->SetString("name", "foo"); | |
126 entry->SetString("keyword", "fook"); | |
127 entry->SetString("search_url", "http://foo.com/s?q={searchTerms}"); | |
128 entry->SetString("favicon_url", "http://foi.com/favicon.ico"); | |
129 entry->SetString("encoding", "UTF-8"); | |
130 entry->SetInteger("id", 1001); | |
131 overrides->Append(entry->DeepCopy()); | |
132 prefs_.SetUserPref(prefs::kSearchProviderOverrides, overrides); | |
133 | |
134 int version = TemplateURLPrepopulateData::GetDataVersion(&prefs_); | |
135 EXPECT_EQ(1, version); | |
136 | |
137 size_t default_index; | |
138 ScopedVector<TemplateURLData> t_urls = | |
139 TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, | |
140 &default_index); | |
141 | |
142 ASSERT_EQ(1u, t_urls.size()); | |
143 EXPECT_EQ(ASCIIToUTF16("foo"), t_urls[0]->short_name); | |
144 EXPECT_EQ(ASCIIToUTF16("fook"), t_urls[0]->keyword()); | |
145 EXPECT_EQ("foo.com", GetHostFromTemplateURLData(*t_urls[0])); | |
146 EXPECT_EQ("foi.com", t_urls[0]->favicon_url.host()); | |
147 EXPECT_EQ(1u, t_urls[0]->input_encodings.size()); | |
148 EXPECT_EQ(1001, t_urls[0]->prepopulate_id); | |
149 EXPECT_TRUE(t_urls[0]->suggestions_url.empty()); | |
150 EXPECT_TRUE(t_urls[0]->instant_url.empty()); | |
151 EXPECT_EQ(0u, t_urls[0]->alternate_urls.size()); | |
152 EXPECT_TRUE(t_urls[0]->search_terms_replacement_key.empty()); | |
153 | |
154 // Test the optional settings too. | |
155 entry->SetString("suggest_url", "http://foo.com/suggest?q={searchTerms}"); | |
156 entry->SetString("instant_url", "http://foo.com/instant?q={searchTerms}"); | |
157 base::ListValue* alternate_urls = new base::ListValue; | |
158 alternate_urls->AppendString("http://foo.com/alternate?q={searchTerms}"); | |
159 entry->Set("alternate_urls", alternate_urls); | |
160 entry->SetString("search_terms_replacement_key", "espv"); | |
161 overrides = new base::ListValue; | |
162 overrides->Append(entry->DeepCopy()); | |
163 prefs_.SetUserPref(prefs::kSearchProviderOverrides, overrides); | |
164 | |
165 t_urls = TemplateURLPrepopulateData::GetPrepopulatedEngines( | |
166 &prefs_, &default_index); | |
167 ASSERT_EQ(1u, t_urls.size()); | |
168 EXPECT_EQ(ASCIIToUTF16("foo"), t_urls[0]->short_name); | |
169 EXPECT_EQ(ASCIIToUTF16("fook"), t_urls[0]->keyword()); | |
170 EXPECT_EQ("foo.com", GetHostFromTemplateURLData(*t_urls[0])); | |
171 EXPECT_EQ("foi.com", t_urls[0]->favicon_url.host()); | |
172 EXPECT_EQ(1u, t_urls[0]->input_encodings.size()); | |
173 EXPECT_EQ(1001, t_urls[0]->prepopulate_id); | |
174 EXPECT_EQ("http://foo.com/suggest?q={searchTerms}", | |
175 t_urls[0]->suggestions_url); | |
176 EXPECT_EQ("http://foo.com/instant?q={searchTerms}", | |
177 t_urls[0]->instant_url); | |
178 ASSERT_EQ(1u, t_urls[0]->alternate_urls.size()); | |
179 EXPECT_EQ("http://foo.com/alternate?q={searchTerms}", | |
180 t_urls[0]->alternate_urls[0]); | |
181 EXPECT_EQ("espv", t_urls[0]->search_terms_replacement_key); | |
182 | |
183 // Test that subsequent providers are loaded even if an intermediate | |
184 // provider has an incomplete configuration. | |
185 overrides = new base::ListValue; | |
186 overrides->Append(entry->DeepCopy()); | |
187 entry->SetInteger("id", 1002); | |
188 entry->SetString("name", "bar"); | |
189 entry->SetString("keyword", "bark"); | |
190 entry->SetString("encoding", std::string()); | |
191 overrides->Append(entry->DeepCopy()); | |
192 entry->SetInteger("id", 1003); | |
193 entry->SetString("name", "baz"); | |
194 entry->SetString("keyword", "bazk"); | |
195 entry->SetString("encoding", "UTF-8"); | |
196 overrides->Append(entry->DeepCopy()); | |
197 prefs_.SetUserPref(prefs::kSearchProviderOverrides, overrides); | |
198 | |
199 t_urls = | |
200 TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, | |
201 &default_index); | |
202 EXPECT_EQ(2u, t_urls.size()); | |
203 } | |
204 | |
205 TEST_F(TemplateURLPrepopulateDataTest, ClearProvidersFromPrefs) { | |
206 prefs_.SetUserPref(prefs::kSearchProviderOverridesVersion, | |
207 base::Value::CreateIntegerValue(1)); | |
208 base::ListValue* overrides = new base::ListValue; | |
209 base::DictionaryValue* entry(new base::DictionaryValue); | |
210 // Set only the minimal required settings for a search provider configuration. | |
211 entry->SetString("name", "foo"); | |
212 entry->SetString("keyword", "fook"); | |
213 entry->SetString("search_url", "http://foo.com/s?q={searchTerms}"); | |
214 entry->SetString("favicon_url", "http://foi.com/favicon.ico"); | |
215 entry->SetString("encoding", "UTF-8"); | |
216 entry->SetInteger("id", 1001); | |
217 overrides->Append(entry); | |
218 prefs_.SetUserPref(prefs::kSearchProviderOverrides, overrides); | |
219 | |
220 int version = TemplateURLPrepopulateData::GetDataVersion(&prefs_); | |
221 EXPECT_EQ(1, version); | |
222 | |
223 // This call removes the above search engine. | |
224 TemplateURLPrepopulateData::ClearPrepopulatedEnginesInPrefs(&prefs_); | |
225 | |
226 version = TemplateURLPrepopulateData::GetDataVersion(&prefs_); | |
227 EXPECT_EQ(TemplateURLPrepopulateData::kCurrentDataVersion, version); | |
228 | |
229 size_t default_index; | |
230 ScopedVector<TemplateURLData> t_urls = | |
231 TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, | |
232 &default_index); | |
233 ASSERT_FALSE(t_urls.empty()); | |
234 for (size_t i = 0; i < t_urls.size(); ++i) { | |
235 EXPECT_NE(ASCIIToUTF16("foo"), t_urls[i]->short_name); | |
236 EXPECT_NE(ASCIIToUTF16("fook"), t_urls[i]->keyword()); | |
237 EXPECT_NE("foi.com", t_urls[i]->favicon_url.host()); | |
238 EXPECT_NE("foo.com", GetHostFromTemplateURLData(*t_urls[i])); | |
239 EXPECT_NE(1001, t_urls[i]->prepopulate_id); | |
240 } | |
241 // Ensures the default URL is Google and has the optional fields filled. | |
242 EXPECT_EQ(ASCIIToUTF16("Google"), t_urls[default_index]->short_name); | |
243 EXPECT_FALSE(t_urls[default_index]->suggestions_url.empty()); | |
244 EXPECT_FALSE(t_urls[default_index]->instant_url.empty()); | |
245 EXPECT_FALSE(t_urls[default_index]->image_url.empty()); | |
246 EXPECT_FALSE(t_urls[default_index]->new_tab_url.empty()); | |
247 EXPECT_FALSE(t_urls[default_index]->contextual_search_url.empty()); | |
248 EXPECT_FALSE(t_urls[default_index]->image_url_post_params.empty()); | |
249 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, | |
250 TemplateURLPrepopulateData::GetEngineType( | |
251 TemplateURL(*t_urls[default_index]), | |
252 SearchTermsData())); | |
253 } | |
254 | |
255 // Verifies that built-in search providers are processed correctly. | |
256 TEST_F(TemplateURLPrepopulateDataTest, ProvidersFromPrepopulated) { | |
257 // Use United States. | |
258 prefs_.SetInteger(prefs::kCountryIDAtInstall, 'U'<<8|'S'); | |
259 size_t default_index; | |
260 ScopedVector<TemplateURLData> t_urls = | |
261 TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, | |
262 &default_index); | |
263 | |
264 // Ensure all the URLs have the required fields populated. | |
265 ASSERT_FALSE(t_urls.empty()); | |
266 for (size_t i = 0; i < t_urls.size(); ++i) { | |
267 ASSERT_FALSE(t_urls[i]->short_name.empty()); | |
268 ASSERT_FALSE(t_urls[i]->keyword().empty()); | |
269 ASSERT_FALSE(t_urls[i]->favicon_url.host().empty()); | |
270 ASSERT_FALSE(GetHostFromTemplateURLData(*t_urls[i]).empty()); | |
271 ASSERT_FALSE(t_urls[i]->input_encodings.empty()); | |
272 EXPECT_GT(t_urls[i]->prepopulate_id, 0); | |
273 } | |
274 | |
275 // Ensures the default URL is Google and has the optional fields filled. | |
276 EXPECT_EQ(ASCIIToUTF16("Google"), t_urls[default_index]->short_name); | |
277 EXPECT_FALSE(t_urls[default_index]->suggestions_url.empty()); | |
278 EXPECT_FALSE(t_urls[default_index]->instant_url.empty()); | |
279 EXPECT_FALSE(t_urls[default_index]->image_url.empty()); | |
280 EXPECT_FALSE(t_urls[default_index]->new_tab_url.empty()); | |
281 EXPECT_FALSE(t_urls[default_index]->contextual_search_url.empty()); | |
282 EXPECT_FALSE(t_urls[default_index]->image_url_post_params.empty()); | |
283 // Expect at least 2 alternate_urls. | |
284 // This caught a bug with static initialization of arrays, so leave this in. | |
285 EXPECT_GT(t_urls[default_index]->alternate_urls.size(), 1u); | |
286 for (size_t i = 0; i < t_urls[default_index]->alternate_urls.size(); ++i) | |
287 EXPECT_FALSE(t_urls[default_index]->alternate_urls[i].empty()); | |
288 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, | |
289 TemplateURLPrepopulateData::GetEngineType( | |
290 TemplateURL(*t_urls[default_index]), | |
291 SearchTermsData())); | |
292 EXPECT_FALSE(t_urls[default_index]->search_terms_replacement_key.empty()); | |
293 } | |
294 | |
295 TEST_F(TemplateURLPrepopulateDataTest, GetEngineTypeBasic) { | |
296 EXPECT_EQ(SEARCH_ENGINE_OTHER, GetEngineType("http://example.com/")); | |
297 EXPECT_EQ(SEARCH_ENGINE_ASK, GetEngineType("http://www.ask.com/")); | |
298 EXPECT_EQ(SEARCH_ENGINE_OTHER, GetEngineType("http://search.atlas.cz/")); | |
299 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, GetEngineType("http://www.google.com/")); | |
300 } | |
301 | |
302 TEST_F(TemplateURLPrepopulateDataTest, GetEngineTypeAdvanced) { | |
303 // Google URLs in different forms. | |
304 const char* kGoogleURLs[] = { | |
305 // Original with google:baseURL: | |
306 "{google:baseURL}search?q={searchTerms}&{google:RLZ}" | |
307 "{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}" | |
308 "sourceid=chrome&ie={inputEncoding}", | |
309 // Custom with google.com and reordered query params: | |
310 "http://google.com/search?{google:RLZ}{google:originalQueryForSuggestion}" | |
311 "{google:searchFieldtrialParameter}" | |
312 "sourceid=chrome&ie={inputEncoding}&q={searchTerms}", | |
313 // Custom with a country TLD and almost no query params: | |
314 "http://www.google.ru/search?q={searchTerms}" | |
315 }; | |
316 for (size_t i = 0; i < arraysize(kGoogleURLs); ++i) { | |
317 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, GetEngineType(kGoogleURLs[i])); | |
318 } | |
319 | |
320 // Non-Google URLs. | |
321 const char* kYahooURLs[] = { | |
322 "http://search.yahoo.com/search?" | |
323 "ei={inputEncoding}&fr=crmas&p={searchTerms}", | |
324 "http://search.yahoo.com/search?p={searchTerms}", | |
325 // Aggressively match types by checking just TLD+1. | |
326 "http://someothersite.yahoo.com/", | |
327 }; | |
328 for (size_t i = 0; i < arraysize(kYahooURLs); ++i) { | |
329 EXPECT_EQ(SEARCH_ENGINE_YAHOO, GetEngineType(kYahooURLs[i])); | |
330 } | |
331 | |
332 // URLs for engines not present in country-specific lists. | |
333 EXPECT_EQ(SEARCH_ENGINE_NIGMA, | |
334 GetEngineType("http://nigma.ru/?s={searchTerms}&arg1=value1")); | |
335 // Also test matching against alternate URLs (and TLD+1 matching). | |
336 EXPECT_EQ(SEARCH_ENGINE_SOFTONIC, | |
337 GetEngineType("http://test.softonic.com.br/?{searchTerms}")); | |
338 | |
339 // Search URL for which no prepopulated search provider exists. | |
340 EXPECT_EQ(SEARCH_ENGINE_OTHER, | |
341 GetEngineType("http://example.net/search?q={searchTerms}")); | |
342 EXPECT_EQ(SEARCH_ENGINE_OTHER, GetEngineType("invalid:search:url")); | |
343 | |
344 // URL that doesn't look Google-related, but matches a Google base URL | |
345 // specified on the command line. | |
346 const std::string foo_url("http://www.foo.com/search?q={searchTerms}"); | |
347 EXPECT_EQ(SEARCH_ENGINE_OTHER, GetEngineType(foo_url)); | |
348 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switches::kGoogleBaseURL, | |
349 "http://www.foo.com/"); | |
350 EXPECT_EQ(SEARCH_ENGINE_GOOGLE, GetEngineType(foo_url)); | |
351 } | |
OLD | NEW |