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 "components/search_engines/template_url_service.h" | 5 #include "components/search_engines/template_url_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
14 #include "base/callback.h" | 14 #include "base/callback.h" |
15 #include "base/macros.h" | 15 #include "base/macros.h" |
16 #include "base/memory/ptr_util.h" | |
16 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
17 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
18 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
19 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
20 #include "base/strings/utf_string_conversions.h" | 21 #include "base/strings/utf_string_conversions.h" |
21 #include "base/task/cancelable_task_tracker.h" | 22 #include "base/task/cancelable_task_tracker.h" |
22 #include "base/test/simple_test_clock.h" | 23 #include "base/test/simple_test_clock.h" |
23 #include "base/threading/thread.h" | 24 #include "base/threading/thread.h" |
24 #include "base/time/time.h" | 25 #include "base/time/time.h" |
25 #include "chrome/browser/history/history_service_factory.h" | 26 #include "chrome/browser/history/history_service_factory.h" |
(...skipping 27 matching lines...) Expand all Loading... | |
53 this->row = row; | 54 this->row = row; |
54 this->visits = visits; | 55 this->visits = visits; |
55 } | 56 } |
56 } | 57 } |
57 | 58 |
58 bool success; | 59 bool success; |
59 history::URLRow row; | 60 history::URLRow row; |
60 history::VisitVector visits; | 61 history::VisitVector visits; |
61 }; | 62 }; |
62 | 63 |
63 TemplateURL* CreateKeywordWithDate( | 64 std::unique_ptr<TemplateURL> CreateKeywordWithDate( |
64 TemplateURLService* model, | 65 TemplateURLService* model, |
65 const std::string& short_name, | 66 const std::string& short_name, |
66 const std::string& keyword, | 67 const std::string& keyword, |
67 const std::string& url, | 68 const std::string& url, |
68 const std::string& suggest_url, | 69 const std::string& suggest_url, |
69 const std::string& alternate_url, | 70 const std::string& alternate_url, |
70 const std::string& favicon_url, | 71 const std::string& favicon_url, |
71 bool safe_for_autoreplace, | 72 bool safe_for_autoreplace, |
72 bool show_in_default_list, | 73 bool show_in_default_list, |
73 const std::string& encodings, | 74 const std::string& encodings, |
74 Time date_created, | 75 Time date_created, |
75 Time last_modified) { | 76 Time last_modified) { |
76 TemplateURLData data; | 77 TemplateURLData data; |
77 data.SetShortName(base::UTF8ToUTF16(short_name)); | 78 data.SetShortName(base::UTF8ToUTF16(short_name)); |
78 data.SetKeyword(base::UTF8ToUTF16(keyword)); | 79 data.SetKeyword(base::UTF8ToUTF16(keyword)); |
79 data.SetURL(url); | 80 data.SetURL(url); |
80 data.suggestions_url = suggest_url; | 81 data.suggestions_url = suggest_url; |
81 if (!alternate_url.empty()) | 82 if (!alternate_url.empty()) |
82 data.alternate_urls.push_back(alternate_url); | 83 data.alternate_urls.push_back(alternate_url); |
83 data.favicon_url = GURL(favicon_url); | 84 data.favicon_url = GURL(favicon_url); |
84 data.safe_for_autoreplace = safe_for_autoreplace; | 85 data.safe_for_autoreplace = safe_for_autoreplace; |
85 data.show_in_default_list = show_in_default_list; | 86 data.show_in_default_list = show_in_default_list; |
86 data.input_encodings = base::SplitString( | 87 data.input_encodings = base::SplitString( |
87 encodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 88 encodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
88 data.date_created = date_created; | 89 data.date_created = date_created; |
89 data.last_modified = last_modified; | 90 data.last_modified = last_modified; |
90 return new TemplateURL(data); | 91 return base::MakeUnique<TemplateURL>(data); |
91 } | 92 } |
92 | 93 |
93 TemplateURL* AddKeywordWithDate( | 94 TemplateURL* AddKeywordWithDate( |
94 TemplateURLService* model, | 95 TemplateURLService* model, |
95 const std::string& short_name, | 96 const std::string& short_name, |
96 const std::string& keyword, | 97 const std::string& keyword, |
97 const std::string& url, | 98 const std::string& url, |
98 const std::string& suggest_url, | 99 const std::string& suggest_url, |
99 const std::string& alternate_url, | 100 const std::string& alternate_url, |
100 const std::string& favicon_url, | 101 const std::string& favicon_url, |
101 bool safe_for_autoreplace, | 102 bool safe_for_autoreplace, |
102 const std::string& encodings, | 103 const std::string& encodings, |
103 Time date_created, | 104 Time date_created, |
104 Time last_modified) { | 105 Time last_modified) { |
105 TemplateURL* t_url = CreateKeywordWithDate( | 106 TemplateURL* t_url = model->Add(CreateKeywordWithDate( |
106 model, short_name, keyword, url, suggest_url, alternate_url,favicon_url, | 107 model, short_name, keyword, url, suggest_url, alternate_url, favicon_url, |
107 safe_for_autoreplace, false, encodings, date_created, last_modified); | 108 safe_for_autoreplace, false, encodings, date_created, last_modified)); |
108 model->Add(t_url); | |
109 EXPECT_NE(0, t_url->id()); | 109 EXPECT_NE(0, t_url->id()); |
110 return t_url; | 110 return t_url; |
111 } | 111 } |
112 | 112 |
113 // Checks that the two TemplateURLs are similar. It does not check the id, the | 113 // Checks that the two TemplateURLs are similar. It does not check the id, the |
114 // date_created or the last_modified time. Neither pointer should be NULL. | 114 // date_created or the last_modified time. Neither pointer should be NULL. |
115 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { | 115 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual) { |
116 ASSERT_TRUE(expected != NULL); | 116 ASSERT_TRUE(expected != NULL); |
117 ASSERT_TRUE(actual != NULL); | 117 ASSERT_TRUE(actual != NULL); |
118 EXPECT_EQ(expected->short_name(), actual->short_name()); | 118 EXPECT_EQ(expected->short_name(), actual->short_name()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 Time last_modified); | 153 Time last_modified); |
154 | 154 |
155 // Verifies the two TemplateURLs are equal. | 155 // Verifies the two TemplateURLs are equal. |
156 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); | 156 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); |
157 | 157 |
158 // Verifies the two timestamps are equal, within the expected degree of | 158 // Verifies the two timestamps are equal, within the expected degree of |
159 // precision. | 159 // precision. |
160 void AssertTimesEqual(const base::Time& expected, const base::Time& actual); | 160 void AssertTimesEqual(const base::Time& expected, const base::Time& actual); |
161 | 161 |
162 // Create an URL that appears to have been prepopulated, but won't be in the | 162 // Create an URL that appears to have been prepopulated, but won't be in the |
163 // current data. The caller owns the returned TemplateURL*. | 163 // current data. |
164 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace, | 164 std::unique_ptr<TemplateURL> CreatePreloadedTemplateURL( |
165 int prepopulate_id); | 165 bool safe_for_autoreplace, |
166 int prepopulate_id); | |
166 | 167 |
167 // Helper methods to make calling TemplateURLServiceTestUtil methods less | 168 // Helper methods to make calling TemplateURLServiceTestUtil methods less |
168 // visually noisy in the test code. | 169 // visually noisy in the test code. |
169 void VerifyObserverCount(int expected_changed_count); | 170 void VerifyObserverCount(int expected_changed_count); |
170 void VerifyObserverFired(); | 171 void VerifyObserverFired(); |
171 TemplateURLServiceTestUtil* test_util() { return test_util_.get(); } | 172 TemplateURLServiceTestUtil* test_util() { return test_util_.get(); } |
172 TemplateURLService* model() { return test_util_->model(); } | 173 TemplateURLService* model() { return test_util_->model(); } |
173 const SearchTermsData& search_terms_data() { | 174 const SearchTermsData& search_terms_data() { |
174 return model()->search_terms_data(); | 175 return model()->search_terms_data(); |
175 } | 176 } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
243 } | 244 } |
244 | 245 |
245 void TemplateURLServiceTest::AssertTimesEqual(const base::Time& expected, | 246 void TemplateURLServiceTest::AssertTimesEqual(const base::Time& expected, |
246 const base::Time& actual) { | 247 const base::Time& actual) { |
247 // Because times are stored with a granularity of one second, there is a loss | 248 // Because times are stored with a granularity of one second, there is a loss |
248 // of precision when serializing and deserializing the timestamps. Hence, only | 249 // of precision when serializing and deserializing the timestamps. Hence, only |
249 // expect timestamps to be equal to within one second of one another. | 250 // expect timestamps to be equal to within one second of one another. |
250 ASSERT_LT((expected - actual).magnitude(), base::TimeDelta::FromSeconds(1)); | 251 ASSERT_LT((expected - actual).magnitude(), base::TimeDelta::FromSeconds(1)); |
251 } | 252 } |
252 | 253 |
253 TemplateURL* TemplateURLServiceTest::CreatePreloadedTemplateURL( | 254 std::unique_ptr<TemplateURL> TemplateURLServiceTest::CreatePreloadedTemplateURL( |
254 bool safe_for_autoreplace, | 255 bool safe_for_autoreplace, |
255 int prepopulate_id) { | 256 int prepopulate_id) { |
256 TemplateURLData data; | 257 TemplateURLData data; |
257 data.SetShortName(ASCIIToUTF16("unittest")); | 258 data.SetShortName(ASCIIToUTF16("unittest")); |
258 data.SetKeyword(ASCIIToUTF16("unittest")); | 259 data.SetKeyword(ASCIIToUTF16("unittest")); |
259 data.SetURL("http://www.unittest.com/{searchTerms}"); | 260 data.SetURL("http://www.unittest.com/{searchTerms}"); |
260 data.favicon_url = GURL("http://favicon.url"); | 261 data.favicon_url = GURL("http://favicon.url"); |
261 data.show_in_default_list = true; | 262 data.show_in_default_list = true; |
262 data.safe_for_autoreplace = safe_for_autoreplace; | 263 data.safe_for_autoreplace = safe_for_autoreplace; |
263 data.input_encodings.push_back("UTF-8"); | 264 data.input_encodings.push_back("UTF-8"); |
264 data.date_created = Time::FromTimeT(100); | 265 data.date_created = Time::FromTimeT(100); |
265 data.last_modified = Time::FromTimeT(100); | 266 data.last_modified = Time::FromTimeT(100); |
266 data.prepopulate_id = prepopulate_id; | 267 data.prepopulate_id = prepopulate_id; |
267 return new TemplateURL(data); | 268 return base::MakeUnique<TemplateURL>(data); |
268 } | 269 } |
269 | 270 |
270 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { | 271 void TemplateURLServiceTest::VerifyObserverCount(int expected_changed_count) { |
271 EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount()); | 272 EXPECT_EQ(expected_changed_count, test_util_->GetObserverCount()); |
272 test_util_->ResetObserverCount(); | 273 test_util_->ResetObserverCount(); |
273 } | 274 } |
274 | 275 |
275 void TemplateURLServiceTest::VerifyObserverFired() { | 276 void TemplateURLServiceTest::VerifyObserverFired() { |
276 EXPECT_LE(1, test_util_->GetObserverCount()); | 277 EXPECT_LE(1, test_util_->GetObserverCount()); |
277 test_util_->ResetObserverCount(); | 278 test_util_->ResetObserverCount(); |
(...skipping 13 matching lines...) Expand all Loading... | |
291 | 292 |
292 TemplateURLData data; | 293 TemplateURLData data; |
293 data.SetShortName(ASCIIToUTF16("google")); | 294 data.SetShortName(ASCIIToUTF16("google")); |
294 data.SetKeyword(ASCIIToUTF16("keyword")); | 295 data.SetKeyword(ASCIIToUTF16("keyword")); |
295 data.SetURL("http://www.google.com/foo/bar"); | 296 data.SetURL("http://www.google.com/foo/bar"); |
296 data.favicon_url = GURL("http://favicon.url"); | 297 data.favicon_url = GURL("http://favicon.url"); |
297 data.safe_for_autoreplace = true; | 298 data.safe_for_autoreplace = true; |
298 data.date_created = Time::FromTimeT(100); | 299 data.date_created = Time::FromTimeT(100); |
299 data.last_modified = Time::FromTimeT(100); | 300 data.last_modified = Time::FromTimeT(100); |
300 data.sync_guid = "00000000-0000-0000-0000-000000000001"; | 301 data.sync_guid = "00000000-0000-0000-0000-000000000001"; |
301 TemplateURL* t_url = new TemplateURL(data); | 302 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
302 model()->Add(t_url); | |
303 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), | 303 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), |
304 GURL(), NULL)); | 304 GURL(), NULL)); |
305 VerifyObserverCount(1); | 305 VerifyObserverCount(1); |
306 base::RunLoop().RunUntilIdle(); | 306 base::RunLoop().RunUntilIdle(); |
307 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 307 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
308 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); | 308 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); |
309 // We need to make a second copy as the model takes ownership of |t_url| and | 309 // We need to make a second copy as the model takes ownership of |t_url| and |
310 // will delete it. We have to do this after calling Add() since that gives | 310 // will delete it. We have to do this after calling Add() since that gives |
311 // |t_url| its ID. | 311 // |t_url| its ID. |
312 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 312 std::unique_ptr<TemplateURL> cloned_url = |
313 base::MakeUnique<TemplateURL>(t_url->data()); | |
313 | 314 |
314 // Reload the model to verify it was actually saved to the database. | 315 // Reload the model to verify it was actually saved to the database. |
315 test_util()->ResetModel(true); | 316 test_util()->ResetModel(true); |
316 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 317 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
317 TemplateURL* loaded_url = | 318 TemplateURL* loaded_url = |
318 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 319 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
319 ASSERT_TRUE(loaded_url != NULL); | 320 ASSERT_TRUE(loaded_url != NULL); |
320 AssertEquals(*cloned_url, *loaded_url); | 321 AssertEquals(*cloned_url, *loaded_url); |
321 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), | 322 ASSERT_TRUE(model()->CanAddAutogeneratedKeyword(ASCIIToUTF16("keyword"), |
322 GURL(), NULL)); | 323 GURL(), NULL)); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
366 std::string(), true, "UTF-8", Time(), Time()); | 367 std::string(), true, "UTF-8", Time(), Time()); |
367 VerifyObserverCount(1); | 368 VerifyObserverCount(1); |
368 | 369 |
369 // Test what happens when we try to add a TemplateURL with the same keyword as | 370 // Test what happens when we try to add a TemplateURL with the same keyword as |
370 // one in the model. | 371 // one in the model. |
371 TemplateURLData data; | 372 TemplateURLData data; |
372 data.SetShortName(ASCIIToUTF16("second")); | 373 data.SetShortName(ASCIIToUTF16("second")); |
373 data.SetKeyword(ASCIIToUTF16("keyword")); | 374 data.SetKeyword(ASCIIToUTF16("keyword")); |
374 data.SetURL("http://test2"); | 375 data.SetURL("http://test2"); |
375 data.safe_for_autoreplace = false; | 376 data.safe_for_autoreplace = false; |
376 TemplateURL* t_url = new TemplateURL(data); | 377 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
377 model()->Add(t_url); | |
378 | 378 |
379 // Because the old TemplateURL was replaceable and the new one wasn't, the new | 379 // Because the old TemplateURL was replaceable and the new one wasn't, the new |
380 // one should have replaced the old. | 380 // one should have replaced the old. |
381 VerifyObserverCount(1); | 381 VerifyObserverCount(1); |
382 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 382 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
383 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 383 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
384 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); | 384 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); |
385 EXPECT_FALSE(t_url->safe_for_autoreplace()); | 385 EXPECT_FALSE(t_url->safe_for_autoreplace()); |
386 | 386 |
387 // Now try adding a replaceable TemplateURL. This should just delete the | 387 // Now try adding a replaceable TemplateURL. This should just delete the |
388 // passed-in URL. | 388 // passed-in URL. |
389 data.SetShortName(ASCIIToUTF16("third")); | 389 data.SetShortName(ASCIIToUTF16("third")); |
390 data.SetURL("http://test3"); | 390 data.SetURL("http://test3"); |
391 data.safe_for_autoreplace = true; | 391 data.safe_for_autoreplace = true; |
392 model()->Add(new TemplateURL(data)); | 392 model()->Add(base::MakeUnique<TemplateURL>(data)); |
393 VerifyObserverCount(0); | 393 VerifyObserverCount(0); |
394 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 394 EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
395 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 395 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
396 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); | 396 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword()); |
397 EXPECT_FALSE(t_url->safe_for_autoreplace()); | 397 EXPECT_FALSE(t_url->safe_for_autoreplace()); |
398 | 398 |
399 // Now try adding a non-replaceable TemplateURL again. This should uniquify | 399 // Now try adding a non-replaceable TemplateURL again. This should uniquify |
400 // the existing entry's keyword. | 400 // the existing entry's keyword. |
401 data.SetShortName(ASCIIToUTF16("fourth")); | 401 data.SetShortName(ASCIIToUTF16("fourth")); |
402 data.SetURL("http://test4"); | 402 data.SetURL("http://test4"); |
403 data.safe_for_autoreplace = false; | 403 data.safe_for_autoreplace = false; |
404 TemplateURL* t_url2 = new TemplateURL(data); | 404 TemplateURL* t_url2 = model()->Add(base::MakeUnique<TemplateURL>(data)); |
405 model()->Add(t_url2); | |
406 VerifyObserverCount(1); | 405 VerifyObserverCount(1); |
407 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 406 EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
408 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); | 407 EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name()); |
409 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); | 408 EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword()); |
410 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); | 409 EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name()); |
411 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); | 410 EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword()); |
412 } | 411 } |
413 | 412 |
414 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { | 413 TEST_F(TemplateURLServiceTest, AddExtensionKeyword) { |
415 test_util()->VerifyLoad(); | 414 test_util()->VerifyLoad(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
467 "replaceable", "keyword", "http://test1", std::string(), std::string(), | 466 "replaceable", "keyword", "http://test1", std::string(), std::string(), |
468 std::string(), true, "UTF-8", Time(), Time()); | 467 std::string(), true, "UTF-8", Time(), Time()); |
469 | 468 |
470 // Adding another replaceable keyword should remove the existing one, but | 469 // Adding another replaceable keyword should remove the existing one, but |
471 // leave the extension as is. | 470 // leave the extension as is. |
472 TemplateURLData data; | 471 TemplateURLData data; |
473 data.SetShortName(ASCIIToUTF16("name1")); | 472 data.SetShortName(ASCIIToUTF16("name1")); |
474 data.SetKeyword(ASCIIToUTF16("keyword")); | 473 data.SetKeyword(ASCIIToUTF16("keyword")); |
475 data.SetURL("http://test3"); | 474 data.SetURL("http://test3"); |
476 data.safe_for_autoreplace = true; | 475 data.safe_for_autoreplace = true; |
477 TemplateURL* t_url = new TemplateURL(data); | 476 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
478 model()->Add(t_url); | |
479 EXPECT_EQ(extension, | 477 EXPECT_EQ(extension, |
480 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 478 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
481 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3")); | 479 EXPECT_EQ(t_url, model()->GetTemplateURLForHost("test3")); |
482 | 480 |
483 // Adding a nonreplaceable keyword should remove the existing replaceable | 481 // Adding a nonreplaceable keyword should remove the existing replaceable |
484 // keyword and replace the extension as the associated URL for this keyword, | 482 // keyword and replace the extension as the associated URL for this keyword, |
485 // but not evict the extension from the service entirely. | 483 // but not evict the extension from the service entirely. |
486 data.SetShortName(ASCIIToUTF16("name2")); | 484 data.SetShortName(ASCIIToUTF16("name2")); |
487 data.SetURL("http://test4"); | 485 data.SetURL("http://test4"); |
488 data.safe_for_autoreplace = false; | 486 data.safe_for_autoreplace = false; |
489 TemplateURL* t_url2 = new TemplateURL(data); | 487 TemplateURL* t_url2 = model()->Add(base::MakeUnique<TemplateURL>(data)); |
490 model()->Add(t_url2); | |
491 EXPECT_EQ(t_url2, | 488 EXPECT_EQ(t_url2, |
492 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); | 489 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"))); |
493 } | 490 } |
494 | 491 |
495 TEST_F(TemplateURLServiceTest, NotPersistOmniboxExtensionKeyword) { | 492 TEST_F(TemplateURLServiceTest, NotPersistOmniboxExtensionKeyword) { |
496 test_util()->VerifyLoad(); | 493 test_util()->VerifyLoad(); |
497 | 494 |
498 // Register an omnibox keyword. | 495 // Register an omnibox keyword. |
499 model()->RegisterOmniboxKeyword("test", "extension", "keyword", | 496 model()->RegisterOmniboxKeyword("test", "extension", "keyword", |
500 "chrome-extension://test"); | 497 "chrome-extension://test"); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
630 // Add a new TemplateURL. | 627 // Add a new TemplateURL. |
631 test_util()->VerifyLoad(); | 628 test_util()->VerifyLoad(); |
632 const size_t initial_count = model()->GetTemplateURLs().size(); | 629 const size_t initial_count = model()->GetTemplateURLs().size(); |
633 TemplateURLData data; | 630 TemplateURLData data; |
634 data.SetShortName(ASCIIToUTF16("google")); | 631 data.SetShortName(ASCIIToUTF16("google")); |
635 data.SetKeyword(ASCIIToUTF16("keyword")); | 632 data.SetKeyword(ASCIIToUTF16("keyword")); |
636 data.SetURL("http://www.google.com/foo/bar"); | 633 data.SetURL("http://www.google.com/foo/bar"); |
637 data.favicon_url = GURL("http://favicon.url"); | 634 data.favicon_url = GURL("http://favicon.url"); |
638 data.date_created = Time::FromTimeT(100); | 635 data.date_created = Time::FromTimeT(100); |
639 data.last_modified = Time::FromTimeT(100); | 636 data.last_modified = Time::FromTimeT(100); |
640 TemplateURL* t_url = new TemplateURL(data); | 637 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
641 model()->Add(t_url); | |
642 | 638 |
643 VerifyObserverCount(1); | 639 VerifyObserverCount(1); |
644 base::RunLoop().RunUntilIdle(); | 640 base::RunLoop().RunUntilIdle(); |
645 | 641 |
646 base::Time now = base::Time::Now(); | 642 base::Time now = base::Time::Now(); |
647 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); | 643 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); |
648 clock->SetNow(now); | 644 clock->SetNow(now); |
649 model()->set_clock(std::move(clock)); | 645 model()->set_clock(std::move(clock)); |
650 | 646 |
651 // Reset the short name, keyword, url and make sure it takes. | 647 // Reset the short name, keyword, url and make sure it takes. |
652 const base::string16 new_short_name(ASCIIToUTF16("a")); | 648 const base::string16 new_short_name(ASCIIToUTF16("a")); |
653 const base::string16 new_keyword(ASCIIToUTF16("b")); | 649 const base::string16 new_keyword(ASCIIToUTF16("b")); |
654 const std::string new_url("c"); | 650 const std::string new_url("c"); |
655 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); | 651 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); |
656 ASSERT_EQ(new_short_name, t_url->short_name()); | 652 ASSERT_EQ(new_short_name, t_url->short_name()); |
657 ASSERT_EQ(new_keyword, t_url->keyword()); | 653 ASSERT_EQ(new_keyword, t_url->keyword()); |
658 ASSERT_EQ(new_url, t_url->url()); | 654 ASSERT_EQ(new_url, t_url->url()); |
659 | 655 |
660 // Make sure the mappings in the model were updated. | 656 // Make sure the mappings in the model were updated. |
661 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); | 657 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); |
662 ASSERT_TRUE( | 658 ASSERT_TRUE( |
663 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); | 659 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); |
664 | 660 |
665 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 661 std::unique_ptr<TemplateURL> cloned_url( |
662 base::MakeUnique<TemplateURL>(t_url->data())); | |
666 | 663 |
667 // Reload the model from the database and make sure the change took. | 664 // Reload the model from the database and make sure the change took. |
668 test_util()->ResetModel(true); | 665 test_util()->ResetModel(true); |
669 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 666 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
670 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); | 667 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); |
671 ASSERT_TRUE(read_url); | 668 ASSERT_TRUE(read_url); |
672 AssertEquals(*cloned_url, *read_url); | 669 AssertEquals(*cloned_url, *read_url); |
673 AssertTimesEqual(now, read_url->last_modified()); | 670 AssertTimesEqual(now, read_url->last_modified()); |
674 } | 671 } |
675 | 672 |
676 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { | 673 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { |
677 // Add a new TemplateURL. | 674 // Add a new TemplateURL. |
678 test_util()->VerifyLoad(); | 675 test_util()->VerifyLoad(); |
679 const size_t initial_count = model()->GetTemplateURLs().size(); | 676 const size_t initial_count = model()->GetTemplateURLs().size(); |
680 TemplateURL* t_url = AddKeywordWithDate( | 677 TemplateURL* t_url = AddKeywordWithDate( |
681 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", | 678 "name1", "key1", "http://foo1/{searchTerms}", "http://sugg1", |
682 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); | 679 std::string(), "http://icon1", true, "UTF-8;UTF-16", Time(), Time()); |
683 test_util()->ResetObserverCount(); | 680 test_util()->ResetObserverCount(); |
684 | 681 |
685 model()->SetUserSelectedDefaultSearchProvider(t_url); | 682 model()->SetUserSelectedDefaultSearchProvider(t_url); |
686 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 683 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
687 ASSERT_TRUE(t_url->safe_for_autoreplace()); | 684 ASSERT_TRUE(t_url->safe_for_autoreplace()); |
688 ASSERT_TRUE(t_url->show_in_default_list()); | 685 ASSERT_TRUE(t_url->show_in_default_list()); |
689 | 686 |
690 // Setting the default search provider should have caused notification. | 687 // Setting the default search provider should have caused notification. |
691 VerifyObserverCount(1); | 688 VerifyObserverCount(1); |
692 base::RunLoop().RunUntilIdle(); | 689 base::RunLoop().RunUntilIdle(); |
693 | 690 |
694 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 691 std::unique_ptr<TemplateURL> cloned_url( |
692 base::MakeUnique<TemplateURL>(t_url->data())); | |
695 | 693 |
696 // Make sure when we reload we get a default search provider. | 694 // Make sure when we reload we get a default search provider. |
697 test_util()->ResetModel(true); | 695 test_util()->ResetModel(true); |
698 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 696 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
699 ASSERT_TRUE(model()->GetDefaultSearchProvider()); | 697 ASSERT_TRUE(model()->GetDefaultSearchProvider()); |
700 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); | 698 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider()); |
701 } | 699 } |
702 | 700 |
703 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { | 701 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { |
704 test_util()->ChangeModelToLoadState(); | 702 test_util()->ChangeModelToLoadState(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
756 test_util()->VerifyLoad(); | 754 test_util()->VerifyLoad(); |
757 | 755 |
758 TemplateURLData data; | 756 TemplateURLData data; |
759 data.SetShortName(ASCIIToUTF16("a")); | 757 data.SetShortName(ASCIIToUTF16("a")); |
760 data.safe_for_autoreplace = true; | 758 data.safe_for_autoreplace = true; |
761 data.SetURL("http://url/{searchTerms}"); | 759 data.SetURL("http://url/{searchTerms}"); |
762 data.suggestions_url = "http://url2"; | 760 data.suggestions_url = "http://url2"; |
763 data.instant_url = "http://instant"; | 761 data.instant_url = "http://instant"; |
764 data.date_created = Time::FromTimeT(100); | 762 data.date_created = Time::FromTimeT(100); |
765 data.last_modified = Time::FromTimeT(100); | 763 data.last_modified = Time::FromTimeT(100); |
766 TemplateURL* t_url = new TemplateURL(data); | 764 TemplateURL* t_url = model()->Add(base::MakeUnique<TemplateURL>(data)); |
767 model()->Add(t_url); | |
768 const TemplateURLID id = t_url->id(); | 765 const TemplateURLID id = t_url->id(); |
769 | 766 |
770 model()->SetUserSelectedDefaultSearchProvider(t_url); | 767 model()->SetUserSelectedDefaultSearchProvider(t_url); |
771 base::RunLoop().RunUntilIdle(); | 768 base::RunLoop().RunUntilIdle(); |
772 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 769 std::unique_ptr<TemplateURL> cloned_url( |
770 base::MakeUnique<TemplateURL>(t_url->data())); | |
773 | 771 |
774 // Reset the model and don't load it. The template url we set as the default | 772 // Reset the model and don't load it. The template url we set as the default |
775 // should be pulled from prefs now. | 773 // should be pulled from prefs now. |
776 test_util()->ResetModel(false); | 774 test_util()->ResetModel(false); |
777 | 775 |
778 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs | 776 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs |
779 // value are persisted to prefs. | 777 // value are persisted to prefs. |
780 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); | 778 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); |
781 ASSERT_TRUE(default_turl); | 779 ASSERT_TRUE(default_turl); |
782 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); | 780 EXPECT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1038 ASSERT_EQ(1U, callback.visits.size()); | 1036 ASSERT_EQ(1U, callback.visits.size()); |
1039 EXPECT_TRUE(ui::PageTransitionCoreTypeIs( | 1037 EXPECT_TRUE(ui::PageTransitionCoreTypeIs( |
1040 callback.visits[0].transition, ui::PAGE_TRANSITION_KEYWORD_GENERATED)); | 1038 callback.visits[0].transition, ui::PAGE_TRANSITION_KEYWORD_GENERATED)); |
1041 } | 1039 } |
1042 | 1040 |
1043 // Make sure that the load routine deletes prepopulated engines that no longer | 1041 // Make sure that the load routine deletes prepopulated engines that no longer |
1044 // exist in the prepopulate data. | 1042 // exist in the prepopulate data. |
1045 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) { | 1043 TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) { |
1046 // Create a preloaded template url. Add it to a loaded model and wait for the | 1044 // Create a preloaded template url. Add it to a loaded model and wait for the |
1047 // saves to finish. | 1045 // saves to finish. |
1048 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); | |
1049 test_util()->ChangeModelToLoadState(); | 1046 test_util()->ChangeModelToLoadState(); |
1050 model()->Add(t_url); | 1047 model()->Add(CreatePreloadedTemplateURL(true, 999999)); |
1051 ASSERT_TRUE( | 1048 ASSERT_TRUE( |
1052 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); | 1049 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); |
1053 base::RunLoop().RunUntilIdle(); | 1050 base::RunLoop().RunUntilIdle(); |
1054 | 1051 |
1055 // Ensure that merging clears this engine. | 1052 // Ensure that merging clears this engine. |
1056 test_util()->ResetModel(true); | 1053 test_util()->ResetModel(true); |
1057 ASSERT_TRUE( | 1054 ASSERT_TRUE( |
1058 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); | 1055 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); |
1059 | 1056 |
1060 // Wait for any saves to finish. | 1057 // Wait for any saves to finish. |
1061 base::RunLoop().RunUntilIdle(); | 1058 base::RunLoop().RunUntilIdle(); |
1062 | 1059 |
1063 // Reload the model to verify that the database was updated as a result of the | 1060 // Reload the model to verify that the database was updated as a result of the |
1064 // merge. | 1061 // merge. |
1065 test_util()->ResetModel(true); | 1062 test_util()->ResetModel(true); |
1066 ASSERT_TRUE( | 1063 ASSERT_TRUE( |
1067 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); | 1064 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL); |
1068 } | 1065 } |
1069 | 1066 |
1070 // Make sure that load routine doesn't delete prepopulated engines that no | 1067 // Make sure that load routine doesn't delete prepopulated engines that no |
1071 // longer exist in the prepopulate data if it has been modified by the user. | 1068 // longer exist in the prepopulate data if it has been modified by the user. |
1072 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { | 1069 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { |
1073 // Create a preloaded template url and add it to a loaded model. | 1070 // Create a preloaded template url and add it to a loaded model. |
1074 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); | |
1075 test_util()->ChangeModelToLoadState(); | 1071 test_util()->ChangeModelToLoadState(); |
1076 model()->Add(t_url); | 1072 TemplateURL* t_url = model()->Add(CreatePreloadedTemplateURL(false, 999999)); |
1077 | 1073 |
1078 // Do the copy after t_url is added so that the id is set. | 1074 // Do the copy after t_url is added so that the id is set. |
1079 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 1075 std::unique_ptr<TemplateURL> cloned_url = |
1076 base::MakeUnique<TemplateURL>(t_url->data()); | |
1080 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1077 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1081 | 1078 |
1082 // Wait for any saves to finish. | 1079 // Wait for any saves to finish. |
1083 base::RunLoop().RunUntilIdle(); | 1080 base::RunLoop().RunUntilIdle(); |
1084 | 1081 |
1085 // Ensure that merging won't clear it if the user has edited it. | 1082 // Ensure that merging won't clear it if the user has edited it. |
1086 test_util()->ResetModel(true); | 1083 test_util()->ResetModel(true); |
1087 const TemplateURL* url_for_unittest = | 1084 const TemplateURL* url_for_unittest = |
1088 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); | 1085 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); |
1089 ASSERT_TRUE(url_for_unittest != NULL); | 1086 ASSERT_TRUE(url_for_unittest != NULL); |
(...skipping 30 matching lines...) Expand all Loading... | |
1120 AssertEquals(*cloned_url, *default_search); | 1117 AssertEquals(*cloned_url, *default_search); |
1121 } | 1118 } |
1122 | 1119 |
1123 // Make sure that the load routine doesn't delete | 1120 // Make sure that the load routine doesn't delete |
1124 // prepopulated engines that no longer exist in the prepopulate data if | 1121 // prepopulated engines that no longer exist in the prepopulate data if |
1125 // it is the default search provider. | 1122 // it is the default search provider. |
1126 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { | 1123 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { |
1127 // Set the default search provider to a preloaded template url which | 1124 // Set the default search provider to a preloaded template url which |
1128 // is not in the current set of preloaded template urls and save | 1125 // is not in the current set of preloaded template urls and save |
1129 // the result. | 1126 // the result. |
1130 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); | |
1131 test_util()->ChangeModelToLoadState(); | 1127 test_util()->ChangeModelToLoadState(); |
1132 model()->Add(t_url); | 1128 TemplateURL* t_url = model()->Add(CreatePreloadedTemplateURL(true, 999999)); |
1133 model()->SetUserSelectedDefaultSearchProvider(t_url); | 1129 model()->SetUserSelectedDefaultSearchProvider(t_url); |
1134 // Do the copy after t_url is added and set as default so that its | 1130 // Do the copy after t_url is added and set as default so that its |
1135 // internal state is correct. | 1131 // internal state is correct. |
1136 std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); | 1132 std::unique_ptr<TemplateURL> cloned_url = |
1133 base::MakeUnique<TemplateURL>(t_url->data()); | |
1137 | 1134 |
1138 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); | 1135 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); |
1139 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); | 1136 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); |
1140 base::RunLoop().RunUntilIdle(); | 1137 base::RunLoop().RunUntilIdle(); |
1141 | 1138 |
1142 // Ensure that merging won't clear the prepopulated template url | 1139 // Ensure that merging won't clear the prepopulated template url |
1143 // which is no longer present if it's the default engine. | 1140 // which is no longer present if it's the default engine. |
1144 test_util()->ResetModel(true); | 1141 test_util()->ResetModel(true); |
1145 { | 1142 { |
1146 const TemplateURL* keyword_url = | 1143 const TemplateURL* keyword_url = |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1343 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { | 1340 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { |
1344 // Add a new TemplateURL. | 1341 // Add a new TemplateURL. |
1345 test_util()->VerifyLoad(); | 1342 test_util()->VerifyLoad(); |
1346 const size_t initial_count = model()->GetTemplateURLs().size(); | 1343 const size_t initial_count = model()->GetTemplateURLs().size(); |
1347 | 1344 |
1348 TemplateURLData data; | 1345 TemplateURLData data; |
1349 data.SetShortName(ASCIIToUTF16("google")); | 1346 data.SetShortName(ASCIIToUTF16("google")); |
1350 data.SetKeyword(ASCIIToUTF16("keyword")); | 1347 data.SetKeyword(ASCIIToUTF16("keyword")); |
1351 data.SetURL("http://www.google.com/foo/bar"); | 1348 data.SetURL("http://www.google.com/foo/bar"); |
1352 data.sync_guid.clear(); | 1349 data.sync_guid.clear(); |
1353 TemplateURL* t_url = new TemplateURL(data); | 1350 model()->Add(base::MakeUnique<TemplateURL>(data)); |
1354 model()->Add(t_url); | |
1355 | 1351 |
1356 VerifyObserverCount(1); | 1352 VerifyObserverCount(1); |
1357 base::RunLoop().RunUntilIdle(); | 1353 base::RunLoop().RunUntilIdle(); |
1358 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1354 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1359 | 1355 |
1360 // Reload the model to verify it was actually saved to the database and | 1356 // Reload the model to verify it was actually saved to the database and |
1361 // assigned a new GUID when brought back. | 1357 // assigned a new GUID when brought back. |
1362 test_util()->ResetModel(true); | 1358 test_util()->ResetModel(true); |
1363 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1359 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1364 const TemplateURL* loaded_url = | 1360 const TemplateURL* loaded_url = |
(...skipping 15 matching lines...) Expand all Loading... | |
1380 data.SetURL("http://www.google.com/foo/bar"); | 1376 data.SetURL("http://www.google.com/foo/bar"); |
1381 std::vector<std::string> encodings; | 1377 std::vector<std::string> encodings; |
1382 data.input_encodings.push_back("UTF-8"); | 1378 data.input_encodings.push_back("UTF-8"); |
1383 data.input_encodings.push_back("UTF-8"); | 1379 data.input_encodings.push_back("UTF-8"); |
1384 data.input_encodings.push_back("UTF-16"); | 1380 data.input_encodings.push_back("UTF-16"); |
1385 data.input_encodings.push_back("UTF-8"); | 1381 data.input_encodings.push_back("UTF-8"); |
1386 data.input_encodings.push_back("Big5"); | 1382 data.input_encodings.push_back("Big5"); |
1387 data.input_encodings.push_back("UTF-16"); | 1383 data.input_encodings.push_back("UTF-16"); |
1388 data.input_encodings.push_back("Big5"); | 1384 data.input_encodings.push_back("Big5"); |
1389 data.input_encodings.push_back("Windows-1252"); | 1385 data.input_encodings.push_back("Windows-1252"); |
1390 TemplateURL* t_url = new TemplateURL(data); | 1386 model()->Add(base::MakeUnique<TemplateURL>(data)); |
1391 model()->Add(t_url); | |
1392 | 1387 |
1393 VerifyObserverCount(1); | 1388 VerifyObserverCount(1); |
1394 base::RunLoop().RunUntilIdle(); | 1389 base::RunLoop().RunUntilIdle(); |
1395 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1390 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1396 const TemplateURL* loaded_url = | 1391 const TemplateURL* loaded_url = |
1397 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1392 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1398 ASSERT_TRUE(loaded_url != NULL); | 1393 ASSERT_TRUE(loaded_url != NULL); |
1399 EXPECT_EQ(8U, loaded_url->input_encodings().size()); | 1394 EXPECT_EQ(8U, loaded_url->input_encodings().size()); |
1400 | 1395 |
1401 // Reload the model to verify it was actually saved to the database and the | 1396 // Reload the model to verify it was actually saved to the database and the |
1402 // duplicate encodings were removed. | 1397 // duplicate encodings were removed. |
1403 test_util()->ResetModel(true); | 1398 test_util()->ResetModel(true); |
1404 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); | 1399 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); |
1405 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); | 1400 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); |
1406 ASSERT_FALSE(loaded_url == NULL); | 1401 ASSERT_FALSE(loaded_url == NULL); |
1407 EXPECT_EQ(4U, loaded_url->input_encodings().size()); | 1402 EXPECT_EQ(4U, loaded_url->input_encodings().size()); |
1408 } | 1403 } |
1409 | 1404 |
1410 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { | 1405 TEST_F(TemplateURLServiceTest, DefaultExtensionEngine) { |
1411 test_util()->VerifyLoad(); | 1406 test_util()->VerifyLoad(); |
1412 // Add third-party default search engine. | 1407 // Add third-party default search engine. |
1413 TemplateURL* user_dse = AddKeywordWithDate( | 1408 TemplateURL* user_dse = AddKeywordWithDate( |
1414 "user", "user", "http://www.goo.com/s?q={searchTerms}", | 1409 "user", "user", "http://www.goo.com/s?q={searchTerms}", |
1415 std::string(), std::string(), std::string(), | 1410 std::string(), std::string(), std::string(), |
1416 true, "UTF-8", Time(), Time()); | 1411 true, "UTF-8", Time(), Time()); |
1417 model()->SetUserSelectedDefaultSearchProvider(user_dse); | 1412 model()->SetUserSelectedDefaultSearchProvider(user_dse); |
1418 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1413 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1419 | 1414 |
1420 TemplateURL* ext_dse = CreateKeywordWithDate( | 1415 std::unique_ptr<TemplateURL> ext_dse_ptr = CreateKeywordWithDate( |
1421 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", | 1416 model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", |
1422 std::string(), std::string(), std::string(), | 1417 std::string(), std::string(), std::string(), true, true, "UTF-8", Time(), |
1423 true, true, "UTF-8", Time(), Time()); | 1418 Time()); |
1419 TemplateURL* ext_dse = ext_dse_ptr.get(); | |
1424 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1420 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1425 new TemplateURL::AssociatedExtensionInfo( | 1421 new TemplateURL::AssociatedExtensionInfo( |
1426 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); | 1422 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); |
1427 extension_info->wants_to_be_default_engine = true; | 1423 extension_info->wants_to_be_default_engine = true; |
1428 model()->AddExtensionControlledTURL(ext_dse, std::move(extension_info)); | 1424 model()->AddExtensionControlledTURL(std::move(ext_dse_ptr), |
Peter Kasting
2016/09/01 08:21:39
Nit: Does it make sense for this Add() variant to
Avi (use Gerrit)
2016/09/01 15:14:46
Might as well for completeness's sake.
| |
1425 std::move(extension_info)); | |
1429 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); | 1426 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); |
1430 | 1427 |
1431 model()->RemoveExtensionControlledTURL( | 1428 model()->RemoveExtensionControlledTURL( |
1432 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); | 1429 "ext", TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
1433 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); | 1430 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); |
1434 } | 1431 } |
1435 | 1432 |
1436 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { | 1433 TEST_F(TemplateURLServiceTest, ExtensionEnginesNotPersist) { |
1437 test_util()->VerifyLoad(); | 1434 test_util()->VerifyLoad(); |
1438 // Add third-party default search engine. | 1435 // Add third-party default search engine. |
1439 TemplateURL* user_dse = AddKeywordWithDate( | 1436 TemplateURL* user_dse = AddKeywordWithDate( |
1440 "user", "user", "http://www.goo.com/s?q={searchTerms}", | 1437 "user", "user", "http://www.goo.com/s?q={searchTerms}", |
1441 std::string(), std::string(), std::string(), | 1438 std::string(), std::string(), std::string(), |
1442 true, "UTF-8", Time(), Time()); | 1439 true, "UTF-8", Time(), Time()); |
1443 model()->SetUserSelectedDefaultSearchProvider(user_dse); | 1440 model()->SetUserSelectedDefaultSearchProvider(user_dse); |
1444 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1441 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1445 | 1442 |
1446 TemplateURL* ext_dse = CreateKeywordWithDate( | 1443 std::unique_ptr<TemplateURL> ext_dse_ptr = CreateKeywordWithDate( |
1447 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", | 1444 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
1448 std::string(), std::string(), std::string(), | 1445 std::string(), std::string(), std::string(), true, false, "UTF-8", Time(), |
1449 true, false, "UTF-8", Time(), Time()); | 1446 Time()); |
1447 TemplateURL* ext_dse = ext_dse_ptr.get(); | |
1450 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1448 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1451 new TemplateURL::AssociatedExtensionInfo( | 1449 new TemplateURL::AssociatedExtensionInfo( |
1452 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); | 1450 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); |
1453 extension_info->wants_to_be_default_engine = false; | 1451 extension_info->wants_to_be_default_engine = false; |
1454 model()->AddExtensionControlledTURL(ext_dse, std::move(extension_info)); | 1452 model()->AddExtensionControlledTURL(std::move(ext_dse_ptr), |
1453 std::move(extension_info)); | |
1455 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); | 1454 EXPECT_EQ(user_dse, model()->GetDefaultSearchProvider()); |
1456 | 1455 |
1457 ext_dse = CreateKeywordWithDate( | 1456 ext_dse_ptr = CreateKeywordWithDate( |
1458 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", | 1457 model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}", |
1459 std::string(), std::string(), std::string(), | 1458 std::string(), std::string(), std::string(), true, true, "UTF-8", Time(), |
1460 true, true, "UTF-8", Time(), Time()); | 1459 Time()); |
1460 ext_dse = ext_dse_ptr.get(); | |
1461 extension_info.reset(new TemplateURL::AssociatedExtensionInfo( | 1461 extension_info.reset(new TemplateURL::AssociatedExtensionInfo( |
1462 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2")); | 1462 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext2")); |
1463 extension_info->wants_to_be_default_engine = true; | 1463 extension_info->wants_to_be_default_engine = true; |
1464 model()->AddExtensionControlledTURL(ext_dse, std::move(extension_info)); | 1464 model()->AddExtensionControlledTURL(std::move(ext_dse_ptr), |
1465 std::move(extension_info)); | |
1465 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); | 1466 EXPECT_EQ(ext_dse, model()->GetDefaultSearchProvider()); |
1466 | 1467 |
1467 test_util()->ResetModel(true); | 1468 test_util()->ResetModel(true); |
1468 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); | 1469 user_dse = model()->GetTemplateURLForKeyword(ASCIIToUTF16("user")); |
1469 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); | 1470 ExpectSimilar(user_dse, model()->GetDefaultSearchProvider()); |
1470 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); | 1471 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); |
1471 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); | 1472 EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext2"))); |
1472 } | 1473 } |
1473 | 1474 |
1474 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { | 1475 TEST_F(TemplateURLServiceTest, ExtensionEngineVsPolicy) { |
(...skipping 19 matching lines...) Expand all Loading... | |
1494 data.input_encodings = base::SplitString( | 1495 data.input_encodings = base::SplitString( |
1495 kEncodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 1496 kEncodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
1496 data.alternate_urls.push_back(kAlternateURL); | 1497 data.alternate_urls.push_back(kAlternateURL); |
1497 data.search_terms_replacement_key = kSearchTermsReplacementKey; | 1498 data.search_terms_replacement_key = kSearchTermsReplacementKey; |
1498 std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); | 1499 std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); |
1499 EXPECT_TRUE(model()->is_default_search_managed()); | 1500 EXPECT_TRUE(model()->is_default_search_managed()); |
1500 const TemplateURL* actual_managed_default = | 1501 const TemplateURL* actual_managed_default = |
1501 model()->GetDefaultSearchProvider(); | 1502 model()->GetDefaultSearchProvider(); |
1502 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 1503 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
1503 | 1504 |
1504 TemplateURL* ext_dse = CreateKeywordWithDate( | 1505 std::unique_ptr<TemplateURL> ext_dse_ptr = CreateKeywordWithDate( |
1505 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", | 1506 model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", |
1506 std::string(), std::string(), std::string(), | 1507 std::string(), std::string(), std::string(), true, true, "UTF-8", Time(), |
1507 true, true, "UTF-8", Time(), Time()); | 1508 Time()); |
1509 TemplateURL* ext_dse = ext_dse_ptr.get(); | |
1508 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( | 1510 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( |
1509 new TemplateURL::AssociatedExtensionInfo( | 1511 new TemplateURL::AssociatedExtensionInfo( |
1510 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); | 1512 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); |
1511 extension_info->wants_to_be_default_engine = true; | 1513 extension_info->wants_to_be_default_engine = true; |
1512 model()->AddExtensionControlledTURL(ext_dse, std::move(extension_info)); | 1514 model()->AddExtensionControlledTURL(std::move(ext_dse_ptr), |
1515 std::move(extension_info)); | |
1513 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); | 1516 EXPECT_EQ(ext_dse, model()->GetTemplateURLForKeyword(ASCIIToUTF16("ext1"))); |
1514 EXPECT_TRUE(model()->is_default_search_managed()); | 1517 EXPECT_TRUE(model()->is_default_search_managed()); |
1515 actual_managed_default = model()->GetDefaultSearchProvider(); | 1518 actual_managed_default = model()->GetDefaultSearchProvider(); |
1516 ExpectSimilar(expected_managed_default.get(), actual_managed_default); | 1519 ExpectSimilar(expected_managed_default.get(), actual_managed_default); |
1517 } | 1520 } |
OLD | NEW |