OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 150 |
151 } // namespace | 151 } // namespace |
152 | 152 |
153 | 153 |
154 // TemplateURLServiceTest ----------------------------------------------------- | 154 // TemplateURLServiceTest ----------------------------------------------------- |
155 | 155 |
156 class TemplateURLServiceTest : public testing::Test { | 156 class TemplateURLServiceTest : public testing::Test { |
157 public: | 157 public: |
158 TemplateURLServiceTest(); | 158 TemplateURLServiceTest(); |
159 | 159 |
160 // testing::Test | 160 // testing::Test: |
161 virtual void SetUp(); | 161 virtual void SetUp() OVERRIDE; |
162 virtual void TearDown(); | 162 virtual void TearDown() OVERRIDE; |
163 | 163 |
164 TemplateURL* AddKeywordWithDate(const std::string& short_name, | 164 TemplateURL* AddKeywordWithDate(const std::string& short_name, |
165 const std::string& keyword, | 165 const std::string& keyword, |
166 const std::string& url, | 166 const std::string& url, |
167 const std::string& suggest_url, | 167 const std::string& suggest_url, |
168 const std::string& alternate_url, | 168 const std::string& alternate_url, |
169 const std::string& favicon_url, | 169 const std::string& favicon_url, |
170 bool safe_for_autoreplace, | 170 bool safe_for_autoreplace, |
171 const std::string& encodings, | 171 const std::string& encodings, |
172 Time date_created, | 172 Time date_created, |
173 Time last_modified); | 173 Time last_modified); |
174 | 174 |
175 // Verifies the two TemplateURLs are equal. | 175 // Verifies the two TemplateURLs are equal. |
176 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); | 176 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); |
177 | 177 |
178 // Create an URL that appears to have been prepopulated, but won't be in the | 178 // Create an URL that appears to have been prepopulated, but won't be in the |
179 // current data. The caller owns the returned TemplateURL*. | 179 // current data. The caller owns the returned TemplateURL*. |
180 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace, | 180 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace, |
181 int prepopulate_id); | 181 int prepopulate_id); |
182 | 182 |
183 // Helper methods to make calling TemplateURLServiceTestUtil methods less | 183 // Helper methods to make calling TemplateURLServiceTestUtil methods less |
184 // visually noisy in the test code. | 184 // visually noisy in the test code. |
185 void VerifyObserverCount(int expected_changed_count); | 185 void VerifyObserverCount(int expected_changed_count); |
186 void VerifyObserverFired(); | 186 void VerifyObserverFired(); |
187 TemplateURLService* model() { return test_util_.model(); } | 187 TemplateURLService* model() { return test_util_->model(); } |
188 const SearchTermsData& search_terms_data() { | 188 const SearchTermsData& search_terms_data() { |
189 return model()->search_terms_data(); | 189 return model()->search_terms_data(); |
190 } | 190 } |
191 | 191 |
192 protected: | 192 protected: |
193 TemplateURLServiceTestUtil test_util_; | 193 scoped_ptr<TemplateURLServiceTestUtil> test_util_; |
194 | 194 |
195 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); | 195 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); |
196 }; | 196 }; |
197 | 197 |
198 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest { | 198 class TemplateURLServiceWithoutFallbackTest : public TemplateURLServiceTest { |
199 public: | 199 public: |
200 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {} | 200 TemplateURLServiceWithoutFallbackTest() : TemplateURLServiceTest() {} |
201 | 201 |
202 virtual void SetUp() OVERRIDE { | 202 virtual void SetUp() OVERRIDE { |
203 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true); | 203 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(true); |
204 TemplateURLServiceTest::SetUp(); | 204 TemplateURLServiceTest::SetUp(); |
205 } | 205 } |
206 | 206 |
207 virtual void TearDown() OVERRIDE { | 207 virtual void TearDown() OVERRIDE { |
208 TemplateURLServiceTest::TearDown(); | 208 TemplateURLServiceTest::TearDown(); |
209 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(false); | 209 DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(false); |
210 } | 210 } |
211 }; | 211 }; |
212 | 212 |
213 TemplateURLServiceTest::TemplateURLServiceTest() { | 213 TemplateURLServiceTest::TemplateURLServiceTest() { |
214 } | 214 } |
215 | 215 |
216 void TemplateURLServiceTest::SetUp() { | 216 void TemplateURLServiceTest::SetUp() { |
217 test_util_.SetUp(); | 217 test_util_.reset(new TemplateURLServiceTestUtil); |
218 } | 218 } |
219 | 219 |
220 void TemplateURLServiceTest::TearDown() { | 220 void TemplateURLServiceTest::TearDown() { |
221 test_util_.TearDown(); | 221 test_util_.reset(); |
222 } | 222 } |
223 | 223 |
224 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate( | 224 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate( |
225 const std::string& short_name, | 225 const std::string& short_name, |
226 const std::string& keyword, | 226 const std::string& keyword, |
227 const std::string& url, | 227 const std::string& url, |
228 const std::string& suggest_url, | 228 const std::string& suggest_url, |
229 const std::string& alternate_url, | 229 const std::string& alternate_url, |
230 const std::string& favicon_url, | 230 const std::string& favicon_url, |
231 bool safe_for_autoreplace, | 231 bool safe_for_autoreplace, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 data.show_in_default_list = true; | 267 data.show_in_default_list = true; |
268 data.safe_for_autoreplace = safe_for_autoreplace; | 268 data.safe_for_autoreplace = safe_for_autoreplace; |
269 data.input_encodings.push_back("UTF-8"); | 269 data.input_encodings.push_back("UTF-8"); |
270 data.date_created = Time::FromTimeT(100); | 270 data.date_created = Time::FromTimeT(100); |
271 data.last_modified = Time::FromTimeT(100); | 271 data.last_modified = Time::FromTimeT(100); |
272 data.prepopulate_id = prepopulate_id; | 272 data.prepopulate_id = prepopulate_id; |
273 return new TemplateURL(data); | 273 return new TemplateURL(data); |
274 } | 274 } |
275 | 275 |
276 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { | 276 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { |
277 EXPECT_EQ(expected_changed_count, test_util_.GetObserverCount()); | 277 EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount()); |
278 test_util_.ResetObserverCount(); | 278 test_util_->ResetObserverCount(); |
279 } | 279 } |
280 | 280 |
281 void TemplateURLServiceTest::VerifyObserverFired() { | 281 void TemplateURLServiceTest::VerifyObserverFired() { |
282 EXPECT_LE(1, test_util_.GetObserverCount()); | 282 EXPECT_LE(1, test_util_->GetObserverCount()); |
283 test_util_.ResetObserverCount(); | 283 test_util_->ResetObserverCount(); |
284 } | 284 } |
285 | 285 |
286 | 286 |
287 // Actual tests --------------------------------------------------------------- | 287 // Actual tests --------------------------------------------------------------- |
288 | 288 |
289 TEST_F(TemplateURLServiceTest, Load) { | 289 TEST_F(TemplateURLServiceTest, Load) { |
290 test_util_.VerifyLoad(); | 290 test_util_->VerifyLoad(); |
291 } | 291 } |
292 | 292 |
293 TEST_F(TemplateURLServiceTest, AddUpdateRemove) { | 293 TEST_F(TemplateURLServiceTest, AddUpdateRemove) { |
294 // Add a new TemplateURL. | 294 // Add a new TemplateURL. |
295 test_util_.VerifyLoad(); | 295 test_util_->VerifyLoad(); |
296 const size_t initial_count = model()->GetTemplateURLs().size(); | 296 const size_t initial_count = model()->GetTemplateURLs().size(); |
297 | 297 |
298 TemplateURLData data; | 298 TemplateURLData data; |
299 data.short_name = ASCIIToUTF16("google"); | 299 data.short_name = ASCIIToUTF16("google"); |
300 data.SetKeyword(ASCIIToUTF16("keyword")); | 300 data.SetKeyword(ASCIIToUTF16("keyword")); |
301 data.SetURL("http://www.google.com/foo/bar"); | 301 data.SetURL("http://www.google.com/foo/bar"); |
302 data.favicon_url = GURL("http://favicon.url"); | 302 data.favicon_url = GURL("http://favicon.url"); |
303 data.safe_for_autoreplace = true; | 303 data.safe_for_autoreplace = true; |
304 data.date_created = Time::FromTimeT(100); | 304 data.date_created = Time::FromTimeT(100); |
305 data.last_modified = Time::FromTimeT(100); | 305 data.last_modified = Time::FromTimeT(100); |
306 data.sync_guid = "00000000-0000-0000-0000-000000000001"; | 306 data.sync_guid = "00000000-0000-0000-0000-000000000001"; |
307 TemplateURL* t_url = new TemplateURL(data); | 307 TemplateURL* t_url = new TemplateURL(data); |
308 model()->Add(t_url); | 308 model()->Add(t_url); |
309 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 309 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
310 NULL)); | 310 NULL)); |
311 VerifyObserverCount(1); | 311 VerifyObserverCount(1); |
312 base::RunLoop().RunUntilIdle(); | 312 base::RunLoop().RunUntilIdle(); |
313 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 313 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
314 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); | 314 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); |
315 // We need to make a second copy as the model takes ownership of |t_url| and | 315 // We need to make a second copy as the model takes ownership of |t_url| and |
316 // will delete it. We have to do this after calling Add() since that gives | 316 // will delete it. We have to do this after calling Add() since that gives |
317 // |t_url| its ID. | 317 // |t_url| its ID. |
318 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 318 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
319 | 319 |
320 // Reload the model to verify it was actually saved to the database. | 320 // Reload the model to verify it was actually saved to the database. |
321 test_util_.ResetModel(true); | 321 test_util_->ResetModel(true); |
322 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 322 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
323 TemplateURL* loaded_url = | 323 TemplateURL* loaded_url = |
324 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 324 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
325 ASSERT_TRUE(loaded_url != NULL); | 325 ASSERT_TRUE(loaded_url != NULL); |
326 AssertEquals(*cloned_url, *loaded_url); | 326 AssertEquals(*cloned_url, *loaded_url); |
327 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 327 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
328 NULL)); | 328 NULL)); |
329 | 329 |
330 // We expect the last_modified time to be updated to the present time on an | 330 // We expect the last_modified time to be updated to the present time on an |
331 // explicit reset. We have to set up the expectation here because ResetModel | 331 // explicit reset. We have to set up the expectation here because ResetModel |
332 // resets the TimeProvider in the TemplateURLService. | 332 // resets the TimeProvider in the TemplateURLService. |
333 StrictMock<base::MockTimeProvider> mock_time; | 333 StrictMock<base::MockTimeProvider> mock_time; |
334 model()->set_time_provider(&base::MockTimeProvider::StaticNow); | 334 model()->set_time_provider(&base::MockTimeProvider::StaticNow); |
335 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); | 335 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); |
336 | 336 |
337 // Mutate an element and verify it succeeded. | 337 // Mutate an element and verify it succeeded. |
338 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), | 338 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), |
339 "c"); | 339 "c"); |
340 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); | 340 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); |
341 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); | 341 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); |
342 ASSERT_EQ("c", loaded_url->url()); | 342 ASSERT_EQ("c", loaded_url->url()); |
343 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); | 343 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); |
344 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), | 344 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), |
345 NULL)); | 345 NULL)); |
346 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); | 346 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); |
347 cloned_url.reset(new TemplateURL(loaded_url->data())); | 347 cloned_url.reset(new TemplateURL(loaded_url->data())); |
348 base::RunLoop().RunUntilIdle(); | 348 base::RunLoop().RunUntilIdle(); |
349 test_util_.ResetModel(true); | 349 test_util_->ResetModel(true); |
350 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 350 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
351 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); | 351 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); |
352 ASSERT_TRUE(loaded_url != NULL); | 352 ASSERT_TRUE(loaded_url != NULL); |
353 AssertEquals(*cloned_url, *loaded_url); | 353 AssertEquals(*cloned_url, *loaded_url); |
354 // We changed a TemplateURL in the service, so ensure that the time was | 354 // We changed a TemplateURL in the service, so ensure that the time was |
355 // updated. | 355 // updated. |
356 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); | 356 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); |
357 | 357 |
358 // Remove an element and verify it succeeded. | 358 // Remove an element and verify it succeeded. |
359 model()->Remove(loaded_url); | 359 model()->Remove(loaded_url); |
360 VerifyObserverCount(1); | 360 VerifyObserverCount(1); |
361 test_util_.ResetModel(true); | 361 test_util_->ResetModel(true); |
362 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); | 362 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); |
363 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); | 363 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); |
364 } | 364 } |
365 | 365 |
366 TEST_F(TemplateURLServiceTest, AddSameKeyword) { | 366 TEST_F(TemplateURLServiceTest, AddSameKeyword) { |
367 test_util_.VerifyLoad(); | 367 test_util_->VerifyLoad(); |
368 | 368 |
369 AddKeywordWithDate( | 369 AddKeywordWithDate( |
370 "first", "keyword", "http://test1", std::string(), std::string(), | 370 "first", "keyword", "http://test1", std::string(), std::string(), |
371 std::string(), true, "UTF-8", Time(), Time()); | 371 std::string(), true, "UTF-8", Time(), Time()); |
372 VerifyObserverCount(1); | 372 VerifyObserverCount(1); |
373 | 373 |
374 // Test what happens when we try to add a TemplateURL with the same keyword as | 374 // Test what happens when we try to add a TemplateURL with the same keyword as |
375 // one in the model. | 375 // one in the model. |
376 TemplateURLData data; | 376 TemplateURLData data; |
377 data.short_name = ASCIIToUTF16("second"); | 377 data.short_name = ASCIIToUTF16("second"); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 model()->Add(t_url2); | 410 model()->Add(t_url2); |
411 VerifyObserverCount(1); | 411 VerifyObserverCount(1); |
412 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 412 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
413 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); | 413 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); |
414 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); | 414 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); |
415 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 415 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
416 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); | 416 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); |
417 } | 417 } |
418 | 418 |
419 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { | 419 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { |
420 test_util_.VerifyLoad(); | 420 test_util_->VerifyLoad(); |
421 | 421 |
422 TemplateURL* original1 = AddKeywordWithDate( | 422 TemplateURL* original1 = AddKeywordWithDate( |
423 "replaceable", "keyword1", "http://test1", std::string(), std::string(), | 423 "replaceable", "keyword1", "http://test1", std::string(), std::string(), |
424 std::string(), true, "UTF-8", Time(), Time()); | 424 std::string(), true, "UTF-8", Time(), Time()); |
425 TemplateURL* original2 = AddKeywordWithDate( | 425 TemplateURL* original2 = AddKeywordWithDate( |
426 "nonreplaceable", "keyword2", "http://test2", std::string(), | 426 "nonreplaceable", "keyword2", "http://test2", std::string(), |
427 std::string(), std::string(), false, "UTF-8", Time(), Time()); | 427 std::string(), std::string(), false, "UTF-8", Time(), Time()); |
428 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3", | 428 model()->RegisterOmniboxKeyword("test3", "extension", "keyword3", |
429 "http://test3"); | 429 "http://test3"); |
430 TemplateURL* original3 = | 430 TemplateURL* original3 = |
(...skipping 20 matching lines...) Expand all Loading... |
451 // They should override extension keywords added earlier. | 451 // They should override extension keywords added earlier. |
452 model()->RegisterOmniboxKeyword("test6", "test", "keyword3", "http://test6"); | 452 model()->RegisterOmniboxKeyword("test6", "test", "keyword3", "http://test6"); |
453 TemplateURL* extension3 = | 453 TemplateURL* extension3 = |
454 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")); | 454 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3")); |
455 ASSERT_TRUE(extension3); | 455 ASSERT_TRUE(extension3); |
456 EXPECT_EQ(original3, | 456 EXPECT_EQ(original3, |
457 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_"))); | 457 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword3_"))); |
458 } | 458 } |
459 | 459 |
460 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { | 460 TEST_F(TemplateURLServiceTest, AddSameKeywordWithExtensionPresent) { |
461 test_util_.VerifyLoad(); | 461 test_util_->VerifyLoad(); |
462 | 462 |
463 // Similar to the AddSameKeyword test, but with an extension keyword masking a | 463 // Similar to the AddSameKeyword test, but with an extension keyword masking a |
464 // replaceable TemplateURL. We should still do correct conflict resolution | 464 // replaceable TemplateURL. We should still do correct conflict resolution |
465 // between the non-template URLs. | 465 // between the non-template URLs. |
466 model()->RegisterOmniboxKeyword("test2", "extension", "keyword", | 466 model()->RegisterOmniboxKeyword("test2", "extension", "keyword", |
467 "http://test2"); | 467 "http://test2"); |
468 TemplateURL* extension = | 468 TemplateURL* extension = |
469 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 469 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
470 ASSERT_TRUE(extension); | 470 ASSERT_TRUE(extension); |
471 // Adding a keyword that matches the extension should cause the extension | 471 // Adding a keyword that matches the extension should cause the extension |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 // Try removing foo3. This should delete foo3, but leave foo1 untouched. | 611 // Try removing foo3. This should delete foo3, but leave foo1 untouched. |
612 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo3"), month_ago, | 612 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo3"), month_ago, |
613 now + one_day + one_day); | 613 now + one_day + one_day); |
614 EXPECT_EQ(1U, model()->GetTemplateURLs().size()); | 614 EXPECT_EQ(1U, model()->GetTemplateURLs().size()); |
615 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword()); | 615 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword()); |
616 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace()); | 616 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace()); |
617 } | 617 } |
618 | 618 |
619 TEST_F(TemplateURLServiceTest, Reset) { | 619 TEST_F(TemplateURLServiceTest, Reset) { |
620 // Add a new TemplateURL. | 620 // Add a new TemplateURL. |
621 test_util_.VerifyLoad(); | 621 test_util_->VerifyLoad(); |
622 const size_t initial_count = model()->GetTemplateURLs().size(); | 622 const size_t initial_count = model()->GetTemplateURLs().size(); |
623 TemplateURLData data; | 623 TemplateURLData data; |
624 data.short_name = ASCIIToUTF16("google"); | 624 data.short_name = ASCIIToUTF16("google"); |
625 data.SetKeyword(ASCIIToUTF16("keyword")); | 625 data.SetKeyword(ASCIIToUTF16("keyword")); |
626 data.SetURL("http://www.google.com/foo/bar"); | 626 data.SetURL("http://www.google.com/foo/bar"); |
627 data.favicon_url = GURL("http://favicon.url"); | 627 data.favicon_url = GURL("http://favicon.url"); |
628 data.date_created = Time::FromTimeT(100); | 628 data.date_created = Time::FromTimeT(100); |
629 data.last_modified = Time::FromTimeT(100); | 629 data.last_modified = Time::FromTimeT(100); |
630 TemplateURL* t_url = new TemplateURL(data); | 630 TemplateURL* t_url = new TemplateURL(data); |
631 model()->Add(t_url); | 631 model()->Add(t_url); |
(...skipping 15 matching lines...) Expand all Loading... |
647 ASSERT_EQ(new_url, t_url->url()); | 647 ASSERT_EQ(new_url, t_url->url()); |
648 | 648 |
649 // Make sure the mappings in the model were updated. | 649 // Make sure the mappings in the model were updated. |
650 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); | 650 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); |
651 ASSERT_TRUE( | 651 ASSERT_TRUE( |
652 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); | 652 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); |
653 | 653 |
654 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 654 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
655 | 655 |
656 // Reload the model from the database and make sure the change took. | 656 // Reload the model from the database and make sure the change took. |
657 test_util_.ResetModel(true); | 657 test_util_->ResetModel(true); |
658 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 658 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
659 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); | 659 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); |
660 ASSERT_TRUE(read_url); | 660 ASSERT_TRUE(read_url); |
661 AssertEquals(*cloned_url, *read_url); | 661 AssertEquals(*cloned_url, *read_url); |
662 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); | 662 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); |
663 } | 663 } |
664 | 664 |
665 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { | 665 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { |
666 // Add a new TemplateURL. | 666 // Add a new TemplateURL. |
667 test_util_.VerifyLoad(); | 667 test_util_->VerifyLoad(); |
668 const size_t initial_count = model()->GetTemplateURLs().size(); | 668 const size_t initial_count = model()->GetTemplateURLs().size(); |
669 TemplateURL* t_url = AddKeywordWithDate( | 669 TemplateURL* t_url = AddKeywordWithDate( |
670 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", | 670 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
671 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 671 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
672 test_util_.ResetObserverCount(); | 672 test_util_->ResetObserverCount(); |
673 | 673 |
674 model()->SetUserSelectedDefaultSearchProvider(t_url); | 674 model()->SetUserSelectedDefaultSearchProvider(t_url); |
675 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 675 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
676 ASSERT_TRUE(t_url->safe_for_autoreplace()); | 676 ASSERT_TRUE(t_url->safe_for_autoreplace()); |
677 ASSERT_TRUE(t_url->show_in_default_list()); | 677 ASSERT_TRUE(t_url->show_in_default_list()); |
678 | 678 |
679 // Setting the default search provider should have caused notification. | 679 // Setting the default search provider should have caused notification. |
680 VerifyObserverCount(1); | 680 VerifyObserverCount(1); |
681 base::RunLoop().RunUntilIdle(); | 681 base::RunLoop().RunUntilIdle(); |
682 | 682 |
683 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 683 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
684 | 684 |
685 // Make sure when we reload we get a default search provider. | 685 // Make sure when we reload we get a default search provider. |
686 test_util_.ResetModel(true); | 686 test_util_->ResetModel(true); |
687 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 687 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
688 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 688 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
689 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); | 689 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); |
690 } | 690 } |
691 | 691 |
692 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { | 692 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { |
693 test_util_.ChangeModelToLoadState(); | 693 test_util_->ChangeModelToLoadState(); |
694 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); | 694 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); |
695 TemplateURL* t_url = AddKeywordWithDate( | 695 TemplateURL* t_url = AddKeywordWithDate( |
696 "name1", "foo", "http://foo1", "http://sugg1", std::string(), | 696 "name1", "foo", "http://foo1", "http://sugg1", std::string(), |
697 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 697 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
698 | 698 |
699 // Can still replace, newly added template url is marked safe to replace. | 699 // Can still replace, newly added template url is marked safe to replace. |
700 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 700 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
701 GURL("http://foo2"), NULL)); | 701 GURL("http://foo2"), NULL)); |
702 | 702 |
703 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should | 703 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should |
704 // no longer be replaceable. | 704 // no longer be replaceable. |
705 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), | 705 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), |
706 t_url->url()); | 706 t_url->url()); |
707 | 707 |
708 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 708 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
709 GURL("http://foo2"), NULL)); | 709 GURL("http://foo2"), NULL)); |
710 } | 710 } |
711 | 711 |
712 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { | 712 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { |
713 test_util_.ChangeModelToLoadState(); | 713 test_util_->ChangeModelToLoadState(); |
714 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), | 714 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), |
715 GURL("http://foo.com"), NULL)); | 715 GURL("http://foo.com"), NULL)); |
716 TemplateURL* t_url = AddKeywordWithDate( | 716 TemplateURL* t_url = AddKeywordWithDate( |
717 "name1", "foo", "http://foo.com", "http://sugg1", std::string(), | 717 "name1", "foo", "http://foo.com", "http://sugg1", std::string(), |
718 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 718 "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
719 | 719 |
720 // Can still replace, newly added template url is marked safe to replace. | 720 // Can still replace, newly added template url is marked safe to replace. |
721 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), | 721 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), |
722 GURL("http://foo.com"), NULL)); | 722 GURL("http://foo.com"), NULL)); |
723 | 723 |
724 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should | 724 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should |
725 // no longer be replaceable. | 725 // no longer be replaceable. |
726 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), | 726 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), |
727 t_url->url()); | 727 t_url->url()); |
728 | 728 |
729 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), | 729 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), |
730 GURL("http://foo.com"), NULL)); | 730 GURL("http://foo.com"), NULL)); |
731 } | 731 } |
732 | 732 |
733 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { | 733 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { |
734 // We should have a default search provider even if we haven't loaded. | 734 // We should have a default search provider even if we haven't loaded. |
735 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 735 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
736 | 736 |
737 // Now force the model to load and make sure we still have a default. | 737 // Now force the model to load and make sure we still have a default. |
738 test_util_.VerifyLoad(); | 738 test_util_->VerifyLoad(); |
739 | 739 |
740 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 740 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
741 } | 741 } |
742 | 742 |
743 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { | 743 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { |
744 test_util_.VerifyLoad(); | 744 test_util_->VerifyLoad(); |
745 | 745 |
746 TemplateURLData data; | 746 TemplateURLData data; |
747 data.short_name = ASCIIToUTF16("a"); | 747 data.short_name = ASCIIToUTF16("a"); |
748 data.safe_for_autoreplace = true; | 748 data.safe_for_autoreplace = true; |
749 data.SetURL("http://url/{searchTerms}"); | 749 data.SetURL("http://url/{searchTerms}"); |
750 data.suggestions_url = "http://url2"; | 750 data.suggestions_url = "http://url2"; |
751 data.instant_url = "http://instant"; | 751 data.instant_url = "http://instant"; |
752 data.date_created = Time::FromTimeT(100); | 752 data.date_created = Time::FromTimeT(100); |
753 data.last_modified = Time::FromTimeT(100); | 753 data.last_modified = Time::FromTimeT(100); |
754 TemplateURL* t_url = new TemplateURL(data); | 754 TemplateURL* t_url = new TemplateURL(data); |
755 model()->Add(t_url); | 755 model()->Add(t_url); |
756 const TemplateURLID id = t_url->id(); | 756 const TemplateURLID id = t_url->id(); |
757 | 757 |
758 model()->SetUserSelectedDefaultSearchProvider(t_url); | 758 model()->SetUserSelectedDefaultSearchProvider(t_url); |
759 base::RunLoop().RunUntilIdle(); | 759 base::RunLoop().RunUntilIdle(); |
760 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 760 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
761 | 761 |
762 // Reset the model and don't load it. The template url we set as the default | 762 // Reset the model and don't load it. The template url we set as the default |
763 // should be pulled from prefs now. | 763 // should be pulled from prefs now. |
764 test_util_.ResetModel(false); | 764 test_util_->ResetModel(false); |
765 | 765 |
766 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs | 766 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs |
767 // value are persisted to prefs. | 767 // value are persisted to prefs. |
768 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); | 768 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); |
769 ASSERT_TRUE(default_turl); | 769 ASSERT_TRUE(default_turl); |
770 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); | 770 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); |
771 EXPECT_EQ("http://url/{searchTerms}", default_turl->url()); | 771 EXPECT_EQ("http://url/{searchTerms}", default_turl->url()); |
772 EXPECT_EQ("http://url2", default_turl->suggestions_url()); | 772 EXPECT_EQ("http://url2", default_turl->suggestions_url()); |
773 EXPECT_EQ("http://instant", default_turl->instant_url()); | 773 EXPECT_EQ("http://instant", default_turl->instant_url()); |
774 EXPECT_EQ(id, default_turl->id()); | 774 EXPECT_EQ(id, default_turl->id()); |
775 | 775 |
776 // Now do a load and make sure the default search provider really takes. | 776 // Now do a load and make sure the default search provider really takes. |
777 test_util_.VerifyLoad(); | 777 test_util_->VerifyLoad(); |
778 | 778 |
779 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 779 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
780 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); | 780 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); |
781 } | 781 } |
782 | 782 |
783 TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) { | 783 TEST_F(TemplateURLServiceTest, RepairPrepopulatedSearchEngines) { |
784 test_util_.VerifyLoad(); | 784 test_util_->VerifyLoad(); |
785 | 785 |
786 // Edit Google search engine. | 786 // Edit Google search engine. |
787 TemplateURL* google = model()->GetTemplateURLForKeyword( | 787 TemplateURL* google = model()->GetTemplateURLForKeyword( |
788 ASCIIToUTF16("google.com")); | 788 ASCIIToUTF16("google.com")); |
789 ASSERT_TRUE(google); | 789 ASSERT_TRUE(google); |
790 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"), | 790 model()->ResetTemplateURL(google, ASCIIToUTF16("trash"), ASCIIToUTF16("xxx"), |
791 "http://www.foo.com/s?q={searchTerms}"); | 791 "http://www.foo.com/s?q={searchTerms}"); |
792 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); | 792 EXPECT_EQ(ASCIIToUTF16("trash"), google->short_name()); |
793 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword()); | 793 EXPECT_EQ(ASCIIToUTF16("xxx"), google->keyword()); |
794 | 794 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 | 833 |
834 TEST_F(TemplateURLServiceTest, RepairSearchEnginesWithManagedDefault) { | 834 TEST_F(TemplateURLServiceTest, RepairSearchEnginesWithManagedDefault) { |
835 // Set a managed preference that establishes a default search provider. | 835 // Set a managed preference that establishes a default search provider. |
836 const char kName[] = "test1"; | 836 const char kName[] = "test1"; |
837 const char kKeyword[] = "test.com"; | 837 const char kKeyword[] = "test.com"; |
838 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; | 838 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; |
839 const char kIconURL[] = "http://test.com/icon.jpg"; | 839 const char kIconURL[] = "http://test.com/icon.jpg"; |
840 const char kEncodings[] = "UTF-16;UTF-32"; | 840 const char kEncodings[] = "UTF-16;UTF-32"; |
841 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; | 841 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; |
842 const char kSearchTermsReplacementKey[] = "espv"; | 842 const char kSearchTermsReplacementKey[] = "espv"; |
843 test_util_.SetManagedDefaultSearchPreferences(true, kName, kKeyword, | 843 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, |
844 kSearchURL, std::string(), | 844 kSearchURL, std::string(), |
845 kIconURL, kEncodings, | 845 kIconURL, kEncodings, |
846 kAlternateURL, | 846 kAlternateURL, |
847 kSearchTermsReplacementKey); | 847 kSearchTermsReplacementKey); |
848 test_util_.VerifyLoad(); | 848 test_util_->VerifyLoad(); |
849 // Verify that the default manager we are getting is the managed one. | 849 // Verify that the default manager we are getting is the managed one. |
850 TemplateURLData data; | 850 TemplateURLData data; |
851 data.short_name = ASCIIToUTF16(kName); | 851 data.short_name = ASCIIToUTF16(kName); |
852 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 852 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
853 data.SetURL(kSearchURL); | 853 data.SetURL(kSearchURL); |
854 data.favicon_url = GURL(kIconURL); | 854 data.favicon_url = GURL(kIconURL); |
855 data.show_in_default_list = true; | 855 data.show_in_default_list = true; |
856 base::SplitString(kEncodings, ';', &data.input_encodings); | 856 base::SplitString(kEncodings, ';', &data.input_encodings); |
857 data.alternate_urls.push_back(kAlternateURL); | 857 data.alternate_urls.push_back(kAlternateURL); |
858 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 858 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
(...skipping 22 matching lines...) Expand all Loading... |
881 { "http://x/foo?y=xx", base::string16() }, | 881 { "http://x/foo?y=xx", base::string16() }, |
882 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, | 882 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, |
883 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, | 883 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, |
884 { "http://x/foo?q=b&q=xx", base::string16() }, | 884 { "http://x/foo?q=b&q=xx", base::string16() }, |
885 { "http://x/foo#query=xx", ASCIIToUTF16("xx") }, | 885 { "http://x/foo#query=xx", ASCIIToUTF16("xx") }, |
886 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") }, | 886 { "http://x/foo?q=b#query=xx", ASCIIToUTF16("xx") }, |
887 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") }, | 887 { "http://x/foo?q=b#q=xx", ASCIIToUTF16("b") }, |
888 { "http://x/foo?query=b#q=xx", base::string16() }, | 888 { "http://x/foo?query=b#q=xx", base::string16() }, |
889 }; | 889 }; |
890 | 890 |
891 test_util_.ChangeModelToLoadState(); | 891 test_util_->ChangeModelToLoadState(); |
892 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}", | 892 AddKeywordWithDate("name", "x", "http://x/foo?q={searchTerms}", |
893 "http://sugg1", "http://x/foo#query={searchTerms}", | 893 "http://sugg1", "http://x/foo#query={searchTerms}", |
894 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); | 894 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
895 | 895 |
896 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 896 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { |
897 TemplateURLService::URLVisitedDetails details = { | 897 TemplateURLService::URLVisitedDetails details = { |
898 GURL(data[i].url), false | 898 GURL(data[i].url), false |
899 }; | 899 }; |
900 model()->UpdateKeywordSearchTermsForURL(details); | 900 model()->UpdateKeywordSearchTermsForURL(details); |
901 EXPECT_EQ(data[i].term, test_util_.GetAndClearSearchTerm()); | 901 EXPECT_EQ(data[i].term, test_util_->GetAndClearSearchTerm()); |
902 } | 902 } |
903 } | 903 } |
904 | 904 |
905 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { | 905 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { |
906 struct TestData { | 906 struct TestData { |
907 const std::string url; | 907 const std::string url; |
908 } data[] = { | 908 } data[] = { |
909 { "http://foo/" }, | 909 { "http://foo/" }, |
910 { "http://x/bar?q=xx" }, | 910 { "http://x/bar?q=xx" }, |
911 { "http://x/foo?y=xx" }, | 911 { "http://x/foo?y=xx" }, |
912 }; | 912 }; |
913 | 913 |
914 test_util_.ChangeModelToLoadState(); | 914 test_util_->ChangeModelToLoadState(); |
915 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(), | 915 AddKeywordWithDate("name", "x", "http://x/foo", "http://sugg1", std::string(), |
916 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); | 916 "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
917 | 917 |
918 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 918 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { |
919 TemplateURLService::URLVisitedDetails details = { | 919 TemplateURLService::URLVisitedDetails details = { |
920 GURL(data[i].url), false | 920 GURL(data[i].url), false |
921 }; | 921 }; |
922 model()->UpdateKeywordSearchTermsForURL(details); | 922 model()->UpdateKeywordSearchTermsForURL(details); |
923 ASSERT_EQ(base::string16(), test_util_.GetAndClearSearchTerm()); | 923 ASSERT_EQ(base::string16(), test_util_->GetAndClearSearchTerm()); |
924 } | 924 } |
925 } | 925 } |
926 | 926 |
927 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { | 927 TEST_F(TemplateURLServiceWithoutFallbackTest, ChangeGoogleBaseValue) { |
928 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL} | 928 // NOTE: Do not load the prepopulate data, which also has a {google:baseURL} |
929 // keyword in it and would confuse this test. | 929 // keyword in it and would confuse this test. |
930 test_util_.ChangeModelToLoadState(); | 930 test_util_->ChangeModelToLoadState(); |
931 | 931 |
932 test_util_.SetGoogleBaseURL(GURL("http://google.com/")); | 932 test_util_->SetGoogleBaseURL(GURL("http://google.com/")); |
933 const TemplateURL* t_url = AddKeywordWithDate( | 933 const TemplateURL* t_url = AddKeywordWithDate( |
934 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1", | 934 "name", "google.com", "{google:baseURL}?q={searchTerms}", "http://sugg1", |
935 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); | 935 std::string(), "http://icon1", false, "UTF-8;UTF-16", Time(), Time()); |
936 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); | 936 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); |
937 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data())); | 937 EXPECT_EQ("google.com", t_url->url_ref().GetHost(search_terms_data())); |
938 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); | 938 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); |
939 | 939 |
940 // Change the Google base url. | 940 // Change the Google base url. |
941 test_util_.ResetObserverCount(); | 941 test_util_->ResetObserverCount(); |
942 test_util_.SetGoogleBaseURL(GURL("http://google.co.uk/")); | 942 test_util_->SetGoogleBaseURL(GURL("http://google.co.uk/")); |
943 VerifyObserverCount(1); | 943 VerifyObserverCount(1); |
944 | 944 |
945 // Make sure the host->TemplateURL map was updated appropriately. | 945 // Make sure the host->TemplateURL map was updated appropriately. |
946 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk")); | 946 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.co.uk")); |
947 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL); | 947 EXPECT_TRUE(model()->GetTemplateURLForHost("google.com") == NULL); |
948 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data())); | 948 EXPECT_EQ("google.co.uk", t_url->url_ref().GetHost(search_terms_data())); |
949 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); | 949 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); |
950 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms( | 950 EXPECT_EQ("http://google.co.uk/?q=x", t_url->url_ref().ReplaceSearchTerms( |
951 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data())); | 951 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("x")), search_terms_data())); |
952 | 952 |
953 // Now add a manual entry and then change the Google base URL such that the | 953 // Now add a manual entry and then change the Google base URL such that the |
954 // autogenerated Google search keyword would conflict. | 954 // autogenerated Google search keyword would conflict. |
955 TemplateURL* manual = AddKeywordWithDate( | 955 TemplateURL* manual = AddKeywordWithDate( |
956 "manual", "google.de", "http://google.de/search?q={searchTerms}", | 956 "manual", "google.de", "http://google.de/search?q={searchTerms}", |
957 std::string(), std::string(), std::string(), false, "UTF-8", Time(), | 957 std::string(), std::string(), std::string(), false, "UTF-8", Time(), |
958 Time()); | 958 Time()); |
959 test_util_.SetGoogleBaseURL(GURL("http://google.de")); | 959 test_util_->SetGoogleBaseURL(GURL("http://google.de")); |
960 | 960 |
961 // Verify that the manual entry is untouched, and the autogenerated keyword | 961 // Verify that the manual entry is untouched, and the autogenerated keyword |
962 // has not changed. | 962 // has not changed. |
963 ASSERT_EQ(manual, | 963 ASSERT_EQ(manual, |
964 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de"))); | 964 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.de"))); |
965 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); | 965 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); |
966 ASSERT_EQ(t_url, | 966 ASSERT_EQ(t_url, |
967 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk"))); | 967 model()->GetTemplateURLForKeyword(ASCIIToUTF16("google.co.uk"))); |
968 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data())); | 968 EXPECT_EQ("google.de", t_url->url_ref().GetHost(search_terms_data())); |
969 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); | 969 EXPECT_EQ(ASCIIToUTF16("google.co.uk"), t_url->keyword()); |
970 | 970 |
971 // Change the base URL again and verify that the autogenerated keyword follows | 971 // Change the base URL again and verify that the autogenerated keyword follows |
972 // even though it didn't match the base URL, while the manual entry is still | 972 // even though it didn't match the base URL, while the manual entry is still |
973 // untouched. | 973 // untouched. |
974 test_util_.SetGoogleBaseURL(GURL("http://google.fr/")); | 974 test_util_->SetGoogleBaseURL(GURL("http://google.fr/")); |
975 ASSERT_EQ(manual, model()->GetTemplateURLForHost("google.de")); | 975 ASSERT_EQ(manual, model()->GetTemplateURLForHost("google.de")); |
976 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); | 976 EXPECT_EQ("google.de", manual->url_ref().GetHost(search_terms_data())); |
977 EXPECT_EQ(ASCIIToUTF16("google.de"), manual->keyword()); | 977 EXPECT_EQ(ASCIIToUTF16("google.de"), manual->keyword()); |
978 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.fr")); | 978 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.fr")); |
979 EXPECT_TRUE(model()->GetTemplateURLForHost("google.co.uk") == NULL); | 979 EXPECT_TRUE(model()->GetTemplateURLForHost("google.co.uk") == NULL); |
980 EXPECT_EQ("google.fr", t_url->url_ref().GetHost(search_terms_data())); | 980 EXPECT_EQ("google.fr", t_url->url_ref().GetHost(search_terms_data())); |
981 EXPECT_EQ(ASCIIToUTF16("google.fr"), t_url->keyword()); | 981 EXPECT_EQ(ASCIIToUTF16("google.fr"), t_url->keyword()); |
982 } | 982 } |
983 | 983 |
984 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for | 984 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for |
985 // KEYWORD visits. | 985 // KEYWORD visits. |
986 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { | 986 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { |
987 test_util_.VerifyLoad(); | 987 test_util_->VerifyLoad(); |
988 ASSERT_TRUE(test_util_.profile()->CreateHistoryService(true, false)); | 988 ASSERT_TRUE(test_util_->profile()->CreateHistoryService(true, false)); |
989 | 989 |
990 // Create a keyword. | 990 // Create a keyword. |
991 TemplateURL* t_url = AddKeywordWithDate( | 991 TemplateURL* t_url = AddKeywordWithDate( |
992 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}", | 992 "keyword", "keyword", "http://foo.com/foo?query={searchTerms}", |
993 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16", | 993 "http://sugg1", std::string(), "http://icon1", true, "UTF-8;UTF-16", |
994 base::Time::Now(), base::Time::Now()); | 994 base::Time::Now(), base::Time::Now()); |
995 | 995 |
996 // Add a visit that matches the url of the keyword. | 996 // Add a visit that matches the url of the keyword. |
997 HistoryService* history = | 997 HistoryService* history = |
998 HistoryServiceFactory::GetForProfile(test_util_.profile(), | 998 HistoryServiceFactory::GetForProfile(test_util_->profile(), |
999 Profile::EXPLICIT_ACCESS); | 999 Profile::EXPLICIT_ACCESS); |
1000 history->AddPage( | 1000 history->AddPage( |
1001 GURL(t_url->url_ref().ReplaceSearchTerms( | 1001 GURL(t_url->url_ref().ReplaceSearchTerms( |
1002 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")), | 1002 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("blah")), |
1003 search_terms_data())), | 1003 search_terms_data())), |
1004 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(), | 1004 base::Time::Now(), NULL, 0, GURL(), history::RedirectList(), |
1005 content::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false); | 1005 content::PAGE_TRANSITION_KEYWORD, history::SOURCE_BROWSED, false); |
1006 | 1006 |
1007 // Wait for history to finish processing the request. | 1007 // Wait for history to finish processing the request. |
1008 test_util_.profile()->BlockUntilHistoryProcessesPendingRequests(); | 1008 test_util_->profile()->BlockUntilHistoryProcessesPendingRequests(); |
1009 | 1009 |
1010 // Query history for the generated url. | 1010 // Query history for the generated url. |
1011 base::CancelableTaskTracker tracker; | 1011 base::CancelableTaskTracker tracker; |
1012 QueryHistoryCallbackImpl callback; | 1012 QueryHistoryCallbackImpl callback; |
1013 history->QueryURL(GURL("http://keyword"), | 1013 history->QueryURL(GURL("http://keyword"), |
1014 true, | 1014 true, |
1015 base::Bind(&QueryHistoryCallbackImpl::Callback, | 1015 base::Bind(&QueryHistoryCallbackImpl::Callback, |
1016 base::Unretained(&callback)), | 1016 base::Unretained(&callback)), |
1017 &tracker); | 1017 &tracker); |
1018 | 1018 |
1019 // Wait for the request to be processed. | 1019 // Wait for the request to be processed. |
1020 test_util_.profile()->BlockUntilHistoryProcessesPendingRequests(); | 1020 test_util_->profile()->BlockUntilHistoryProcessesPendingRequests(); |
1021 | 1021 |
1022 // And make sure the url and visit were added. | 1022 // And make sure the url and visit were added. |
1023 EXPECT_TRUE(callback.success); | 1023 EXPECT_TRUE(callback.success); |
1024 EXPECT_NE(0, callback.row.id()); | 1024 EXPECT_NE(0, callback.row.id()); |
1025 ASSERT_EQ(1U, callback.visits.size()); | 1025 ASSERT_EQ(1U, callback.visits.size()); |
1026 EXPECT_EQ(content::PAGE_TRANSITION_KEYWORD_GENERATED, | 1026 EXPECT_EQ(content::PAGE_TRANSITION_KEYWORD_GENERATED, |
1027 content::PageTransitionStripQualifier(callback.visits[0].transition)); | 1027 content::PageTransitionStripQualifier(callback.visits[0].transition)); |
1028 } | 1028 } |
1029 | 1029 |
1030 // Make sure that the load routine deletes prepopulated engines that no longer | 1030 // Make sure that the load routine deletes prepopulated engines that no longer |
1031 // exist in the prepopulate data. | 1031 // exist in the prepopulate data. |
1032 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) { | 1032 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) { |
1033 // Create a preloaded template url. Add it to a loaded model and wait for the | 1033 // Create a preloaded template url. Add it to a loaded model and wait for the |
1034 // saves to finish. | 1034 // saves to finish. |
1035 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); | 1035 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); |
1036 test_util_.ChangeModelToLoadState(); | 1036 test_util_->ChangeModelToLoadState(); |
1037 model()->Add(t_url); | 1037 model()->Add(t_url); |
1038 ASSERT_TRUE( | 1038 ASSERT_TRUE( |
1039 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); | 1039 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); |
1040 base::RunLoop().RunUntilIdle(); | 1040 base::RunLoop().RunUntilIdle(); |
1041 | 1041 |
1042 // Ensure that merging clears this engine. | 1042 // Ensure that merging clears this engine. |
1043 test_util_.ResetModel(true); | 1043 test_util_->ResetModel(true); |
1044 ASSERT_TRUE( | 1044 ASSERT_TRUE( |
1045 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); | 1045 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); |
1046 | 1046 |
1047 // Wait for any saves to finish. | 1047 // Wait for any saves to finish. |
1048 base::RunLoop().RunUntilIdle(); | 1048 base::RunLoop().RunUntilIdle(); |
1049 | 1049 |
1050 // Reload the model to verify that the database was updated as a result of the | 1050 // Reload the model to verify that the database was updated as a result of the |
1051 // merge. | 1051 // merge. |
1052 test_util_.ResetModel(true); | 1052 test_util_->ResetModel(true); |
1053 ASSERT_TRUE( | 1053 ASSERT_TRUE( |
1054 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); | 1054 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); |
1055 } | 1055 } |
1056 | 1056 |
1057 // Make sure that load routine doesn't delete prepopulated engines that no | 1057 // Make sure that load routine doesn't delete prepopulated engines that no |
1058 // longer exist in the prepopulate data if it has been modified by the user. | 1058 // longer exist in the prepopulate data if it has been modified by the user. |
1059 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { | 1059 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { |
1060 // Create a preloaded template url and add it to a loaded model. | 1060 // Create a preloaded template url and add it to a loaded model. |
1061 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); | 1061 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); |
1062 test_util_.ChangeModelToLoadState(); | 1062 test_util_->ChangeModelToLoadState(); |
1063 model()->Add(t_url); | 1063 model()->Add(t_url); |
1064 | 1064 |
1065 // Do the copy after t_url is added so that the id is set. | 1065 // Do the copy after t_url is added so that the id is set. |
1066 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 1066 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
1067 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1067 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1068 | 1068 |
1069 // Wait for any saves to finish. | 1069 // Wait for any saves to finish. |
1070 base::RunLoop().RunUntilIdle(); | 1070 base::RunLoop().RunUntilIdle(); |
1071 | 1071 |
1072 // Ensure that merging won't clear it if the user has edited it. | 1072 // Ensure that merging won't clear it if the user has edited it. |
1073 test_util_.ResetModel(true); | 1073 test_util_->ResetModel(true); |
1074 const TemplateURL* url_for_unittest = | 1074 const TemplateURL* url_for_unittest = |
1075 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); | 1075 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); |
1076 ASSERT_TRUE(url_for_unittest != NULL); | 1076 ASSERT_TRUE(url_for_unittest != NULL); |
1077 AssertEquals(*cloned_url, *url_for_unittest); | 1077 AssertEquals(*cloned_url, *url_for_unittest); |
1078 | 1078 |
1079 // Wait for any saves to finish. | 1079 // Wait for any saves to finish. |
1080 base::RunLoop().RunUntilIdle(); | 1080 base::RunLoop().RunUntilIdle(); |
1081 | 1081 |
1082 // Reload the model to verify that save/reload retains the item. | 1082 // Reload the model to verify that save/reload retains the item. |
1083 test_util_.ResetModel(true); | 1083 test_util_->ResetModel(true); |
1084 ASSERT_TRUE( | 1084 ASSERT_TRUE( |
1085 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); | 1085 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); |
1086 } | 1086 } |
1087 | 1087 |
1088 // Make sure that load routine doesn't delete | 1088 // Make sure that load routine doesn't delete |
1089 // prepopulated engines that no longer exist in the prepopulate data if | 1089 // prepopulated engines that no longer exist in the prepopulate data if |
1090 // it has been modified by the user. | 1090 // it has been modified by the user. |
1091 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { | 1091 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { |
1092 test_util_.VerifyLoad(); | 1092 test_util_->VerifyLoad(); |
1093 // Verify that the default search provider is set to something. | 1093 // Verify that the default search provider is set to something. |
1094 TemplateURL* default_search = model()->GetDefaultSearchProvider(); | 1094 TemplateURL* default_search = model()->GetDefaultSearchProvider(); |
1095 ASSERT_TRUE(default_search != NULL); | 1095 ASSERT_TRUE(default_search != NULL); |
1096 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data())); | 1096 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data())); |
1097 | 1097 |
1098 // Wait for any saves to finish. | 1098 // Wait for any saves to finish. |
1099 base::RunLoop().RunUntilIdle(); | 1099 base::RunLoop().RunUntilIdle(); |
1100 | 1100 |
1101 // Reload the model and check that the default search provider | 1101 // Reload the model and check that the default search provider |
1102 // was properly saved. | 1102 // was properly saved. |
1103 test_util_.ResetModel(true); | 1103 test_util_->ResetModel(true); |
1104 default_search = model()->GetDefaultSearchProvider(); | 1104 default_search = model()->GetDefaultSearchProvider(); |
1105 ASSERT_TRUE(default_search != NULL); | 1105 ASSERT_TRUE(default_search != NULL); |
1106 AssertEquals(*cloned_url, *default_search); | 1106 AssertEquals(*cloned_url, *default_search); |
1107 } | 1107 } |
1108 | 1108 |
1109 // Make sure that the load routine doesn't delete | 1109 // Make sure that the load routine doesn't delete |
1110 // prepopulated engines that no longer exist in the prepopulate data if | 1110 // prepopulated engines that no longer exist in the prepopulate data if |
1111 // it is the default search provider. | 1111 // it is the default search provider. |
1112 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { | 1112 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { |
1113 // Set the default search provider to a preloaded template url which | 1113 // Set the default search provider to a preloaded template url which |
1114 // is not in the current set of preloaded template urls and save | 1114 // is not in the current set of preloaded template urls and save |
1115 // the result. | 1115 // the result. |
1116 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); | 1116 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); |
1117 test_util_.ChangeModelToLoadState(); | 1117 test_util_->ChangeModelToLoadState(); |
1118 model()->Add(t_url); | 1118 model()->Add(t_url); |
1119 model()->SetUserSelectedDefaultSearchProvider(t_url); | 1119 model()->SetUserSelectedDefaultSearchProvider(t_url); |
1120 // Do the copy after t_url is added and set as default so that its | 1120 // Do the copy after t_url is added and set as default so that its |
1121 // internal state is correct. | 1121 // internal state is correct. |
1122 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 1122 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); |
1123 | 1123 |
1124 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1124 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1125 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 1125 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
1126 base::RunLoop().RunUntilIdle(); | 1126 base::RunLoop().RunUntilIdle(); |
1127 | 1127 |
1128 // Ensure that merging won't clear the prepopulated template url | 1128 // Ensure that merging won't clear the prepopulated template url |
1129 // which is no longer present if it's the default engine. | 1129 // which is no longer present if it's the default engine. |
1130 test_util_.ResetModel(true); | 1130 test_util_->ResetModel(true); |
1131 { | 1131 { |
1132 const TemplateURL* keyword_url = | 1132 const TemplateURL* keyword_url = |
1133 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); | 1133 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); |
1134 ASSERT_TRUE(keyword_url != NULL); | 1134 ASSERT_TRUE(keyword_url != NULL); |
1135 AssertEquals(*cloned_url, *keyword_url); | 1135 AssertEquals(*cloned_url, *keyword_url); |
1136 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); | 1136 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); |
1137 } | 1137 } |
1138 | 1138 |
1139 // Wait for any saves to finish. | 1139 // Wait for any saves to finish. |
1140 base::RunLoop().RunUntilIdle(); | 1140 base::RunLoop().RunUntilIdle(); |
1141 | 1141 |
1142 // Reload the model to verify that the update was saved. | 1142 // Reload the model to verify that the update was saved. |
1143 test_util_.ResetModel(true); | 1143 test_util_->ResetModel(true); |
1144 { | 1144 { |
1145 const TemplateURL* keyword_url = | 1145 const TemplateURL* keyword_url = |
1146 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); | 1146 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); |
1147 ASSERT_TRUE(keyword_url != NULL); | 1147 ASSERT_TRUE(keyword_url != NULL); |
1148 AssertEquals(*cloned_url, *keyword_url); | 1148 AssertEquals(*cloned_url, *keyword_url); |
1149 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); | 1149 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); |
1150 } | 1150 } |
1151 } | 1151 } |
1152 | 1152 |
1153 // Make sure that the load routine sets a default search provider if it was | 1153 // Make sure that the load routine sets a default search provider if it was |
1154 // missing and not managed. | 1154 // missing and not managed. |
1155 TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) { | 1155 TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) { |
1156 // Force the model to load and make sure we have a default search provider. | 1156 // Force the model to load and make sure we have a default search provider. |
1157 test_util_.VerifyLoad(); | 1157 test_util_->VerifyLoad(); |
1158 EXPECT_TRUE(model()->GetDefaultSearchProvider()); | 1158 EXPECT_TRUE(model()->GetDefaultSearchProvider()); |
1159 | 1159 |
1160 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( | 1160 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( |
1161 search_terms_data())); | 1161 search_terms_data())); |
1162 | 1162 |
1163 // Make default search provider unusable (no search terms). | 1163 // Make default search provider unusable (no search terms). |
1164 model()->ResetTemplateURL(model()->GetDefaultSearchProvider(), | 1164 model()->ResetTemplateURL(model()->GetDefaultSearchProvider(), |
1165 ASCIIToUTF16("test"), ASCIIToUTF16("test"), | 1165 ASCIIToUTF16("test"), ASCIIToUTF16("test"), |
1166 "http://example.com/"); | 1166 "http://example.com/"); |
1167 base::RunLoop().RunUntilIdle(); | 1167 base::RunLoop().RunUntilIdle(); |
1168 | 1168 |
1169 // Reset the model and load it. There should be a usable default search | 1169 // Reset the model and load it. There should be a usable default search |
1170 // provider. | 1170 // provider. |
1171 test_util_.ResetModel(true); | 1171 test_util_->ResetModel(true); |
1172 | 1172 |
1173 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 1173 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
1174 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( | 1174 EXPECT_TRUE(model()->GetDefaultSearchProvider()->SupportsReplacement( |
1175 search_terms_data())); | 1175 search_terms_data())); |
1176 } | 1176 } |
1177 | 1177 |
1178 // Simulates failing to load the webdb and makes sure the default search | 1178 // Simulates failing to load the webdb and makes sure the default search |
1179 // provider is valid. | 1179 // provider is valid. |
1180 TEST_F(TemplateURLServiceTest, FailedInit) { | 1180 TEST_F(TemplateURLServiceTest, FailedInit) { |
1181 test_util_.VerifyLoad(); | 1181 test_util_->VerifyLoad(); |
1182 | 1182 |
1183 test_util_.ClearModel(); | 1183 test_util_->ClearModel(); |
1184 WebDataServiceFactory::GetKeywordWebDataForProfile( | 1184 WebDataServiceFactory::GetKeywordWebDataForProfile( |
1185 test_util_.profile(), Profile::EXPLICIT_ACCESS)->ShutdownDatabase(); | 1185 test_util_->profile(), Profile::EXPLICIT_ACCESS)->ShutdownDatabase(); |
1186 | 1186 |
1187 test_util_.ResetModel(false); | 1187 test_util_->ResetModel(false); |
1188 model()->Load(); | 1188 model()->Load(); |
1189 base::RunLoop().RunUntilIdle(); | 1189 base::RunLoop().RunUntilIdle(); |
1190 | 1190 |
1191 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 1191 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
1192 } | 1192 } |
1193 | 1193 |
1194 // Verifies that if the default search URL preference is managed, we report | 1194 // Verifies that if the default search URL preference is managed, we report |
1195 // the default search as managed. Also check that we are getting the right | 1195 // the default search as managed. Also check that we are getting the right |
1196 // values. | 1196 // values. |
1197 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { | 1197 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { |
1198 test_util_.VerifyLoad(); | 1198 test_util_->VerifyLoad(); |
1199 const size_t initial_count = model()->GetTemplateURLs().size(); | 1199 const size_t initial_count = model()->GetTemplateURLs().size(); |
1200 test_util_.ResetObserverCount(); | 1200 test_util_->ResetObserverCount(); |
1201 | 1201 |
1202 // Set a regular default search provider. | 1202 // Set a regular default search provider. |
1203 TemplateURL* regular_default = AddKeywordWithDate( | 1203 TemplateURL* regular_default = AddKeywordWithDate( |
1204 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", | 1204 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
1205 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 1205 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
1206 VerifyObserverCount(1); | 1206 VerifyObserverCount(1); |
1207 model()->SetUserSelectedDefaultSearchProvider(regular_default); | 1207 model()->SetUserSelectedDefaultSearchProvider(regular_default); |
1208 // Adding the URL and setting the default search provider should have caused | 1208 // Adding the URL and setting the default search provider should have caused |
1209 // notifications. | 1209 // notifications. |
1210 VerifyObserverCount(1); | 1210 VerifyObserverCount(1); |
1211 EXPECT_FALSE(model()->is_default_search_managed()); | 1211 EXPECT_FALSE(model()->is_default_search_managed()); |
1212 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1212 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1213 | 1213 |
1214 // Set a managed preference that establishes a default search provider. | 1214 // Set a managed preference that establishes a default search provider. |
1215 const char kName[] = "test1"; | 1215 const char kName[] = "test1"; |
1216 const char kKeyword[] = "test.com"; | 1216 const char kKeyword[] = "test.com"; |
1217 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; | 1217 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; |
1218 const char kIconURL[] = "http://test.com/icon.jpg"; | 1218 const char kIconURL[] = "http://test.com/icon.jpg"; |
1219 const char kEncodings[] = "UTF-16;UTF-32"; | 1219 const char kEncodings[] = "UTF-16;UTF-32"; |
1220 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; | 1220 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; |
1221 const char kSearchTermsReplacementKey[] = "espv"; | 1221 const char kSearchTermsReplacementKey[] = "espv"; |
1222 test_util_.SetManagedDefaultSearchPreferences(true, kName, kKeyword, | 1222 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, |
1223 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, | 1223 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
1224 kSearchTermsReplacementKey); | 1224 kSearchTermsReplacementKey); |
1225 VerifyObserverFired(); | 1225 VerifyObserverFired(); |
1226 EXPECT_TRUE(model()->is_default_search_managed()); | 1226 EXPECT_TRUE(model()->is_default_search_managed()); |
1227 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); | 1227 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); |
1228 | 1228 |
1229 // Verify that the default manager we are getting is the managed one. | 1229 // Verify that the default manager we are getting is the managed one. |
1230 TemplateURLData data; | 1230 TemplateURLData data; |
1231 data.short_name = ASCIIToUTF16(kName); | 1231 data.short_name = ASCIIToUTF16(kName); |
1232 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 1232 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
1233 data.SetURL(kSearchURL); | 1233 data.SetURL(kSearchURL); |
1234 data.favicon_url = GURL(kIconURL); | 1234 data.favicon_url = GURL(kIconURL); |
1235 data.show_in_default_list = true; | 1235 data.show_in_default_list = true; |
1236 base::SplitString(kEncodings, ';', &data.input_encodings); | 1236 base::SplitString(kEncodings, ';', &data.input_encodings); |
1237 data.alternate_urls.push_back(kAlternateURL); | 1237 data.alternate_urls.push_back(kAlternateURL); |
1238 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 1238 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
1239 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); | 1239 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); |
1240 const TemplateURL* actual_managed_default = | 1240 const TemplateURL* actual_managed_default = |
1241 model()->GetDefaultSearchProvider(); | 1241 model()->GetDefaultSearchProvider(); |
1242 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); | 1242 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); |
1243 EXPECT_TRUE(actual_managed_default->show_in_default_list()); | 1243 EXPECT_TRUE(actual_managed_default->show_in_default_list()); |
1244 | 1244 |
1245 // Update the managed preference and check that the model has changed. | 1245 // Update the managed preference and check that the model has changed. |
1246 const char kNewName[] = "test2"; | 1246 const char kNewName[] = "test2"; |
1247 const char kNewKeyword[] = "other.com"; | 1247 const char kNewKeyword[] = "other.com"; |
1248 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; | 1248 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; |
1249 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; | 1249 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; |
1250 test_util_.SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, | 1250 test_util_->SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, |
1251 kNewSearchURL, kNewSuggestURL, std::string(), std::string(), | 1251 kNewSearchURL, kNewSuggestURL, std::string(), std::string(), |
1252 std::string(), std::string()); | 1252 std::string(), std::string()); |
1253 VerifyObserverFired(); | 1253 VerifyObserverFired(); |
1254 EXPECT_TRUE(model()->is_default_search_managed()); | 1254 EXPECT_TRUE(model()->is_default_search_managed()); |
1255 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); | 1255 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); |
1256 | 1256 |
1257 // Verify that the default manager we are now getting is the correct one. | 1257 // Verify that the default manager we are now getting is the correct one. |
1258 TemplateURLData data2; | 1258 TemplateURLData data2; |
1259 data2.short_name = ASCIIToUTF16(kNewName); | 1259 data2.short_name = ASCIIToUTF16(kNewName); |
1260 data2.SetKeyword(ASCIIToUTF16(kNewKeyword)); | 1260 data2.SetKeyword(ASCIIToUTF16(kNewKeyword)); |
1261 data2.SetURL(kNewSearchURL); | 1261 data2.SetURL(kNewSearchURL); |
1262 data2.suggestions_url = kNewSuggestURL; | 1262 data2.suggestions_url = kNewSuggestURL; |
1263 data2.show_in_default_list = true; | 1263 data2.show_in_default_list = true; |
1264 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2)); | 1264 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2)); |
1265 actual_managed_default = model()->GetDefaultSearchProvider(); | 1265 actual_managed_default = model()->GetDefaultSearchProvider(); |
1266 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); | 1266 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); |
1267 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); | 1267 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); |
1268 | 1268 |
1269 // Remove all the managed prefs and check that we are no longer managed. | 1269 // Remove all the managed prefs and check that we are no longer managed. |
1270 test_util_.RemoveManagedDefaultSearchPreferences(); | 1270 test_util_->RemoveManagedDefaultSearchPreferences(); |
1271 VerifyObserverFired(); | 1271 VerifyObserverFired(); |
1272 EXPECT_FALSE(model()->is_default_search_managed()); | 1272 EXPECT_FALSE(model()->is_default_search_managed()); |
1273 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1273 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1274 | 1274 |
1275 // The default should now be the user preference. | 1275 // The default should now be the user preference. |
1276 const TemplateURL* actual_final_managed_default = | 1276 const TemplateURL* actual_final_managed_default = |
1277 model()->GetDefaultSearchProvider(); | 1277 model()->GetDefaultSearchProvider(); |
1278 ExpectSimilar(regular_default, actual_final_managed_default); | 1278 ExpectSimilar(regular_default, actual_final_managed_default); |
1279 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true); | 1279 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true); |
1280 | 1280 |
1281 // Disable the default search provider through policy. | 1281 // Disable the default search provider through policy. |
1282 test_util_.SetManagedDefaultSearchPreferences(false, std::string(), | 1282 test_util_->SetManagedDefaultSearchPreferences(false, std::string(), |
1283 std::string(), std::string(), std::string(), std::string(), | 1283 std::string(), std::string(), std::string(), std::string(), |
1284 std::string(), std::string(), std::string()); | 1284 std::string(), std::string(), std::string()); |
1285 VerifyObserverFired(); | 1285 VerifyObserverFired(); |
1286 EXPECT_TRUE(model()->is_default_search_managed()); | 1286 EXPECT_TRUE(model()->is_default_search_managed()); |
1287 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider()); | 1287 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider()); |
1288 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1288 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1289 | 1289 |
1290 // Re-enable it. | 1290 // Re-enable it. |
1291 test_util_.SetManagedDefaultSearchPreferences(true, kName, kKeyword, | 1291 test_util_->SetManagedDefaultSearchPreferences(true, kName, kKeyword, |
1292 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, | 1292 kSearchURL, std::string(), kIconURL, kEncodings, kAlternateURL, |
1293 kSearchTermsReplacementKey); | 1293 kSearchTermsReplacementKey); |
1294 VerifyObserverFired(); | 1294 VerifyObserverFired(); |
1295 EXPECT_TRUE(model()->is_default_search_managed()); | 1295 EXPECT_TRUE(model()->is_default_search_managed()); |
1296 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); | 1296 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); |
1297 | 1297 |
1298 // Verify that the default manager we are getting is the managed one. | 1298 // Verify that the default manager we are getting is the managed one. |
1299 actual_managed_default = model()->GetDefaultSearchProvider(); | 1299 actual_managed_default = model()->GetDefaultSearchProvider(); |
1300 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); | 1300 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); |
1301 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); | 1301 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); |
1302 | 1302 |
1303 // Clear the model and disable the default search provider through policy. | 1303 // Clear the model and disable the default search provider through policy. |
1304 // Verify that there is no default search provider after loading the model. | 1304 // Verify that there is no default search provider after loading the model. |
1305 // This checks against regressions of http://crbug.com/67180 | 1305 // This checks against regressions of http://crbug.com/67180 |
1306 | 1306 |
1307 // First, remove the preferences, reset the model, and set a default. | 1307 // First, remove the preferences, reset the model, and set a default. |
1308 test_util_.RemoveManagedDefaultSearchPreferences(); | 1308 test_util_->RemoveManagedDefaultSearchPreferences(); |
1309 test_util_.ResetModel(true); | 1309 test_util_->ResetModel(true); |
1310 TemplateURL* new_default = | 1310 TemplateURL* new_default = |
1311 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1")); | 1311 model()->GetTemplateURLForKeyword(ASCIIToUTF16("key1")); |
1312 ASSERT_FALSE(new_default == NULL); | 1312 ASSERT_FALSE(new_default == NULL); |
1313 model()->SetUserSelectedDefaultSearchProvider(new_default); | 1313 model()->SetUserSelectedDefaultSearchProvider(new_default); |
1314 EXPECT_EQ(new_default, model()->GetDefaultSearchProvider()); | 1314 EXPECT_EQ(new_default, model()->GetDefaultSearchProvider()); |
1315 | 1315 |
1316 // Now reset the model again but load it after setting the preferences. | 1316 // Now reset the model again but load it after setting the preferences. |
1317 test_util_.ResetModel(false); | 1317 test_util_->ResetModel(false); |
1318 test_util_.SetManagedDefaultSearchPreferences(false, std::string(), | 1318 test_util_->SetManagedDefaultSearchPreferences(false, std::string(), |
1319 std::string(), std::string(), std::string(), std::string(), | 1319 std::string(), std::string(), std::string(), std::string(), |
1320 std::string(), std::string(), std::string()); | 1320 std::string(), std::string(), std::string()); |
1321 test_util_.VerifyLoad(); | 1321 test_util_->VerifyLoad(); |
1322 EXPECT_TRUE(model()->is_default_search_managed()); | 1322 EXPECT_TRUE(model()->is_default_search_managed()); |
1323 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); | 1323 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); |
1324 } | 1324 } |
1325 | 1325 |
1326 // Test that if we load a TemplateURL with an empty GUID, the load process | 1326 // Test that if we load a TemplateURL with an empty GUID, the load process |
1327 // assigns it a newly generated GUID. | 1327 // assigns it a newly generated GUID. |
1328 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { | 1328 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { |
1329 // Add a new TemplateURL. | 1329 // Add a new TemplateURL. |
1330 test_util_.VerifyLoad(); | 1330 test_util_->VerifyLoad(); |
1331 const size_t initial_count = model()->GetTemplateURLs().size(); | 1331 const size_t initial_count = model()->GetTemplateURLs().size(); |
1332 | 1332 |
1333 TemplateURLData data; | 1333 TemplateURLData data; |
1334 data.short_name = ASCIIToUTF16("google"); | 1334 data.short_name = ASCIIToUTF16("google"); |
1335 data.SetKeyword(ASCIIToUTF16("keyword")); | 1335 data.SetKeyword(ASCIIToUTF16("keyword")); |
1336 data.SetURL("http://www.google.com/foo/bar"); | 1336 data.SetURL("http://www.google.com/foo/bar"); |
1337 data.sync_guid.clear(); | 1337 data.sync_guid.clear(); |
1338 TemplateURL* t_url = new TemplateURL(data); | 1338 TemplateURL* t_url = new TemplateURL(data); |
1339 model()->Add(t_url); | 1339 model()->Add(t_url); |
1340 | 1340 |
1341 VerifyObserverCount(1); | 1341 VerifyObserverCount(1); |
1342 base::RunLoop().RunUntilIdle(); | 1342 base::RunLoop().RunUntilIdle(); |
1343 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1343 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1344 | 1344 |
1345 // Reload the model to verify it was actually saved to the database and | 1345 // Reload the model to verify it was actually saved to the database and |
1346 // assigned a new GUID when brought back. | 1346 // assigned a new GUID when brought back. |
1347 test_util_.ResetModel(true); | 1347 test_util_->ResetModel(true); |
1348 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1348 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1349 const TemplateURL* loaded_url = | 1349 const TemplateURL* loaded_url = |
1350 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1350 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1351 ASSERT_FALSE(loaded_url == NULL); | 1351 ASSERT_FALSE(loaded_url == NULL); |
1352 ASSERT_FALSE(loaded_url->sync_guid().empty()); | 1352 ASSERT_FALSE(loaded_url->sync_guid().empty()); |
1353 } | 1353 } |
1354 | 1354 |
1355 // Test that if we load a TemplateURL with duplicate input encodings, the load | 1355 // Test that if we load a TemplateURL with duplicate input encodings, the load |
1356 // process de-dupes them. | 1356 // process de-dupes them. |
1357 TEST_F(TemplateURLServiceTest, DuplicateInputEncodings) { | 1357 TEST_F(TemplateURLServiceTest, DuplicateInputEncodings) { |
1358 // Add a new TemplateURL. | 1358 // Add a new TemplateURL. |
1359 test_util_.VerifyLoad(); | 1359 test_util_->VerifyLoad(); |
1360 const size_t initial_count = model()->GetTemplateURLs().size(); | 1360 const size_t initial_count = model()->GetTemplateURLs().size(); |
1361 | 1361 |
1362 TemplateURLData data; | 1362 TemplateURLData data; |
1363 data.short_name = ASCIIToUTF16("google"); | 1363 data.short_name = ASCIIToUTF16("google"); |
1364 data.SetKeyword(ASCIIToUTF16("keyword")); | 1364 data.SetKeyword(ASCIIToUTF16("keyword")); |
1365 data.SetURL("http://www.google.com/foo/bar"); | 1365 data.SetURL("http://www.google.com/foo/bar"); |
1366 std::vector<std::string> encodings; | 1366 std::vector<std::string> encodings; |
1367 data.input_encodings.push_back("UTF-8"); | 1367 data.input_encodings.push_back("UTF-8"); |
1368 data.input_encodings.push_back("UTF-8"); | 1368 data.input_encodings.push_back("UTF-8"); |
1369 data.input_encodings.push_back("UTF-16"); | 1369 data.input_encodings.push_back("UTF-16"); |
1370 data.input_encodings.push_back("UTF-8"); | 1370 data.input_encodings.push_back("UTF-8"); |
1371 data.input_encodings.push_back("Big5"); | 1371 data.input_encodings.push_back("Big5"); |
1372 data.input_encodings.push_back("UTF-16"); | 1372 data.input_encodings.push_back("UTF-16"); |
1373 data.input_encodings.push_back("Big5"); | 1373 data.input_encodings.push_back("Big5"); |
1374 data.input_encodings.push_back("Windows-1252"); | 1374 data.input_encodings.push_back("Windows-1252"); |
1375 TemplateURL* t_url = new TemplateURL(data); | 1375 TemplateURL* t_url = new TemplateURL(data); |
1376 model()->Add(t_url); | 1376 model()->Add(t_url); |
1377 | 1377 |
1378 VerifyObserverCount(1); | 1378 VerifyObserverCount(1); |
1379 base::RunLoop().RunUntilIdle(); | 1379 base::RunLoop().RunUntilIdle(); |
1380 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1380 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1381 const TemplateURL* loaded_url = | 1381 const TemplateURL* loaded_url = |
1382 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1382 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1383 ASSERT_TRUE(loaded_url != NULL); | 1383 ASSERT_TRUE(loaded_url != NULL); |
1384 EXPECT_EQ(8U, loaded_url->input_encodings().size()); | 1384 EXPECT_EQ(8U, loaded_url->input_encodings().size()); |
1385 | 1385 |
1386 // Reload the model to verify it was actually saved to the database and the | 1386 // Reload the model to verify it was actually saved to the database and the |
1387 // duplicate encodings were removed. | 1387 // duplicate encodings were removed. |
1388 test_util_.ResetModel(true); | 1388 test_util_->ResetModel(true); |
1389 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1389 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1390 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1390 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1391 ASSERT_FALSE(loaded_url == NULL); | 1391 ASSERT_FALSE(loaded_url == NULL); |
1392 EXPECT_EQ(4U, loaded_url->input_encodings().size()); | 1392 EXPECT_EQ(4U, loaded_url->input_encodings().size()); |
1393 } | 1393 } |
1394 | 1394 |
1395 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { | 1395 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { |
1396 test_util_.VerifyLoad(); | 1396 test_util_->VerifyLoad(); |
1397 // Add third-party default search engine. | 1397 // Add third-party default search engine. |
1398 TemplateURL* user_dse = AddKeywordWithDate( | 1398 TemplateURL* user_dse = AddKeywordWithDate( |
1399 "user", "user", "http://www.goo.com/s?q={searchTerms}", | 1399 "user", "user", "http://www.goo.com/s?q={searchTerms}", |
1400 std::string(), std::string(), std::string(), | 1400 std::string(), std::string(), std::string(), |
1401 true, "UTF-8", Time(), Time()); | 1401 true, "UTF-8", Time(), Time()); |
1402 model()->SetUserSelectedDefaultSearchProvider(user_dse); | 1402 model()->SetUserSelectedDefaultSearchProvider(user_dse); |
1403 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1403 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1404 | 1404 |
1405 TemplateURL* ext_dse = CreateKeywordWithDate( | 1405 TemplateURL* ext_dse = CreateKeywordWithDate( |
1406 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", | 1406 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", |
1407 std::string(), std::string(), std::string(), | 1407 std::string(), std::string(), std::string(), |
1408 true, true, "UTF-8", Time(), Time()); | 1408 true, true, "UTF-8", Time(), Time()); |
1409 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1409 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1410 new TemplateURL::AssociatedExtensionInfo( | 1410 new TemplateURL::AssociatedExtensionInfo( |
1411 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); | 1411 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); |
1412 extension_info->wants_to_be_default_engine = true; | 1412 extension_info->wants_to_be_default_engine = true; |
1413 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); | 1413 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); |
1414 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); | 1414 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); |
1415 | 1415 |
1416 model()->RemoveExtensionControlledTURL( | 1416 model()->RemoveExtensionControlledTURL( |
1417 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); | 1417 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
1418 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); | 1418 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); |
1419 } | 1419 } |
1420 | 1420 |
1421 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { | 1421 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { |
1422 test_util_.VerifyLoad(); | 1422 test_util_->VerifyLoad(); |
1423 // Add third-party default search engine. | 1423 // Add third-party default search engine. |
1424 TemplateURL* user_dse = AddKeywordWithDate( | 1424 TemplateURL* user_dse = AddKeywordWithDate( |
1425 "user", "user", "http://www.goo.com/s?q={searchTerms}", | 1425 "user", "user", "http://www.goo.com/s?q={searchTerms}", |
1426 std::string(), std::string(), std::string(), | 1426 std::string(), std::string(), std::string(), |
1427 true, "UTF-8", Time(), Time()); | 1427 true, "UTF-8", Time(), Time()); |
1428 model()->SetUserSelectedDefaultSearchProvider(user_dse); | 1428 model()->SetUserSelectedDefaultSearchProvider(user_dse); |
1429 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1429 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1430 | 1430 |
1431 TemplateURL* ext_dse = CreateKeywordWithDate( | 1431 TemplateURL* ext_dse = CreateKeywordWithDate( |
1432 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", | 1432 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
1433 std::string(), std::string(), std::string(), | 1433 std::string(), std::string(), std::string(), |
1434 true, false, "UTF-8", Time(), Time()); | 1434 true, false, "UTF-8", Time(), Time()); |
1435 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1435 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1436 new TemplateURL::AssociatedExtensionInfo( | 1436 new TemplateURL::AssociatedExtensionInfo( |
1437 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); | 1437 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); |
1438 extension_info->wants_to_be_default_engine = false; | 1438 extension_info->wants_to_be_default_engine = false; |
1439 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); | 1439 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); |
1440 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1440 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1441 | 1441 |
1442 ext_dse = CreateKeywordWithDate( | 1442 ext_dse = CreateKeywordWithDate( |
1443 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", | 1443 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", |
1444 std::string(), std::string(), std::string(), | 1444 std::string(), std::string(), std::string(), |
1445 true, true, "UTF-8", Time(), Time()); | 1445 true, true, "UTF-8", Time(), Time()); |
1446 extension_info.reset(new TemplateURL::AssociatedExtensionInfo( | 1446 extension_info.reset(new TemplateURL::AssociatedExtensionInfo( |
1447 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2")); | 1447 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2")); |
1448 extension_info->wants_to_be_default_engine = true; | 1448 extension_info->wants_to_be_default_engine = true; |
1449 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); | 1449 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); |
1450 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); | 1450 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); |
1451 | 1451 |
1452 test_util_.ResetModel(true); | 1452 test_util_->ResetModel(true); |
1453 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); | 1453 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); |
1454 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); | 1454 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); |
1455 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); | 1455 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); |
1456 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); | 1456 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); |
1457 } | 1457 } |
1458 | 1458 |
1459 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { | 1459 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { |
1460 // Set a managed preference that establishes a default search provider. | 1460 // Set a managed preference that establishes a default search provider. |
1461 const char kName[] = "test"; | 1461 const char kName[] = "test"; |
1462 const char kKeyword[] = "test.com"; | 1462 const char kKeyword[] = "test.com"; |
1463 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; | 1463 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; |
1464 const char kIconURL[] = "http://test.com/icon.jpg"; | 1464 const char kIconURL[] = "http://test.com/icon.jpg"; |
1465 const char kEncodings[] = "UTF-16;UTF-32"; | 1465 const char kEncodings[] = "UTF-16;UTF-32"; |
1466 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; | 1466 const char kAlternateURL[] = "http://test.com/search#t={searchTerms}"; |
1467 const char kSearchTermsReplacementKey[] = "espv"; | 1467 const char kSearchTermsReplacementKey[] = "espv"; |
1468 test_util_.SetManagedDefaultSearchPreferences( | 1468 test_util_->SetManagedDefaultSearchPreferences( |
1469 true, kName, kKeyword, kSearchURL, std::string(), kIconURL, kEncodings, | 1469 true, kName, kKeyword, kSearchURL, std::string(), kIconURL, kEncodings, |
1470 kAlternateURL, kSearchTermsReplacementKey); | 1470 kAlternateURL, kSearchTermsReplacementKey); |
1471 test_util_.VerifyLoad(); | 1471 test_util_->VerifyLoad(); |
1472 // Verify that the default manager we are getting is the managed one. | 1472 // Verify that the default manager we are getting is the managed one. |
1473 TemplateURLData data; | 1473 TemplateURLData data; |
1474 data.short_name = ASCIIToUTF16(kName); | 1474 data.short_name = ASCIIToUTF16(kName); |
1475 data.SetKeyword(ASCIIToUTF16(kKeyword)); | 1475 data.SetKeyword(ASCIIToUTF16(kKeyword)); |
1476 data.SetURL(kSearchURL); | 1476 data.SetURL(kSearchURL); |
1477 data.favicon_url = GURL(kIconURL); | 1477 data.favicon_url = GURL(kIconURL); |
1478 data.show_in_default_list = true; | 1478 data.show_in_default_list = true; |
1479 base::SplitString(kEncodings, ';', &data.input_encodings); | 1479 base::SplitString(kEncodings, ';', &data.input_encodings); |
1480 data.alternate_urls.push_back(kAlternateURL); | 1480 data.alternate_urls.push_back(kAlternateURL); |
1481 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 1481 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
(...skipping 10 matching lines...) Expand all Loading... |
1492 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1492 scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1493 new TemplateURL::AssociatedExtensionInfo( | 1493 new TemplateURL::AssociatedExtensionInfo( |
1494 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); | 1494 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); |
1495 extension_info->wants_to_be_default_engine = true; | 1495 extension_info->wants_to_be_default_engine = true; |
1496 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); | 1496 model()->AddExtensionControlledTURL(ext_dse, extension_info.Pass()); |
1497 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); | 1497 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); |
1498 EXPECT_TRUE(model()->is_default_search_managed()); | 1498 EXPECT_TRUE(model()->is_default_search_managed()); |
1499 actual_managed_default = model()->GetDefaultSearchProvider(); | 1499 actual_managed_default = model()->GetDefaultSearchProvider(); |
1500 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 1500 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
1501 } | 1501 } |
OLD | NEW |