template_url_prepopulate_data_unittest.cc revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/search_engines/prepopulated_engines.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/search_terms_data.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef testing::Test TemplateURLPrepopulateDataTest;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kCountryIds[] = {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'A'<<8|'D', 'A'<<8|'E', 'A'<<8|'F', 'A'<<8|'G', 'A'<<8|'I',
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'A'<<8|'L', 'A'<<8|'M', 'A'<<8|'N', 'A'<<8|'O', 'A'<<8|'Q',
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'A'<<8|'R', 'A'<<8|'S', 'A'<<8|'T', 'A'<<8|'U', 'A'<<8|'W',
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'A'<<8|'X', 'A'<<8|'Z', 'B'<<8|'A', 'B'<<8|'B', 'B'<<8|'D',
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'B'<<8|'E', 'B'<<8|'F', 'B'<<8|'G', 'B'<<8|'H', 'B'<<8|'I',
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'B'<<8|'J', 'B'<<8|'M', 'B'<<8|'N', 'B'<<8|'O', 'B'<<8|'R',
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'B'<<8|'S', 'B'<<8|'T', 'B'<<8|'V', 'B'<<8|'W', 'B'<<8|'Y',
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'B'<<8|'Z', 'C'<<8|'A', 'C'<<8|'C', 'C'<<8|'D', 'C'<<8|'F',
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'C'<<8|'G', 'C'<<8|'H', 'C'<<8|'I', 'C'<<8|'K', 'C'<<8|'L',
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'C'<<8|'M', 'C'<<8|'N', 'C'<<8|'O', 'C'<<8|'R', 'C'<<8|'U',
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'C'<<8|'V', 'C'<<8|'X', 'C'<<8|'Y', 'C'<<8|'Z', 'D'<<8|'E',
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'D'<<8|'J', 'D'<<8|'K', 'D'<<8|'M', 'D'<<8|'O', 'D'<<8|'Z',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'E'<<8|'C', 'E'<<8|'E', 'E'<<8|'G', 'E'<<8|'R', 'E'<<8|'S',
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'E'<<8|'T', 'F'<<8|'I', 'F'<<8|'J', 'F'<<8|'K', 'F'<<8|'M',
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'F'<<8|'O', 'F'<<8|'R', 'G'<<8|'A', 'G'<<8|'B', 'G'<<8|'D',
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'G'<<8|'E', 'G'<<8|'F', 'G'<<8|'G', 'G'<<8|'H', 'G'<<8|'I',
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'G'<<8|'L', 'G'<<8|'M', 'G'<<8|'N', 'G'<<8|'P', 'G'<<8|'Q',
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'G'<<8|'R', 'G'<<8|'S', 'G'<<8|'T', 'G'<<8|'U', 'G'<<8|'W',
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'G'<<8|'Y', 'H'<<8|'K', 'H'<<8|'M', 'H'<<8|'N', 'H'<<8|'R',
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'H'<<8|'T', 'H'<<8|'U', 'I'<<8|'D', 'I'<<8|'E', 'I'<<8|'L',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'I'<<8|'M', 'I'<<8|'N', 'I'<<8|'O', 'I'<<8|'P', 'I'<<8|'Q',
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'I'<<8|'R', 'I'<<8|'S', 'I'<<8|'T', 'J'<<8|'E', 'J'<<8|'M',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'J'<<8|'O', 'J'<<8|'P', 'K'<<8|'E', 'K'<<8|'G', 'K'<<8|'H',
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'K'<<8|'I', 'K'<<8|'M', 'K'<<8|'N', 'K'<<8|'P', 'K'<<8|'R',
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'K'<<8|'W', 'K'<<8|'Y', 'K'<<8|'Z', 'L'<<8|'A', 'L'<<8|'B',
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'L'<<8|'C', 'L'<<8|'I', 'L'<<8|'K', 'L'<<8|'R', 'L'<<8|'S',
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'L'<<8|'T', 'L'<<8|'U', 'L'<<8|'V', 'L'<<8|'Y', 'M'<<8|'A',
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'M'<<8|'C', 'M'<<8|'D', 'M'<<8|'E', 'M'<<8|'G', 'M'<<8|'H',
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'M'<<8|'K', 'M'<<8|'L', 'M'<<8|'M', 'M'<<8|'N', 'M'<<8|'O',
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'M'<<8|'P', 'M'<<8|'Q', 'M'<<8|'R', 'M'<<8|'S', 'M'<<8|'T',
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'M'<<8|'U', 'M'<<8|'V', 'M'<<8|'W', 'M'<<8|'X', 'M'<<8|'Y',
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'M'<<8|'Z', 'N'<<8|'A', 'N'<<8|'C', 'N'<<8|'E', 'N'<<8|'F',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'N'<<8|'G', 'N'<<8|'I', 'N'<<8|'L', 'N'<<8|'O', 'N'<<8|'P',
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'N'<<8|'R', 'N'<<8|'U', 'N'<<8|'Z', 'O'<<8|'M', 'P'<<8|'A',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'P'<<8|'E', 'P'<<8|'F', 'P'<<8|'G', 'P'<<8|'H', 'P'<<8|'K',
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'P'<<8|'L', 'P'<<8|'M', 'P'<<8|'N', 'P'<<8|'R', 'P'<<8|'S',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'P'<<8|'T', 'P'<<8|'W', 'P'<<8|'Y', 'Q'<<8|'A', 'R'<<8|'E',
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'R'<<8|'O', 'R'<<8|'S', 'R'<<8|'U', 'R'<<8|'W', 'S'<<8|'A',
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'S'<<8|'B', 'S'<<8|'C', 'S'<<8|'D', 'S'<<8|'E', 'S'<<8|'G',
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'S'<<8|'H', 'S'<<8|'I', 'S'<<8|'J', 'S'<<8|'K', 'S'<<8|'L',
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'S'<<8|'M', 'S'<<8|'N', 'S'<<8|'O', 'S'<<8|'R', 'S'<<8|'T',
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'S'<<8|'V', 'S'<<8|'Y', 'S'<<8|'Z', 'T'<<8|'C', 'T'<<8|'D',
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'T'<<8|'F', 'T'<<8|'G', 'T'<<8|'H', 'T'<<8|'J', 'T'<<8|'K',
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'T'<<8|'L', 'T'<<8|'M', 'T'<<8|'N', 'T'<<8|'O', 'T'<<8|'R',
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'T'<<8|'T', 'T'<<8|'V', 'T'<<8|'W', 'T'<<8|'Z', 'U'<<8|'A',
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'U'<<8|'G', 'U'<<8|'M', 'U'<<8|'S', 'U'<<8|'Y', 'U'<<8|'Z',
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'V'<<8|'A', 'V'<<8|'C', 'V'<<8|'E', 'V'<<8|'G', 'V'<<8|'I',
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'V'<<8|'N', 'V'<<8|'U', 'W'<<8|'F', 'W'<<8|'S', 'Y'<<8|'E',
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'Y'<<8|'T', 'Z'<<8|'A', 'Z'<<8|'M', 'Z'<<8|'W', -1 };
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies the set of prepopulate data doesn't contain entries with duplicate
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ids.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, UniqueIDs) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kCountryIds); ++i) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile.GetPrefs()->SetInteger(prefs::kCountryIDAtInstall, kCountryIds[i]);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ScopedVector<TemplateURL> urls;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t default_index;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &urls.get(),
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                       &default_index);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::set<int> unique_ids;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t turl_i = 0; turl_i < urls.size(); ++turl_i) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(unique_ids.find(urls[turl_i]->prepopulate_id()) ==
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  unique_ids.end());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      unique_ids.insert(urls[turl_i]->prepopulate_id());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that default search providers from the preferences file
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// override the built-in ones.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrefs) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile;
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverridesVersion,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     Value::CreateIntegerValue(1));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* overrides = new ListValue;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> entry(new DictionaryValue);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set only the minimal required settings for a search provider configuration.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("name", "foo");
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("keyword", "fook");
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("search_url", "http://foo.com/s?q={searchTerms}");
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("favicon_url", "http://foi.com/favicon.ico");
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("encoding", "UTF-8");
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetInteger("id", 1001);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides->Append(entry->DeepCopy());
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int version = TemplateURLPrepopulateData::GetDataVersion(prefs);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, version);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedVector<TemplateURL> t_urls;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t default_index;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &t_urls.get(),
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     &default_index);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1u, t_urls.size());
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), t_urls[0]->short_name());
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("fook"), t_urls[0]->keyword());
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("foo.com", t_urls[0]->url_ref().GetHost());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("foi.com", t_urls[0]->favicon_url().host());
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1u, t_urls[0]->input_encodings().size());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1001, t_urls[0]->prepopulate_id());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(t_urls[0]->suggestions_url().empty());
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(t_urls[0]->instant_url().empty());
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, t_urls[0]->alternate_urls().size());
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(t_urls[0]->search_terms_replacement_key().empty());
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test the optional settings too.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("suggest_url", "http://foo.com/suggest?q={searchTerms}");
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("instant_url", "http://foo.com/instant?q={searchTerms}");
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* alternate_urls = new ListValue;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alternate_urls->AppendString("http://foo.com/alternate?q={searchTerms}");
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->Set("alternate_urls", alternate_urls);
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  entry->SetString("search_terms_replacement_key", "espv");
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides = new ListValue;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides->Append(entry->DeepCopy());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  t_urls.clear();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &t_urls.get(),
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     &default_index);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1u, t_urls.size());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), t_urls[0]->short_name());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("fook"), t_urls[0]->keyword());
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("foo.com", t_urls[0]->url_ref().GetHost());
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("foi.com", t_urls[0]->favicon_url().host());
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1u, t_urls[0]->input_encodings().size());
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1001, t_urls[0]->prepopulate_id());
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://foo.com/suggest?q={searchTerms}",
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            t_urls[0]->suggestions_url());
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://foo.com/instant?q={searchTerms}",
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            t_urls[0]->instant_url());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1u, t_urls[0]->alternate_urls().size());
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://foo.com/alternate?q={searchTerms}",
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            t_urls[0]->alternate_urls()[0]);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("espv", t_urls[0]->search_terms_replacement_key());
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test that subsequent providers are loaded even if an intermediate
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provider has an incomplete configuration.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides = new ListValue;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides->Append(entry->DeepCopy());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetInteger("id", 1002);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("name", "bar");
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("keyword", "bark");
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  entry->SetString("encoding", std::string());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides->Append(entry->DeepCopy());
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetInteger("id", 1003);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("name", "baz");
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("keyword", "bazk");
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry->SetString("encoding", "UTF-8");
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  overrides->Append(entry->DeepCopy());
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  t_urls.clear();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &t_urls.get(),
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     &default_index);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2u, t_urls.size());
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, ClearProvidersFromPrefs) {
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TestingProfile profile;
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TestingPrefServiceSyncable* prefs = profile.GetTestingPrefService();
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverridesVersion,
189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                     Value::CreateIntegerValue(1));
190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ListValue* overrides = new ListValue;
191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DictionaryValue* entry(new DictionaryValue);
192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Set only the minimal required settings for a search provider configuration.
193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetString("name", "foo");
194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetString("keyword", "fook");
195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetString("search_url", "http://foo.com/s?q={searchTerms}");
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetString("favicon_url", "http://foi.com/favicon.ico");
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetString("encoding", "UTF-8");
198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  entry->SetInteger("id", 1001);
199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  overrides->Append(entry);
200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides);
201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int version = TemplateURLPrepopulateData::GetDataVersion(prefs);
203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(1, version);
204868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // This call removes the above search engine.
206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TemplateURLPrepopulateData::ClearPrepopulatedEnginesInPrefs(&profile);
207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
208868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  version = TemplateURLPrepopulateData::GetDataVersion(prefs);
209868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(TemplateURLPrepopulateData::kCurrentDataVersion, version);
210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScopedVector<TemplateURL> t_urls;
212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  size_t default_index;
213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &t_urls.get(),
214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                                     &default_index);
215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(t_urls.empty());
216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  for (size_t i = 0; i < t_urls.size(); ++i) {
217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_NE(ASCIIToUTF16("foo"), t_urls[i]->short_name());
218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_NE(ASCIIToUTF16("fook"), t_urls[i]->keyword());
219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_NE("foi.com", t_urls[i]->favicon_url().host());
220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_NE("foo.com", t_urls[i]->url_ref().GetHost());
221868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_NE(1001, t_urls[i]->prepopulate_id());
222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Ensures the default URL is Google and has the optional fields filled.
224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("Google"), t_urls[default_index]->short_name());
225868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(t_urls[default_index]->suggestions_url().empty());
226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_FALSE(t_urls[default_index]->instant_url().empty());
2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(t_urls[default_index]->image_url().empty());
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(t_urls[default_index]->image_url_post_params().empty());
229ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      SEARCH_ENGINE_GOOGLE,
231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      TemplateURLPrepopulateData::GetEngineType(t_urls[default_index]->url()));
232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that built-in search providers are processed correctly.
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrepopulated) {
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Use United States.
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      switches::kCountry, "US");
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfile profile;
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ScopedVector<TemplateURL> t_urls;
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t default_index;
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(&profile, &t_urls.get(),
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                     &default_index);
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ensure all the URLs have the required fields populated.
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(t_urls.empty());
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < t_urls.size(); ++i) {
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(t_urls[i]->short_name().empty());
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(t_urls[i]->keyword().empty());
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(t_urls[i]->favicon_url().host().empty());
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(t_urls[i]->url_ref().GetHost().empty());
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_FALSE(t_urls[i]->input_encodings().empty());
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_GT(t_urls[i]->prepopulate_id(), 0);
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ensures the default URL is Google and has the optional fields filled.
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("Google"), t_urls[default_index]->short_name());
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(t_urls[default_index]->suggestions_url().empty());
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(t_urls[default_index]->instant_url().empty());
2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(t_urls[default_index]->image_url().empty());
2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(t_urls[default_index]->image_url_post_params().empty());
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Expect at least 2 alternate_urls.
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This caught a bug with static initialization of arrays, so leave this in.
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_GT(t_urls[default_index]->alternate_urls().size(), 1u);
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (size_t i = 0; i < t_urls[default_index]->alternate_urls().size(); ++i)
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(t_urls[default_index]->alternate_urls()[i].empty());
267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(
268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      SEARCH_ENGINE_GOOGLE,
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TemplateURLPrepopulateData::GetEngineType(t_urls[default_index]->url()));
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(t_urls[default_index]->search_terms_replacement_key().empty());
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, GetEngineTypeBasic) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_OTHER,
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            TemplateURLPrepopulateData::GetEngineType("http://example.com/"));
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_ASK,
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            TemplateURLPrepopulateData::GetEngineType("http://www.ask.com/"));
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_OTHER,
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       TemplateURLPrepopulateData::GetEngineType("http://search.atlas.cz/"));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_GOOGLE,
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       TemplateURLPrepopulateData::GetEngineType("http://www.google.com/"));
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(TemplateURLPrepopulateDataTest, GetEngineTypeAdvanced) {
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Google URLs in different forms.
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* kGoogleURLs[] = {
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Original with google:baseURL:
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{google:baseURL}search?q={searchTerms}&{google:RLZ}"
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}"
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "sourceid=chrome&ie={inputEncoding}",
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Custom with google.com and reordered query params:
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "http://google.com/search?{google:RLZ}{google:originalQueryForSuggestion}"
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "{google:searchFieldtrialParameter}"
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "sourceid=chrome&ie={inputEncoding}&q={searchTerms}",
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Custom with a country TLD and almost no query params:
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "http://www.google.ru/search?q={searchTerms}"
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kGoogleURLs); ++i) {
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(SEARCH_ENGINE_GOOGLE,
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              TemplateURLPrepopulateData::GetEngineType(kGoogleURLs[i]));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
302ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Non-Google URLs.
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* kYahooURLs[] = {
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://search.yahoo.com/search?"
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "ei={inputEncoding}&fr=crmas&p={searchTerms}",
307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      "http://search.yahoo.com/search?p={searchTerms}",
308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      // Aggressively match types by checking just TLD+1.
309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      "http://someothersite.yahoo.com/",
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kYahooURLs); ++i) {
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(SEARCH_ENGINE_YAHOO,
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              TemplateURLPrepopulateData::GetEngineType(kYahooURLs[i]));
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URLs for engines not present in country-specific lists.
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_NIGMA,
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            TemplateURLPrepopulateData::GetEngineType(
319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                "http://nigma.ru/?s={searchTerms}&arg1=value1"));
320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Also test matching against alternate URLs (and TLD+1 matching).
321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(SEARCH_ENGINE_SOFTONIC,
322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            TemplateURLPrepopulateData::GetEngineType(
323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                "http://test.softonic.com.br/?{searchTerms}"));
324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Search URL for which no prepopulated search provider exists.
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_OTHER,
327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            TemplateURLPrepopulateData::GetEngineType(
328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                "http://example.net/search?q={searchTerms}"));
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(SEARCH_ENGINE_OTHER,
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            TemplateURLPrepopulateData::GetEngineType("invalid:search:url"));
331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // URL that doesn't look Google-related, but matches a Google base URL
333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // specified on the command line.
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const std::string foo_url("http://www.foo.com/search?q={searchTerms}");
335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(SEARCH_ENGINE_OTHER,
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            TemplateURLPrepopulateData::GetEngineType(foo_url));
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CommandLine::ForCurrentProcess()->AppendSwitchASCII(switches::kGoogleBaseURL,
338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                      "http://www.foo.com/");
339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(SEARCH_ENGINE_GOOGLE,
340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            TemplateURLPrepopulateData::GetEngineType(foo_url));
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, GetLogoURLGoogle) {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLData data;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.SetURL("http://www.google.com/");
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURL turl(NULL, data);
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL logo_100_url = TemplateURLPrepopulateData::GetLogoURL(
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      turl, TemplateURLPrepopulateData::LOGO_100_PERCENT);
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL logo_200_url = TemplateURLPrepopulateData::GetLogoURL(
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      turl, TemplateURLPrepopulateData::LOGO_200_PERCENT);
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("www.google.com", logo_100_url.host());
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("www.google.com", logo_200_url.host());
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(logo_100_url, logo_200_url);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, GetLogoURLUnknown) {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLData data;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.SetURL("http://webalta.ru/");
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURL turl(NULL, data);
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL logo_url = TemplateURLPrepopulateData::GetLogoURL(
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      turl, TemplateURLPrepopulateData::LOGO_100_PERCENT);
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(logo_url.is_empty());
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TemplateURLPrepopulateDataTest, GetLogoURLInvalid) {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLData data;
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data.SetURL("http://invalid:search:url/");
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURL turl(NULL, data);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL logo_url = TemplateURLPrepopulateData::GetLogoURL(
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      turl, TemplateURLPrepopulateData::LOGO_100_PERCENT);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(logo_url.is_empty());
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
376