search_engines_helper.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
18ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh// Use of this source code is governed by a BSD-style license that can be
38ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh// found in the LICENSE file.
48ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
58ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/sync/test/integration/search_engines_helper.h"
68ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
78ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include <vector>
88ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
98ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "base/strings/string_util.h"
108ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "base/strings/stringprintf.h"
118ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "base/strings/utf_string_conversions.h"
128ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "base/time/time.h"
138ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/profiles/profile.h"
148ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/search_engines/template_url.h"
158ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/search_engines/template_url_service.h"
168ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/search_engines/template_url_service_factory.h"
178ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/sync/profile_sync_service_harness.h"
188ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
198ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh#include "chrome/browser/sync/test/integration/sync_test.h"
208ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
210682809ad08db284d7110aab44108d5e9c310e6bdestradaausing sync_datatype_helper::test;
228ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
238ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshnamespace {
248ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
25da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar GaneshGUIDToTURLMap CreateGUIDToTURLMap(TemplateURLService* service) {
264cc80a758c3e4f044c2e53b6210df0e515536a1bZhentao Sun  CHECK(service);
278ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
288ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  GUIDToTURLMap map;
298ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService::TemplateURLVector turls = service->GetTemplateURLs();
308ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  for (TemplateURLService::TemplateURLVector::iterator it = turls.begin();
318ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh       it != turls.end(); ++it) {
328ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    CHECK(*it);
338ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    CHECK(map.find((*it)->sync_guid()) == map.end());
344cc80a758c3e4f044c2e53b6210df0e515536a1bZhentao Sun    map[(*it)->sync_guid()] = *it;
358ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
368ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
378ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return map;
388ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
398ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
408ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshstd::string GetTURLInfoString(const TemplateURL* turl) {
418ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  DCHECK(turl);
428ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return "TemplateURL: shortname: " + UTF16ToASCII(turl->short_name()) +
438ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      " keyword: " + UTF16ToASCII(turl->keyword()) + " url: " + turl->url();
448ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
458ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
468ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshbool TURLsMatch(const TemplateURL* turl1, const TemplateURL* turl2) {
478ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(turl1);
48f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun  CHECK(turl2);
498ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  bool result = (turl1->url() == turl2->url()) &&
50f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun      (turl1->keyword() == turl2->keyword()) &&
518ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      (turl1->short_name() == turl2->short_name());
52f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun
538ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  // Print some useful debug info.
540682809ad08db284d7110aab44108d5e9c310e6bdestradaa  if (!result) {
558ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    LOG(ERROR) << "TemplateURLs did not match: " << GetTURLInfoString(turl1)
568ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << " vs " << GetTURLInfoString(turl2);
578ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
588ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
598ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return result;
608ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
618ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
628ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshbool ServicesMatch(int profile_a, int profile_b) {
638ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* service_a =
648ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      search_engines_helper::GetServiceForBrowserContext(profile_a);
65f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun  TemplateURLService* service_b =
668ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      search_engines_helper::GetServiceForBrowserContext(profile_b);
678ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(service_a);
680682809ad08db284d7110aab44108d5e9c310e6bdestradaa  CHECK(service_b);
698ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
708ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  // Services that have synced should have identical TURLs, including the GUIDs.
71da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  // Make sure we compare those fields in addition to the user-visible fields.
72da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  GUIDToTURLMap a_turls = CreateGUIDToTURLMap(service_a);
73da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  GUIDToTURLMap b_turls = CreateGUIDToTURLMap(service_b);
74da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh
75da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  if (a_turls.size() != b_turls.size()) {
76da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh    LOG(ERROR) << "Service a and b do not match in size: " << a_turls.size()
778ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << " vs " << b_turls.size() << " respectively.";
788ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    return false;
798ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
808ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
818ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  for (GUIDToTURLMap::iterator it = a_turls.begin();
828ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh       it != a_turls.end(); ++it) {
838ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    if (b_turls.find(it->first) == b_turls.end()) {
848ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      LOG(ERROR) << "TURL GUID from a not found in b's TURLs: " << it->first;
858ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      return false;
868ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    }
878ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    if (!TURLsMatch(b_turls[it->first], it->second))
888ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      return false;
898ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
908ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
918ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  const TemplateURL* default_a = service_a->GetDefaultSearchProvider();
928ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  const TemplateURL* default_b = service_b->GetDefaultSearchProvider();
938ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(default_a);
948ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(default_b);
958ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  if (!TURLsMatch(default_a, default_b)) {
968ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    LOG(ERROR) << "Default search providers do not match: A's default: "
978ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << default_a->keyword() << " B's default: "
988ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << default_b->keyword();
998ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    return false;
1008ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  } else {
1018ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    LOG(INFO) << "A had default with URL: " << default_a->url()
1028ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh              << " and keyword: " << default_a->keyword();
1038ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
1040682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1050682809ad08db284d7110aab44108d5e9c310e6bdestradaa  return true;
1060682809ad08db284d7110aab44108d5e9c310e6bdestradaa}
1078ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1088ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh// Convenience helper for consistently generating the same keyword for a given
1098ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh// seed.
1108ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshstring16 CreateKeyword(int seed) {
1118ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return ASCIIToUTF16(base::StringPrintf("test%d", seed));
1128ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
1138ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1148ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}  // namespace
1158ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1168ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshnamespace search_engines_helper {
1178ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1188ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar GaneshTemplateURLService* GetServiceForBrowserContext(int profile_index) {
1198ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return TemplateURLServiceFactory::GetForProfile(
1208ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      test()->GetProfile(profile_index));
1218ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
1228ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1238ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar GaneshTemplateURLService* GetVerifierService() {
1248ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return TemplateURLServiceFactory::GetForProfile(test()->verifier());
1258ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
1268ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1278ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshbool ServiceMatchesVerifier(int profile_index) {
1288ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* verifier = GetVerifierService();
1298ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* other = GetServiceForBrowserContext(profile_index);
1308ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1318ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(verifier);
1328ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  CHECK(other);
1338ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1348ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService::TemplateURLVector verifier_turls =
1358ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      verifier->GetTemplateURLs();
1368ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  if (verifier_turls.size() != other->GetTemplateURLs().size()) {
1378ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    LOG(ERROR) << "Verifier and other service have a different count of TURLs: "
1388ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << verifier_turls.size() << " vs "
1398ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh               << other->GetTemplateURLs().size() << " respectively.";
1408ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    return false;
1410682809ad08db284d7110aab44108d5e9c310e6bdestradaa  }
1420682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1430682809ad08db284d7110aab44108d5e9c310e6bdestradaa  for (size_t i = 0; i < verifier_turls.size(); ++i) {
144c2b74b73a11b0a9aa4f29b28554292cc0947464bWonsik Kim    const TemplateURL* verifier_turl = verifier_turls.at(i);
145c2b74b73a11b0a9aa4f29b28554292cc0947464bWonsik Kim    CHECK(verifier_turl);
1460682809ad08db284d7110aab44108d5e9c310e6bdestradaa    const TemplateURL* other_turl = other->GetTemplateURLForKeyword(
1470682809ad08db284d7110aab44108d5e9c310e6bdestradaa        verifier_turl->keyword());
1480682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1490682809ad08db284d7110aab44108d5e9c310e6bdestradaa    if (!other_turl) {
1500682809ad08db284d7110aab44108d5e9c310e6bdestradaa      LOG(ERROR) << "The other service did not contain a TURL with keyword: "
1510682809ad08db284d7110aab44108d5e9c310e6bdestradaa                 << verifier_turl->keyword();
1520682809ad08db284d7110aab44108d5e9c310e6bdestradaa      return false;
1530682809ad08db284d7110aab44108d5e9c310e6bdestradaa    }
1540682809ad08db284d7110aab44108d5e9c310e6bdestradaa    if (!TURLsMatch(verifier_turl, other_turl))
1550682809ad08db284d7110aab44108d5e9c310e6bdestradaa      return false;
1560682809ad08db284d7110aab44108d5e9c310e6bdestradaa  }
1578ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1588ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  return true;
1598ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh}
1608ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1618ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshbool AllServicesMatch() {
1628ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  // Use 0 as the baseline.
1638ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  if (test()->use_verifier() && !ServiceMatchesVerifier(0)) {
1648ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    LOG(ERROR) << "TemplateURLService 0 does not match verifier.";
1658ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    return false;
1668ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  }
1678ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh
1688ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  for (int it = 1; it < test()->num_clients(); ++it) {
1690682809ad08db284d7110aab44108d5e9c310e6bdestradaa    if (!ServicesMatch(0, it)) {
1700682809ad08db284d7110aab44108d5e9c310e6bdestradaa      LOG(ERROR) << "TemplateURLService " << it << " does not match with "
1710682809ad08db284d7110aab44108d5e9c310e6bdestradaa                 << "service 0.";
1720682809ad08db284d7110aab44108d5e9c310e6bdestradaa      return false;
1730682809ad08db284d7110aab44108d5e9c310e6bdestradaa    }
1740682809ad08db284d7110aab44108d5e9c310e6bdestradaa  }
1750682809ad08db284d7110aab44108d5e9c310e6bdestradaa  return true;
1760682809ad08db284d7110aab44108d5e9c310e6bdestradaa}
1770682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1780682809ad08db284d7110aab44108d5e9c310e6bdestradaaTemplateURL* CreateTestTemplateURL(Profile* profile, int seed) {
1790682809ad08db284d7110aab44108d5e9c310e6bdestradaa  return CreateTestTemplateURL(profile, seed, CreateKeyword(seed),
1800682809ad08db284d7110aab44108d5e9c310e6bdestradaa                               base::StringPrintf("0000-0000-0000-%04d", seed));
181da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh}
1820682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1830682809ad08db284d7110aab44108d5e9c310e6bdestradaaTemplateURL* CreateTestTemplateURL(Profile* profile,
1848ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh                                   int seed,
1850682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   const string16& keyword,
1860682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   const std::string& sync_guid) {
1870682809ad08db284d7110aab44108d5e9c310e6bdestradaa  return CreateTestTemplateURL(profile, seed, keyword,
1880682809ad08db284d7110aab44108d5e9c310e6bdestradaa      base::StringPrintf("http://www.test%d.com/", seed), sync_guid);
1890682809ad08db284d7110aab44108d5e9c310e6bdestradaa}
1900682809ad08db284d7110aab44108d5e9c310e6bdestradaa
1910682809ad08db284d7110aab44108d5e9c310e6bdestradaaTemplateURL* CreateTestTemplateURL(Profile* profile,
1920682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   int seed,
1930682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   const string16& keyword,
1940682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   const std::string& url,
1950682809ad08db284d7110aab44108d5e9c310e6bdestradaa                                   const std::string& sync_guid) {
1960682809ad08db284d7110aab44108d5e9c310e6bdestradaa  TemplateURLData data;
1970682809ad08db284d7110aab44108d5e9c310e6bdestradaa  data.short_name = CreateKeyword(seed);
198da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  data.SetKeyword(keyword);
1990682809ad08db284d7110aab44108d5e9c310e6bdestradaa  data.SetURL(url);
2000682809ad08db284d7110aab44108d5e9c310e6bdestradaa  data.favicon_url = GURL("http://favicon.url");
2010682809ad08db284d7110aab44108d5e9c310e6bdestradaa  data.safe_for_autoreplace = true;
202da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  data.date_created = base::Time::FromTimeT(100);
203da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  data.last_modified = base::Time::FromTimeT(100);
204da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  data.prepopulate_id = 999999;
205da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  data.sync_guid = sync_guid;
206da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  return new TemplateURL(profile, data);
207da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh}
208da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh
209da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganeshvoid AddSearchEngine(int profile_index, int seed) {
210da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  Profile* profile = test()->GetProfile(profile_index);
211da6508954a492f3dd4397e70e4fa08ee54bd2741Jaikumar Ganesh  TemplateURLServiceFactory::GetForProfile(profile)->Add(
2128ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh      CreateTestTemplateURL(profile, seed));
2138ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  if (test()->use_verifier())
2148ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    GetVerifierService()->Add(CreateTestTemplateURL(profile, seed));
215f9a274c9b8578dda6afeda422bff18b1577028b9destradaa}
216f9a274c9b8578dda6afeda422bff18b1577028b9destradaa
217f9a274c9b8578dda6afeda422bff18b1577028b9destradaavoid EditSearchEngine(int profile_index,
218f9a274c9b8578dda6afeda422bff18b1577028b9destradaa                      const string16& keyword,
219f9a274c9b8578dda6afeda422bff18b1577028b9destradaa                      const string16& short_name,
220f9a274c9b8578dda6afeda422bff18b1577028b9destradaa                      const string16& new_keyword,
2218ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh                      const std::string& url) {
2228ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  DCHECK(!url.empty());
2238ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* service = GetServiceForBrowserContext(profile_index);
224f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  TemplateURL* turl = service->GetTemplateURLForKeyword(keyword);
225f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  EXPECT_TRUE(turl);
226f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  ASSERT_FALSE(new_keyword.empty());
227f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  service->ResetTemplateURL(turl, short_name, new_keyword, url);
228f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  // Make sure we do the same on the verifier.
2298ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  if (test()->use_verifier()) {
2308ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh    TemplateURL* verifier_turl =
231f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun        GetVerifierService()->GetTemplateURLForKeyword(keyword);
232f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun    EXPECT_TRUE(verifier_turl);
233f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun    GetVerifierService()->ResetTemplateURL(verifier_turl, short_name,
234f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun                                           new_keyword, url);
235f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun  }
236f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun}
237f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sun
238f8f085c51b5f8b180ad964d0385b34f8fa97cd32Zhentao Sunvoid DeleteSearchEngineBySeed(int profile_index, int seed) {
2398ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* service = GetServiceForBrowserContext(profile_index);
2408ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  string16 keyword(CreateKeyword(seed));
2418ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURL* turl = service->GetTemplateURLForKeyword(keyword);
2428ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  EXPECT_TRUE(turl);
2438ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  service->Remove(turl);
244f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  // Make sure we do the same on the verifier.
245f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  if (test()->use_verifier()) {
246f9a274c9b8578dda6afeda422bff18b1577028b9destradaa    TemplateURL* verifier_turl =
247f9a274c9b8578dda6afeda422bff18b1577028b9destradaa        GetVerifierService()->GetTemplateURLForKeyword(keyword);
248f9a274c9b8578dda6afeda422bff18b1577028b9destradaa    EXPECT_TRUE(verifier_turl);
249f9a274c9b8578dda6afeda422bff18b1577028b9destradaa    GetVerifierService()->Remove(verifier_turl);
250f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  }
251f9a274c9b8578dda6afeda422bff18b1577028b9destradaa}
252f9a274c9b8578dda6afeda422bff18b1577028b9destradaa
2538ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganeshvoid ChangeDefaultSearchProvider(int profile_index, int seed) {
2548ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURLService* service = GetServiceForBrowserContext(profile_index);
2558ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  ASSERT_TRUE(service);
2568ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  TemplateURL* turl = service->GetTemplateURLForKeyword(CreateKeyword(seed));
2578ce470dd4ba0608abb6b5eae117cefca927af96bJaikumar Ganesh  ASSERT_TRUE(turl);
2580682809ad08db284d7110aab44108d5e9c310e6bdestradaa  service->SetDefaultSearchProvider(turl);
2590682809ad08db284d7110aab44108d5e9c310e6bdestradaa  if (test()->use_verifier()) {
2600682809ad08db284d7110aab44108d5e9c310e6bdestradaa    TemplateURL* verifier_turl =
2610682809ad08db284d7110aab44108d5e9c310e6bdestradaa        GetVerifierService()->GetTemplateURLForKeyword(CreateKeyword(seed));
2620682809ad08db284d7110aab44108d5e9c310e6bdestradaa    ASSERT_TRUE(verifier_turl);
2630682809ad08db284d7110aab44108d5e9c310e6bdestradaa    GetVerifierService()->SetDefaultSearchProvider(verifier_turl);
264f9a274c9b8578dda6afeda422bff18b1577028b9destradaa  }
2650682809ad08db284d7110aab44108d5e9c310e6bdestradaa}
2660682809ad08db284d7110aab44108d5e9c310e6bdestradaa
2670682809ad08db284d7110aab44108d5e9c310e6bdestradaa}  // namespace search_engines_helper
2680682809ad08db284d7110aab44108d5e9c310e6bdestradaa