Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: chrome/browser/search_engines/template_url_service_unittest.cc

Issue 10021008: Reland r131019: Move most TemplateURL data members to a new struct, TemplateURLData. This allows us… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/string_split.h" 10 #include "base/string_split.h"
(...skipping 24 matching lines...) Expand all
35 using content::BrowserThread; 35 using content::BrowserThread;
36 using ::testing::Return; 36 using ::testing::Return;
37 using ::testing::StrictMock; 37 using ::testing::StrictMock;
38 38
39 namespace { 39 namespace {
40 40
41 // Create an URL that appears to have been prepopulated, but won't be in the 41 // Create an URL that appears to have been prepopulated, but won't be in the
42 // current data. The caller owns the returned TemplateURL*. 42 // current data. The caller owns the returned TemplateURL*.
43 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace, 43 TemplateURL* CreatePreloadedTemplateURL(bool safe_for_autoreplace,
44 int prepopulate_id) { 44 int prepopulate_id) {
45 TemplateURL* t_url = new TemplateURL(); 45 TemplateURLData data;
46 t_url->set_keyword(ASCIIToUTF16("unittest")); 46 data.short_name = ASCIIToUTF16("unittest");
47 t_url->set_short_name(ASCIIToUTF16("unittest")); 47 data.SetKeyword(ASCIIToUTF16("unittest"));
48 t_url->SetPrepopulateId(prepopulate_id); 48 data.SetURL("http://www.unittest.com/");
49 t_url->set_safe_for_autoreplace(safe_for_autoreplace); 49 data.favicon_url = GURL("http://favicon.url");
50 t_url->set_date_created(Time::FromTimeT(100)); 50 data.show_in_default_list = true;
51 t_url->set_last_modified(Time::FromTimeT(100)); 51 data.safe_for_autoreplace = safe_for_autoreplace;
52 t_url->SetURL("http://www.unittest.com/"); 52 data.input_encodings.push_back("UTF-8");
53 t_url->set_favicon_url(GURL("http://favicon.url")); 53 data.date_created = Time::FromTimeT(100);
54 return t_url; 54 data.last_modified = Time::FromTimeT(100);
55 data.prepopulate_id = prepopulate_id;
56 return new TemplateURL(data);
55 } 57 }
56 58
57 59
58 // TestGenerateSearchURL ------------------------------------------------------ 60 // TestGenerateSearchURL ------------------------------------------------------
59 61
60 // Test the GenerateSearchURL on a thread or the main thread. 62 // Test the GenerateSearchURL on a thread or the main thread.
61 class TestGenerateSearchURL 63 class TestGenerateSearchURL
62 : public base::RefCountedThreadSafe<TestGenerateSearchURL> { 64 : public base::RefCountedThreadSafe<TestGenerateSearchURL> {
63 public: 65 public:
64 explicit TestGenerateSearchURL(SearchTermsData* search_terms_data); 66 explicit TestGenerateSearchURL(SearchTermsData* search_terms_data);
(...skipping 30 matching lines...) Expand all
95 { "URL with no replacements", "http://foo/", "http://foo/" }, 97 { "URL with no replacements", "http://foo/", "http://foo/" },
96 { "basic functionality", "http://foo/{searchTerms}", 98 { "basic functionality", "http://foo/{searchTerms}",
97 "http://foo/blah.blah.blah.blah.blah" } 99 "http://foo/blah.blah.blah.blah.blah" }
98 }; 100 };
99 101
100 // Don't use ASSERT/EXPECT since this is run on a thread in one test 102 // Don't use ASSERT/EXPECT since this is run on a thread in one test
101 // and those macros aren't meant for threads at this time according to 103 // and those macros aren't meant for threads at this time according to
102 // gtest documentation. 104 // gtest documentation.
103 bool everything_passed = true; 105 bool everything_passed = true;
104 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) { 106 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) {
105 TemplateURL t_url; 107 TemplateURLData data;
106 if (generate_url_cases[i].url) 108 if (generate_url_cases[i].url)
107 t_url.SetURL(generate_url_cases[i].url); 109 data.SetURL(generate_url_cases[i].url);
110 TemplateURL t_url(data);
108 std::string result = (search_terms_data_ ? 111 std::string result = (search_terms_data_ ?
109 TemplateURLService::GenerateSearchURLUsingTermsData(&t_url, 112 TemplateURLService::GenerateSearchURLUsingTermsData(&t_url,
110 *search_terms_data_) : 113 *search_terms_data_) :
111 TemplateURLService::GenerateSearchURL(&t_url)).spec(); 114 TemplateURLService::GenerateSearchURL(&t_url)).spec();
112 if (result != generate_url_cases[i].expected) { 115 if (result != generate_url_cases[i].expected) {
113 LOG(ERROR) << generate_url_cases[i].test_name << " failed. Expected " << 116 LOG(ERROR) << generate_url_cases[i].test_name << " failed. Expected " <<
114 generate_url_cases[i].expected << " Actual " << result; 117 generate_url_cases[i].expected << " Actual " << result;
115 everything_passed = false; 118 everything_passed = false;
116 } 119 }
117 } 120 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 // TemplateURLServiceTest ----------------------------------------------------- 154 // TemplateURLServiceTest -----------------------------------------------------
152 155
153 class TemplateURLServiceTest : public testing::Test { 156 class TemplateURLServiceTest : public testing::Test {
154 public: 157 public:
155 TemplateURLServiceTest(); 158 TemplateURLServiceTest();
156 159
157 // testing::Test 160 // testing::Test
158 virtual void SetUp(); 161 virtual void SetUp();
159 virtual void TearDown(); 162 virtual void TearDown();
160 163
161 TemplateURL* AddKeywordWithDate(const std::string& keyword, 164 TemplateURL* AddKeywordWithDate(const std::string& short_name,
165 const std::string& keyword,
162 bool autogenerate_keyword, 166 bool autogenerate_keyword,
163 const std::string& url, 167 const std::string& url,
164 const std::string& suggest_url, 168 const std::string& suggest_url,
165 const std::string& favicon_url, 169 const std::string& favicon_url,
170 bool safe_for_autoreplace,
166 const std::string& encodings, 171 const std::string& encodings,
167 const std::string& short_name,
168 bool safe_for_autoreplace,
169 Time date_created, 172 Time date_created,
170 Time last_modified); 173 Time last_modified);
171 174
172 // Verifies the two TemplateURLs are equal. 175 // Verifies the two TemplateURLs are equal.
173 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual); 176 void AssertEquals(const TemplateURL& expected, const TemplateURL& actual);
174 177
175 // Checks that the two TemplateURLs are similar. It does not check the id, the 178 // Checks that the two TemplateURLs are similar. It does not check the id, the
176 // date_created or the last_modified time. Neither pointer should be NULL. 179 // date_created or the last_modified time. Neither pointer should be NULL.
177 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual); 180 void ExpectSimilar(const TemplateURL* expected, const TemplateURL* actual);
178 181
179 // Set the managed preferences for the default search provider and trigger 182 // Set the managed preferences for the default search provider and trigger
180 // notification. 183 // notification.
181 void SetManagedDefaultSearchPreferences(bool enabled, 184 void SetManagedDefaultSearchPreferences(bool enabled,
182 const std::string& name, 185 const std::string& name,
186 const std::string& keyword,
183 const std::string& search_url, 187 const std::string& search_url,
184 const std::string& suggest_url, 188 const std::string& suggest_url,
185 const std::string& icon_url, 189 const std::string& icon_url,
186 const std::string& encodings, 190 const std::string& encodings);
187 const std::string& keyword);
188 191
189 // Remove all the managed preferences for the default search provider and 192 // Remove all the managed preferences for the default search provider and
190 // trigger notification. 193 // trigger notification.
191 void RemoveManagedDefaultSearchPreferences(); 194 void RemoveManagedDefaultSearchPreferences();
192 195
193 // Creates a TemplateURL with the same prepopulated id as a real prepopulated 196 // Creates a TemplateURL with the same prepopulated id as a real prepopulated
194 // item. The input number determines which prepopulated item. The caller is 197 // item. The input number determines which prepopulated item. The caller is
195 // responsible for owning the returned TemplateURL*. 198 // responsible for owning the returned TemplateURL*.
196 TemplateURL* CreateReplaceablePreloadedTemplateURL( 199 TemplateURL* CreateReplaceablePreloadedTemplateURL(
197 bool safe_for_autoreplace, 200 bool safe_for_autoreplace,
(...skipping 23 matching lines...) Expand all
221 224
222 void TemplateURLServiceTest::SetUp() { 225 void TemplateURLServiceTest::SetUp() {
223 test_util_.SetUp(); 226 test_util_.SetUp();
224 } 227 }
225 228
226 void TemplateURLServiceTest::TearDown() { 229 void TemplateURLServiceTest::TearDown() {
227 test_util_.TearDown(); 230 test_util_.TearDown();
228 } 231 }
229 232
230 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate( 233 TemplateURL* TemplateURLServiceTest::AddKeywordWithDate(
234 const std::string& short_name,
231 const std::string& keyword, 235 const std::string& keyword,
232 bool autogenerate_keyword, 236 bool autogenerate_keyword,
233 const std::string& url, 237 const std::string& url,
234 const std::string& suggest_url, 238 const std::string& suggest_url,
235 const std::string& favicon_url, 239 const std::string& favicon_url,
240 bool safe_for_autoreplace,
236 const std::string& encodings, 241 const std::string& encodings,
237 const std::string& short_name,
238 bool safe_for_autoreplace,
239 Time date_created, 242 Time date_created,
240 Time last_modified) { 243 Time last_modified) {
241 TemplateURL* t_url = new TemplateURL(); 244 TemplateURLData data;
242 t_url->set_short_name(UTF8ToUTF16(short_name)); 245 data.short_name = UTF8ToUTF16(short_name);
243 t_url->set_keyword(UTF8ToUTF16(keyword)); 246 data.SetKeyword(UTF8ToUTF16(keyword));
244 t_url->set_autogenerate_keyword(autogenerate_keyword); 247 data.SetAutogenerateKeyword(autogenerate_keyword);
245 t_url->set_safe_for_autoreplace(safe_for_autoreplace); 248 data.SetURL(url);
246 std::vector<std::string> encodings_vector; 249 data.suggestions_url = suggest_url;
247 base::SplitString(encodings, ';', &encodings_vector); 250 data.favicon_url = GURL(favicon_url);
248 t_url->set_input_encodings(encodings_vector); 251 data.safe_for_autoreplace = safe_for_autoreplace;
249 t_url->set_date_created(date_created); 252 base::SplitString(encodings, ';', &data.input_encodings);
250 t_url->set_last_modified(last_modified); 253 data.date_created = date_created;
251 t_url->SetSuggestionsURL(suggest_url); 254 data.last_modified = last_modified;
252 t_url->SetURL(url); 255 TemplateURL* t_url = new TemplateURL(data);
253 t_url->set_favicon_url(GURL(favicon_url));
254 model()->Add(t_url); 256 model()->Add(t_url);
255 EXPECT_NE(0, t_url->id()); 257 EXPECT_NE(0, t_url->id());
256 return t_url; 258 return t_url;
257 } 259 }
258 260
259 void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected, 261 void TemplateURLServiceTest::AssertEquals(const TemplateURL& expected,
260 const TemplateURL& actual) { 262 const TemplateURL& actual) {
261 ASSERT_EQ(expected.short_name(), actual.short_name()); 263 ASSERT_EQ(expected.short_name(), actual.short_name());
264 ASSERT_EQ(expected.keyword(), actual.keyword());
262 ASSERT_EQ(expected.url(), actual.url()); 265 ASSERT_EQ(expected.url(), actual.url());
263 ASSERT_EQ(expected.suggestions_url(), actual.suggestions_url()); 266 ASSERT_EQ(expected.suggestions_url(), actual.suggestions_url());
264 ASSERT_EQ(expected.keyword(), actual.keyword()); 267 ASSERT_EQ(expected.favicon_url(), actual.favicon_url());
265 ASSERT_EQ(expected.show_in_default_list(), actual.show_in_default_list()); 268 ASSERT_EQ(expected.show_in_default_list(), actual.show_in_default_list());
266 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace()); 269 ASSERT_EQ(expected.safe_for_autoreplace(), actual.safe_for_autoreplace());
267 ASSERT_EQ(expected.favicon_url(), actual.favicon_url()); 270 ASSERT_EQ(expected.input_encodings(), actual.input_encodings());
271 ASSERT_EQ(expected.id(), actual.id());
268 ASSERT_EQ(expected.date_created(), actual.date_created()); 272 ASSERT_EQ(expected.date_created(), actual.date_created());
269 ASSERT_EQ(expected.last_modified(), actual.last_modified()); 273 ASSERT_EQ(expected.last_modified(), actual.last_modified());
270 ASSERT_EQ(expected.input_encodings(), actual.input_encodings());
271 ASSERT_EQ(expected.id(), actual.id());
272 ASSERT_EQ(expected.sync_guid(), actual.sync_guid()); 274 ASSERT_EQ(expected.sync_guid(), actual.sync_guid());
273 } 275 }
274 276
275 void TemplateURLServiceTest::ExpectSimilar(const TemplateURL* expected, 277 void TemplateURLServiceTest::ExpectSimilar(const TemplateURL* expected,
276 const TemplateURL* actual) { 278 const TemplateURL* actual) {
277 ASSERT_TRUE(expected != NULL); 279 ASSERT_TRUE(expected != NULL);
278 ASSERT_TRUE(actual != NULL); 280 ASSERT_TRUE(actual != NULL);
279 EXPECT_EQ(expected->short_name(), actual->short_name()); 281 EXPECT_EQ(expected->short_name(), actual->short_name());
282 EXPECT_EQ(expected->keyword(), actual->keyword());
280 EXPECT_EQ(expected->url(), actual->url()); 283 EXPECT_EQ(expected->url(), actual->url());
281 EXPECT_EQ(expected->suggestions_url(), actual->suggestions_url()); 284 EXPECT_EQ(expected->suggestions_url(), actual->suggestions_url());
282 EXPECT_EQ(expected->keyword(), actual->keyword()); 285 EXPECT_EQ(expected->favicon_url(), actual->favicon_url());
283 EXPECT_EQ(expected->show_in_default_list(), actual->show_in_default_list()); 286 EXPECT_EQ(expected->show_in_default_list(), actual->show_in_default_list());
284 EXPECT_EQ(expected->safe_for_autoreplace(), actual->safe_for_autoreplace()); 287 EXPECT_EQ(expected->safe_for_autoreplace(), actual->safe_for_autoreplace());
285 EXPECT_EQ(expected->favicon_url(), actual->favicon_url());
286 EXPECT_EQ(expected->input_encodings(), actual->input_encodings()); 288 EXPECT_EQ(expected->input_encodings(), actual->input_encodings());
287 } 289 }
288 290
289 void TemplateURLServiceTest::SetManagedDefaultSearchPreferences( 291 void TemplateURLServiceTest::SetManagedDefaultSearchPreferences(
290 bool enabled, 292 bool enabled,
291 const std::string& name, 293 const std::string& name,
294 const std::string& keyword,
292 const std::string& search_url, 295 const std::string& search_url,
293 const std::string& suggest_url, 296 const std::string& suggest_url,
294 const std::string& icon_url, 297 const std::string& icon_url,
295 const std::string& encodings, 298 const std::string& encodings) {
296 const std::string& keyword) {
297 TestingPrefService* service = test_util_.profile()->GetTestingPrefService(); 299 TestingPrefService* service = test_util_.profile()->GetTestingPrefService();
298 service->SetManagedPref(prefs::kDefaultSearchProviderEnabled, 300 service->SetManagedPref(prefs::kDefaultSearchProviderEnabled,
299 Value::CreateBooleanValue(enabled)); 301 Value::CreateBooleanValue(enabled));
300 service->SetManagedPref(prefs::kDefaultSearchProviderName, 302 service->SetManagedPref(prefs::kDefaultSearchProviderName,
301 Value::CreateStringValue(name)); 303 Value::CreateStringValue(name));
304 service->SetManagedPref(prefs::kDefaultSearchProviderKeyword,
305 Value::CreateStringValue(keyword));
302 service->SetManagedPref(prefs::kDefaultSearchProviderSearchURL, 306 service->SetManagedPref(prefs::kDefaultSearchProviderSearchURL,
303 Value::CreateStringValue(search_url)); 307 Value::CreateStringValue(search_url));
304 service->SetManagedPref(prefs::kDefaultSearchProviderSuggestURL, 308 service->SetManagedPref(prefs::kDefaultSearchProviderSuggestURL,
305 Value::CreateStringValue(suggest_url)); 309 Value::CreateStringValue(suggest_url));
306 service->SetManagedPref(prefs::kDefaultSearchProviderIconURL, 310 service->SetManagedPref(prefs::kDefaultSearchProviderIconURL,
307 Value::CreateStringValue(icon_url)); 311 Value::CreateStringValue(icon_url));
308 service->SetManagedPref(prefs::kDefaultSearchProviderEncodings, 312 service->SetManagedPref(prefs::kDefaultSearchProviderEncodings,
309 Value::CreateStringValue(encodings)); 313 Value::CreateStringValue(encodings));
310 service->SetManagedPref(prefs::kDefaultSearchProviderKeyword,
311 Value::CreateStringValue(keyword));
312 } 314 }
313 315
314 void TemplateURLServiceTest::RemoveManagedDefaultSearchPreferences() { 316 void TemplateURLServiceTest::RemoveManagedDefaultSearchPreferences() {
315 TestingPrefService* service = test_util_.profile()->GetTestingPrefService(); 317 TestingPrefService* service = test_util_.profile()->GetTestingPrefService();
316 service->RemoveManagedPref(prefs::kDefaultSearchProviderSearchURL);
317 service->RemoveManagedPref(prefs::kDefaultSearchProviderEnabled); 318 service->RemoveManagedPref(prefs::kDefaultSearchProviderEnabled);
318 service->RemoveManagedPref(prefs::kDefaultSearchProviderName); 319 service->RemoveManagedPref(prefs::kDefaultSearchProviderName);
320 service->RemoveManagedPref(prefs::kDefaultSearchProviderKeyword);
321 service->RemoveManagedPref(prefs::kDefaultSearchProviderSearchURL);
319 service->RemoveManagedPref(prefs::kDefaultSearchProviderSuggestURL); 322 service->RemoveManagedPref(prefs::kDefaultSearchProviderSuggestURL);
320 service->RemoveManagedPref(prefs::kDefaultSearchProviderIconURL); 323 service->RemoveManagedPref(prefs::kDefaultSearchProviderIconURL);
321 service->RemoveManagedPref(prefs::kDefaultSearchProviderEncodings); 324 service->RemoveManagedPref(prefs::kDefaultSearchProviderEncodings);
322 service->RemoveManagedPref(prefs::kDefaultSearchProviderKeyword);
323 service->RemoveManagedPref(prefs::kDefaultSearchProviderID); 325 service->RemoveManagedPref(prefs::kDefaultSearchProviderID);
324 service->RemoveManagedPref(prefs::kDefaultSearchProviderPrepopulateID); 326 service->RemoveManagedPref(prefs::kDefaultSearchProviderPrepopulateID);
325 } 327 }
326 328
327 TemplateURL* TemplateURLServiceTest::CreateReplaceablePreloadedTemplateURL( 329 TemplateURL* TemplateURLServiceTest::CreateReplaceablePreloadedTemplateURL(
328 bool safe_for_autoreplace, 330 bool safe_for_autoreplace,
329 size_t index_offset_from_default, 331 size_t index_offset_from_default,
330 string16* prepopulated_display_url) { 332 string16* prepopulated_display_url) {
331 ScopedVector<TemplateURL> prepopulated_urls; 333 ScopedVector<TemplateURL> prepopulated_urls;
332 size_t default_search_provider_index = 0; 334 size_t default_search_provider_index = 0;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 394
393 TEST_F(TemplateURLServiceTest, Load) { 395 TEST_F(TemplateURLServiceTest, Load) {
394 test_util_.VerifyLoad(); 396 test_util_.VerifyLoad();
395 } 397 }
396 398
397 TEST_F(TemplateURLServiceTest, AddUpdateRemove) { 399 TEST_F(TemplateURLServiceTest, AddUpdateRemove) {
398 // Add a new TemplateURL. 400 // Add a new TemplateURL.
399 test_util_.VerifyLoad(); 401 test_util_.VerifyLoad();
400 const size_t initial_count = model()->GetTemplateURLs().size(); 402 const size_t initial_count = model()->GetTemplateURLs().size();
401 403
402 TemplateURL* t_url = new TemplateURL(); 404 TemplateURLData data;
403 t_url->set_short_name(ASCIIToUTF16("google")); 405 data.short_name = ASCIIToUTF16("google");
404 t_url->set_keyword(ASCIIToUTF16("keyword")); 406 data.SetKeyword(ASCIIToUTF16("keyword"));
405 t_url->set_safe_for_autoreplace(true); 407 data.SetURL("http://www.google.com/foo/bar");
406 t_url->set_date_created(Time::FromTimeT(100)); 408 data.favicon_url = GURL("http://favicon.url");
407 t_url->set_last_modified(Time::FromTimeT(100)); 409 data.safe_for_autoreplace = true;
408 t_url->set_sync_guid("00000000-0000-0000-0000-000000000001"); 410 data.date_created = Time::FromTimeT(100);
409 t_url->SetURL("http://www.google.com/foo/bar"); 411 data.last_modified = Time::FromTimeT(100);
410 t_url->set_favicon_url(GURL("http://favicon.url")); 412 data.sync_guid = "00000000-0000-0000-0000-000000000001";
413 TemplateURL* t_url = new TemplateURL(data);
411 model()->Add(t_url); 414 model()->Add(t_url);
412 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 415 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
413 NULL)); 416 NULL));
414 VerifyObserverCount(1); 417 VerifyObserverCount(1);
415 test_util_.BlockTillServiceProcessesRequests(); 418 test_util_.BlockTillServiceProcessesRequests();
416 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 419 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
417 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword())); 420 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword()));
418 // We need to make a second copy as the model takes ownership of |t_url| and 421 // We need to make a second copy as the model takes ownership of |t_url| and
419 // will delete it. We have to do this after calling Add() since that gives 422 // will delete it. We have to do this after calling Add() since that gives
420 // |t_url| its ID. 423 // |t_url| its ID.
421 TemplateURL cloned_url(*t_url); 424 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
422 425
423 // Reload the model to verify it was actually saved to the database. 426 // Reload the model to verify it was actually saved to the database.
424 test_util_.ResetModel(true); 427 test_util_.ResetModel(true);
425 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 428 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
426 const TemplateURL* loaded_url = 429 const TemplateURL* loaded_url =
427 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 430 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
428 ASSERT_TRUE(loaded_url != NULL); 431 ASSERT_TRUE(loaded_url != NULL);
429 AssertEquals(cloned_url, *loaded_url); 432 AssertEquals(*cloned_url, *loaded_url);
430 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 433 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
431 NULL)); 434 NULL));
432 435
433 // We expect the last_modified time to be updated to the present time on an 436 // We expect the last_modified time to be updated to the present time on an
434 // explicit reset. We have to set up the expectation here because ResetModel 437 // explicit reset. We have to set up the expectation here because ResetModel
435 // resets the TimeProvider in the TemplateURLService. 438 // resets the TimeProvider in the TemplateURLService.
436 StrictMock<base::MockTimeProvider> mock_time; 439 StrictMock<base::MockTimeProvider> mock_time;
437 model()->set_time_provider(&base::MockTimeProvider::StaticNow); 440 model()->set_time_provider(&base::MockTimeProvider::StaticNow);
438 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); 441 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337)));
439 442
440 // Mutate an element and verify it succeeded. 443 // Mutate an element and verify it succeeded.
441 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"), 444 model()->ResetTemplateURL(loaded_url, ASCIIToUTF16("a"), ASCIIToUTF16("b"),
442 "c"); 445 "c");
443 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name()); 446 ASSERT_EQ(ASCIIToUTF16("a"), loaded_url->short_name());
444 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword()); 447 ASSERT_EQ(ASCIIToUTF16("b"), loaded_url->keyword());
445 ASSERT_EQ("c", loaded_url->url()); 448 ASSERT_EQ("c", loaded_url->url());
446 ASSERT_FALSE(loaded_url->safe_for_autoreplace()); 449 ASSERT_FALSE(loaded_url->safe_for_autoreplace());
447 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(), 450 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
448 NULL)); 451 NULL));
449 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL)); 452 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL));
450 cloned_url = *loaded_url; 453 cloned_url.reset(new TemplateURL(loaded_url->data()));
451 test_util_.BlockTillServiceProcessesRequests(); 454 test_util_.BlockTillServiceProcessesRequests();
452 test_util_.ResetModel(true); 455 test_util_.ResetModel(true);
453 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 456 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
454 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")); 457 loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b"));
455 ASSERT_TRUE(loaded_url != NULL); 458 ASSERT_TRUE(loaded_url != NULL);
456 AssertEquals(cloned_url, *loaded_url); 459 AssertEquals(*cloned_url, *loaded_url);
457 // We changed a TemplateURL in the service, so ensure that the time was 460 // We changed a TemplateURL in the service, so ensure that the time was
458 // updated. 461 // updated.
459 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified()); 462 ASSERT_EQ(base::Time::FromDoubleT(1337), loaded_url->last_modified());
460 463
461 // Remove an element and verify it succeeded. 464 // Remove an element and verify it succeeded.
462 model()->Remove(loaded_url); 465 model()->Remove(loaded_url);
463 VerifyObserverCount(1); 466 VerifyObserverCount(1);
464 test_util_.ResetModel(true); 467 test_util_.ResetModel(true);
465 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size()); 468 ASSERT_EQ(initial_count, model()->GetTemplateURLs().size());
466 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL); 469 EXPECT_TRUE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("b")) == NULL);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 517
515 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) { 518 TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) {
516 Time now = Time::Now(); 519 Time now = Time::Now();
517 TimeDelta one_day = TimeDelta::FromDays(1); 520 TimeDelta one_day = TimeDelta::FromDays(1);
518 Time month_ago = now - TimeDelta::FromDays(30); 521 Time month_ago = now - TimeDelta::FromDays(30);
519 522
520 // Nothing has been added. 523 // Nothing has been added.
521 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); 524 EXPECT_EQ(0U, model()->GetTemplateURLs().size());
522 525
523 // Create one with a 0 time. 526 // Create one with a 0 time.
524 AddKeywordWithDate("key1", false, "http://foo1", "http://suggest1", 527 AddKeywordWithDate("name1", "key1", false, "http://foo1", "http://suggest1",
525 "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), 528 "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
526 Time());
527 // Create one for now and +/- 1 day. 529 // Create one for now and +/- 1 day.
528 AddKeywordWithDate("key2", false, "http://foo2", "http://suggest2", 530 AddKeywordWithDate("name2", "key2", false, "http://foo2", "http://suggest2",
529 "http://icon2", "UTF-8;UTF-16", "name2", true, 531 "http://icon2", true, "UTF-8;UTF-16", now - one_day, Time());
530 now - one_day, Time()); 532 AddKeywordWithDate("name3", "key3", false, "http://foo3", std::string(),
531 AddKeywordWithDate("key3", false, "http://foo3", std::string(), std::string(), 533 std::string(), true, std::string(), now, Time());
532 std::string(), "name3", true, now, Time()); 534 AddKeywordWithDate("name4", "key4", false, "http://foo4", std::string(),
533 AddKeywordWithDate("key4", false, "http://foo4", std::string(), std::string(), 535 std::string(), true, std::string(), now + one_day, Time());
534 std::string(), "name4", true, now + one_day, Time());
535 // Try the other three states. 536 // Try the other three states.
536 AddKeywordWithDate("key5", false, "http://foo5", "http://suggest5", 537 AddKeywordWithDate("name5", "key5", false, "http://foo5", "http://suggest5",
537 "http://icon5", "UTF-8;UTF-16", "name5", false, now, 538 "http://icon5", false, "UTF-8;UTF-16", now, Time());
538 Time()); 539 AddKeywordWithDate("name6", "key6", false, "http://foo6", "http://suggest6",
539 AddKeywordWithDate("key6", false, "http://foo6", "http://suggest6", 540 "http://icon6", false, "UTF-8;UTF-16", month_ago, Time());
540 "http://icon6", "UTF-8;UTF-16", "name6", false,
541 month_ago, Time());
542 541
543 // We just added a few items, validate them. 542 // We just added a few items, validate them.
544 EXPECT_EQ(6U, model()->GetTemplateURLs().size()); 543 EXPECT_EQ(6U, model()->GetTemplateURLs().size());
545 544
546 // Try removing from current timestamp. This should delete the one in the 545 // Try removing from current timestamp. This should delete the one in the
547 // future and one very recent one. 546 // future and one very recent one.
548 model()->RemoveAutoGeneratedSince(now); 547 model()->RemoveAutoGeneratedSince(now);
549 EXPECT_EQ(4U, model()->GetTemplateURLs().size()); 548 EXPECT_EQ(4U, model()->GetTemplateURLs().size());
550 549
551 // Try removing from two months ago. This should only delete items that are 550 // Try removing from two months ago. This should only delete items that are
(...skipping 24 matching lines...) Expand all
576 575
577 TEST_F(TemplateURLServiceTest, ClearBrowsingData_KeywordsForOrigin) { 576 TEST_F(TemplateURLServiceTest, ClearBrowsingData_KeywordsForOrigin) {
578 Time now = Time::Now(); 577 Time now = Time::Now();
579 TimeDelta one_day = TimeDelta::FromDays(1); 578 TimeDelta one_day = TimeDelta::FromDays(1);
580 Time month_ago = now - TimeDelta::FromDays(30); 579 Time month_ago = now - TimeDelta::FromDays(30);
581 580
582 // Nothing has been added. 581 // Nothing has been added.
583 EXPECT_EQ(0U, model()->GetTemplateURLs().size()); 582 EXPECT_EQ(0U, model()->GetTemplateURLs().size());
584 583
585 // Create one for now and +/- 1 day. 584 // Create one for now and +/- 1 day.
586 AddKeywordWithDate("key1", false, "http://foo1", "http://suggest1", 585 AddKeywordWithDate("name1", "key1", false, "http://foo1", "http://suggest1",
587 "http://icon2", "UTF-8;UTF-16", "name2", true, 586 "http://icon2", true, "UTF-8;UTF-16", now - one_day, Time());
588 now - one_day, Time()); 587 AddKeywordWithDate("name2", "key2", false, "http://foo2", std::string(),
589 AddKeywordWithDate("key2", false, "http://foo2", std::string(), std::string(), 588 std::string(), true, std::string(), now, Time());
590 std::string(), "name2", true, now, Time()); 589 AddKeywordWithDate("name3", "key3", false, "http://foo3", std::string(),
591 AddKeywordWithDate("key3", false, "http://foo3", std::string(), std::string(), 590 std::string(), true, std::string(), now + one_day, Time());
592 std::string(), "name3", true, now + one_day, Time());
593 591
594 // We just added a few items, validate them. 592 // We just added a few items, validate them.
595 EXPECT_EQ(3U, model()->GetTemplateURLs().size()); 593 EXPECT_EQ(3U, model()->GetTemplateURLs().size());
596 594
597 // Try removing foo2. This should delete foo2, but leave foo1 and 3 untouched. 595 // Try removing foo2. This should delete foo2, but leave foo1 and 3 untouched.
598 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo2"), month_ago, 596 model()->RemoveAutoGeneratedForOriginBetween(GURL("http://foo2"), month_ago,
599 now + one_day); 597 now + one_day);
600 EXPECT_EQ(2U, model()->GetTemplateURLs().size()); 598 EXPECT_EQ(2U, model()->GetTemplateURLs().size());
601 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword()); 599 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword());
602 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace()); 600 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace());
(...skipping 16 matching lines...) Expand all
619 now + one_day + one_day); 617 now + one_day + one_day);
620 EXPECT_EQ(1U, model()->GetTemplateURLs().size()); 618 EXPECT_EQ(1U, model()->GetTemplateURLs().size());
621 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword()); 619 EXPECT_EQ(ASCIIToUTF16("key1"), model()->GetTemplateURLs()[0]->keyword());
622 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace()); 620 EXPECT_TRUE(model()->GetTemplateURLs()[0]->safe_for_autoreplace());
623 } 621 }
624 622
625 TEST_F(TemplateURLServiceTest, Reset) { 623 TEST_F(TemplateURLServiceTest, Reset) {
626 // Add a new TemplateURL. 624 // Add a new TemplateURL.
627 test_util_.VerifyLoad(); 625 test_util_.VerifyLoad();
628 const size_t initial_count = model()->GetTemplateURLs().size(); 626 const size_t initial_count = model()->GetTemplateURLs().size();
629 TemplateURL* t_url = new TemplateURL(); 627 TemplateURLData data;
630 t_url->set_short_name(ASCIIToUTF16("google")); 628 data.short_name = ASCIIToUTF16("google");
631 t_url->set_keyword(ASCIIToUTF16("keyword")); 629 data.SetKeyword(ASCIIToUTF16("keyword"));
632 t_url->set_date_created(Time::FromTimeT(100)); 630 data.SetURL("http://www.google.com/foo/bar");
633 t_url->set_last_modified(Time::FromTimeT(100)); 631 data.favicon_url = GURL("http://favicon.url");
634 t_url->SetURL("http://www.google.com/foo/bar"); 632 data.date_created = Time::FromTimeT(100);
635 t_url->set_favicon_url(GURL("http://favicon.url")); 633 data.last_modified = Time::FromTimeT(100);
634 TemplateURL* t_url = new TemplateURL(data);
636 model()->Add(t_url); 635 model()->Add(t_url);
637 636
638 VerifyObserverCount(1); 637 VerifyObserverCount(1);
639 test_util_.BlockTillServiceProcessesRequests(); 638 test_util_.BlockTillServiceProcessesRequests();
640 639
641 StrictMock<base::MockTimeProvider> mock_time; 640 StrictMock<base::MockTimeProvider> mock_time;
642 model()->set_time_provider(&base::MockTimeProvider::StaticNow); 641 model()->set_time_provider(&base::MockTimeProvider::StaticNow);
643 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337))); 642 EXPECT_CALL(mock_time, Now()).WillOnce(Return(base::Time::FromDoubleT(1337)));
644 643
645 // Reset the short name, keyword, url and make sure it takes. 644 // Reset the short name, keyword, url and make sure it takes.
646 const string16 new_short_name(ASCIIToUTF16("a")); 645 const string16 new_short_name(ASCIIToUTF16("a"));
647 const string16 new_keyword(ASCIIToUTF16("b")); 646 const string16 new_keyword(ASCIIToUTF16("b"));
648 const std::string new_url("c"); 647 const std::string new_url("c");
649 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url); 648 model()->ResetTemplateURL(t_url, new_short_name, new_keyword, new_url);
650 ASSERT_EQ(new_short_name, t_url->short_name()); 649 ASSERT_EQ(new_short_name, t_url->short_name());
651 ASSERT_EQ(new_keyword, t_url->keyword()); 650 ASSERT_EQ(new_keyword, t_url->keyword());
652 ASSERT_EQ(new_url, t_url->url()); 651 ASSERT_EQ(new_url, t_url->url());
653 652
654 // Make sure the mappings in the model were updated. 653 // Make sure the mappings in the model were updated.
655 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword)); 654 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(new_keyword));
656 ASSERT_TRUE( 655 ASSERT_TRUE(
657 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); 656 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL);
658 657
659 TemplateURL last_url(*t_url); 658 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
660 659
661 // Reload the model from the database and make sure the change took. 660 // Reload the model from the database and make sure the change took.
662 test_util_.ResetModel(true); 661 test_util_.ResetModel(true);
663 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 662 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
664 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword); 663 const TemplateURL* read_url = model()->GetTemplateURLForKeyword(new_keyword);
665 ASSERT_TRUE(read_url); 664 ASSERT_TRUE(read_url);
666 AssertEquals(last_url, *read_url); 665 AssertEquals(*cloned_url, *read_url);
667 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified()); 666 ASSERT_EQ(base::Time::FromDoubleT(1337), read_url->last_modified());
668 } 667 }
669 668
670 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) { 669 TEST_F(TemplateURLServiceTest, DefaultSearchProvider) {
671 // Add a new TemplateURL. 670 // Add a new TemplateURL.
672 test_util_.VerifyLoad(); 671 test_util_.VerifyLoad();
673 const size_t initial_count = model()->GetTemplateURLs().size(); 672 const size_t initial_count = model()->GetTemplateURLs().size();
674 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", 673 TemplateURL* t_url = AddKeywordWithDate("name1", "key1", false, "http://foo1",
675 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), 674 "http://sugg1", "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
676 Time());
677 test_util_.ResetObserverCount(); 675 test_util_.ResetObserverCount();
678 676
679 model()->SetDefaultSearchProvider(t_url); 677 model()->SetDefaultSearchProvider(t_url);
680 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); 678 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
681 ASSERT_TRUE(t_url->safe_for_autoreplace()); 679 ASSERT_TRUE(t_url->safe_for_autoreplace());
682 ASSERT_TRUE(t_url->show_in_default_list()); 680 ASSERT_TRUE(t_url->show_in_default_list());
683 681
684 // Setting the default search provider should have caused notification. 682 // Setting the default search provider should have caused notification.
685 VerifyObserverCount(1); 683 VerifyObserverCount(1);
686 test_util_.BlockTillServiceProcessesRequests(); 684 test_util_.BlockTillServiceProcessesRequests();
687 685
688 TemplateURL cloned_url(*t_url); 686 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
689 687
690 // Make sure when we reload we get a default search provider. 688 // Make sure when we reload we get a default search provider.
691 test_util_.ResetModel(true); 689 test_util_.ResetModel(true);
692 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 690 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
693 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 691 ASSERT_TRUE(model()->GetDefaultSearchProvider());
694 AssertEquals(cloned_url, *model()->GetDefaultSearchProvider()); 692 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider());
695 } 693 }
696 694
697 TEST_F(TemplateURLServiceTest, TemplateURLWithNoKeyword) { 695 TEST_F(TemplateURLServiceTest, TemplateURLWithNoKeyword) {
698 test_util_.VerifyLoad(); 696 test_util_.VerifyLoad();
699 697
700 const size_t initial_count = model()->GetTemplateURLs().size(); 698 const size_t initial_count = model()->GetTemplateURLs().size();
701 699
702 AddKeywordWithDate("", false, "http://foo1", "http://sugg1", 700 AddKeywordWithDate("name1", std::string(), false, "http://foo1",
703 "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), Time()); 701 "http://sugg1", "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
704 702
705 // We just added a few items, validate them. 703 // We just added a few items, validate them.
706 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 704 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
707 705
708 // Reload the model from the database and make sure we get the url back. 706 // Reload the model from the database and make sure we get the url back.
709 test_util_.ResetModel(true); 707 test_util_.ResetModel(true);
710 708
711 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size()); 709 ASSERT_EQ(1 + initial_count, model()->GetTemplateURLs().size());
712 710
713 bool found_keyword = false; 711 bool found_keyword = false;
714 for (size_t i = 0; i < initial_count + 1; ++i) { 712 for (size_t i = 0; i < initial_count + 1; ++i) {
715 if (model()->GetTemplateURLs()[i]->keyword().empty()) { 713 if (model()->GetTemplateURLs()[i]->keyword().empty()) {
716 found_keyword = true; 714 found_keyword = true;
717 break; 715 break;
718 } 716 }
719 } 717 }
720 ASSERT_TRUE(found_keyword); 718 ASSERT_TRUE(found_keyword);
721 } 719 }
722 720
723 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) { 721 TEST_F(TemplateURLServiceTest, CantReplaceWithSameKeyword) {
724 test_util_.ChangeModelToLoadState(); 722 test_util_.ChangeModelToLoadState();
725 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL)); 723 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), GURL(), NULL));
726 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo1", 724 TemplateURL* t_url = AddKeywordWithDate("name1", "foo", false, "http://foo1",
727 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), 725 "http://sugg1", "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
728 Time());
729 726
730 // Can still replace, newly added template url is marked safe to replace. 727 // Can still replace, newly added template url is marked safe to replace.
731 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 728 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
732 GURL("http://foo2"), NULL)); 729 GURL("http://foo2"), NULL));
733 730
734 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 731 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
735 // no longer be replaceable. 732 // no longer be replaceable.
736 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 733 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
737 t_url->url()); 734 t_url->url());
738 735
739 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 736 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
740 GURL("http://foo2"), NULL)); 737 GURL("http://foo2"), NULL));
741 } 738 }
742 739
743 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) { 740 TEST_F(TemplateURLServiceTest, CantReplaceWithSameHosts) {
744 test_util_.ChangeModelToLoadState(); 741 test_util_.ChangeModelToLoadState();
745 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"), 742 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("foo"),
746 GURL("http://foo.com"), NULL)); 743 GURL("http://foo.com"), NULL));
747 TemplateURL* t_url = AddKeywordWithDate("foo", false, "http://foo.com", 744 TemplateURL* t_url = AddKeywordWithDate("name1", "foo", false,
748 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), 745 "http://foo.com", "http://sugg1", "http://icon1", true, "UTF-8;UTF-16",
749 Time()); 746 Time(), Time());
750 747
751 // Can still replace, newly added template url is marked safe to replace. 748 // Can still replace, newly added template url is marked safe to replace.
752 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), 749 ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"),
753 GURL("http://foo.com"), NULL)); 750 GURL("http://foo.com"), NULL));
754 751
755 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should 752 // ResetTemplateURL marks the TemplateURL as unsafe to replace, so it should
756 // no longer be replaceable. 753 // no longer be replaceable.
757 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(), 754 model()->ResetTemplateURL(t_url, t_url->short_name(), t_url->keyword(),
758 t_url->url()); 755 t_url->url());
759 756
760 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"), 757 ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("bar"),
761 GURL("http://foo.com"), NULL)); 758 GURL("http://foo.com"), NULL));
762 } 759 }
763 760
764 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) { 761 TEST_F(TemplateURLServiceTest, HasDefaultSearchProvider) {
765 // We should have a default search provider even if we haven't loaded. 762 // We should have a default search provider even if we haven't loaded.
766 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 763 ASSERT_TRUE(model()->GetDefaultSearchProvider());
767 764
768 // Now force the model to load and make sure we still have a default. 765 // Now force the model to load and make sure we still have a default.
769 test_util_.VerifyLoad(); 766 test_util_.VerifyLoad();
770 767
771 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 768 ASSERT_TRUE(model()->GetDefaultSearchProvider());
772 } 769 }
773 770
774 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) { 771 TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) {
775 test_util_.VerifyLoad(); 772 test_util_.VerifyLoad();
776 773
777 TemplateURL* t_url = new TemplateURL(); 774 TemplateURLData data;
778 t_url->set_short_name(ASCIIToUTF16("a")); 775 data.short_name = ASCIIToUTF16("a");
779 t_url->set_safe_for_autoreplace(true); 776 data.safe_for_autoreplace = true;
780 t_url->set_date_created(Time::FromTimeT(100)); 777 data.SetURL("http://url");
781 t_url->set_last_modified(Time::FromTimeT(100)); 778 data.suggestions_url = "http://url2";
782 t_url->SetSuggestionsURL("http://url2"); 779 data.instant_url = "http://instant";
783 t_url->SetURL("http://url"); 780 data.date_created = Time::FromTimeT(100);
784 t_url->SetInstantURL("http://instant"); 781 data.last_modified = Time::FromTimeT(100);
782 TemplateURL* t_url = new TemplateURL(data);
785 model()->Add(t_url); 783 model()->Add(t_url);
786 const TemplateURLID id = t_url->id(); 784 const TemplateURLID id = t_url->id();
787 785
788 model()->SetDefaultSearchProvider(t_url); 786 model()->SetDefaultSearchProvider(t_url);
789 test_util_.BlockTillServiceProcessesRequests(); 787 test_util_.BlockTillServiceProcessesRequests();
790 TemplateURL first_default_search_provider(*t_url); 788 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
791 789
792 // Reset the model and don't load it. The template url we set as the default 790 // Reset the model and don't load it. The template url we set as the default
793 // should be pulled from prefs now. 791 // should be pulled from prefs now.
794 test_util_.ResetModel(false); 792 test_util_.ResetModel(false);
795 793
796 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs 794 // NOTE: This doesn't use AssertEquals as only a subset of the TemplateURLs
797 // value are persisted to prefs. 795 // value are persisted to prefs.
798 const TemplateURL* default_turl = model()->GetDefaultSearchProvider(); 796 const TemplateURL* default_turl = model()->GetDefaultSearchProvider();
799 ASSERT_TRUE(default_turl); 797 ASSERT_TRUE(default_turl);
800 ASSERT_EQ("http://url", default_turl->url()); 798 ASSERT_EQ("http://url", default_turl->url());
801 ASSERT_EQ("http://url2", default_turl->suggestions_url()); 799 ASSERT_EQ("http://url2", default_turl->suggestions_url());
802 EXPECT_EQ("http://instant", default_turl->instant_url()); 800 EXPECT_EQ("http://instant", default_turl->instant_url());
803 ASSERT_EQ(ASCIIToUTF16("a"), default_turl->short_name()); 801 ASSERT_EQ(ASCIIToUTF16("a"), default_turl->short_name());
804 ASSERT_EQ(id, default_turl->id()); 802 ASSERT_EQ(id, default_turl->id());
805 803
806 // Now do a load and make sure the default search provider really takes. 804 // Now do a load and make sure the default search provider really takes.
807 test_util_.VerifyLoad(); 805 test_util_.VerifyLoad();
808 806
809 ASSERT_TRUE(model()->GetDefaultSearchProvider()); 807 ASSERT_TRUE(model()->GetDefaultSearchProvider());
810 AssertEquals(first_default_search_provider, 808 AssertEquals(*cloned_url, *model()->GetDefaultSearchProvider());
811 *model()->GetDefaultSearchProvider());
812 } 809 }
813 810
814 TEST_F(TemplateURLServiceTest, BuildQueryTerms) { 811 TEST_F(TemplateURLServiceTest, BuildQueryTerms) {
815 struct TestData { 812 struct TestData {
816 const std::string url; 813 const std::string url;
817 const bool result; 814 const bool result;
818 // Keys and values are a semicolon separated list of expected values in the 815 // Keys and values are a semicolon separated list of expected values in the
819 // map. 816 // map.
820 const std::string keys; 817 const std::string keys;
821 const std::string values; 818 const std::string values;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 { "http://foo/", string16() }, 862 { "http://foo/", string16() },
866 { "http://foo/foo?q=xx", string16() }, 863 { "http://foo/foo?q=xx", string16() },
867 { "http://x/bar?q=xx", string16() }, 864 { "http://x/bar?q=xx", string16() },
868 { "http://x/foo?y=xx", string16() }, 865 { "http://x/foo?y=xx", string16() },
869 { "http://x/foo?q=xx", ASCIIToUTF16("xx") }, 866 { "http://x/foo?q=xx", ASCIIToUTF16("xx") },
870 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") }, 867 { "http://x/foo?a=b&q=xx", ASCIIToUTF16("xx") },
871 { "http://x/foo?q=b&q=xx", string16() }, 868 { "http://x/foo?q=b&q=xx", string16() },
872 }; 869 };
873 870
874 test_util_.ChangeModelToLoadState(); 871 test_util_.ChangeModelToLoadState();
875 AddKeywordWithDate("x", false, "http://x/foo?q={searchTerms}", 872 AddKeywordWithDate("name", "x", false, "http://x/foo?q={searchTerms}",
876 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name", false, Time(), 873 "http://sugg1", "http://icon1", false, "UTF-8;UTF-16", Time(), Time());
877 Time());
878 874
879 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { 875 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
880 history::URLVisitedDetails details; 876 history::URLVisitedDetails details;
881 details.row = history::URLRow(GURL(data[i].url)); 877 details.row = history::URLRow(GURL(data[i].url));
882 details.transition = content::PageTransitionFromInt(0); 878 details.transition = content::PageTransitionFromInt(0);
883 model()->UpdateKeywordSearchTermsForURL(details); 879 model()->UpdateKeywordSearchTermsForURL(details);
884 EXPECT_EQ(data[i].term, test_util_.GetAndClearSearchTerm()); 880 EXPECT_EQ(data[i].term, test_util_.GetAndClearSearchTerm());
885 } 881 }
886 } 882 }
887 883
888 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) { 884 TEST_F(TemplateURLServiceTest, DontUpdateKeywordSearchForNonReplaceable) {
889 struct TestData { 885 struct TestData {
890 const std::string url; 886 const std::string url;
891 } data[] = { 887 } data[] = {
892 { "http://foo/" }, 888 { "http://foo/" },
893 { "http://x/bar?q=xx" }, 889 { "http://x/bar?q=xx" },
894 { "http://x/foo?y=xx" }, 890 { "http://x/foo?y=xx" },
895 }; 891 };
896 892
897 test_util_.ChangeModelToLoadState(); 893 test_util_.ChangeModelToLoadState();
898 AddKeywordWithDate("x", false, "http://x/foo", "http://sugg1", 894 AddKeywordWithDate("name", "x", false, "http://x/foo", "http://sugg1",
899 "http://icon1", "UTF-8;UTF-16", "name", false, Time(), Time()); 895 "http://icon1", false, "UTF-8;UTF-16", Time(), Time());
900 896
901 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { 897 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
902 history::URLVisitedDetails details; 898 history::URLVisitedDetails details;
903 details.row = history::URLRow(GURL(data[i].url)); 899 details.row = history::URLRow(GURL(data[i].url));
904 details.transition = content::PageTransitionFromInt(0); 900 details.transition = content::PageTransitionFromInt(0);
905 model()->UpdateKeywordSearchTermsForURL(details); 901 model()->UpdateKeywordSearchTermsForURL(details);
906 ASSERT_EQ(string16(), test_util_.GetAndClearSearchTerm()); 902 ASSERT_EQ(string16(), test_util_.GetAndClearSearchTerm());
907 } 903 }
908 } 904 }
909 905
910 TEST_F(TemplateURLServiceTest, ChangeGoogleBaseValue) { 906 TEST_F(TemplateURLServiceTest, ChangeGoogleBaseValue) {
911 // NOTE: Do not do a VerifyLoad() here as it will load the prepopulate data, 907 // NOTE: Do not do a VerifyLoad() here as it will load the prepopulate data,
912 // which also has a {google:baseURL} keyword in it, which will confuse this 908 // which also has a {google:baseURL} keyword in it, which will confuse this
913 // test. 909 // test.
914 test_util_.ChangeModelToLoadState(); 910 test_util_.ChangeModelToLoadState();
915 test_util_.SetGoogleBaseURL("http://google.com/"); 911 test_util_.SetGoogleBaseURL("http://google.com/");
916 const TemplateURL* t_url = AddKeywordWithDate("google.com", true, 912 const TemplateURL* t_url = AddKeywordWithDate("name", "google.com", true,
917 "{google:baseURL}?q={searchTerms}", "http://sugg1", "http://icon1", 913 "{google:baseURL}?q={searchTerms}", "http://sugg1", "http://icon1",
918 "UTF-8;UTF-16", "name", false, Time(), Time()); 914 false, "UTF-8;UTF-16", Time(), Time());
919 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com")); 915 ASSERT_EQ(t_url, model()->GetTemplateURLForHost("google.com"));
920 EXPECT_EQ("google.com", t_url->url_ref().GetHost()); 916 EXPECT_EQ("google.com", t_url->url_ref().GetHost());
921 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword()); 917 EXPECT_EQ(ASCIIToUTF16("google.com"), t_url->keyword());
922 918
923 // Change the Google base url. 919 // Change the Google base url.
924 test_util_.ResetObserverCount(); 920 test_util_.ResetObserverCount();
925 test_util_.SetGoogleBaseURL("http://google.co.uk/"); 921 test_util_.SetGoogleBaseURL("http://google.co.uk/");
926 VerifyObserverCount(1); 922 VerifyObserverCount(1);
927 923
928 // Make sure the host->TemplateURL map was updated appropriately. 924 // Make sure the host->TemplateURL map was updated appropriately.
(...skipping 24 matching lines...) Expand all
953 history::VisitVector visits; 949 history::VisitVector visits;
954 }; 950 };
955 951
956 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for 952 // Make sure TemplateURLService generates a KEYWORD_GENERATED visit for
957 // KEYWORD visits. 953 // KEYWORD visits.
958 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) { 954 TEST_F(TemplateURLServiceTest, GenerateVisitOnKeyword) {
959 test_util_.VerifyLoad(); 955 test_util_.VerifyLoad();
960 test_util_.profile()->CreateHistoryService(true, false); 956 test_util_.profile()->CreateHistoryService(true, false);
961 957
962 // Create a keyword. 958 // Create a keyword.
963 TemplateURL* t_url = AddKeywordWithDate( 959 TemplateURL* t_url = AddKeywordWithDate("keyword", "keyword", false,
964 "keyword", false, "http://foo.com/foo?query={searchTerms}", 960 "http://foo.com/foo?query={searchTerms}", "http://sugg1", "http://icon1",
965 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "keyword", 961 true, "UTF-8;UTF-16", base::Time::Now(), base::Time::Now());
966 true, base::Time::Now(), base::Time::Now());
967 962
968 // Add a visit that matches the url of the keyword. 963 // Add a visit that matches the url of the keyword.
969 HistoryService* history = 964 HistoryService* history =
970 test_util_.profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); 965 test_util_.profile()->GetHistoryService(Profile::EXPLICIT_ACCESS);
971 history->AddPage( 966 history->AddPage(
972 GURL(t_url->url_ref().ReplaceSearchTerms(ASCIIToUTF16("blah"), 967 GURL(t_url->url_ref().ReplaceSearchTerms(ASCIIToUTF16("blah"),
973 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())), 968 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())),
974 NULL, 0, GURL(), content::PAGE_TRANSITION_KEYWORD, 969 NULL, 0, GURL(), content::PAGE_TRANSITION_KEYWORD,
975 history::RedirectList(), history::SOURCE_BROWSED, false); 970 history::RedirectList(), history::SOURCE_BROWSED, false);
976 971
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 1019
1025 // Make sure that load routine doesn't delete prepopulated engines that no 1020 // Make sure that load routine doesn't delete prepopulated engines that no
1026 // longer exist in the prepopulate data if it has been modified by the user. 1021 // longer exist in the prepopulate data if it has been modified by the user.
1027 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) { 1022 TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) {
1028 // Create a preloaded template url and add it to a loaded model. 1023 // Create a preloaded template url and add it to a loaded model.
1029 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999); 1024 TemplateURL* t_url = CreatePreloadedTemplateURL(false, 999999);
1030 test_util_.ChangeModelToLoadState(); 1025 test_util_.ChangeModelToLoadState();
1031 model()->Add(t_url); 1026 model()->Add(t_url);
1032 1027
1033 // Do the copy after t_url is added so that the id is set. 1028 // Do the copy after t_url is added so that the id is set.
1034 TemplateURL copy_t_url = *t_url; 1029 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
1035 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); 1030 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
1036 1031
1037 // Wait for any saves to finish. 1032 // Wait for any saves to finish.
1038 test_util_.BlockTillServiceProcessesRequests(); 1033 test_util_.BlockTillServiceProcessesRequests();
1039 1034
1040 // Ensure that merging won't clear it if the user has edited it. 1035 // Ensure that merging won't clear it if the user has edited it.
1041 test_util_.ResetModel(true); 1036 test_util_.ResetModel(true);
1042 const TemplateURL* url_for_unittest = 1037 const TemplateURL* url_for_unittest =
1043 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1038 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1044 ASSERT_TRUE(url_for_unittest != NULL); 1039 ASSERT_TRUE(url_for_unittest != NULL);
1045 AssertEquals(copy_t_url, *url_for_unittest); 1040 AssertEquals(*cloned_url, *url_for_unittest);
1046 1041
1047 // Wait for any saves to finish. 1042 // Wait for any saves to finish.
1048 test_util_.BlockTillServiceProcessesRequests(); 1043 test_util_.BlockTillServiceProcessesRequests();
1049 1044
1050 // Reload the model to verify that save/reload retains the item. 1045 // Reload the model to verify that save/reload retains the item.
1051 test_util_.ResetModel(true); 1046 test_util_.ResetModel(true);
1052 ASSERT_TRUE( 1047 ASSERT_TRUE(
1053 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL); 1048 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL);
1054 } 1049 }
1055 1050
1056 // Make sure that load routine doesn't delete 1051 // Make sure that load routine doesn't delete
1057 // prepopulated engines that no longer exist in the prepopulate data if 1052 // prepopulated engines that no longer exist in the prepopulate data if
1058 // it has been modified by the user. 1053 // it has been modified by the user.
1059 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) { 1054 TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) {
1060 test_util_.VerifyLoad(); 1055 test_util_.VerifyLoad();
1061 // Verify that the default search provider is set to something. 1056 // Verify that the default search provider is set to something.
1062 ASSERT_TRUE(model()->GetDefaultSearchProvider() != NULL); 1057 const TemplateURL* default_search = model()->GetDefaultSearchProvider();
1063 TemplateURL default_url = *model()->GetDefaultSearchProvider(); 1058 ASSERT_TRUE(default_search != NULL);
1059 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data()));
1064 1060
1065 // Wait for any saves to finish. 1061 // Wait for any saves to finish.
1066 test_util_.BlockTillServiceProcessesRequests(); 1062 test_util_.BlockTillServiceProcessesRequests();
1067 1063
1068 // Reload the model and check that the default search provider 1064 // Reload the model and check that the default search provider
1069 // was properly saved. 1065 // was properly saved.
1070 test_util_.ResetModel(true); 1066 test_util_.ResetModel(true);
1071 ASSERT_TRUE(model()->GetDefaultSearchProvider() != NULL); 1067 default_search = model()->GetDefaultSearchProvider();
1072 AssertEquals(default_url, *model()->GetDefaultSearchProvider()); 1068 ASSERT_TRUE(default_search != NULL);
1069 AssertEquals(*cloned_url, *default_search);
1073 } 1070 }
1074 1071
1075 // Make sure that the load routine doesn't delete 1072 // Make sure that the load routine doesn't delete
1076 // prepopulated engines that no longer exist in the prepopulate data if 1073 // prepopulated engines that no longer exist in the prepopulate data if
1077 // it is the default search provider. 1074 // it is the default search provider.
1078 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) { 1075 TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) {
1079 // Set the default search provider to a preloaded template url which 1076 // Set the default search provider to a preloaded template url which
1080 // is not in the current set of preloaded template urls and save 1077 // is not in the current set of preloaded template urls and save
1081 // the result. 1078 // the result.
1082 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999); 1079 TemplateURL* t_url = CreatePreloadedTemplateURL(true, 999999);
1083 test_util_.ChangeModelToLoadState(); 1080 test_util_.ChangeModelToLoadState();
1084 model()->Add(t_url); 1081 model()->Add(t_url);
1085 model()->SetDefaultSearchProvider(t_url); 1082 model()->SetDefaultSearchProvider(t_url);
1086 // Do the copy after t_url is added and set as default so that its 1083 // Do the copy after t_url is added and set as default so that its
1087 // internal state is correct. 1084 // internal state is correct.
1088 TemplateURL copy_t_url = *t_url; 1085 scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data()));
1089 1086
1090 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); 1087 ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
1091 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); 1088 ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
1092 test_util_.BlockTillServiceProcessesRequests(); 1089 test_util_.BlockTillServiceProcessesRequests();
1093 1090
1094 // Ensure that merging won't clear the prepopulated template url 1091 // Ensure that merging won't clear the prepopulated template url
1095 // which is no longer present if it's the default engine. 1092 // which is no longer present if it's the default engine.
1096 test_util_.ResetModel(true); 1093 test_util_.ResetModel(true);
1097 { 1094 {
1098 const TemplateURL* keyword_url = 1095 const TemplateURL* keyword_url =
1099 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1096 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1100 ASSERT_TRUE(keyword_url != NULL); 1097 ASSERT_TRUE(keyword_url != NULL);
1101 AssertEquals(copy_t_url, *keyword_url); 1098 AssertEquals(*cloned_url, *keyword_url);
1102 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); 1099 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider());
1103 } 1100 }
1104 1101
1105 // Wait for any saves to finish. 1102 // Wait for any saves to finish.
1106 test_util_.BlockTillServiceProcessesRequests(); 1103 test_util_.BlockTillServiceProcessesRequests();
1107 1104
1108 // Reload the model to verify that the update was saved. 1105 // Reload the model to verify that the update was saved.
1109 test_util_.ResetModel(true); 1106 test_util_.ResetModel(true);
1110 { 1107 {
1111 const TemplateURL* keyword_url = 1108 const TemplateURL* keyword_url =
1112 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")); 1109 model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"));
1113 ASSERT_TRUE(keyword_url != NULL); 1110 ASSERT_TRUE(keyword_url != NULL);
1114 AssertEquals(copy_t_url, *keyword_url); 1111 AssertEquals(*cloned_url, *keyword_url);
1115 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider()); 1112 ASSERT_EQ(keyword_url, model()->GetDefaultSearchProvider());
1116 } 1113 }
1117 } 1114 }
1118 1115
1119 // Make sure that the load routine updates the url of a preexisting 1116 // Make sure that the load routine updates the url of a preexisting
1120 // default search engine provider and that the result is saved correctly. 1117 // default search engine provider and that the result is saved correctly.
1121 TEST_F(TemplateURLServiceTest, LoadUpdatesDefaultSearchURL) { 1118 TEST_F(TemplateURLServiceTest, LoadUpdatesDefaultSearchURL) {
1122 TestLoadUpdatingPreloadedURL(0); 1119 TestLoadUpdatingPreloadedURL(0);
1123 } 1120 }
1124 1121
(...skipping 22 matching lines...) Expand all
1147 test_util_.ResetModel(true); 1144 test_util_.ResetModel(true);
1148 1145
1149 EXPECT_TRUE(model()->GetDefaultSearchProvider()); 1146 EXPECT_TRUE(model()->GetDefaultSearchProvider());
1150 } 1147 }
1151 1148
1152 // Make sure that the load does update of auto-keywords correctly. 1149 // Make sure that the load does update of auto-keywords correctly.
1153 // This test basically verifies that no asserts or crashes occur 1150 // This test basically verifies that no asserts or crashes occur
1154 // during this operation. 1151 // during this operation.
1155 TEST_F(TemplateURLServiceTest, LoadDoesAutoKeywordUpdate) { 1152 TEST_F(TemplateURLServiceTest, LoadDoesAutoKeywordUpdate) {
1156 string16 prepopulated_url; 1153 string16 prepopulated_url;
1157 TemplateURL* t_url = CreateReplaceablePreloadedTemplateURL(false, 1154 scoped_ptr<TemplateURL> t_url(
1158 0, &prepopulated_url); 1155 CreateReplaceablePreloadedTemplateURL(false, 0, &prepopulated_url));
1159 t_url->SetURL("{google:baseURL}?q={searchTerms}"); 1156 TemplateURLData data(t_url->data());
1160 t_url->set_autogenerate_keyword(true); 1157 data.SetAutogenerateKeyword(true);
1158 data.SetURL("{google:baseURL}?q={searchTerms}");
1161 1159
1162 // Then add it to the model and save it all. 1160 // Then add it to the model and save it all.
1163 test_util_.ChangeModelToLoadState(); 1161 test_util_.ChangeModelToLoadState();
1164 model()->Add(t_url); 1162 model()->Add(new TemplateURL(data));
1165 test_util_.BlockTillServiceProcessesRequests(); 1163 test_util_.BlockTillServiceProcessesRequests();
1166 1164
1167 // Now reload the model and verify that the merge updates the url. 1165 // Now reload the model and verify that the merge updates the url.
1168 test_util_.ResetModel(true); 1166 test_util_.ResetModel(true);
1169 1167
1170 // Wait for any saves to finish. 1168 // Wait for any saves to finish.
1171 test_util_.BlockTillServiceProcessesRequests(); 1169 test_util_.BlockTillServiceProcessesRequests();
1172 } 1170 }
1173 1171
1174 // Simulates failing to load the webdb and makes sure the default search 1172 // Simulates failing to load the webdb and makes sure the default search
(...skipping 16 matching lines...) Expand all
1191 1189
1192 // Verifies that if the default search URL preference is managed, we report 1190 // Verifies that if the default search URL preference is managed, we report
1193 // the default search as managed. Also check that we are getting the right 1191 // the default search as managed. Also check that we are getting the right
1194 // values. 1192 // values.
1195 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) { 1193 TEST_F(TemplateURLServiceTest, TestManagedDefaultSearch) {
1196 test_util_.VerifyLoad(); 1194 test_util_.VerifyLoad();
1197 const size_t initial_count = model()->GetTemplateURLs().size(); 1195 const size_t initial_count = model()->GetTemplateURLs().size();
1198 test_util_.ResetObserverCount(); 1196 test_util_.ResetObserverCount();
1199 1197
1200 // Set a regular default search provider. 1198 // Set a regular default search provider.
1201 TemplateURL* regular_default = AddKeywordWithDate("key1", false, 1199 TemplateURL* regular_default = AddKeywordWithDate("name1", "key1", false,
1202 "http://foo1", "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", 1200 "http://foo1", "http://sugg1", "http://icon1", true, "UTF-8;UTF-16",
1203 true, Time(), Time()); 1201 Time(), Time());
1204 VerifyObserverCount(1); 1202 VerifyObserverCount(1);
1205 model()->SetDefaultSearchProvider(regular_default); 1203 model()->SetDefaultSearchProvider(regular_default);
1206 // Adding the URL and setting the default search provider should have caused 1204 // Adding the URL and setting the default search provider should have caused
1207 // notifications. 1205 // notifications.
1208 VerifyObserverCount(1); 1206 VerifyObserverCount(1);
1209 EXPECT_FALSE(model()->is_default_search_managed()); 1207 EXPECT_FALSE(model()->is_default_search_managed());
1210 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1208 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1211 1209
1212 // Set a managed preference that establishes a default search provider. 1210 // Set a managed preference that establishes a default search provider.
1213 const char kName[] = "test1"; 1211 const char kName[] = "test1";
1214 const char kKeyword[] = "test.com"; 1212 const char kKeyword[] = "test.com";
1215 const char kSearchURL[] = "http://test.com/search?t={searchTerms}"; 1213 const char kSearchURL[] = "http://test.com/search?t={searchTerms}";
1216 const char kIconURL[] = "http://test.com/icon.jpg"; 1214 const char kIconURL[] = "http://test.com/icon.jpg";
1217 const char kEncodings[] = "UTF-16;UTF-32"; 1215 const char kEncodings[] = "UTF-16;UTF-32";
1218 SetManagedDefaultSearchPreferences(true, kName, kSearchURL, std::string(), 1216 SetManagedDefaultSearchPreferences(true, kName, kKeyword, kSearchURL,
1219 kIconURL, kEncodings, kKeyword); 1217 std::string(), kIconURL, kEncodings);
1220 VerifyObserverFired(); 1218 VerifyObserverFired();
1221 EXPECT_TRUE(model()->is_default_search_managed()); 1219 EXPECT_TRUE(model()->is_default_search_managed());
1222 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1220 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1223 1221
1224 // Verify that the default manager we are getting is the managed one. 1222 // Verify that the default manager we are getting is the managed one.
1225 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL()); 1223 TemplateURLData data;
1226 expected_managed_default1->set_short_name(ASCIIToUTF16(kName)); 1224 data.short_name = ASCIIToUTF16(kName);
1227 expected_managed_default1->set_keyword(ASCIIToUTF16(kKeyword)); 1225 data.SetKeyword(ASCIIToUTF16(kKeyword));
1228 expected_managed_default1->set_show_in_default_list(true); 1226 data.SetURL(kSearchURL);
1229 std::vector<std::string> encodings_vector; 1227 data.favicon_url = GURL(kIconURL);
1230 base::SplitString(kEncodings, ';', &encodings_vector); 1228 data.show_in_default_list = true;
1231 expected_managed_default1->set_input_encodings(encodings_vector); 1229 base::SplitString(kEncodings, ';', &data.input_encodings);
1232 expected_managed_default1->SetURL(kSearchURL); 1230 scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data));
1233 expected_managed_default1->set_favicon_url(GURL(kIconURL));
1234 const TemplateURL* actual_managed_default = 1231 const TemplateURL* actual_managed_default =
1235 model()->GetDefaultSearchProvider(); 1232 model()->GetDefaultSearchProvider();
1236 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); 1233 ExpectSimilar(expected_managed_default1.get(), actual_managed_default);
1237 EXPECT_TRUE(actual_managed_default->show_in_default_list()); 1234 EXPECT_TRUE(actual_managed_default->show_in_default_list());
1238 1235
1239 // Update the managed preference and check that the model has changed. 1236 // Update the managed preference and check that the model has changed.
1240 const char kNewName[] = "test2"; 1237 const char kNewName[] = "test2";
1241 const char kNewKeyword[] = "other.com"; 1238 const char kNewKeyword[] = "other.com";
1242 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}"; 1239 const char kNewSearchURL[] = "http://other.com/search?t={searchTerms}";
1243 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}"; 1240 const char kNewSuggestURL[] = "http://other.com/suggest?t={searchTerms}";
1244 SetManagedDefaultSearchPreferences(true, kNewName, kNewSearchURL, 1241 SetManagedDefaultSearchPreferences(true, kNewName, kNewKeyword, kNewSearchURL,
1245 kNewSuggestURL, std::string(), std::string(), kNewKeyword); 1242 kNewSuggestURL, std::string(), std::string());
1246 VerifyObserverFired(); 1243 VerifyObserverFired();
1247 EXPECT_TRUE(model()->is_default_search_managed()); 1244 EXPECT_TRUE(model()->is_default_search_managed());
1248 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1245 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1249 1246
1250 // Verify that the default manager we are now getting is the correct one. 1247 // Verify that the default manager we are now getting is the correct one.
1251 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL()); 1248 TemplateURLData data2;
1252 expected_managed_default2->set_short_name(ASCIIToUTF16(kNewName)); 1249 data2.short_name = ASCIIToUTF16(kNewName);
1253 expected_managed_default2->set_keyword(ASCIIToUTF16(kNewKeyword)); 1250 data2.SetKeyword(ASCIIToUTF16(kNewKeyword));
1254 expected_managed_default2->set_show_in_default_list(true); 1251 data2.SetURL(kNewSearchURL);
1255 expected_managed_default2->SetSuggestionsURL(kNewSuggestURL); 1252 data2.suggestions_url = kNewSuggestURL;
1256 expected_managed_default2->SetURL(kNewSearchURL); 1253 data2.show_in_default_list = true;
1254 scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2));
1257 actual_managed_default = model()->GetDefaultSearchProvider(); 1255 actual_managed_default = model()->GetDefaultSearchProvider();
1258 ExpectSimilar(expected_managed_default2.get(), actual_managed_default); 1256 ExpectSimilar(expected_managed_default2.get(), actual_managed_default);
1259 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); 1257 EXPECT_EQ(actual_managed_default->show_in_default_list(), true);
1260 1258
1261 // Remove all the managed prefs and check that we are no longer managed. 1259 // Remove all the managed prefs and check that we are no longer managed.
1262 RemoveManagedDefaultSearchPreferences(); 1260 RemoveManagedDefaultSearchPreferences();
1263 VerifyObserverFired(); 1261 VerifyObserverFired();
1264 EXPECT_FALSE(model()->is_default_search_managed()); 1262 EXPECT_FALSE(model()->is_default_search_managed());
1265 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1263 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1266 1264
1267 // The default should now be the first URL added 1265 // The default should now be the first URL added
1268 const TemplateURL* actual_final_managed_default = 1266 const TemplateURL* actual_final_managed_default =
1269 model()->GetDefaultSearchProvider(); 1267 model()->GetDefaultSearchProvider();
1270 ExpectSimilar(model()->GetTemplateURLs()[0], actual_final_managed_default); 1268 ExpectSimilar(model()->GetTemplateURLs()[0], actual_final_managed_default);
1271 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true); 1269 EXPECT_EQ(actual_final_managed_default->show_in_default_list(), true);
1272 1270
1273 // Disable the default search provider through policy. 1271 // Disable the default search provider through policy.
1274 SetManagedDefaultSearchPreferences(false, std::string(), std::string(), 1272 SetManagedDefaultSearchPreferences(false, std::string(), std::string(),
1275 std::string(), std::string(), std::string(), std::string()); 1273 std::string(), std::string(), std::string(), std::string());
1276 VerifyObserverFired(); 1274 VerifyObserverFired();
1277 EXPECT_TRUE(model()->is_default_search_managed()); 1275 EXPECT_TRUE(model()->is_default_search_managed());
1278 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider()); 1276 EXPECT_TRUE(NULL == model()->GetDefaultSearchProvider());
1279 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1277 EXPECT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1280 1278
1281 // Re-enable it. 1279 // Re-enable it.
1282 SetManagedDefaultSearchPreferences(true, kName, kSearchURL, std::string(), 1280 SetManagedDefaultSearchPreferences(true, kName, kKeyword, kSearchURL,
1283 kIconURL, kEncodings, kKeyword); 1281 std::string(), kIconURL, kEncodings);
1284 VerifyObserverFired(); 1282 VerifyObserverFired();
1285 EXPECT_TRUE(model()->is_default_search_managed()); 1283 EXPECT_TRUE(model()->is_default_search_managed());
1286 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size()); 1284 EXPECT_EQ(initial_count + 2, model()->GetTemplateURLs().size());
1287 1285
1288 // Verify that the default manager we are getting is the managed one. 1286 // Verify that the default manager we are getting is the managed one.
1289 actual_managed_default = model()->GetDefaultSearchProvider(); 1287 actual_managed_default = model()->GetDefaultSearchProvider();
1290 ExpectSimilar(expected_managed_default1.get(), actual_managed_default); 1288 ExpectSimilar(expected_managed_default1.get(), actual_managed_default);
1291 EXPECT_EQ(actual_managed_default->show_in_default_list(), true); 1289 EXPECT_EQ(actual_managed_default->show_in_default_list(), true);
1292 1290
1293 // Clear the model and disable the default search provider through policy. 1291 // Clear the model and disable the default search provider through policy.
1294 // Verify that there is no default search provider after loading the model. 1292 // Verify that there is no default search provider after loading the model.
1295 // This checks against regressions of http://crbug.com/67180 1293 // This checks against regressions of http://crbug.com/67180
1296 1294
1297 // First, remove the preferences, reset the model, and set a default. 1295 // First, remove the preferences, reset the model, and set a default.
1298 RemoveManagedDefaultSearchPreferences(); 1296 RemoveManagedDefaultSearchPreferences();
1299 test_util_.ResetModel(true); 1297 test_util_.ResetModel(true);
1300 TemplateURL* t_url = AddKeywordWithDate("key1", false, "http://foo1", 1298 TemplateURL* t_url = AddKeywordWithDate("name1", "key1", false, "http://foo1",
1301 "http://sugg1", "http://icon1", "UTF-8;UTF-16", "name1", true, Time(), 1299 "http://sugg1", "http://icon1", true, "UTF-8;UTF-16", Time(), Time());
1302 Time());
1303 model()->SetDefaultSearchProvider(t_url); 1300 model()->SetDefaultSearchProvider(t_url);
1304 EXPECT_EQ(t_url, model()->GetDefaultSearchProvider()); 1301 EXPECT_EQ(t_url, model()->GetDefaultSearchProvider());
1305 1302
1306 // Now reset the model again but load it after setting the preferences. 1303 // Now reset the model again but load it after setting the preferences.
1307 test_util_.ResetModel(false); 1304 test_util_.ResetModel(false);
1308 SetManagedDefaultSearchPreferences(false, std::string(), std::string(), 1305 SetManagedDefaultSearchPreferences(false, std::string(), std::string(),
1309 std::string(), std::string(), std::string(), std::string()); 1306 std::string(), std::string(), std::string(), std::string());
1310 test_util_.VerifyLoad(); 1307 test_util_.VerifyLoad();
1311 EXPECT_TRUE(model()->is_default_search_managed()); 1308 EXPECT_TRUE(model()->is_default_search_managed());
1312 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL); 1309 EXPECT_TRUE(model()->GetDefaultSearchProvider() == NULL);
1313 } 1310 }
1314 1311
1315 // Test that if we load a TemplateURL with an empty GUID, the load process 1312 // Test that if we load a TemplateURL with an empty GUID, the load process
1316 // assigns it a newly generated GUID. 1313 // assigns it a newly generated GUID.
1317 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) { 1314 TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) {
1318 // Add a new TemplateURL. 1315 // Add a new TemplateURL.
1319 test_util_.VerifyLoad(); 1316 test_util_.VerifyLoad();
1320 const size_t initial_count = model()->GetTemplateURLs().size(); 1317 const size_t initial_count = model()->GetTemplateURLs().size();
1321 1318
1322 TemplateURL* t_url = new TemplateURL(); 1319 TemplateURLData data;
1323 t_url->set_short_name(ASCIIToUTF16("google")); 1320 data.short_name = ASCIIToUTF16("google");
1324 t_url->set_keyword(ASCIIToUTF16("keyword")); 1321 data.SetKeyword(ASCIIToUTF16("keyword"));
1325 t_url->set_sync_guid(std::string()); 1322 data.SetURL("http://www.google.com/foo/bar");
1326 t_url->SetURL("http://www.google.com/foo/bar"); 1323 data.sync_guid.clear();
1324 TemplateURL* t_url = new TemplateURL(data);
1327 model()->Add(t_url); 1325 model()->Add(t_url);
1328 1326
1329 VerifyObserverCount(1); 1327 VerifyObserverCount(1);
1330 test_util_.BlockTillServiceProcessesRequests(); 1328 test_util_.BlockTillServiceProcessesRequests();
1331 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1329 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1332 1330
1333 // Reload the model to verify it was actually saved to the database and 1331 // Reload the model to verify it was actually saved to the database and
1334 // assigned a new GUID when brought back. 1332 // assigned a new GUID when brought back.
1335 test_util_.ResetModel(true); 1333 test_util_.ResetModel(true);
1336 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size()); 1334 ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
1337 const TemplateURL* loaded_url = 1335 const TemplateURL* loaded_url =
1338 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")); 1336 model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
1339 ASSERT_TRUE(loaded_url != NULL); 1337 ASSERT_TRUE(loaded_url != NULL);
1340 ASSERT_FALSE(loaded_url->sync_guid().empty()); 1338 ASSERT_FALSE(loaded_url->sync_guid().empty());
1341 } 1339 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698