1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 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) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_prepopulate_data.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/stl_util.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/search_engines/prepopulated_engines.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_engines_pref_names.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef IN // On Windows, windef.h defines this, which screws up "India" cases. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_cftyperef.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace TemplateURLPrepopulateData { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Helpers -------------------------------------------------------------------- 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace { 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NOTE: You should probably not change the data in this file without changing 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |kCurrentDataVersion| in prepopulated_engines.json. See comments in 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// GetDataVersion() below! 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Put the engines within each country in order with most interesting/important 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// first. The default will be the first engine. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Default (for countries with no better engine set) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_default[] = 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// United Arab Emirates 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_AE[] = 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Albania 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_AL[] = 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_en_XA, &bing_ar_XA, }; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Argentina 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_AR[] = 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_es_AR, &yahoo_ar, }; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Austria 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_AT[] = 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_de_AT, &yahoo_at, }; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Australia 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_AU[] = 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_en_AU, &yahoo_au, }; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bosnia and Herzegovina 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BA[] = 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Belgium 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BE[] = 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { &google, &bing_nl_BE, &bing_fr_BE, &yahoo, &yahoo_fr, }; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bulgaria 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BG[] = 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &ask, }; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bahrain 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BH[] = 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_en_XA, &bing_ar_XA, }; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Burundi 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BI[] = 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brunei 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BN[] = 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_my, &bing, }; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bolivia 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BO[] = 96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_es_XL, &yahoo, }; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brazil 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BR[] = 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &ask_br, &bing_pt_BR, &yahoo_br, }; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Belarus 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BY[] = 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_ru, &bing_ru_RU, }; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Belize 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_BZ[] = 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing, }; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Canada 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CA[] = 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_CA, &bing_fr_CA, &ask, &yahoo_ca, &yahoo_qc, }; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Switzerland 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CH[] = 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_de_CH, &bing_fr_CH, &yahoo_ch, }; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chile 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CL[] = 120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_es_CL, &yahoo_cl, }; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// China 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CN[] = 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { &google, &baidu, &sogou, }; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Colombia 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CO[] = 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo_co, }; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Costa Rica 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CR[] = 132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Czech Republic 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_CZ[] = 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &seznam, &bing, }; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Germany 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_DE[] = 140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_de_DE, &yahoo_de }; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Denmark 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_DK[] = 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_da_DK, &yahoo_dk, }; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dominican Republic 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_DO[] = 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Algeria 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_DZ[] = 152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &bing_en_XA, &yahoo_maktoob, }; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ecuador 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_EC[] = 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo, }; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Estonia 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_EE[] = 160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Egypt 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_EG[] = 164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Spain 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_ES[] = 168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_es_ES, &yahoo_es, }; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Faroe Islands 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_FO[] = 172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_da_DK, &ask, }; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Finland 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_FI[] = 176ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_fi_FI, &yahoo_fi, }; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// France 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_FR[] = 180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_fr_FR, &yahoo_fr, }; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// United Kingdom 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_GB[] = 184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_GB, &yahoo_uk, &ask_uk, }; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Greece 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_GR[] = 188ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo_gr, }; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Guatemala 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_GT[] = 192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Hong Kong 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_HK[] = 196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_hk, &baidu, &bing_zh_HK, }; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Honduras 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_HN[] = 200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Croatia 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_HR[] = 204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Hungary 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_HU[] = 208ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Indonesia 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_ID[] = 212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_id, &bing, }; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ireland 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IE[] = 216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_IE, &yahoo_uk, }; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Israel 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IL[] = 220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing, }; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// India 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IN[] = 224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_IN, &yahoo_in, }; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Iraq 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IQ[] = 228ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Iran 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IR[] = 232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing, }; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Iceland 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IS[] = 236ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Italy 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_IT[] = 240ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &virgilio, &bing_it_IT, }; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Jamaica 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_JM[] = 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Jordan 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_JO[] = 248ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Japan 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_JP[] = 252ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_jp, &bing_ja_JP, }; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Kenya 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_KE[] = 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Kuwait 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_KW[] = 260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// South Korea 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_KR[] = 264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { &google, &naver, &daum, }; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Kazakhstan 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_KZ[] = 268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Lebanon 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LB[] = 272ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Liechtenstein 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LI[] = 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_de_DE, &yahoo_de, }; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Lithuania 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LT[] = 280ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yandex_ru, }; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Luxembourg 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LU[] = 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_fr_FR, &yahoo_fr, }; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Latvia 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LV[] = 288ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yandex_ru, &bing, }; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Libya 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_LY[] = 292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Morocco 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MA[] = 296ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &bing_en_XA, &yahoo_maktoob, }; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Monaco 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MC[] = 300ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_fr, &bing_fr_FR, }; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Moldova 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MD[] = 304ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Montenegro 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_ME[] = 308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Macedonia 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MK[] = 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mexico 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MX[] = 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_MX, &yahoo_mx, }; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Malaysia 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_MY[] = 320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_my, &bing, }; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Nicaragua 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_NI[] = 324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Netherlands 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_NL[] = 328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_nl, &vinden, }; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Norway 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_NO[] = 332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_nb_NO, &kvasir, }; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// New Zealand 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_NZ[] = 336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_NZ, &yahoo_nz, }; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Oman 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_OM[] = 340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &yahoo_maktoob, &bing_en_XA, }; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Panama 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PA[] = 344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Peru 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PE[] = 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo_pe, }; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Philippines 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PH[] = 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo_ph, &bing_en_PH, }; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Pakistan 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PK[] = 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Puerto Rico 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PR[] = 360ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Poland 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PL[] = 364ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &onet, &bing_pl_PL, }; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Portugal 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PT[] = 368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_pt_PT, &yahoo, }; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Paraguay 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_PY[] = 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo, }; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Qatar 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_QA[] = 376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Romania 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_RO[] = 380ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_ro, &bing, }; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Serbia 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_RS[] = 384ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Russia 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_RU[] = 388ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yandex_ru, &mail_ru, }; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Rwanda 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_RW[] = 392ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Saudi Arabia 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SA[] = 396ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_maktoob, &bing_ar_XA, &bing_en_XA, }; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sweden 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SE[] = 400ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_sv_SE, &yahoo_se, }; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Singapore 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SG[] = 404ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_sg, &bing_en_SG, }; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Slovenia 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SI[] = 408ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &najdi, &ask, }; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Slovakia 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SK[] = 412ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// El Salvador 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SV[] = 416ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo, &bing_es_XL, }; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Syria 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_SY[] = 420ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &bing_en_XA, &yahoo_maktoob, }; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Thailand 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TH[] = 424ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_th, &bing, }; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tunisia 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TN[] = 428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &bing_en_XA, &yahoo_maktoob, }; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Turkey 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TR[] = 432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { &google, &bing_tr_TR, &yahoo_tr, &yandex_tr, }; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Trinidad and Tobago 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TT[] = 436ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, }; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Taiwan 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TW[] = 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo_tw, &bing_zh_TW, }; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tanzania 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_TZ[] = 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &yahoo, &bing, }; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ukraine 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_UA[] = 448ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yandex_ua, &bing_ru_RU, }; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// United States 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_US[] = 452ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_en_US, &yahoo, &aol, &ask, }; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Uruguay 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_UY[] = 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo, }; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Venezuela 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_VE[] = 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { &google, &bing_es_XL, &yahoo_ve, }; 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Vietnam 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_VN[] = 464ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &yahoo_vn, &bing, }; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Yemen 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_YE[] = 468ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing_ar_XA, &bing_en_XA, &yahoo_maktoob, }; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// South Africa 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_ZA[] = 472010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { &google, &bing, &yahoo, }; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Zimbabwe 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PrepopulatedEngine* engines_ZW[] = 476ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch { &google, &bing, &yahoo, &ask, }; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A list of all the engines that we know about. 479ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochconst PrepopulatedEngine* kAllEngines[] = { 480ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Prepopulated engines: 481ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &aol, &ask, &ask_br, &ask_uk, &baidu, 482ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing, &bing_ar_XA, &bing_da_DK, &bing_de_AT, &bing_de_CH, 483ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_de_DE, &bing_en_AU, &bing_en_CA, &bing_en_GB, &bing_en_IE, 484ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_en_IN, &bing_en_NZ, &bing_en_PH, &bing_en_SG, &bing_en_US, 485ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_en_XA, &bing_es_AR, &bing_es_CL, &bing_es_ES, &bing_es_MX, 486ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_es_XL, &bing_fi_FI, &bing_fr_BE, &bing_fr_CA, &bing_fr_CH, 487ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_fr_FR, &bing_it_IT, &bing_ja_JP, &bing_lv_LV, &bing_nb_NO, 488ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_nl_BE, &bing_pl_PL, &bing_pt_BR, &bing_pt_PT, &bing_ru_RU, 489ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &bing_sv_SE, &bing_tr_TR, &bing_zh_HK, &bing_zh_TW, &daum, 490010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &google, &kvasir, &mail_ru, &najdi, &naver, 491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &onet, &seznam, &sogou, &vinden, &virgilio, 492010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo, &yahoo_ar, &yahoo_at, &yahoo_au, &yahoo_br, 493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_ca, &yahoo_ch, &yahoo_cl, &yahoo_co, &yahoo_de, 494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_dk, &yahoo_es, &yahoo_fi, &yahoo_fr, &yahoo_gr, 495010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_hk, &yahoo_id, &yahoo_in, &yahoo_jp, &yahoo_maktoob, 496010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_mx, &yahoo_my, &yahoo_nl, &yahoo_nz, &yahoo_pe, 497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_ph, &yahoo_qc, &yahoo_ro, &yahoo_ru, &yahoo_se, 498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_sg, &yahoo_th, &yahoo_tr, &yahoo_tw, &yahoo_uk, 499010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &yahoo_ve, &yahoo_vn, &yandex_ru, &yandex_tr, &yandex_ua, 500ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 501ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // UMA-only engines: 502ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &atlas_cz, &atlas_sk, &avg, &babylon, &conduit, 503ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &delfi_lt, &delfi_lv, &delta, &funmoods, &goo, 504ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &imesh, &iminent, &in, &incredibar, &libero, 505ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &neti, &nigma, &ok, &rambler, &sapo, 506ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &search_results, &searchnu, &snapdo, &softonic, &sweetim, 507ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &terra_ar, &terra_es, &tut, &walla, &wp, 508effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &zoznam, 509ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}; 510ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Please refer to ISO 3166-1 for information about the two-character country 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// codes; http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 is useful. In the 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// following (C++) code, we pack the two letters of the country code into an int 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// value we call the CountryID. 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kCountryIDUnknown = -1; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline int CountryCharsToCountryID(char c1, char c2) { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return c1 << 8 | c2; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int CountryCharsToCountryIDWithUpdate(char c1, char c2) { 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SPECIAL CASE: In 2003, Yugoslavia renamed itself to Serbia and Montenegro. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Serbia and Montenegro dissolved their union in June 2006. Yugoslavia was 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ISO 'YU' and Serbia and Montenegro were ISO 'CS'. Serbia was subsequently 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // issued 'RS' and Montenegro 'ME'. Windows XP and Mac OS X Leopard still use 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the value 'YU'. If we get a value of 'YU' or 'CS' we will map it to 'RS'. 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((c1 == 'Y' && c2 == 'U') || 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (c1 == 'C' && c2 == 'S')) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1 = 'R'; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c2 = 'S'; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SPECIAL CASE: Timor-Leste changed from 'TP' to 'TL' in 2002. Windows XP 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // predates this; we therefore map this value. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (c1 == 'T' && c2 == 'P') 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c2 = 'L'; 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID(c1, c2); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For reference, a list of GeoIDs can be found at 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://msdn.microsoft.com/en-us/library/dd374073.aspx . 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GeoIDToCountryID(GEOID geo_id) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kISOBufferSize = 3; // Two plus one for the terminator. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wchar_t isobuf[kISOBufferSize] = { 0 }; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int retval = GetGeoInfo(geo_id, GEO_ISO2, isobuf, kISOBufferSize, 0); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (retval == kISOBufferSize && 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !(isobuf[0] == L'X' && isobuf[1] == L'X')) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryIDWithUpdate(static_cast<char>(isobuf[0]), 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<char>(isobuf[1])); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Various locations have ISO codes that Windows does not return. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (geo_id) { 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x144: // Guernsey 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('G', 'G'); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x148: // Jersey 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('J', 'E'); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x3B16: // Isle of Man 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('I', 'M'); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'UM' (U.S. Minor Outlying Islands) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x7F: // Johnston Atoll 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x102: // Wake Island 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x131: // Baker Island 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x146: // Howland Island 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x147: // Jarvis Island 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x149: // Kingman Reef 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x152: // Palmyra Atoll 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x52FA: // Midway Islands 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('U', 'M'); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'SH' (Saint Helena) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x12F: // Ascension Island 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x15C: // Tristan da Cunha 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('S', 'H'); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'IO' (British Indian Ocean Territory) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x13A: // Diego Garcia 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('I', 'O'); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Other cases where there is no ISO country code; we assign countries that 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can serve as reasonable defaults. 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x154: // Rota Island 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x155: // Saipan 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x15A: // Tinian Island 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('U', 'S'); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x134: // Channel Islands 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryID('G', 'B'); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 0x143: // Guantanamo Bay 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kCountryIDUnknown; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCurrentCountryID() { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GEOID geo_id = GetUserGeoID(GEOCLASS_NATION); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GeoIDToCountryID(geo_id); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCurrentCountryID() { 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ScopedCFTypeRef<CFLocaleRef> locale(CFLocaleCopyCurrent()); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFStringRef country = (CFStringRef)CFLocaleGetValue(locale.get(), 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCFLocaleCountryCode); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!country) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kCountryIDUnknown; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UniChar isobuf[2]; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFRange char_range = CFRangeMake(0, 2); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFStringGetCharacters(country, char_range, isobuf); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryIDWithUpdate(static_cast<char>(isobuf[0]), 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<char>(isobuf[1])); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialized by InitCountryCode(). 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int g_country_code_at_install = kCountryIDUnknown; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCurrentCountryID() { 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_country_code_at_install; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCurrentCountryID() { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* locale = setlocale(LC_MESSAGES, NULL); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!locale) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kCountryIDUnknown; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The format of a locale name is: 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // language[_territory][.codeset][@modifier], where territory is an ISO 3166 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // country code, which is what we want. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string locale_str(locale); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t begin = locale_str.find('_'); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (begin == std::string::npos || locale_str.size() - begin < 3) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kCountryIDUnknown; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++begin; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t end = locale_str.find_first_of(".@", begin); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (end == std::string::npos) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end = locale_str.size(); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The territory part must contain exactly two characters. 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (end - begin == 2) { 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CountryCharsToCountryIDWithUpdate( 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ToUpperASCII(locale_str[begin]), 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ToUpperASCII(locale_str[begin + 1])); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kCountryIDUnknown; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_* 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCountryIDFromPrefs(PrefService* prefs) { 665a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!prefs) 666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetCurrentCountryID(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cache first run Country ID value in prefs, and use it afterwards. This 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ensures that just because the user moves around, we won't automatically 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // make major changes to their available search providers, which would feel 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // surprising. 672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!prefs->HasPrefPath(prefs::kCountryIDAtInstall)) { 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefs->SetInteger(prefs::kCountryIDAtInstall, GetCurrentCountryID()); 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs->GetInteger(prefs::kCountryIDAtInstall); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetPrepopulationSetFromCountryID(PrefService* prefs, 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrepopulatedEngine*** engines, 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t* num_engines) { 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: This function should ALWAYS set its outparams. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If you add a new country make sure to update the unit test for coverage. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (GetCountryIDFromPrefs(prefs)) { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_A 'A' 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_B 'B' 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_C 'C' 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_D 'D' 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_E 'E' 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_F 'F' 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_G 'G' 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_H 'H' 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_I 'I' 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_J 'J' 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_K 'K' 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_L 'L' 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_M 'M' 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_N 'N' 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_O 'O' 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_P 'P' 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_Q 'Q' 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_R 'R' 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_S 'S' 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_T 'T' 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_U 'U' 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_V 'V' 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_W 'W' 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_X 'X' 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_Y 'Y' 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR_Z 'Z' 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHAR(ch) CHAR_##ch 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CODE_TO_ID(code1, code2)\ 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (CHAR(code1) << 8 | CHAR(code2)) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UNHANDLED_COUNTRY(code1, code2)\ 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CODE_TO_ID(code1, code2): 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define END_UNHANDLED_COUNTRIES(code1, code2)\ 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *engines = engines_##code1##code2;\ 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *num_engines = arraysize(engines_##code1##code2);\ 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DECLARE_COUNTRY(code1, code2)\ 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(code1, code2)\ 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(code1, code2) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries with their own, dedicated engine set. 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(A, E) // United Arab Emirates 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(A, L) // Albania 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(A, R) // Argentina 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(A, T) // Austria 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(A, U) // Australia 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, A) // Bosnia and Herzegovina 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, E) // Belgium 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, G) // Bulgaria 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, H) // Bahrain 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, I) // Burundi 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, N) // Brunei 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, O) // Bolivia 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, R) // Brazil 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, Y) // Belarus 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(B, Z) // Belize 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, A) // Canada 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, H) // Switzerland 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, L) // Chile 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, N) // China 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, O) // Colombia 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, R) // Costa Rica 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(C, Z) // Czech Republic 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(D, E) // Germany 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(D, K) // Denmark 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(D, O) // Dominican Republic 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(D, Z) // Algeria 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(E, C) // Ecuador 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(E, E) // Estonia 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(E, G) // Egypt 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(E, S) // Spain 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(F, I) // Finland 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(F, O) // Faroe Islands 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(F, R) // France 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(G, B) // United Kingdom 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(G, R) // Greece 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(G, T) // Guatemala 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(H, K) // Hong Kong 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(H, N) // Honduras 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(H, R) // Croatia 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(H, U) // Hungary 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, D) // Indonesia 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, E) // Ireland 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, L) // Israel 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, N) // India 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, Q) // Iraq 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, R) // Iran 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, S) // Iceland 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(I, T) // Italy 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(J, M) // Jamaica 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(J, O) // Jordan 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(J, P) // Japan 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(K, E) // Kenya 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(K, R) // South Korea 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(K, W) // Kuwait 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(K, Z) // Kazakhstan 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, B) // Lebanon 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, I) // Liechtenstein 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, T) // Lithuania 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, U) // Luxembourg 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, V) // Latvia 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(L, Y) // Libya 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, A) // Morocco 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, C) // Monaco 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, D) // Moldova 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, E) // Montenegro 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, K) // Macedonia 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, X) // Mexico 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(M, Y) // Malaysia 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(N, I) // Nicaragua 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(N, L) // Netherlands 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(N, O) // Norway 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(N, Z) // New Zealand 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(O, M) // Oman 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, A) // Panama 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, E) // Peru 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, H) // Philippines 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, K) // Pakistan 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, L) // Poland 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, R) // Puerto Rico 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, T) // Portugal 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(P, Y) // Paraguay 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(Q, A) // Qatar 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(R, O) // Romania 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(R, S) // Serbia 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(R, U) // Russia 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(R, W) // Rwanda 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, A) // Saudi Arabia 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, E) // Sweden 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, G) // Singapore 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, I) // Slovenia 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, K) // Slovakia 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, V) // El Salvador 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(S, Y) // Syria 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, H) // Thailand 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, N) // Tunisia 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, R) // Turkey 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, T) // Trinidad and Tobago 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, W) // Taiwan 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(T, Z) // Tanzania 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(U, A) // Ukraine 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(U, S) // United States 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(U, Y) // Uruguay 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(V, E) // Venezuela 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(V, N) // Vietnam 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(Y, E) // Yemen 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(Z, A) // South Africa 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DECLARE_COUNTRY(Z, W) // Zimbabwe 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Australia" engine set. 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, C) // Cocos Islands 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, X) // Christmas Island 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(H, M) // Heard Island and McDonald Islands 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, F) // Norfolk Island 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(A, U) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "China" engine set. 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, O) // Macao 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(C, N) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Denmark" engine set. 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, L) // Greenland 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(D, K) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Spain" engine set. 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, D) // Andorra 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(E, S) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Finland" engine set. 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, X) // Aland Islands 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(F, I) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "France" engine set. 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, F) // Burkina Faso 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, J) // Benin 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, D) // Congo - Kinshasa 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, F) // Central African Republic 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, G) // Congo - Brazzaville 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, I) // Ivory Coast 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, M) // Cameroon 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(D, J) // Djibouti 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, A) // Gabon 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, F) // French Guiana 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, N) // Guinea 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, P) // Guadeloupe 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(H, T) // Haiti 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(I, P) // Clipperton Island ('IP' is an WinXP-ism; ISO 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // includes it with France) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, L) // Mali 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, Q) // Martinique 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, C) // New Caledonia 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, E) // Niger 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, F) // French Polynesia 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, M) // Saint Pierre and Miquelon 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(R, E) // Reunion 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, N) // Senegal 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, D) // Chad 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, F) // French Southern Territories 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, G) // Togo 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(W, F) // Wallis and Futuna 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(Y, T) // Mayotte 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(F, R) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Greece" engine set. 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, Y) // Cyprus 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(G, R) 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Italy" engine set. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, M) // San Marino 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(V, A) // Vatican 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(I, T) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Morocco" engine set. 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(E, H) // Western Sahara 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(M, A) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Netherlands" engine set. 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, N) // Netherlands Antilles 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, W) // Aruba 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(N, L) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Norway" engine set. 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, V) // Bouvet Island 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, J) // Svalbard and Jan Mayen 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(N, O) 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "New Zealand" engine set. 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, K) // Cook Islands 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, U) // Niue 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, K) // Tokelau 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(N, Z) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Portugal" engine set. 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, V) // Cape Verde 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, W) // Guinea-Bissau 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, Z) // Mozambique 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, T) // Sao Tome and Principe 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, L) // Timor-Leste 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(P, T) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Russia" engine set. 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, M) // Armenia 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, Z) // Azerbaijan 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, G) // Kyrgyzstan 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, J) // Tajikistan 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, M) // Turkmenistan 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(U, Z) // Uzbekistan 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(R, U) 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "Saudi Arabia" engine set. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, R) // Mauritania 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, S) // Palestinian Territory 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, D) // Sudan 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(S, A) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "United Kingdom" engine set. 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, M) // Bermuda 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(F, K) // Falkland Islands 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, G) // Guernsey 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, I) // Gibraltar 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, S) // South Georgia and the South Sandwich 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Islands 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(I, M) // Isle of Man 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(I, O) // British Indian Ocean Territory 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(J, E) // Jersey 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, Y) // Cayman Islands 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, S) // Montserrat 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, T) // Malta 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, N) // Pitcairn Islands 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, H) // Saint Helena, Ascension Island, and Tristan da 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cunha 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, C) // Turks and Caicos Islands 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(V, G) // British Virgin Islands 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(G, B) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "United States" engine set. 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, S) // American Samoa 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, U) // Guam 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, P) // Northern Mariana Islands 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(U, M) // U.S. Minor Outlying Islands 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(V, I) // U.S. Virgin Islands 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(U, S) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Countries using the "default" engine set. 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, F) // Afghanistan 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, G) // Antigua and Barbuda 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, I) // Anguilla 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, O) // Angola 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(A, Q) // Antarctica 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, B) // Barbados 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, D) // Bangladesh 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, S) // Bahamas 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, T) // Bhutan 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(B, W) // Botswana 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(C, U) // Cuba 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(D, M) // Dominica 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(E, R) // Eritrea 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(E, T) // Ethiopia 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(F, J) // Fiji 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(F, M) // Micronesia 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, D) // Grenada 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, E) // Georgia 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, H) // Ghana 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, M) // Gambia 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, Q) // Equatorial Guinea 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(G, Y) // Guyana 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, H) // Cambodia 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, I) // Kiribati 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, M) // Comoros 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, N) // Saint Kitts and Nevis 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(K, P) // North Korea 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(L, A) // Laos 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(L, C) // Saint Lucia 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(L, K) // Sri Lanka 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(L, R) // Liberia 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(L, S) // Lesotho 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, G) // Madagascar 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, H) // Marshall Islands 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, M) // Myanmar 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, N) // Mongolia 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, U) // Mauritius 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, V) // Maldives 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(M, W) // Malawi 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, A) // Namibia 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, G) // Nigeria 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, P) // Nepal 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(N, R) // Nauru 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, G) // Papua New Guinea 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(P, W) // Palau 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, B) // Solomon Islands 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, C) // Seychelles 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, L) // Sierra Leone 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, O) // Somalia 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, R) // Suriname 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(S, Z) // Swaziland 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, O) // Tonga 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(T, V) // Tuvalu 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(U, G) // Uganda 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(V, C) // Saint Vincent and the Grenadines 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(V, U) // Vanuatu 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(W, S) // Samoa 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNHANDLED_COUNTRY(Z, M) // Zambia 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kCountryIDUnknown: 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: // Unhandled location 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_UNHANDLED_COUNTRIES(def, ault) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr<TemplateURLData> MakePrepopulatedTemplateURLData( 1037a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& name, 1038a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& keyword, 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& search_url, 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& suggest_url, 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& instant_url, 10427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::StringPiece& image_url, 10433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::StringPiece& new_tab_url, 1044f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::StringPiece& contextual_search_url, 10457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::StringPiece& search_url_post_params, 10467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::StringPiece& suggest_url_post_params, 10477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::StringPiece& instant_url_post_params, 10487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::StringPiece& image_url_post_params, 10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& favicon_url, 10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& encoding, 10515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue& alternate_urls, 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::StringPiece& search_terms_replacement_key, 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id) { 10545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<TemplateURLData> data(new TemplateURLData); 10555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->short_name = name; 10575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->SetKeyword(keyword); 10585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->SetURL(search_url.as_string()); 10595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->suggestions_url = suggest_url.as_string(); 10605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->instant_url = instant_url.as_string(); 10615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->image_url = image_url.as_string(); 10625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->new_tab_url = new_tab_url.as_string(); 1063f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) data->contextual_search_url = contextual_search_url.as_string(); 10645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->search_url_post_params = search_url_post_params.as_string(); 10655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->suggestions_url_post_params = suggest_url_post_params.as_string(); 10665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->instant_url_post_params = instant_url_post_params.as_string(); 10675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->image_url_post_params = image_url_post_params.as_string(); 10685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->favicon_url = GURL(favicon_url.as_string()); 10695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->show_in_default_list = true; 10705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->safe_for_autoreplace = true; 10715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->input_encodings.push_back(encoding.as_string()); 10725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->date_created = base::Time(); 10735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->last_modified = base::Time(); 10745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->prepopulate_id = id; 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < alternate_urls.GetSize(); ++i) { 10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string alternate_url; 10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alternate_urls.GetString(i, &alternate_url); 10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!alternate_url.empty()); 10795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->alternate_urls.push_back(alternate_url); 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu data->search_terms_replacement_key = search_terms_replacement_key.as_string(); 10825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return data.Pass(); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuScopedVector<TemplateURLData> GetPrepopulatedTemplateURLData( 10865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PrefService* prefs) { 10875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ScopedVector<TemplateURLData> t_urls; 10885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!prefs) 10894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return t_urls.Pass(); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::ListValue* list = prefs->GetList(prefs::kSearchProviderOverrides); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!list) 10934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return t_urls.Pass(); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_engines = list->GetSize(); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i != num_engines; ++i) { 10975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* engine; 1098a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name; 1099a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 keyword; 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string search_url; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string favicon_url; 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string encoding; 1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int id = -1; 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following fields are required for each search engine configuration. 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (list->GetDictionary(i, &engine) && 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("name", &name) && !name.empty() && 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("keyword", &keyword) && !keyword.empty() && 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("search_url", &search_url) && !search_url.empty() && 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("favicon_url", &favicon_url) && 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !favicon_url.empty() && 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("encoding", &encoding) && !encoding.empty() && 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetInteger("id", &id)) { 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These fields are optional. 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string suggest_url; 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string instant_url; 11167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string image_url; 11173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string new_tab_url; 1118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string contextual_search_url; 11197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string search_url_post_params; 11207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string suggest_url_post_params; 11217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string instant_url_post_params; 11227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string image_url_post_params; 11235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue empty_list; 11245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::ListValue* alternate_urls = &empty_list; 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string search_terms_replacement_key; 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("suggest_url", &suggest_url); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetString("instant_url", &instant_url); 11287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch engine->GetString("image_url", &image_url); 11293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) engine->GetString("new_tab_url", &new_tab_url); 1130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) engine->GetString("contextual_search_url", &contextual_search_url); 11317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch engine->GetString("search_url_post_params", &search_url_post_params); 11327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch engine->GetString("suggest_url_post_params", &suggest_url_post_params); 11337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch engine->GetString("instant_url_post_params", &instant_url_post_params); 11347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch engine->GetString("image_url_post_params", &image_url_post_params); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) engine->GetList("alternate_urls", &alternate_urls); 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) engine->GetString("search_terms_replacement_key", 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &search_terms_replacement_key); 11385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu t_urls.push_back(MakePrepopulatedTemplateURLData(name, keyword, 11393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) search_url, suggest_url, instant_url, image_url, new_tab_url, 1140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contextual_search_url, search_url_post_params, 1141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) suggest_url_post_params, instant_url_post_params, 1142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) image_url_post_params, favicon_url, encoding, *alternate_urls, 1143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) search_terms_replacement_key, id).release()); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return t_urls.Pass(); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr<TemplateURLData> 11505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MakePrepopulatedTemplateURLDataFromPrepopulateEngine( 11515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const PrepopulatedEngine& engine) { 11525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue alternate_urls; 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (engine.alternate_urls) { 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < engine.alternate_urls_size; ++i) 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) alternate_urls.AppendString(std::string(engine.alternate_urls[i])); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return MakePrepopulatedTemplateURLData(base::WideToUTF16(engine.name), 11595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WideToUTF16(engine.keyword), 11605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.search_url, 11615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.suggest_url, 11625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.instant_url, 11635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.image_url, 11645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.new_tab_url, 1165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) engine.contextual_search_url, 11665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.search_url_post_params, 11675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.suggest_url_post_params, 11685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.instant_url_post_params, 11695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.image_url_post_params, 11705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.favicon_url, 11715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.encoding, 11725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu alternate_urls, 11735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.search_terms_replacement_key, 11745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu engine.id); 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1177ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbool SameDomain(const GURL& given_url, const GURL& prepopulated_url) { 1178ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return prepopulated_url.is_valid() && 1179ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::registry_controlled_domains::SameDomainOrHost( 1180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch given_url, prepopulated_url, 1181ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); 1182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} // namespace 1185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Global functions ----------------------------------------------------------- 1188ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1189ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_ANDROID) 1190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid InitCountryCode(const std::string& country_code) { 1191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (country_code.size() != 2) { 1192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DLOG(ERROR) << "Invalid country code: " << country_code; 1193ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch g_country_code_at_install = kCountryIDUnknown; 1194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } else { 1195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch g_country_code_at_install = 1196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CountryCharsToCountryIDWithUpdate(country_code[0], country_code[1]); 1197ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1198ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1199ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif 1200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { 1202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch registry->RegisterIntegerPref( 1203ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch prefs::kCountryIDAtInstall, 1204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch kCountryIDUnknown, 1205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch registry->RegisterListPref(prefs::kSearchProviderOverrides, 1207ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1208ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch registry->RegisterIntegerPref( 1209ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch prefs::kSearchProviderOverridesVersion, 1210ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch -1, 1211ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1213ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1214ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochint GetDataVersion(PrefService* prefs) { 1215ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Allow tests to override the local version. 1216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return (prefs && prefs->HasPrefPath(prefs::kSearchProviderOverridesVersion)) ? 1217ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch prefs->GetInteger(prefs::kSearchProviderOverridesVersion) : 1218ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch kCurrentDataVersion; 1219ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 12215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuScopedVector<TemplateURLData> GetPrepopulatedEngines( 12225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PrefService* prefs, 12235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu size_t* default_search_provider_index) { 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If there is a set of search engines in the preferences file, it overrides 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the built-in set. 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *default_search_provider_index = 0; 12275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ScopedVector<TemplateURLData> t_urls = GetPrepopulatedTemplateURLData(prefs); 12284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!t_urls.empty()) 12294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return t_urls.Pass(); 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PrepopulatedEngine** engines; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_engines; 12335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetPrepopulationSetFromCountryID(prefs, &engines, &num_engines); 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i != num_engines; ++i) { 12355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu t_urls.push_back(MakePrepopulatedTemplateURLDataFromPrepopulateEngine( 12365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu *engines[i]).release()); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return t_urls.Pass(); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid ClearPrepopulatedEnginesInPrefs(PrefService* prefs) { 12425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!prefs) 1243ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 1244ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1245ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch prefs->ClearPref(prefs::kSearchProviderOverrides); 1246ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch prefs->ClearPref(prefs::kSearchProviderOverridesVersion); 1247ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1248ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 12495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr<TemplateURLData> GetPrepopulatedDefaultSearch(PrefService* prefs) { 12505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<TemplateURLData> default_search_provider; 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t default_search_index; 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This could be more efficient. We are loading all the URLs to only keep 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the first one. 12545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ScopedVector<TemplateURLData> loaded_urls = 12555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetPrepopulatedEngines(prefs, &default_search_index); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (default_search_index < loaded_urls.size()) { 12575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu default_search_provider.reset(loaded_urls[default_search_index]); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaded_urls.weak_erase(loaded_urls.begin() + default_search_index); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return default_search_provider.Pass(); 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)SearchEngineType GetEngineType(const TemplateURL& url, 1264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const SearchTermsData& search_terms_data) { 12653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // By calling ReplaceSearchTerms, we ensure that even TemplateURLs whose URLs 12663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // can't be directly inspected (e.g. due to containing {google:baseURL}) can 12673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // be converted to GURLs we can look at. 12683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL gurl(url.url_ref().ReplaceSearchTerms(TemplateURLRef::SearchTermsArgs( 1269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ASCIIToUTF16("x")), search_terms_data)); 12703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return gurl.is_valid() ? GetEngineType(gurl) : SEARCH_ENGINE_OTHER; 12713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 12723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 12733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)SearchEngineType GetEngineType(const GURL& url) { 12743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(url.is_valid()); 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1276ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Check using TLD+1s, in order to more aggressively match search engine types 1277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // for data imported from other browsers. 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First special-case Google, because the prepopulate URL for it will not 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // convert to a GURL and thus won't have an origin. Instead see if the 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incoming URL's host is "[*.]google.<TLD>". 12823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (google_util::IsGoogleHostname(url.host(), 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_util::DISALLOW_SUBDOMAIN)) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return google.type; 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now check the rest of the prepopulate data. 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kAllEngines); ++i) { 1288ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // First check the main search URL. 12893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (SameDomain(url, GURL(kAllEngines[i]->search_url))) 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kAllEngines[i]->type; 1291ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Then check the alternate URLs. 1293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (size_t j = 0; j < kAllEngines[i]->alternate_urls_size; ++j) { 12943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (SameDomain(url, GURL(kAllEngines[i]->alternate_urls[j]))) 1295ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return kAllEngines[i]->type; 1296ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SEARCH_ENGINE_OTHER; 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace TemplateURLPrepopulateData 1303