1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
6
7 #if defined(OS_POSIX) && !defined(OS_MACOSX)
8 #include <locale.h>
9 #endif
10
11 #include "base/command_line.h"
12 #include "base/memory/scoped_vector.h"
13 #include "base/string16.h"
14 #include "base/string_util.h"
15 #include "base/stl_util-inl.h"
16 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/prefs/pref_service.h"
18 #include "chrome/browser/search_engines/search_engine_type.h"
19 #include "chrome/browser/search_engines/search_terms_data.h"
20 #include "chrome/browser/search_engines/template_url.h"
21 #include "chrome/browser/search_engines/template_url_model.h"
22 #include "chrome/common/chrome_switches.h"
23 #include "chrome/common/pref_names.h"
24 #include "googleurl/src/gurl.h"
25 #include "grit/theme_resources.h"
26
27 #if defined(OS_WIN)
28 #undef IN // On Windows, windef.h defines this, which screws up "India" cases.
29 #elif defined(OS_MACOSX)
30 #include "base/mac/scoped_cftyperef.h"
31 #endif
32
33 using base::Time;
34
35 namespace {
36
37 // NOTE: See comments in GetDataVersion() below! You should probably not change
38 // the data in this file without changing the result of that function!
39
40 // Engine definitions //////////////////////////////////////////////////////////
41
42 struct PrepopulatedEngine {
43 const wchar_t* const name;
44 // If NULL, we'll autogenerate a keyword based on the search_url every time
45 // someone asks. Only entries which need keywords to auto-track a dynamically
46 // generated search URL should use this.
47 // If the empty string, the engine has no keyword.
48 const wchar_t* const keyword;
49 const char* const favicon_url; // If NULL, there is no favicon.
50 const wchar_t* const search_url;
51 const char* const encoding;
52 const wchar_t* const suggest_url; // If NULL, this engine does not support
53 // suggestions.
54 const wchar_t* const instant_url; // If NULL, this engine does not support
55 // instant.
56 // SEARCH_ENGINE_OTHER if no logo is available.
57 const SearchEngineType search_engine_type;
58 const int logo_id; // Id for logo image in search engine dialog.
59 // Unique id for this prepopulate engine (corresponds to
60 // TemplateURL::prepopulate_id). This ID must be greater than zero and must
61 // remain the same for a particular site regardless of how the url changes;
62 // the ID is used when modifying engine data in subsequent versions, so that
63 // we can find the "old" entry to update even when the name or URL changes.
64 //
65 // This ID must be "unique" within one country's prepopulated data, but two
66 // entries can share an ID if they represent the "same" engine (e.g. Yahoo! US
67 // vs. Yahoo! UK) and will not appear in the same user-visible data set. This
68 // facilitates changes like adding more specific per-country data in the
69 // future; in such a case the localized engines will transparently replace the
70 // previous, non-localized versions. For engines where we need two instances
71 // to appear for one country (e.g. Bing Search U.S. English and Spanish), we
72 // must use two different unique IDs (and different keywords).
73 //
74 // The following unique IDs are available:
75 // 33, 34, 36, 39, 42, 43, 47, 48, 49, 50, 52, 53, 56, 58, 60, 61, 64, 65,
76 // 66, 70, 74, 78, 79, 80, 81, 84, 86, 88, 91, 92, 93, 94, 95, 96, 97, 98,
77 // 102+
78 //
79 // IDs > 1000 are reserved for distribution custom engines.
80 //
81 // NOTE: CHANGE THE ABOVE NUMBERS IF YOU ADD A NEW ENGINE; ID conflicts = bad!
82 const int id;
83 };
84
85 const PrepopulatedEngine abcsok = {
86 L"ABC S\x00f8k",
87 L"abcsok.no",
88 "http://abcsok.no/favicon.ico",
89 L"http://abcsok.no/index.html?q={searchTerms}",
90 "UTF-8",
91 NULL,
92 NULL,
93 SEARCH_ENGINE_ABCSOK,
94 IDR_SEARCH_ENGINE_LOGO_ABCSOK,
95 72,
96 };
97
98 const PrepopulatedEngine altavista = {
99 L"AltaVista",
100 L"altavista.com",
101 "http://www.altavista.com/favicon.ico",
102 L"http://www.altavista.com/web/results?q={searchTerms}",
103 "UTF-8",
104 NULL,
105 NULL,
106 SEARCH_ENGINE_ALTAVISTA,
107 IDR_SEARCH_ENGINE_LOGO_ALTAVISTA,
108 89,
109 };
110
111 const PrepopulatedEngine altavista_ar = {
112 L"AltaVista",
113 L"ar.altavista.com",
114 "http://ar.altavista.com/favicon.ico",
115 L"http://ar.altavista.com/web/results?q={searchTerms}",
116 "UTF-8",
117 NULL,
118 NULL,
119 SEARCH_ENGINE_ALTAVISTA,
120 IDR_SEARCH_ENGINE_LOGO_ALTAVISTA,
121 89,
122 };
123
124 const PrepopulatedEngine altavista_se = {
125 L"AltaVista",
126 L"se.altavista.com",
127 "http://se.altavista.com/favicon.ico",
128 L"http://se.altavista.com/web/results?q={searchTerms}",
129 "UTF-8",
130 NULL,
131 NULL,
132 SEARCH_ENGINE_ALTAVISTA,
133 IDR_SEARCH_ENGINE_LOGO_ALTAVISTA,
134 89,
135 };
136
137 const PrepopulatedEngine aol = {
138 L"AOL",
139 L"aol.com",
140 "http://search.aol.com/favicon.ico",
141 L"http://search.aol.com/aol/search?query={searchTerms}",
142 "UTF-8",
143 NULL,
144 NULL,
145 SEARCH_ENGINE_OTHER,
146 IDR_SEARCH_ENGINE_LOGO_AOL,
147 35,
148 };
149
150 const PrepopulatedEngine araby = {
151 L"\x0639\x0631\x0628\x064a",
152 L"araby.com",
153 "http://araby.com/favicon.ico",
154 L"http://araby.com/?q={searchTerms}",
155 "UTF-8",
156 NULL,
157 NULL,
158 SEARCH_ENGINE_OTHER,
159 kNoSearchEngineLogo,
160 12,
161 };
162
163 const PrepopulatedEngine ask = {
164 L"Ask",
165 L"ask.com",
166 "http://www.ask.com/favicon.ico",
167 L"http://www.ask.com/web?q={searchTerms}",
168 "UTF-8",
169 L"http://ss.ask.com/query?q={searchTerms}&li=ff",
170 NULL,
171 SEARCH_ENGINE_ASK,
172 IDR_SEARCH_ENGINE_LOGO_ASK,
173 4,
174 };
175
176 const PrepopulatedEngine ask_de = {
177 L"Ask.com Deutschland",
178 L"de.ask.com",
179 "http://de.ask.com/favicon.ico",
180 L"http://de.ask.com/web?q={searchTerms}",
181 "UTF-8",
182 L"http://ss.de.ask.com/query?q={searchTerms}&li=ff",
183 NULL,
184 SEARCH_ENGINE_ASK,
185 IDR_SEARCH_ENGINE_LOGO_ASK,
186 4,
187 };
188
189 const PrepopulatedEngine ask_es = {
190 L"Ask.com Espa" L"\x00f1" L"a",
191 L"es.ask.com",
192 "http://es.ask.com/favicon.ico",
193 L"http://es.ask.com/web?q={searchTerms}",
194 "UTF-8",
195 L"http://ss.es.ask.com/query?q={searchTerms}&li=ff",
196 NULL,
197 SEARCH_ENGINE_ASK,
198 IDR_SEARCH_ENGINE_LOGO_ASK,
199 4,
200 };
201
202 const PrepopulatedEngine ask_it = {
203 L"Ask.com Italia",
204 L"it.ask.com",
205 "http://it.ask.com/favicon.ico",
206 L"http://it.ask.com/web?q={searchTerms}",
207 "UTF-8",
208 L"http://ss.it.ask.com/query?q={searchTerms}&li=ff",
209 NULL,
210 SEARCH_ENGINE_ASK,
211 IDR_SEARCH_ENGINE_LOGO_ASK,
212 4,
213 };
214
215 const PrepopulatedEngine ask_nl = {
216 L"Ask.com Nederland",
217 L"nl.ask.com",
218 "http://nl.ask.com/favicon.ico",
219 L"http://nl.ask.com/web?q={searchTerms}",
220 "UTF-8",
221 L"http://ss.nl.ask.com/query?q={searchTerms}&li=ff",
222 NULL,
223 SEARCH_ENGINE_ASK,
224 IDR_SEARCH_ENGINE_LOGO_ASK,
225 4,
226 };
227
228 const PrepopulatedEngine ask_uk = {
229 L"Ask Jeeves",
230 L"uk.ask.com",
231 "http://uk.ask.com/favicon.ico",
232 L"http://uk.ask.com/web?q={searchTerms}",
233 "UTF-8",
234 L"http://ss.uk.ask.com/query?q={searchTerms}&li=ff",
235 NULL,
236 SEARCH_ENGINE_ASK,
237 IDR_SEARCH_ENGINE_LOGO_ASK,
238 4,
239 };
240
241 const PrepopulatedEngine atlas_cz = {
242 L"Atlas",
243 L"atlas.cz",
244 "http://img.atlas.cz/favicon.ico",
245 L"http://search.atlas.cz/?q={searchTerms}",
246 "windows-1250",
247 NULL,
248 NULL,
249 SEARCH_ENGINE_OTHER,
250 kNoSearchEngineLogo,
251 27,
252 };
253
254 const PrepopulatedEngine atlas_sk = {
255 L"ATLAS.SK",
256 L"atlas.sk",
257 "http://www.atlas.sk/images/favicon.ico",
258 L"http://hladaj.atlas.sk/fulltext/?phrase={searchTerms}",
259 "UTF-8",
260 NULL,
261 NULL,
262 SEARCH_ENGINE_OTHER,
263 kNoSearchEngineLogo,
264 27,
265 };
266
267 const PrepopulatedEngine baidu = {
268 L"\x767e\x5ea6",
269 L"baidu.com",
270 "http://www.baidu.com/favicon.ico",
271 L"http://www.baidu.com/s?wd={searchTerms}",
272 "GB2312",
273 NULL,
274 NULL,
275 SEARCH_ENGINE_BAIDU,
276 IDR_SEARCH_ENGINE_LOGO_BAIDU,
277 21,
278 };
279
280 const PrepopulatedEngine bing = {
281 L"Bing",
282 L"bing.com",
283 "http://www.bing.com/s/wlflag.ico",
284 L"http://www.bing.com/search?q={searchTerms}",
285 "UTF-8",
286 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
287 NULL,
288 SEARCH_ENGINE_BING,
289 IDR_SEARCH_ENGINE_LOGO_BING,
290 3,
291 };
292
293 const PrepopulatedEngine bing_ar_XA = {
294 L"Bing",
295 L"", // bing.com is taken by bing_en_XA.
296 "http://www.bing.com/s/wlflag.ico",
297 L"http://www.bing.com/search?setmkt=ar-XA&q={searchTerms}",
298 "UTF-8",
299 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
300 NULL,
301 SEARCH_ENGINE_BING,
302 IDR_SEARCH_ENGINE_LOGO_BING,
303 7, // Can't be 3 as this has to appear in the Arabian countries' lists
304 // alongside bing_en_XA.
305 };
306
307 const PrepopulatedEngine bing_bg_BG = {
308 L"Bing",
309 L"bing.com",
310 "http://www.bing.com/s/wlflag.ico",
311 L"http://www.bing.com/search?setmkt=bg-BG&q={searchTerms}",
312 "UTF-8",
313 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
314 NULL,
315 SEARCH_ENGINE_BING,
316 IDR_SEARCH_ENGINE_LOGO_BING,
317 3,
318 };
319
320 const PrepopulatedEngine bing_cs_CZ = {
321 L"Bing",
322 L"bing.com",
323 "http://www.bing.com/s/wlflag.ico",
324 L"http://www.bing.com/search?setmkt=cs-CZ&q={searchTerms}",
325 "UTF-8",
326 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
327 NULL,
328 SEARCH_ENGINE_BING,
329 IDR_SEARCH_ENGINE_LOGO_BING,
330 3,
331 };
332
333 const PrepopulatedEngine bing_da_DK = {
334 L"Bing",
335 L"bing.com",
336 "http://www.bing.com/s/wlflag.ico",
337 L"http://www.bing.com/search?setmkt=da-DK&q={searchTerms}",
338 "UTF-8",
339 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
340 NULL,
341 SEARCH_ENGINE_BING,
342 IDR_SEARCH_ENGINE_LOGO_BING,
343 3,
344 };
345
346 const PrepopulatedEngine bing_de_AT = {
347 L"Bing",
348 L"bing.com",
349 "http://www.bing.com/s/wlflag.ico",
350 L"http://www.bing.com/search?setmkt=de-AT&q={searchTerms}",
351 "UTF-8",
352 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
353 NULL,
354 SEARCH_ENGINE_BING,
355 IDR_SEARCH_ENGINE_LOGO_BING,
356 3,
357 };
358
359 const PrepopulatedEngine bing_de_CH = {
360 L"Bing",
361 L"bing.com",
362 "http://www.bing.com/s/wlflag.ico",
363 L"http://www.bing.com/search?setmkt=de-CH&q={searchTerms}",
364 "UTF-8",
365 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
366 NULL,
367 SEARCH_ENGINE_BING,
368 IDR_SEARCH_ENGINE_LOGO_BING,
369 3,
370 };
371
372 const PrepopulatedEngine bing_de_DE = {
373 L"Bing",
374 L"bing.com",
375 "http://www.bing.com/s/wlflag.ico",
376 L"http://www.bing.com/search?setmkt=de-DE&q={searchTerms}",
377 "UTF-8",
378 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
379 NULL,
380 SEARCH_ENGINE_BING,
381 IDR_SEARCH_ENGINE_LOGO_BING,
382 3,
383 };
384
385 const PrepopulatedEngine bing_el_GR = {
386 L"Bing",
387 L"bing.com",
388 "http://www.bing.com/s/wlflag.ico",
389 L"http://www.bing.com/search?setmkt=el-GR&q={searchTerms}",
390 "UTF-8",
391 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
392 NULL,
393 SEARCH_ENGINE_BING,
394 IDR_SEARCH_ENGINE_LOGO_BING,
395 3,
396 };
397
398 const PrepopulatedEngine bing_en_AU = {
399 L"Bing",
400 L"bing.com",
401 "http://www.bing.com/s/wlflag.ico",
402 L"http://www.bing.com/search?setmkt=en-AU&q={searchTerms}",
403 "UTF-8",
404 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
405 NULL,
406 SEARCH_ENGINE_BING,
407 IDR_SEARCH_ENGINE_LOGO_BING,
408 3,
409 };
410
411 const PrepopulatedEngine bing_en_CA = {
412 L"Bing",
413 L"bing.com",
414 "http://www.bing.com/s/wlflag.ico",
415 L"http://www.bing.com/search?setmkt=en-CA&q={searchTerms}",
416 "UTF-8",
417 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
418 NULL,
419 SEARCH_ENGINE_BING,
420 IDR_SEARCH_ENGINE_LOGO_BING,
421 3,
422 };
423
424 const PrepopulatedEngine bing_en_GB = {
425 L"Bing",
426 L"bing.com",
427 "http://www.bing.com/s/wlflag.ico",
428 L"http://www.bing.com/search?setmkt=en-GB&q={searchTerms}",
429 "UTF-8",
430 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
431 NULL,
432 SEARCH_ENGINE_BING,
433 IDR_SEARCH_ENGINE_LOGO_BING,
434 3,
435 };
436
437 const PrepopulatedEngine bing_en_ID = {
438 L"Bing",
439 L"bing.com",
440 "http://www.bing.com/s/wlflag.ico",
441 L"http://www.bing.com/search?setmkt=en-ID&q={searchTerms}",
442 "UTF-8",
443 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
444 NULL,
445 SEARCH_ENGINE_BING,
446 IDR_SEARCH_ENGINE_LOGO_BING,
447 3,
448 };
449
450 const PrepopulatedEngine bing_en_IE = {
451 L"Bing",
452 L"bing.com",
453 "http://www.bing.com/s/wlflag.ico",
454 L"http://www.bing.com/search?setmkt=en-IE&q={searchTerms}",
455 "UTF-8",
456 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
457 NULL,
458 SEARCH_ENGINE_BING,
459 IDR_SEARCH_ENGINE_LOGO_BING,
460 3,
461 };
462
463 const PrepopulatedEngine bing_en_IN = {
464 L"Bing",
465 L"bing.com",
466 "http://www.bing.com/s/wlflag.ico",
467 L"http://www.bing.com/search?setmkt=en-IN&q={searchTerms}",
468 "UTF-8",
469 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
470 NULL,
471 SEARCH_ENGINE_BING,
472 IDR_SEARCH_ENGINE_LOGO_BING,
473 3,
474 };
475
476 const PrepopulatedEngine bing_en_MY = {
477 L"Bing",
478 L"bing.com",
479 "http://www.bing.com/s/wlflag.ico",
480 L"http://www.bing.com/search?setmkt=en-MY&q={searchTerms}",
481 "UTF-8",
482 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
483 NULL,
484 SEARCH_ENGINE_BING,
485 IDR_SEARCH_ENGINE_LOGO_BING,
486 3,
487 };
488
489 const PrepopulatedEngine bing_en_NZ = {
490 L"Bing",
491 L"bing.com",
492 "http://www.bing.com/s/wlflag.ico",
493 L"http://www.bing.com/search?setmkt=en-NZ&q={searchTerms}",
494 "UTF-8",
495 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
496 NULL,
497 SEARCH_ENGINE_BING,
498 IDR_SEARCH_ENGINE_LOGO_BING,
499 3,
500 };
501
502 const PrepopulatedEngine bing_en_PH = {
503 L"Bing",
504 L"bing.com",
505 "http://www.bing.com/s/wlflag.ico",
506 L"http://www.bing.com/search?setmkt=en-PH&q={searchTerms}",
507 "UTF-8",
508 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
509 NULL,
510 SEARCH_ENGINE_BING,
511 IDR_SEARCH_ENGINE_LOGO_BING,
512 3,
513 };
514
515 const PrepopulatedEngine bing_en_SG = {
516 L"Bing",
517 L"bing.com",
518 "http://www.bing.com/s/wlflag.ico",
519 L"http://www.bing.com/search?setmkt=en-SG&q={searchTerms}",
520 "UTF-8",
521 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
522 NULL,
523 SEARCH_ENGINE_BING,
524 IDR_SEARCH_ENGINE_LOGO_BING,
525 3,
526 };
527
528 const PrepopulatedEngine bing_en_US = {
529 L"Bing",
530 L"bing.com",
531 "http://www.bing.com/s/wlflag.ico",
532 L"http://www.bing.com/search?setmkt=en-US&q={searchTerms}",
533 "UTF-8",
534 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
535 NULL,
536 SEARCH_ENGINE_BING,
537 IDR_SEARCH_ENGINE_LOGO_BING,
538 3,
539 };
540
541 const PrepopulatedEngine bing_en_XA = {
542 L"Bing",
543 L"bing.com",
544 "http://www.bing.com/s/wlflag.ico",
545 L"http://www.bing.com/search?setmkt=en-XA&q={searchTerms}",
546 "UTF-8",
547 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
548 NULL,
549 SEARCH_ENGINE_BING,
550 IDR_SEARCH_ENGINE_LOGO_BING,
551 3,
552 };
553
554 const PrepopulatedEngine bing_en_ZA = {
555 L"Bing",
556 L"bing.com",
557 "http://www.bing.com/s/wlflag.ico",
558 L"http://www.bing.com/search?setmkt=en-ZA&q={searchTerms}",
559 "UTF-8",
560 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
561 NULL,
562 SEARCH_ENGINE_BING,
563 IDR_SEARCH_ENGINE_LOGO_BING,
564 3,
565 };
566
567 const PrepopulatedEngine bing_es_AR = {
568 L"Bing",
569 L"bing.com",
570 "http://www.bing.com/s/wlflag.ico",
571 L"http://www.bing.com/search?setmkt=es-AR&q={searchTerms}",
572 "UTF-8",
573 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
574 NULL,
575 SEARCH_ENGINE_BING,
576 IDR_SEARCH_ENGINE_LOGO_BING,
577 3,
578 };
579
580 const PrepopulatedEngine bing_es_CL = {
581 L"Bing",
582 L"bing.com",
583 "http://www.bing.com/s/wlflag.ico",
584 L"http://www.bing.com/search?setmkt=es-CL&q={searchTerms}",
585 "UTF-8",
586 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
587 NULL,
588 SEARCH_ENGINE_BING,
589 IDR_SEARCH_ENGINE_LOGO_BING,
590 3,
591 };
592
593 const PrepopulatedEngine bing_es_ES = {
594 L"Bing",
595 L"bing.com",
596 "http://www.bing.com/s/wlflag.ico",
597 L"http://www.bing.com/search?setmkt=es-ES&q={searchTerms}",
598 "UTF-8",
599 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
600 NULL,
601 SEARCH_ENGINE_BING,
602 IDR_SEARCH_ENGINE_LOGO_BING,
603 3,
604 };
605
606 const PrepopulatedEngine bing_es_MX = {
607 L"Bing",
608 L"bing.com",
609 "http://www.bing.com/s/wlflag.ico",
610 L"http://www.bing.com/search?setmkt=es-MX&q={searchTerms}",
611 "UTF-8",
612 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
613 NULL,
614 SEARCH_ENGINE_BING,
615 IDR_SEARCH_ENGINE_LOGO_BING,
616 3,
617 };
618
619 const PrepopulatedEngine bing_es_XL = {
620 L"Bing",
621 L"bing.com",
622 "http://www.bing.com/s/wlflag.ico",
623 L"http://www.bing.com/search?setmkt=es-XL&q={searchTerms}",
624 "UTF-8",
625 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
626 NULL,
627 SEARCH_ENGINE_BING,
628 IDR_SEARCH_ENGINE_LOGO_BING,
629 3,
630 };
631
632 const PrepopulatedEngine bing_et_EE = {
633 L"Bing",
634 L"bing.com",
635 "http://www.bing.com/s/wlflag.ico",
636 L"http://www.bing.com/search?setmkt=et-EE&q={searchTerms}",
637 "UTF-8",
638 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
639 NULL,
640 SEARCH_ENGINE_BING,
641 IDR_SEARCH_ENGINE_LOGO_BING,
642 3,
643 };
644
645 const PrepopulatedEngine bing_fi_FI = {
646 L"Bing",
647 L"bing.com",
648 "http://www.bing.com/s/wlflag.ico",
649 L"http://www.bing.com/search?setmkt=fi-FI&q={searchTerms}",
650 "UTF-8",
651 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
652 NULL,
653 SEARCH_ENGINE_BING,
654 IDR_SEARCH_ENGINE_LOGO_BING,
655 3,
656 };
657
658 const PrepopulatedEngine bing_fr_BE = {
659 L"Bing",
660 L"", // bing.com is taken by bing_nl_BE.
661 "http://www.bing.com/s/wlflag.ico",
662 L"http://www.bing.com/search?setmkt=fr-BE&q={searchTerms}",
663 "UTF-8",
664 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
665 NULL,
666 SEARCH_ENGINE_BING,
667 IDR_SEARCH_ENGINE_LOGO_BING,
668 7,
669 };
670
671 const PrepopulatedEngine bing_fr_CA = {
672 L"Bing",
673 L"", // bing.com is taken by bing_en_CA.
674 "http://www.bing.com/s/wlflag.ico",
675 L"http://www.bing.com/search?setmkt=fr-CA&q={searchTerms}",
676 "UTF-8",
677 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
678 NULL,
679 SEARCH_ENGINE_BING,
680 IDR_SEARCH_ENGINE_LOGO_BING,
681 7,
682 };
683
684 const PrepopulatedEngine bing_fr_CH = {
685 L"Bing",
686 L"", // bing.com is taken by bing_de_CH.
687 "http://www.bing.com/s/wlflag.ico",
688 L"http://www.bing.com/search?setmkt=fr-CH&q={searchTerms}",
689 "UTF-8",
690 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
691 NULL,
692 SEARCH_ENGINE_BING,
693 IDR_SEARCH_ENGINE_LOGO_BING,
694 7,
695 };
696
697 const PrepopulatedEngine bing_fr_FR = {
698 L"Bing",
699 L"bing.com",
700 "http://www.bing.com/s/wlflag.ico",
701 L"http://www.bing.com/search?setmkt=fr-FR&q={searchTerms}",
702 "UTF-8",
703 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
704 NULL,
705 SEARCH_ENGINE_BING,
706 IDR_SEARCH_ENGINE_LOGO_BING,
707 3,
708 };
709
710 const PrepopulatedEngine bing_he_IL = {
711 L"Bing",
712 L"bing.com",
713 "http://www.bing.com/s/wlflag.ico",
714 L"http://www.bing.com/search?setmkt=he-IL&q={searchTerms}",
715 "UTF-8",
716 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
717 NULL,
718 SEARCH_ENGINE_BING,
719 IDR_SEARCH_ENGINE_LOGO_BING,
720 3,
721 };
722
723 const PrepopulatedEngine bing_hr_HR = {
724 L"Bing",
725 L"bing.com",
726 "http://www.bing.com/s/wlflag.ico",
727 L"http://www.bing.com/search?setmkt=hr-HR&q={searchTerms}",
728 "UTF-8",
729 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
730 NULL,
731 SEARCH_ENGINE_BING,
732 IDR_SEARCH_ENGINE_LOGO_BING,
733 3,
734 };
735
736 const PrepopulatedEngine bing_hu_HU = {
737 L"Bing",
738 L"bing.com",
739 "http://www.bing.com/s/wlflag.ico",
740 L"http://www.bing.com/search?setmkt=hu-HU&q={searchTerms}",
741 "UTF-8",
742 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
743 NULL,
744 SEARCH_ENGINE_BING,
745 IDR_SEARCH_ENGINE_LOGO_BING,
746 3,
747 };
748
749 const PrepopulatedEngine bing_it_IT = {
750 L"Bing",
751 L"bing.com",
752 "http://www.bing.com/s/wlflag.ico",
753 L"http://www.bing.com/search?setmkt=it-IT&q={searchTerms}",
754 "UTF-8",
755 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
756 NULL,
757 SEARCH_ENGINE_BING,
758 IDR_SEARCH_ENGINE_LOGO_BING,
759 3,
760 };
761
762 const PrepopulatedEngine bing_ja_JP = {
763 L"Bing",
764 L"bing.com",
765 "http://www.bing.com/s/wlflag.ico",
766 L"http://www.bing.com/search?setmkt=ja-JP&q={searchTerms}",
767 "UTF-8",
768 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
769 NULL,
770 SEARCH_ENGINE_BING,
771 IDR_SEARCH_ENGINE_LOGO_BING,
772 3,
773 };
774
775 const PrepopulatedEngine bing_ko_KR = {
776 L"Bing",
777 L"bing.com",
778 "http://www.bing.com/s/wlflag.ico",
779 L"http://www.bing.com/search?setmkt=ko-KR&q={searchTerms}",
780 "UTF-8",
781 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
782 NULL,
783 SEARCH_ENGINE_BING,
784 IDR_SEARCH_ENGINE_LOGO_BING,
785 3,
786 };
787
788 const PrepopulatedEngine bing_lt_LT = {
789 L"Bing",
790 L"bing.com",
791 "http://www.bing.com/s/wlflag.ico",
792 L"http://www.bing.com/search?setmkt=lt-LT&q={searchTerms}",
793 "UTF-8",
794 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
795 NULL,
796 SEARCH_ENGINE_BING,
797 IDR_SEARCH_ENGINE_LOGO_BING,
798 3,
799 };
800
801 const PrepopulatedEngine bing_lv_LV = {
802 L"Bing",
803 L"bing.com",
804 "http://www.bing.com/s/wlflag.ico",
805 L"http://www.bing.com/search?setmkt=lv-LV&q={searchTerms}",
806 "UTF-8",
807 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
808 NULL,
809 SEARCH_ENGINE_BING,
810 IDR_SEARCH_ENGINE_LOGO_BING,
811 3,
812 };
813
814 const PrepopulatedEngine bing_nb_NO = {
815 L"Bing",
816 L"bing.com",
817 "http://www.bing.com/s/wlflag.ico",
818 L"http://www.bing.com/search?setmkt=nb-NO&q={searchTerms}",
819 "UTF-8",
820 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
821 NULL,
822 SEARCH_ENGINE_BING,
823 IDR_SEARCH_ENGINE_LOGO_BING,
824 3,
825 };
826
827 const PrepopulatedEngine bing_nl_BE = {
828 L"Bing",
829 L"bing.com",
830 "http://www.bing.com/s/wlflag.ico",
831 L"http://www.bing.com/search?setmkt=nl-BE&q={searchTerms}",
832 "UTF-8",
833 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
834 NULL,
835 SEARCH_ENGINE_BING,
836 IDR_SEARCH_ENGINE_LOGO_BING,
837 3,
838 };
839
840 const PrepopulatedEngine bing_nl_NL = {
841 L"Bing",
842 L"bing.com",
843 "http://www.bing.com/s/wlflag.ico",
844 L"http://www.bing.com/search?setmkt=nl-NL&q={searchTerms}",
845 "UTF-8",
846 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
847 NULL,
848 SEARCH_ENGINE_BING,
849 IDR_SEARCH_ENGINE_LOGO_BING,
850 3,
851 };
852
853 const PrepopulatedEngine bing_pl_PL = {
854 L"Bing",
855 L"bing.com",
856 "http://www.bing.com/s/wlflag.ico",
857 L"http://www.bing.com/search?setmkt=pl-PL&q={searchTerms}",
858 "UTF-8",
859 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
860 NULL,
861 SEARCH_ENGINE_BING,
862 IDR_SEARCH_ENGINE_LOGO_BING,
863 3,
864 };
865
866 const PrepopulatedEngine bing_pt_BR = {
867 L"Bing",
868 L"bing.com",
869 "http://www.bing.com/s/wlflag.ico",
870 L"http://www.bing.com/search?setmkt=pt-BR&q={searchTerms}",
871 "UTF-8",
872 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
873 NULL,
874 SEARCH_ENGINE_BING,
875 IDR_SEARCH_ENGINE_LOGO_BING,
876 3,
877 };
878
879 const PrepopulatedEngine bing_pt_PT = {
880 L"Bing",
881 L"bing.com",
882 "http://www.bing.com/s/wlflag.ico",
883 L"http://www.bing.com/search?setmkt=pt-PT&q={searchTerms}",
884 "UTF-8",
885 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
886 NULL,
887 SEARCH_ENGINE_BING,
888 IDR_SEARCH_ENGINE_LOGO_BING,
889 3,
890 };
891
892 const PrepopulatedEngine bing_ro_RO = {
893 L"Bing",
894 L"bing.com",
895 "http://www.bing.com/s/wlflag.ico",
896 L"http://www.bing.com/search?setmkt=ro-RO&q={searchTerms}",
897 "UTF-8",
898 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
899 NULL,
900 SEARCH_ENGINE_BING,
901 IDR_SEARCH_ENGINE_LOGO_BING,
902 3,
903 };
904
905 const PrepopulatedEngine bing_ru_RU = {
906 L"Bing",
907 L"bing.com",
908 "http://www.bing.com/s/wlflag.ico",
909 L"http://www.bing.com/search?setmkt=ru-RU&q={searchTerms}",
910 "UTF-8",
911 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
912 NULL,
913 SEARCH_ENGINE_BING,
914 IDR_SEARCH_ENGINE_LOGO_BING,
915 3,
916 };
917
918 const PrepopulatedEngine bing_sl_SI = {
919 L"Bing",
920 L"bing.com",
921 "http://www.bing.com/s/wlflag.ico",
922 L"http://www.bing.com/search?setmkt=sl-SI&q={searchTerms}",
923 "UTF-8",
924 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
925 NULL,
926 SEARCH_ENGINE_BING,
927 IDR_SEARCH_ENGINE_LOGO_BING,
928 3,
929 };
930
931 const PrepopulatedEngine bing_sk_SK = {
932 L"Bing",
933 L"bing.com",
934 "http://www.bing.com/s/wlflag.ico",
935 L"http://www.bing.com/search?setmkt=sk-SK&q={searchTerms}",
936 "UTF-8",
937 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
938 NULL,
939 SEARCH_ENGINE_BING,
940 IDR_SEARCH_ENGINE_LOGO_BING,
941 3,
942 };
943
944 const PrepopulatedEngine bing_sv_SE = {
945 L"Bing",
946 L"bing.com",
947 "http://www.bing.com/s/wlflag.ico",
948 L"http://www.bing.com/search?setmkt=sv-SE&q={searchTerms}",
949 "UTF-8",
950 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
951 NULL,
952 SEARCH_ENGINE_BING,
953 IDR_SEARCH_ENGINE_LOGO_BING,
954 3,
955 };
956
957 const PrepopulatedEngine bing_th_TH = {
958 L"Bing",
959 L"bing.com",
960 "http://www.bing.com/s/wlflag.ico",
961 L"http://www.bing.com/search?setmkt=th-TH&q={searchTerms}",
962 "UTF-8",
963 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
964 NULL,
965 SEARCH_ENGINE_BING,
966 IDR_SEARCH_ENGINE_LOGO_BING,
967 3,
968 };
969
970 const PrepopulatedEngine bing_tr_TR = {
971 L"Bing",
972 L"bing.com",
973 "http://www.bing.com/s/wlflag.ico",
974 L"http://www.bing.com/search?setmkt=tr-TR&q={searchTerms}",
975 "UTF-8",
976 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
977 NULL,
978 SEARCH_ENGINE_BING,
979 IDR_SEARCH_ENGINE_LOGO_BING,
980 3,
981 };
982
983 const PrepopulatedEngine bing_uk_UA = {
984 L"Bing",
985 L"bing.com",
986 "http://www.bing.com/s/wlflag.ico",
987 L"http://www.bing.com/search?setmkt=uk-UA&q={searchTerms}",
988 "UTF-8",
989 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
990 NULL,
991 SEARCH_ENGINE_BING,
992 IDR_SEARCH_ENGINE_LOGO_BING,
993 3,
994 };
995
996 const PrepopulatedEngine bing_zh_CN = {
997 L"Bing",
998 L"bing.com",
999 "http://www.bing.com/s/wlflag.ico",
1000 L"http://www.bing.com/search?setmkt=zh-CN&q={searchTerms}",
1001 "UTF-8",
1002 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
1003 NULL,
1004 SEARCH_ENGINE_BING,
1005 IDR_SEARCH_ENGINE_LOGO_BING,
1006 3,
1007 };
1008
1009 const PrepopulatedEngine bing_zh_HK = {
1010 L"Bing",
1011 L"bing.com",
1012 "http://www.bing.com/s/wlflag.ico",
1013 L"http://www.bing.com/search?setmkt=zh-HK&q={searchTerms}",
1014 "UTF-8",
1015 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
1016 NULL,
1017 SEARCH_ENGINE_BING,
1018 IDR_SEARCH_ENGINE_LOGO_BING,
1019 3,
1020 };
1021
1022 const PrepopulatedEngine bing_zh_TW = {
1023 L"Bing",
1024 L"bing.com",
1025 "http://www.bing.com/s/wlflag.ico",
1026 L"http://www.bing.com/search?setmkt=zh-TW&q={searchTerms}",
1027 "UTF-8",
1028 L"http://api.bing.com/osjson.aspx?query={searchTerms}&language={language}",
1029 NULL,
1030 SEARCH_ENGINE_BING,
1031 IDR_SEARCH_ENGINE_LOGO_BING,
1032 3,
1033 };
1034
1035 const PrepopulatedEngine centrum_cz = {
1036 L"Centrum.cz",
1037 L"centrum.cz",
1038 "http://img.centrum.cz/6/vy2/o/favicon.ico",
1039 L"http://search.centrum.cz/index.php?charset={inputEncoding}&q={searchTerms}",
1040 "UTF-8",
1041 NULL,
1042 NULL,
1043 SEARCH_ENGINE_CENTRUM,
1044 IDR_SEARCH_ENGINE_LOGO_CENTRUM,
1045 26,
1046 };
1047
1048 const PrepopulatedEngine centrum_sk = {
1049 L"Centrum.sk",
1050 L"centrum.sk",
1051 "http://img.centrum.sk/4/favicon.ico",
1052 L"http://search.centrum.sk/index.php?charset={inputEncoding}&q={searchTerms}",
1053 "UTF-8",
1054 NULL,
1055 NULL,
1056 SEARCH_ENGINE_CENTRUM,
1057 IDR_SEARCH_ENGINE_LOGO_CENTRUM,
1058 26,
1059 };
1060
1061 const PrepopulatedEngine daum = {
1062 L"Daum",
1063 L"daum.net",
1064 "http://search.daum.net/favicon.ico",
1065 L"http://search.daum.net/search?q={searchTerms}",
1066 "EUC-KR",
1067 L"http://sug.search.daum.net/search_nsuggest?mod=fxjson&q={searchTerms}",
1068 NULL,
1069 SEARCH_ENGINE_DAUM,
1070 IDR_SEARCH_ENGINE_LOGO_DAUM,
1071 68,
1072 };
1073
1074 const PrepopulatedEngine delfi_lt = {
1075 L"DELFI",
1076 L"delfi.lt",
1077 "http://search.delfi.lt/img/favicon.png",
1078 L"http://search.delfi.lt/search.php?q={searchTerms}",
1079 "UTF-8",
1080 NULL,
1081 NULL,
1082 SEARCH_ENGINE_DELFI,
1083 IDR_SEARCH_ENGINE_LOGO_DELFI,
1084 45,
1085 };
1086
1087 const PrepopulatedEngine delfi_lv = {
1088 L"DELFI",
1089 L"delfi.lv",
1090 "http://smart.delfi.lv/img/smart_search.png",
1091 L"http://smart.delfi.lv/i.php?enc={inputEncoding}&q={searchTerms}",
1092 "UTF-8",
1093 NULL,
1094 NULL,
1095 SEARCH_ENGINE_DELFI,
1096 IDR_SEARCH_ENGINE_LOGO_DELFI,
1097 45,
1098 };
1099
1100 const PrepopulatedEngine diri = {
1101 L"diri",
1102 L"diri.bg",
1103 "http://i.dir.bg/diri/images/favicon.ico",
1104 L"http://diri.bg/search.php?textfield={searchTerms}",
1105 "windows-1251",
1106 NULL,
1107 NULL,
1108 SEARCH_ENGINE_DIRI,
1109 IDR_SEARCH_ENGINE_LOGO_DIRI,
1110 32,
1111 };
1112
1113 const PrepopulatedEngine eniro_fi = {
1114 L"Eniro",
1115 L"eniro.fi",
1116 "http://eniro.fi/favicon.ico",
1117 L"http://eniro.fi/query?search_word={searchTerms}&what=web_local",
1118 "ISO-8859-1",
1119 NULL,
1120 NULL,
1121 SEARCH_ENGINE_OTHER,
1122 kNoSearchEngineLogo,
1123 29,
1124 };
1125
1126 const PrepopulatedEngine eniro_se = {
1127 L"Eniro",
1128 L"eniro.se",
1129 "http://eniro.se/favicon.ico",
1130 L"http://eniro.se/query?search_word={searchTerms}&what=web_local",
1131 "ISO-8859-1",
1132 NULL,
1133 NULL,
1134 SEARCH_ENGINE_OTHER,
1135 kNoSearchEngineLogo,
1136 29,
1137 };
1138
1139 const PrepopulatedEngine fonecta_02_fi = {
1140 L"Fonecta 02.fi",
1141 L"www.fi",
1142 "http://www.02.fi/img/favicon.ico",
1143 L"http://www.02.fi/haku/{searchTerms}",
1144 "UTF-8",
1145 NULL,
1146 NULL,
1147 SEARCH_ENGINE_OTHER,
1148 kNoSearchEngineLogo,
1149 46,
1150 };
1151
1152 const PrepopulatedEngine go = {
1153 L"GO.com",
1154 L"go.com",
1155 "http://search.yahoo.com/favicon.ico",
1156 L"http://search.yahoo.com/search?ei={inputEncoding}&p={searchTerms}&"
1157 L"fr=hsusgo1",
1158 "ISO-8859-1",
1159 NULL,
1160 NULL,
1161 SEARCH_ENGINE_OTHER,
1162 kNoSearchEngineLogo,
1163 40,
1164 };
1165
1166 const PrepopulatedEngine goo = {
1167 L"goo",
1168 L"search.goo.ne.jp",
1169 "http://goo.ne.jp/favicon.ico",
1170 L"http://search.goo.ne.jp/web.jsp?MT={searchTerms}&IE={inputEncoding}",
1171 "UTF-8",
1172 NULL,
1173 NULL,
1174 SEARCH_ENGINE_GOO,
1175 IDR_SEARCH_ENGINE_LOGO_GOO,
1176 23,
1177 };
1178
1179 const PrepopulatedEngine google = {
1180 L"Google",
1181 NULL,
1182 "http://www.google.com/favicon.ico",
1183 L"{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"
1184 L"{google:originalQueryForSuggestion}sourceid=chrome&ie={inputEncoding}&"
1185 L"q={searchTerms}",
1186 "UTF-8",
1187 L"{google:baseSuggestURL}search?client=chrome&hl={language}&q={searchTerms}",
1188 L"{google:baseURL}webhp?{google:RLZ}sourceid=chrome-instant"
1189 L"&ie={inputEncoding}&ion=1{searchTerms}&nord=1",
1190 SEARCH_ENGINE_GOOGLE,
1191 IDR_SEARCH_ENGINE_LOGO_GOOGLE,
1192 1,
1193 };
1194
1195 const PrepopulatedEngine guruji = {
1196 L"guruji",
1197 L"guruji.com",
1198 "http://guruji.com/favicon.ico",
1199 L"http://guruji.com/search?q={searchTerms}",
1200 "UTF-8",
1201 NULL,
1202 NULL,
1203 SEARCH_ENGINE_OTHER,
1204 kNoSearchEngineLogo,
1205 38,
1206 };
1207
1208 const PrepopulatedEngine hispavista = {
1209 L"hispavista",
1210 L"hispavista.com",
1211 "http://buscar.hispavista.com/favicon.ico",
1212 L"http://buscar.hispavista.com/?cadena={searchTerms}",
1213 "iso-8859-1",
1214 NULL,
1215 NULL,
1216 SEARCH_ENGINE_OTHER,
1217 kNoSearchEngineLogo,
1218 18,
1219 };
1220
1221 const PrepopulatedEngine in = {
1222 L"in.gr",
1223 L"in.gr",
1224 "http://www.in.gr/favicon.ico",
1225 L"http://find.in.gr/?qs={searchTerms}",
1226 "ISO-8859-7",
1227 NULL,
1228 NULL,
1229 SEARCH_ENGINE_IN,
1230 IDR_SEARCH_ENGINE_LOGO_IN,
1231 54,
1232 };
1233
1234 const PrepopulatedEngine jabse = {
1235 L"Jabse",
1236 L"jabse.com",
1237 "http://www.jabse.com/favicon.ico",
1238 L"http://www.jabse.com/searchmachine.php?query={searchTerms}",
1239 "UTF-8",
1240 NULL,
1241 NULL,
1242 SEARCH_ENGINE_OTHER,
1243 kNoSearchEngineLogo,
1244 19,
1245 };
1246
1247 const PrepopulatedEngine jubii = {
1248 L"Jubii",
1249 L"jubii.dk",
1250 "http://search.jubii.dk/favicon_jubii.ico",
1251 L"http://search.jubii.dk/cgi-bin/pursuit?query={searchTerms}",
1252 "ISO-8859-1",
1253 NULL,
1254 NULL,
1255 SEARCH_ENGINE_OTHER,
1256 kNoSearchEngineLogo,
1257 28,
1258 };
1259
1260 const PrepopulatedEngine kvasir = {
1261 L"Kvasir",
1262 L"kvasir.no",
1263 "http://www.kvasir.no/img/favicon.ico",
1264 L"http://www.kvasir.no/nettsok/searchResult.html?searchExpr={searchTerms}",
1265 "ISO-8859-1",
1266 NULL,
1267 NULL,
1268 SEARCH_ENGINE_OTHER,
1269 kNoSearchEngineLogo,
1270 73,
1271 };
1272
1273 const PrepopulatedEngine latne = {
1274 L"LATNE",
1275 L"latne.lv",
1276 "http://latne.lv/favicon.ico",
1277 L"http://latne.lv/siets.php?q={searchTerms}",
1278 "UTF-8",
1279 NULL,
1280 NULL,
1281 SEARCH_ENGINE_OTHER,
1282 kNoSearchEngineLogo,
1283 71,
1284 };
1285
1286 const PrepopulatedEngine leit = {
1287 L"leit.is",
1288 L"leit.is",
1289 "http://leit.is/leit.ico",
1290 L"http://leit.is/query.aspx?qt={searchTerms}",
1291 "ISO-8859-1",
1292 NULL,
1293 NULL,
1294 SEARCH_ENGINE_OTHER,
1295 kNoSearchEngineLogo,
1296 59,
1297 };
1298
1299 const PrepopulatedEngine libero = {
1300 L"Libero",
1301 L"libero.it",
1302 "http://arianna.libero.it/favicon.ico",
1303 L"http://arianna.libero.it/search/abin/integrata.cgi?query={searchTerms}",
1304 "ISO-8859-1",
1305 NULL,
1306 NULL,
1307 SEARCH_ENGINE_OTHER,
1308 kNoSearchEngineLogo,
1309 63,
1310 };
1311
1312 const PrepopulatedEngine mail_ru = {
1313 L"@MAIL.RU",
1314 L"mail.ru",
1315 "http://img.go.mail.ru/favicon.ico",
1316 L"http://go.mail.ru/search?q={searchTerms}",
1317 "windows-1251",
1318 NULL,
1319 NULL,
1320 SEARCH_ENGINE_MAILRU,
1321 IDR_SEARCH_ENGINE_LOGO_MAILRU,
1322 83,
1323 };
1324
1325 const PrepopulatedEngine maktoob = {
1326 L"\x0645\x0643\x062a\x0648\x0628",
1327 L"maktoob.com",
1328 "http://www.maktoob.com/favicon.ico",
1329 L"http://www.maktoob.com/searchResult.php?q={searchTerms}",
1330 "UTF-8",
1331 NULL,
1332 NULL,
1333 SEARCH_ENGINE_OTHER,
1334 kNoSearchEngineLogo,
1335 13,
1336 };
1337
1338 const PrepopulatedEngine masrawy = {
1339 L"\x0645\x0635\x0631\x0627\x0648\x064a",
1340 L"masrawy.com",
1341 "http://www.masrawy.com/new/images/masrawy.ico",
1342 L"http://masrawy.com/new/search.aspx?sr={searchTerms}",
1343 "windows-1256",
1344 NULL,
1345 NULL,
1346 SEARCH_ENGINE_OTHER,
1347 kNoSearchEngineLogo,
1348 14,
1349 };
1350
1351 const PrepopulatedEngine mynet = {
1352 L"MYNET",
1353 L"mynet.com",
1354 "http://img.mynet.com/mynetfavori.ico",
1355 L"http://arama.mynet.com/search.aspx?q={searchTerms}&pg=q",
1356 "windows-1254",
1357 NULL,
1358 NULL,
1359 SEARCH_ENGINE_OTHER,
1360 kNoSearchEngineLogo,
1361 101,
1362 };
1363
1364 const PrepopulatedEngine najdi = {
1365 L"Najdi.si",
1366 L"najdi.si",
1367 "http://www.najdi.si/master/favicon.ico",
1368 L"http://www.najdi.si/search.jsp?q={searchTerms}",
1369 "UTF-8",
1370 NULL,
1371 NULL,
1372 SEARCH_ENGINE_NAJDI,
1373 IDR_SEARCH_ENGINE_LOGO_NAJDI,
1374 87,
1375 };
1376
1377 const PrepopulatedEngine nate = {
1378 L"\xb124\xc774\xd2b8\xb2f7\xcef4",
1379 L"nate.com",
1380 "http://nate.search.empas.com/favicon.ico",
1381 L"http://nate.search.empas.com/search/all.html?q={searchTerms}",
1382 "EUC-KR",
1383 NULL,
1384 NULL,
1385 SEARCH_ENGINE_OTHER,
1386 kNoSearchEngineLogo,
1387 69,
1388 };
1389
1390 const PrepopulatedEngine naver = {
1391 L"\xb124\xc774\xbc84",
1392 L"naver.com",
1393 "http://search.naver.com/favicon.ico",
1394 L"http://search.naver.com/search.naver?ie={inputEncoding}"
1395 L"&query={searchTerms}",
1396 "UTF-8",
1397 L"http://ac.search.naver.com/autocompl?m=s&ie={inputEncoding}&oe=utf-8&"
1398 L"q={searchTerms}",
1399 NULL,
1400 SEARCH_ENGINE_NAVER,
1401 IDR_SEARCH_ENGINE_LOGO_NAVER,
1402 67,
1403 };
1404
1405 const PrepopulatedEngine neti = {
1406 L"NETI",
1407 L"neti.ee",
1408 "http://www.neti.ee/favicon.ico",
1409 L"http://www.neti.ee/cgi-bin/otsing?query={searchTerms}",
1410 "ISO-8859-1",
1411 NULL,
1412 NULL,
1413 SEARCH_ENGINE_NETI,
1414 IDR_SEARCH_ENGINE_LOGO_NETI,
1415 44,
1416 };
1417
1418 const PrepopulatedEngine netsprint = {
1419 L"NetSprint",
1420 L"netsprint.pl",
1421 "http://netsprint.pl/favicon.ico",
1422 L"http://www.netsprint.pl/serwis/search?q={searchTerms}",
1423 "UTF-8",
1424 NULL,
1425 NULL,
1426 SEARCH_ENGINE_NETSPRINT,
1427 IDR_SEARCH_ENGINE_LOGO_NETSPRINT,
1428 30,
1429 };
1430
1431 const PrepopulatedEngine nur_kz = {
1432 L"NUR.KZ",
1433 L"nur.kz",
1434 "http://www.nur.kz/favicon_kz.ico",
1435 L"http://search.nur.kz/?encoding={inputEncoding}&query={searchTerms}",
1436 "UTF-8",
1437 NULL,
1438 NULL,
1439 SEARCH_ENGINE_OTHER,
1440 kNoSearchEngineLogo,
1441 20,
1442 };
1443
1444 const PrepopulatedEngine ok = {
1445 L"OK.hu",
1446 L"ok.hu",
1447 "http://ok.hu/gfx/favicon.ico",
1448 L"http://ok.hu/katalogus?q={searchTerms}",
1449 "ISO-8859-2",
1450 NULL,
1451 NULL,
1452 SEARCH_ENGINE_OK,
1453 IDR_SEARCH_ENGINE_LOGO_OK,
1454 6,
1455 };
1456
1457 const PrepopulatedEngine onet = {
1458 L"Onet.pl",
1459 L"onet.pl",
1460 "http://szukaj.onet.pl/favicon.ico",
1461 L"http://szukaj.onet.pl/query.html?qt={searchTerms}",
1462 "ISO-8859-2",
1463 NULL,
1464 NULL,
1465 SEARCH_ENGINE_OTHER,
1466 kNoSearchEngineLogo,
1467 75,
1468 };
1469
1470 const PrepopulatedEngine pogodak_ba = {
1471 L"Pogodak!",
1472 L"pogodak.ba",
1473 "http://www.pogodak.ba/favicon.ico",
1474 L"http://www.pogodak.ba/search.jsp?q={searchTerms}",
1475 "UTF-8",
1476 NULL,
1477 NULL,
1478 SEARCH_ENGINE_POGODAK,
1479 IDR_SEARCH_ENGINE_LOGO_POGODAK,
1480 24,
1481 };
1482
1483 const PrepopulatedEngine pogodak_hr = {
1484 L"Pogodak!",
1485 L"pogodak.hr",
1486 "http://www.pogodak.hr/favicon.ico",
1487 L"http://www.pogodak.hr/search.jsp?q={searchTerms}",
1488 "UTF-8",
1489 NULL,
1490 NULL,
1491 SEARCH_ENGINE_POGODAK,
1492 IDR_SEARCH_ENGINE_LOGO_POGODAK,
1493 24,
1494 };
1495
1496 const PrepopulatedEngine pogodak_rs = {
1497 L"Pogodak!",
1498 L"pogodak.rs",
1499 "http://www.pogodak.rs/favicon.ico",
1500 L"http://www.pogodak.rs/search.jsp?q={searchTerms}",
1501 "UTF-8",
1502 NULL,
1503 NULL,
1504 SEARCH_ENGINE_POGODAK,
1505 IDR_SEARCH_ENGINE_LOGO_POGODAK,
1506 24,
1507 };
1508
1509 const PrepopulatedEngine pogodok = {
1510 L"\x041f\x043e\x0433\x043e\x0434\x043e\x043a!",
1511 L"pogodok.com.mk",
1512 "http://www.pogodok.com.mk/favicon.ico",
1513 L"http://www.pogodok.com.mk/search.jsp?q={searchTerms}",
1514 "UTF-8",
1515 NULL,
1516 NULL,
1517 SEARCH_ENGINE_POGODOK_MK,
1518 IDR_SEARCH_ENGINE_LOGO_POGODOK_MK,
1519 24, // Really the same engine as Pogodak, just has a small name change.
1520 };
1521
1522 const PrepopulatedEngine rambler = {
1523 L"Rambler",
1524 L"rambler.ru",
1525 "http://www.rambler.ru/favicon.ico",
1526 L"http://www.rambler.ru/srch?words={searchTerms}",
1527 "windows-1251",
1528 NULL,
1529 NULL,
1530 SEARCH_ENGINE_RAMBLER,
1531 IDR_SEARCH_ENGINE_LOGO_RAMBLER,
1532 16,
1533 };
1534
1535 const PrepopulatedEngine rediff = {
1536 L"Rediff",
1537 L"rediff.com",
1538 "http://search1.rediff.com/favicon.ico",
1539 L"http://search1.rediff.com/dirsrch/default.asp?MT={searchTerms}",
1540 "UTF-8",
1541 NULL,
1542 NULL,
1543 SEARCH_ENGINE_OTHER,
1544 kNoSearchEngineLogo,
1545 37,
1546 };
1547
1548 const PrepopulatedEngine rednano = {
1549 L"Rednano",
1550 L"rednano.sg",
1551 "http://rednano.sg/favicon.ico",
1552 L"http://rednano.sg/sfe/lwi.action?querystring={searchTerms}",
1553 "UTF-8",
1554 NULL,
1555 NULL,
1556 SEARCH_ENGINE_OTHER,
1557 kNoSearchEngineLogo,
1558 41,
1559 };
1560
1561 const PrepopulatedEngine sanook = {
1562 L"\x0e2a\x0e19\x0e38\x0e01!",
1563 L"sanook.com",
1564 "http://search.sanook.com/favicon.ico",
1565 L"http://search.sanook.com/search.php?q={searchTerms}",
1566 "UTF-8",
1567 NULL,
1568 NULL,
1569 SEARCH_ENGINE_SANOOK,
1570 IDR_SEARCH_ENGINE_LOGO_SANOOK,
1571 100,
1572 };
1573
1574 const PrepopulatedEngine sapo = {
1575 L"SAPO",
1576 L"sapo.pt",
1577 "http://imgs.sapo.pt/images/sapo.ico",
1578 L"http://pesquisa.sapo.pt/?q={searchTerms}",
1579 "UTF-8",
1580 L"http://pesquisa.sapo.pt/livesapo?q={searchTerms}",
1581 NULL,
1582 SEARCH_ENGINE_SAPO,
1583 IDR_SEARCH_ENGINE_LOGO_SAPO,
1584 77,
1585 };
1586
1587 const PrepopulatedEngine search_de_CH = {
1588 L"search.ch",
1589 L"search.ch",
1590 "http://www.search.ch/favicon.ico",
1591 L"http://www.search.ch/index.de.html?q={searchTerms}",
1592 "ISO-8859-1",
1593 NULL,
1594 NULL,
1595 SEARCH_ENGINE_OTHER,
1596 kNoSearchEngineLogo,
1597 51,
1598 };
1599
1600 const PrepopulatedEngine search_fr_CH = {
1601 L"search.ch",
1602 L"", // search.ch is taken by search_de_CH.
1603 "http://www.search.ch/favicon.ico",
1604 L"http://www.search.ch/index.fr.html?q={searchTerms}",
1605 "ISO-8859-1",
1606 NULL,
1607 NULL,
1608 SEARCH_ENGINE_OTHER,
1609 kNoSearchEngineLogo,
1610 22,
1611 };
1612
1613 const PrepopulatedEngine seznam = {
1614 L"Seznam",
1615 L"seznam.cz",
1616 "http://1.im.cz/szn/img/favicon.ico",
1617 L"http://search.seznam.cz/?q={searchTerms}",
1618 "UTF-8",
1619 L"http:///suggest.fulltext.seznam.cz/?dict=fulltext_ff&phrase={searchTerms}&"
1620 L"encoding={inputEncoding}&response_encoding=utf-8",
1621 NULL,
1622 SEARCH_ENGINE_SEZNAM,
1623 IDR_SEARCH_ENGINE_LOGO_SEZNAM,
1624 25,
1625 };
1626
1627 const PrepopulatedEngine spray = {
1628 L"Spray",
1629 L"spray.se",
1630 "http://www.eniro.se/favicon.ico",
1631 L"http://www.eniro.se/query?ax=spray&search_word={searchTerms}&what=web",
1632 "ISO-8859-1",
1633 NULL,
1634 NULL,
1635 SEARCH_ENGINE_OTHER,
1636 kNoSearchEngineLogo,
1637 99,
1638 };
1639
1640 const PrepopulatedEngine terra_ar = {
1641 L"Terra Argentina",
1642 L"terra.com.ar",
1643 "http://buscar.terra.com.ar/favicon.ico",
1644 L"http://buscar.terra.com.ar/Default.aspx?query={searchTerms}&source=Search",
1645 "ISO-8859-1",
1646 NULL,
1647 NULL,
1648 SEARCH_ENGINE_OTHER,
1649 kNoSearchEngineLogo,
1650 90,
1651 };
1652
1653 const PrepopulatedEngine terra_es = {
1654 L"Terra",
1655 L"terra.es",
1656 "http://buscador.terra.es/favicon.ico",
1657 L"http://buscador.terra.es/Default.aspx?query={searchTerms}&source=Search",
1658 "ISO-8859-1",
1659 NULL,
1660 NULL,
1661 SEARCH_ENGINE_OTHER,
1662 kNoSearchEngineLogo,
1663 90,
1664 };
1665
1666 const PrepopulatedEngine tut = {
1667 L"TUT.BY",
1668 L"tut.by",
1669 "http://www.tut.by/favicon.ico",
1670 L"http://search.tut.by/?query={searchTerms}",
1671 "windows-1251",
1672 NULL,
1673 NULL,
1674 SEARCH_ENGINE_TUT,
1675 IDR_SEARCH_ENGINE_LOGO_TUT,
1676 17,
1677 };
1678
1679 const PrepopulatedEngine uol = {
1680 L"UOL Busca",
1681 L"busca.uol.com.br",
1682 "http://busca.uol.com.br/favicon.ico",
1683 L"http://busca.uol.com.br/www/index.html?q={searchTerms}",
1684 "ISO-8859-1",
1685 NULL,
1686 NULL,
1687 SEARCH_ENGINE_OTHER,
1688 kNoSearchEngineLogo,
1689 82,
1690 };
1691
1692 const PrepopulatedEngine virgilio = {
1693 L"Virgilio",
1694 L"virgilio.it",
1695 "http://ricerca.alice.it/favicon.ico",
1696 L"http://ricerca.alice.it/ricerca?qs={searchTerms}",
1697 "ISO-8859-1",
1698 NULL,
1699 NULL,
1700 SEARCH_ENGINE_VIRGILIO,
1701 IDR_SEARCH_ENGINE_LOGO_VIRGILIO,
1702 62,
1703 };
1704
1705 const PrepopulatedEngine walla = {
1706 L"\x05d5\x05d5\x05d0\x05dc\x05d4!",
1707 L"walla.co.il",
1708 "http://www.walla.co.il/favicon.ico",
1709 L"http://search.walla.co.il/?e=hew&q={searchTerms}",
1710 "windows-1255",
1711 NULL,
1712 NULL,
1713 SEARCH_ENGINE_WALLA,
1714 IDR_SEARCH_ENGINE_LOGO_WALLA,
1715 55,
1716 };
1717
1718 const PrepopulatedEngine wp = {
1719 L"Wirtualna Polska",
1720 L"wp.pl",
1721 "http://szukaj.wp.pl/favicon.ico",
1722 L"http://szukaj.wp.pl/szukaj.html?szukaj={searchTerms}",
1723 "ISO-8859-2",
1724 NULL,
1725 NULL,
1726 SEARCH_ENGINE_OTHER,
1727 kNoSearchEngineLogo,
1728 76,
1729 };
1730
1731 const PrepopulatedEngine yahoo = {
1732 L"Yahoo!",
1733 L"yahoo.com",
1734 "http://search.yahoo.com/favicon.ico",
1735 L"http://search.yahoo.com/search?ei={inputEncoding}&fr=crmas&p={searchTerms}",
1736 "UTF-8",
1737 L"http://ff.search.yahoo.com/gossip?output=fxjson&command={searchTerms}",
1738 NULL,
1739 SEARCH_ENGINE_YAHOO,
1740 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1741 2,
1742 };
1743
1744 // For regional Yahoo variants without region-specific suggestion service,
1745 // suggestion is disabled. For some of them, we might consider
1746 // using a fallback (e.g. de for at/ch, ca or fr for qc, en for nl, no, hk).
1747 const PrepopulatedEngine yahoo_ar = {
1748 L"Yahoo! Argentina",
1749 L"ar.yahoo.com",
1750 "http://ar.search.yahoo.com/favicon.ico",
1751 L"http://ar.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1752 L"p={searchTerms}",
1753 "UTF-8",
1754 L"http://ar-sayt.ff.search.yahoo.com/gossip-ar-sayt?output=fxjson&"
1755 L"command={searchTerms}",
1756 NULL,
1757 SEARCH_ENGINE_YAHOO,
1758 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1759 2,
1760 };
1761
1762 const PrepopulatedEngine yahoo_at = {
1763 L"Yahoo! Suche",
1764 L"at.yahoo.com",
1765 "http://at.search.yahoo.com/favicon.ico",
1766 L"http://at.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1767 L"p={searchTerms}",
1768 "UTF-8",
1769 NULL,
1770 NULL,
1771 SEARCH_ENGINE_YAHOO,
1772 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1773 2,
1774 };
1775
1776 const PrepopulatedEngine yahoo_au = {
1777 L"Yahoo!7",
1778 L"au.yahoo.com",
1779 "http://au.search.yahoo.com/favicon.ico",
1780 L"http://au.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1781 L"p={searchTerms}",
1782 "UTF-8",
1783 L"http://aue-sayt.ff.search.yahoo.com/gossip-au-sayt?output=fxjson&"
1784 L"command={searchTerms}",
1785 NULL,
1786 SEARCH_ENGINE_YAHOO,
1787 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1788 2,
1789 };
1790
1791 const PrepopulatedEngine yahoo_br = {
1792 L"Yahoo! Brasil",
1793 L"br.yahoo.com",
1794 "http://br.search.yahoo.com/favicon.ico",
1795 L"http://br.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1796 L"p={searchTerms}",
1797 "UTF-8",
1798 L"http://br-sayt.ff.search.yahoo.com/gossip-br-sayt?output=fxjson&"
1799 L"command={searchTerms}",
1800 NULL,
1801 SEARCH_ENGINE_YAHOO,
1802 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1803 2,
1804 };
1805
1806 const PrepopulatedEngine yahoo_ca = {
1807 L"Yahoo! Canada",
1808 L"ca.yahoo.com",
1809 "http://ca.search.yahoo.com/favicon.ico",
1810 L"http://ca.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1811 L"p={searchTerms}",
1812 "UTF-8",
1813 L"http://gossip.ca.yahoo.com/gossip-ca-sayt?output=fxjsonp&"
1814 L"command={searchTerms}",
1815 NULL,
1816 SEARCH_ENGINE_YAHOO,
1817 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1818 2,
1819 };
1820
1821 const PrepopulatedEngine yahoo_ch = {
1822 L"Yahoo! Suche",
1823 L"ch.yahoo.com",
1824 "http://ch.search.yahoo.com/favicon.ico",
1825 L"http://ch.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1826 L"p={searchTerms}",
1827 "UTF-8",
1828 NULL,
1829 NULL,
1830 SEARCH_ENGINE_YAHOO,
1831 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1832 2,
1833 };
1834
1835 const PrepopulatedEngine yahoo_cl = {
1836 L"Yahoo! Chile",
1837 L"cl.yahoo.com",
1838 "http://cl.search.yahoo.com/favicon.ico",
1839 L"http://cl.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1840 L"p={searchTerms}",
1841 "UTF-8",
1842 L"http://gossip.telemundo.yahoo.com/gossip-e1-sayt?output=fxjson&"
1843 L"command={searchTerms}",
1844 NULL,
1845 SEARCH_ENGINE_YAHOO,
1846 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1847 2,
1848 };
1849
1850 const PrepopulatedEngine yahoo_cn = {
1851 L"\x4e2d\x56fd\x96c5\x864e",
1852 L"cn.yahoo.com",
1853 "http://search.cn.yahoo.com/favicon.ico",
1854 L"http://search.cn.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1855 L"p={searchTerms}",
1856 "GB2312",
1857 // http://cn.yahoo.com/cnsuggestion/suggestion.inc.php?of=fxjson&query=
1858 // returns in a proprietary format ('|' delimeted word list).
1859 NULL,
1860 NULL,
1861 SEARCH_ENGINE_YAHOO,
1862 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1863 2,
1864 };
1865
1866 const PrepopulatedEngine yahoo_co = {
1867 L"Yahoo! Colombia",
1868 L"co.yahoo.com",
1869 "http://co.search.yahoo.com/favicon.ico",
1870 L"http://co.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1871 L"p={searchTerms}",
1872 "UTF-8",
1873 L"http://gossip.telemundo.yahoo.com/gossip-e1-sayt?output=fxjson&"
1874 L"command={searchTerms}",
1875 NULL,
1876 SEARCH_ENGINE_YAHOO,
1877 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1878 2,
1879 };
1880
1881 const PrepopulatedEngine yahoo_de = {
1882 L"Yahoo! Deutschland",
1883 L"de.yahoo.com",
1884 "http://de.search.yahoo.com/favicon.ico",
1885 L"http://de.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1886 L"p={searchTerms}",
1887 "UTF-8",
1888 L"http://de-sayt.ff.search.yahoo.com/gossip-de-sayt?output=fxjson&"
1889 L"command={searchTerms}",
1890 NULL,
1891 SEARCH_ENGINE_YAHOO,
1892 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1893 2,
1894 };
1895
1896 const PrepopulatedEngine yahoo_dk = {
1897 L"Yahoo! Danmark",
1898 L"dk.yahoo.com",
1899 "http://dk.search.yahoo.com/favicon.ico",
1900 L"http://dk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1901 L"p={searchTerms}",
1902 "UTF-8",
1903 NULL,
1904 NULL,
1905 SEARCH_ENGINE_YAHOO,
1906 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1907 2,
1908 };
1909
1910 const PrepopulatedEngine yahoo_es = {
1911 L"Yahoo! Espa" L"\x00f1" L"a",
1912 L"es.yahoo.com",
1913 "http://es.search.yahoo.com/favicon.ico",
1914 L"http://es.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1915 L"p={searchTerms}",
1916 "UTF-8",
1917 L"http://es-sayt.ff.search.yahoo.com/gossip-es-sayt?output=fxjson&"
1918 L"command={searchTerms}",
1919 NULL,
1920 SEARCH_ENGINE_YAHOO,
1921 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1922 2,
1923 };
1924
1925 const PrepopulatedEngine yahoo_fi = {
1926 L"Yahoo!-haku",
1927 L"fi.yahoo.com",
1928 "http://fi.search.yahoo.com/favicon.ico",
1929 L"http://fi.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1930 L"p={searchTerms}",
1931 "UTF-8",
1932 NULL,
1933 NULL,
1934 SEARCH_ENGINE_YAHOO,
1935 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1936 2,
1937 };
1938
1939 const PrepopulatedEngine yahoo_fr = {
1940 L"Yahoo! France",
1941 L"fr.yahoo.com",
1942 "http://fr.search.yahoo.com/favicon.ico",
1943 L"http://fr.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1944 L"p={searchTerms}",
1945 "UTF-8",
1946 L"http://fr-sayt.ff.search.yahoo.com/gossip-fr-sayt?output=fxjson&"
1947 L"command={searchTerms}",
1948 NULL,
1949 SEARCH_ENGINE_YAHOO,
1950 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1951 2,
1952 };
1953
1954 const PrepopulatedEngine yahoo_hk = {
1955 L"Yahoo! Hong Kong",
1956 L"hk.yahoo.com",
1957 "http://hk.search.yahoo.com/favicon.ico",
1958 L"http://hk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1959 L"p={searchTerms}",
1960 "UTF-8",
1961 // http://history.hk.search.yahoo.com/ac/ac_msearch.php?query={searchTerms}
1962 // returns a JSON with key-value pairs. Setting parameters (ot, of, output)
1963 // to fxjson, json, or js doesn't help.
1964 NULL,
1965 NULL,
1966 SEARCH_ENGINE_YAHOO,
1967 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1968 2,
1969 };
1970
1971 const PrepopulatedEngine yahoo_id = {
1972 L"Yahoo! Indonesia",
1973 L"id.yahoo.com",
1974 "http://id.search.yahoo.com/favicon.ico",
1975 L"http://id.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1976 L"p={searchTerms}",
1977 "UTF-8",
1978 L"http://id-sayt.ff.search.yahoo.com/gossip-id-sayt?output=fxjson&"
1979 L"command={searchTerms}",
1980 NULL,
1981 SEARCH_ENGINE_YAHOO,
1982 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1983 2,
1984 };
1985
1986 const PrepopulatedEngine yahoo_in = {
1987 L"Yahoo! India",
1988 L"in.yahoo.com",
1989 "http://in.search.yahoo.com/favicon.ico",
1990 L"http://in.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
1991 L"p={searchTerms}",
1992 "UTF-8",
1993 L"http://in-sayt.ff.search.yahoo.com/gossip-in-sayt?output=fxjson&"
1994 L"command={searchTerms}",
1995 NULL,
1996 SEARCH_ENGINE_YAHOO,
1997 IDR_SEARCH_ENGINE_LOGO_YAHOO,
1998 2,
1999 };
2000
2001 const PrepopulatedEngine yahoo_it = {
2002 L"Yahoo! Italia",
2003 L"it.yahoo.com",
2004 "http://it.search.yahoo.com/favicon.ico",
2005 L"http://it.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2006 L"p={searchTerms}",
2007 "UTF-8",
2008 L"http://it-sayt.ff.search.yahoo.com/gossip-it-sayt?output=fxjson&"
2009 L"command={searchTerms}",
2010 NULL,
2011 SEARCH_ENGINE_YAHOO,
2012 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2013 2,
2014 };
2015
2016 const PrepopulatedEngine yahoo_jp = {
2017 L"Yahoo! JAPAN",
2018 L"yahoo.co.jp",
2019 "http://search.yahoo.co.jp/favicon.ico",
2020 L"http://search.yahoo.co.jp/search?ei={inputEncoding}&fr=crmas&"
2021 L"p={searchTerms}",
2022 "UTF-8",
2023 NULL,
2024 NULL,
2025 SEARCH_ENGINE_YAHOOJP,
2026 IDR_SEARCH_ENGINE_LOGO_YAHOOJP,
2027 2,
2028 };
2029
2030 const PrepopulatedEngine yahoo_kr = {
2031 L"\xc57c\xd6c4! \xcf54\xb9ac\xc544",
2032 L"kr.yahoo.com",
2033 "http://kr.search.yahoo.com/favicon.ico",
2034 L"http://kr.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2035 L"p={searchTerms}",
2036 "UTF-8",
2037 L"http://kr.atc.search.yahoo.com/atcx.php?property=main&ot=fxjson&"
2038 L"ei=utf8&eo=utf8&command={searchTerms}",
2039 NULL,
2040 SEARCH_ENGINE_YAHOO,
2041 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2042 2,
2043 };
2044
2045 const PrepopulatedEngine yahoo_malaysia = {
2046 L"Yahoo! Malaysia",
2047 L"malaysia.yahoo.com",
2048 "http://malaysia.search.yahoo.com/favicon.ico",
2049 L"http://malaysia.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2050 L"p={searchTerms}",
2051 "UTF-8",
2052 L"http://my-sayt.ff.search.yahoo.com/gossip-my-sayt?output=fxjson&"
2053 L"command={searchTerms}",
2054 NULL,
2055 SEARCH_ENGINE_YAHOO,
2056 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2057 2,
2058 };
2059
2060 const PrepopulatedEngine yahoo_mx = {
2061 L"Yahoo! M\x00e9xico",
2062 L"mx.yahoo.com",
2063 "http://mx.search.yahoo.com/favicon.ico",
2064 L"http://mx.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2065 L"p={searchTerms}",
2066 "UTF-8",
2067 L"http://gossip.mx.yahoo.com/gossip-mx-sayt?output=fxjsonp&"
2068 L"command={searchTerms}",
2069 NULL,
2070 SEARCH_ENGINE_YAHOO,
2071 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2072 2,
2073 };
2074
2075 const PrepopulatedEngine yahoo_nl = {
2076 L"Yahoo! Nederland",
2077 L"nl.yahoo.com",
2078 "http://nl.search.yahoo.com/favicon.ico",
2079 L"http://nl.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2080 L"p={searchTerms}",
2081 "UTF-8",
2082 NULL,
2083 NULL,
2084 SEARCH_ENGINE_YAHOO,
2085 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2086 2,
2087 };
2088
2089 const PrepopulatedEngine yahoo_no = {
2090 L"Yahoo! Norge",
2091 L"no.yahoo.com",
2092 "http://no.search.yahoo.com/favicon.ico",
2093 L"http://no.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2094 L"p={searchTerms}",
2095 "UTF-8",
2096 NULL,
2097 NULL,
2098 SEARCH_ENGINE_YAHOO,
2099 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2100 2,
2101 };
2102
2103 const PrepopulatedEngine yahoo_nz = {
2104 L"Yahoo!Xtra",
2105 L"nz.yahoo.com",
2106 "http://nz.search.yahoo.com/favicon.ico",
2107 L"http://nz.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2108 L"p={searchTerms}",
2109 "UTF-8",
2110 L"http://aue-sayt.ff.search.yahoo.com/gossip-nz-sayt?output=fxjson&"
2111 L"command={searchTerms}",
2112 NULL,
2113 SEARCH_ENGINE_YAHOO,
2114 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2115 2,
2116 };
2117
2118 const PrepopulatedEngine yahoo_pe = {
2119 L"Yahoo! Per\x00fa",
2120 L"pe.yahoo.com",
2121 "http://pe.search.yahoo.com/favicon.ico",
2122 L"http://pe.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2123 L"p={searchTerms}",
2124 "UTF-8",
2125 L"http://gossip.telemundo.yahoo.com/gossip-e1-sayt?output=fxjson&"
2126 L"command={searchTerms}",
2127 NULL,
2128 SEARCH_ENGINE_YAHOO,
2129 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2130 2,
2131 };
2132
2133 const PrepopulatedEngine yahoo_ph = {
2134 L"Yahoo! Philippines",
2135 L"ph.yahoo.com",
2136 "http://ph.search.yahoo.com/favicon.ico",
2137 L"http://ph.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2138 L"p={searchTerms}",
2139 "UTF-8",
2140 L"http://ph-sayt.ff.search.yahoo.com/gossip-ph-sayt?output=fxjson&"
2141 L"command={searchTerms}",
2142 NULL,
2143 SEARCH_ENGINE_YAHOO,
2144 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2145 2,
2146 };
2147
2148 const PrepopulatedEngine yahoo_qc = {
2149 L"Yahoo! Qu" L"\x00e9" L"bec",
2150 L"qc.yahoo.com",
2151 "http://qc.search.yahoo.com/favicon.ico",
2152 L"http://qc.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2153 L"p={searchTerms}",
2154 "UTF-8",
2155 NULL,
2156 NULL,
2157 SEARCH_ENGINE_YAHOOQC,
2158 IDR_SEARCH_ENGINE_LOGO_YAHOOQC,
2159 5, // Can't be 2 as this has to appear in the Canada list alongside yahoo_ca.
2160 };
2161
2162 const PrepopulatedEngine yahoo_ru = {
2163 L"Yahoo! \x043f\x043e-\x0440\x0443\x0441\x0441\x043a\x0438",
2164 L"ru.yahoo.com",
2165 "http://ru.search.yahoo.com/favicon.ico",
2166 L"http://ru.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2167 L"p={searchTerms}",
2168 "UTF-8",
2169 NULL,
2170 NULL,
2171 SEARCH_ENGINE_YAHOO,
2172 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2173 2,
2174 };
2175
2176 const PrepopulatedEngine yahoo_se = {
2177 L"Yahoo! Sverige",
2178 L"se.yahoo.com",
2179 "http://se.search.yahoo.com/favicon.ico",
2180 L"http://se.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2181 L"p={searchTerms}",
2182 "UTF-8",
2183 NULL,
2184 NULL,
2185 SEARCH_ENGINE_YAHOO,
2186 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2187 2,
2188 };
2189
2190 const PrepopulatedEngine yahoo_sg = {
2191 L"Yahoo! Singapore",
2192 L"sg.yahoo.com",
2193 "http://sg.search.yahoo.com/favicon.ico",
2194 L"http://sg.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2195 L"p={searchTerms}",
2196 "UTF-8",
2197 L"http://sg-sayt.ff.search.yahoo.com/gossip-sg-sayt?output=fxjson&"
2198 L"command={searchTerms}",
2199 NULL,
2200 SEARCH_ENGINE_YAHOO,
2201 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2202 2,
2203 };
2204
2205 const PrepopulatedEngine yahoo_th = {
2206 L"Yahoo! \x0e1b\x0e23\x0e30\x0e40\x0e17\x0e28\x0e44\x0e17\x0e22",
2207 L"th.yahoo.com",
2208 "http://th.search.yahoo.com/favicon.ico",
2209 L"http://th.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2210 L"p={searchTerms}",
2211 "UTF-8",
2212 L"http://th-sayt.ff.search.yahoo.com/gossip-th-sayt?output=fxjson&"
2213 L"command={searchTerms}",
2214 NULL,
2215 SEARCH_ENGINE_YAHOO,
2216 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2217 2,
2218 };
2219
2220 const PrepopulatedEngine yahoo_tw = {
2221 L"Yahoo!\x5947\x6469",
2222 L"tw.yahoo.com",
2223 "http://tw.search.yahoo.com/favicon.ico",
2224 L"http://tw.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2225 L"p={searchTerms}",
2226 "UTF-8",
2227 // "http://tw.yahoo.com/ac/ac_search.php?eo=utf8&of=js&prop=web&query="
2228 // returns a JSON file prepended with 'fxsearch=('.
2229 NULL,
2230 NULL,
2231 SEARCH_ENGINE_YAHOO,
2232 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2233 2,
2234 };
2235
2236 const PrepopulatedEngine yahoo_uk = {
2237 L"Yahoo! UK & Ireland",
2238 L"uk.yahoo.com",
2239 "http://uk.search.yahoo.com/favicon.ico",
2240 L"http://uk.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2241 L"p={searchTerms}",
2242 "UTF-8",
2243 L"http://uk-sayt.ff.search.yahoo.com/gossip-uk-sayt?output=fxjson&"
2244 L"command={searchTerms}",
2245 NULL,
2246 SEARCH_ENGINE_YAHOO,
2247 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2248 2,
2249 };
2250
2251 const PrepopulatedEngine yahoo_ve = {
2252 L"Yahoo! Venezuela",
2253 L"ve.yahoo.com",
2254 "http://ve.search.yahoo.com/favicon.ico",
2255 L"http://ve.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2256 L"p={searchTerms}",
2257 "UTF-8",
2258 L"http://gossip.telemundo.yahoo.com/gossip-e1-sayt?output=fxjson&"
2259 L"command={searchTerms}",
2260 NULL,
2261 SEARCH_ENGINE_YAHOO,
2262 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2263 2,
2264 };
2265
2266 const PrepopulatedEngine yahoo_vn = {
2267 L"Yahoo! Vi\x1ec7t Nam",
2268 L"vn.yahoo.com",
2269 "http://vn.search.yahoo.com/favicon.ico",
2270 L"http://vn.search.yahoo.com/search?ei={inputEncoding}&fr=crmas&"
2271 L"p={searchTerms}",
2272 "UTF-8",
2273 L"http://vn-sayt.ff.search.yahoo.com/gossip-vn-sayt?output=fxjson&"
2274 L"command={searchTerms}",
2275 NULL,
2276 SEARCH_ENGINE_YAHOO,
2277 IDR_SEARCH_ENGINE_LOGO_YAHOO,
2278 2,
2279 };
2280
2281 const PrepopulatedEngine yamli = {
2282 L"Yamli",
2283 L"yamli.com",
2284 "http://www.yamli.com/favicon.ico",
2285 L"http://www.yamli.com/#q={searchTerms}",
2286 "UTF-8",
2287 NULL,
2288 NULL,
2289 SEARCH_ENGINE_OTHER,
2290 kNoSearchEngineLogo,
2291 11,
2292 };
2293
2294 const PrepopulatedEngine yandex_ru = {
2295 L"\x042f\x043d\x0434\x0435\x043a\x0441",
2296 L"yandex.ru",
2297 "http://yandex.ru/favicon.ico",
2298 L"http://yandex.ru/yandsearch?text={searchTerms}",
2299 "UTF-8",
2300 L"http://suggest.yandex.net/suggest-ff.cgi?part={searchTerms}",
2301 NULL,
2302 SEARCH_ENGINE_YANDEX,
2303 IDR_SEARCH_ENGINE_LOGO_YANDEX,
2304 15,
2305 };
2306
2307 const PrepopulatedEngine yandex_ua = {
2308 L"\x042f\x043d\x0434\x0435\x043a\x0441",
2309 L"yandex.ua",
2310 "http://yandex.ua/favicon.ico",
2311 L"http://yandex.ua/yandsearch?text={searchTerms}",
2312 "UTF-8",
2313 L"http://suggest.yandex.net/suggest-ff.cgi?part={searchTerms}",
2314 NULL,
2315 SEARCH_ENGINE_YANDEX,
2316 IDR_SEARCH_ENGINE_LOGO_YANDEX,
2317 15,
2318 };
2319
2320 const PrepopulatedEngine zoznam = {
2321 L"Zoznam",
2322 L"zoznam.sk",
2323 "http://zoznam.sk/favicon.ico",
2324 L"http://zoznam.sk/hladaj.fcgi?s={searchTerms}",
2325 "windows-1250",
2326 NULL,
2327 NULL,
2328 SEARCH_ENGINE_ZOZNAM,
2329 IDR_SEARCH_ENGINE_LOGO_ZOZNAM,
2330 85,
2331 };
2332
2333 // Lists of engines per country ////////////////////////////////////////////////
2334
2335 // Put these in order with most interesting/important first. The default will
2336 // be the first engine.
2337
2338 // Default (for countries with no better engine set)
2339 const PrepopulatedEngine* engines_default[] =
2340 { &google, &yahoo, &bing, };
2341
2342 // United Arab Emirates
2343 const PrepopulatedEngine* engines_AE[] =
2344 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &araby, &maktoob, };
2345
2346 // Albania
2347 const PrepopulatedEngine* engines_AL[] =
2348 { &google, &yahoo, &bing_en_XA, };
2349
2350 // Argentina
2351 const PrepopulatedEngine* engines_AR[] =
2352 { &google, &yahoo_ar, &bing_es_AR, &terra_ar, &altavista_ar, };
2353
2354 // Austria
2355 const PrepopulatedEngine* engines_AT[] =
2356 { &google, &yahoo_at, &bing_de_AT, };
2357
2358 // Australia
2359 const PrepopulatedEngine* engines_AU[] =
2360 { &google, &bing_en_AU, &yahoo_au, };
2361
2362 // Bosnia and Herzegovina
2363 const PrepopulatedEngine* engines_BA[] =
2364 { &google, &pogodak_ba, &yahoo, &bing, };
2365
2366 // Belgium
2367 const PrepopulatedEngine* engines_BE[] =
2368 { &google, &bing_nl_BE, &yahoo, &bing_fr_BE, };
2369
2370 // Bulgaria
2371 const PrepopulatedEngine* engines_BG[] =
2372 { &google, &bing_bg_BG, &yahoo, &diri, &jabse, };
2373
2374 // Bahrain
2375 const PrepopulatedEngine* engines_BH[] =
2376 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, };
2377
2378 // Burundi
2379 const PrepopulatedEngine* engines_BI[] =
2380 { &google, &yahoo, &bing, };
2381
2382 // Brunei
2383 const PrepopulatedEngine* engines_BN[] =
2384 { &google, &yahoo_malaysia, &bing_en_MY, };
2385
2386 // Bolivia
2387 const PrepopulatedEngine* engines_BO[] =
2388 { &google, &altavista, &bing_es_XL, &yahoo, };
2389
2390 // Brazil
2391 const PrepopulatedEngine* engines_BR[] =
2392 { &google, &bing_pt_BR, &yahoo_br, &uol, };
2393
2394 // Belarus
2395 const PrepopulatedEngine* engines_BY[] =
2396 { &google, &tut, &yandex_ru, &rambler, &yahoo, };
2397
2398 // Belize
2399 const PrepopulatedEngine* engines_BZ[] =
2400 { &google, &yahoo, &bing, &aol, };
2401
2402 // Canada
2403 const PrepopulatedEngine* engines_CA[] =
2404 { &google, &yahoo_ca, &yahoo_qc, &bing_en_CA, &bing_fr_CA, };
2405
2406 // Switzerland
2407 const PrepopulatedEngine* engines_CH[] =
2408 { &google, &yahoo_ch, &bing_de_CH, &bing_fr_CH, &search_de_CH,
2409 &search_fr_CH, };
2410
2411 // Chile
2412 const PrepopulatedEngine* engines_CL[] =
2413 { &google, &yahoo_cl, &bing_es_CL, };
2414
2415 // China
2416 const PrepopulatedEngine* engines_CN[] =
2417 { &google, &baidu, &yahoo_cn, &bing_zh_CN, };
2418
2419 // Colombia
2420 const PrepopulatedEngine* engines_CO[] =
2421 { &google, &bing_es_XL, &yahoo_co, };
2422
2423 // Costa Rica
2424 const PrepopulatedEngine* engines_CR[] =
2425 { &google, &bing_es_XL, &yahoo, };
2426
2427 // Czech Republic
2428 const PrepopulatedEngine* engines_CZ[] =
2429 { &google, &seznam, &bing_cs_CZ, ¢rum_cz, &atlas_cz, };
2430
2431 // Germany
2432 const PrepopulatedEngine* engines_DE[] =
2433 { &google, &ask_de, &bing_de_DE, &yahoo_de };
2434
2435 // Denmark
2436 const PrepopulatedEngine* engines_DK[] =
2437 { &google, &bing_da_DK, &yahoo_dk, };
2438
2439 // Dominican Republic
2440 const PrepopulatedEngine* engines_DO[] =
2441 { &google, &bing_es_XL, &yahoo, };
2442
2443 // Algeria
2444 const PrepopulatedEngine* engines_DZ[] =
2445 { &google, &bing_en_XA, &yahoo, &bing_ar_XA, &maktoob, };
2446
2447 // Ecuador
2448 const PrepopulatedEngine* engines_EC[] =
2449 { &google, &bing_es_XL, &yahoo, };
2450
2451 // Estonia
2452 const PrepopulatedEngine* engines_EE[] =
2453 { &google, &bing_et_EE, &neti, &yahoo, };
2454
2455 // Egypt
2456 const PrepopulatedEngine* engines_EG[] =
2457 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &masrawy, };
2458
2459 // Spain
2460 const PrepopulatedEngine* engines_ES[] =
2461 { &google, &ask_es, &bing_es_ES, &yahoo_es, &terra_es, &hispavista, };
2462
2463 // Faroe Islands
2464 const PrepopulatedEngine* engines_FO[] =
2465 { &google, &bing_da_DK, &yahoo_dk, &jubii };
2466
2467 // Finland
2468 const PrepopulatedEngine* engines_FI[] =
2469 { &google, &bing_fi_FI, &yahoo_fi, &eniro_fi, &fonecta_02_fi, };
2470
2471 // France
2472 const PrepopulatedEngine* engines_FR[] =
2473 { &google, &yahoo_fr, &bing_fr_FR, };
2474
2475 // United Kingdom
2476 const PrepopulatedEngine* engines_GB[] =
2477 { &google, &ask_uk, &yahoo_uk, &bing_en_GB, };
2478
2479 // Greece
2480 const PrepopulatedEngine* engines_GR[] =
2481 { &google, &yahoo, &in, &bing_el_GR };
2482
2483 // Guatemala
2484 const PrepopulatedEngine* engines_GT[] =
2485 { &google, &bing_es_XL, &yahoo, &ask_es, };
2486
2487 // Hong Kong
2488 const PrepopulatedEngine* engines_HK[] =
2489 { &google, &yahoo_hk, &bing_zh_HK, &baidu, };
2490
2491 // Honduras
2492 const PrepopulatedEngine* engines_HN[] =
2493 { &google, &bing_es_XL, &yahoo, &ask_es, };
2494
2495 // Croatia
2496 const PrepopulatedEngine* engines_HR[] =
2497 { &google, &yahoo, &pogodak_hr, &bing_hr_HR, };
2498
2499 // Hungary
2500 const PrepopulatedEngine* engines_HU[] =
2501 { &google, &ok, &bing_hu_HU, };
2502
2503 // Indonesia
2504 const PrepopulatedEngine* engines_ID[] =
2505 { &google, &yahoo_id, &bing_en_ID, };
2506
2507 // Ireland
2508 const PrepopulatedEngine* engines_IE[] =
2509 { &google, &yahoo_uk, &bing_en_IE, };
2510
2511 // Israel
2512 const PrepopulatedEngine* engines_IL[] =
2513 { &google, &walla, &bing_he_IL, };
2514
2515 // India
2516 const PrepopulatedEngine* engines_IN[] =
2517 { &google, &yahoo_in, &bing_en_IN, &rediff, &guruji, };
2518
2519 // Iraq
2520 const PrepopulatedEngine* engines_IQ[] =
2521 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &ask, };
2522
2523 // Iran
2524 const PrepopulatedEngine* engines_IR[] =
2525 { &google, &yahoo, };
2526
2527 // Iceland
2528 const PrepopulatedEngine* engines_IS[] =
2529 { &google, &yahoo, &bing, &leit, };
2530
2531 // Italy
2532 const PrepopulatedEngine* engines_IT[] =
2533 { &google, &ask_it, &virgilio, &bing_it_IT, &yahoo_it, &libero, };
2534
2535 // Jamaica
2536 const PrepopulatedEngine* engines_JM[] =
2537 { &google, &yahoo, &bing, &go, };
2538
2539 // Jordan
2540 const PrepopulatedEngine* engines_JO[] =
2541 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &araby, };
2542
2543 // Japan
2544 const PrepopulatedEngine* engines_JP[] =
2545 { &google, &yahoo_jp, &bing_ja_JP, &goo, };
2546
2547 // Kenya
2548 const PrepopulatedEngine* engines_KE[] =
2549 { &google, &yahoo, &bing, };
2550
2551 // Kuwait
2552 const PrepopulatedEngine* engines_KW[] =
2553 { &google, &bing_en_XA, &yahoo, &bing_ar_XA, &maktoob, &araby, };
2554
2555 // South Korea
2556 const PrepopulatedEngine* engines_KR[] =
2557 { &google, &naver, &daum, &yahoo_kr, &nate, };
2558
2559 // Kazakhstan
2560 const PrepopulatedEngine* engines_KZ[] =
2561 { &google, &rambler, &yandex_ru, &nur_kz, };
2562
2563 // Lebanon
2564 const PrepopulatedEngine* engines_LB[] =
2565 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &araby, };
2566
2567 // Liechtenstein
2568 const PrepopulatedEngine* engines_LI[] =
2569 { &google, &bing_de_DE, &yahoo_de, };
2570
2571 // Lithuania
2572 const PrepopulatedEngine* engines_LT[] =
2573 { &google, &delfi_lt, &yahoo, &bing_lt_LT, };
2574
2575 // Luxembourg
2576 const PrepopulatedEngine* engines_LU[] =
2577 { &google, &bing_fr_FR, &yahoo_fr, };
2578
2579 // Latvia
2580 const PrepopulatedEngine* engines_LV[] =
2581 { &google, &bing, &yandex_ru, &yahoo, &latne, };
2582
2583 // Libya
2584 const PrepopulatedEngine* engines_LY[] =
2585 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &ask, };
2586
2587 // Morocco
2588 const PrepopulatedEngine* engines_MA[] =
2589 { &google, &bing_en_XA, &yahoo, &bing_ar_XA, };
2590
2591 // Monaco
2592 const PrepopulatedEngine* engines_MC[] =
2593 { &google, &bing_fr_FR, &yahoo_fr, };
2594
2595 // Moldova
2596 const PrepopulatedEngine* engines_MD[] =
2597 { &google, &yandex_ru, &yahoo, &bing, };
2598
2599 // Montenegro
2600 const PrepopulatedEngine* engines_ME[] =
2601 { &google, &yahoo, &bing };
2602
2603 // Macedonia
2604 const PrepopulatedEngine* engines_MK[] =
2605 { &google, &pogodok, &yahoo, &bing, };
2606
2607 // Mexico
2608 const PrepopulatedEngine* engines_MX[] =
2609 { &google, &bing_es_MX, &yahoo_mx, };
2610
2611 // Malaysia
2612 const PrepopulatedEngine* engines_MY[] =
2613 { &google, &yahoo_malaysia, &bing_en_MY, };
2614
2615 // Nicaragua
2616 const PrepopulatedEngine* engines_NI[] =
2617 { &google, &bing_es_XL, &yahoo, &ask_es, };
2618
2619 // Netherlands
2620 const PrepopulatedEngine* engines_NL[] =
2621 { &google, &bing_nl_NL, &yahoo_nl, &ask_nl, };
2622
2623 // Norway
2624 const PrepopulatedEngine* engines_NO[] =
2625 { &google, &bing_nb_NO, &abcsok, &yahoo_no, &kvasir, };
2626
2627 // New Zealand
2628 const PrepopulatedEngine* engines_NZ[] =
2629 { &google, &yahoo_nz, &bing_en_NZ, };
2630
2631 // Oman
2632 const PrepopulatedEngine* engines_OM[] =
2633 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, };
2634
2635 // Panama
2636 const PrepopulatedEngine* engines_PA[] =
2637 { &google, &bing_es_XL, &yahoo, &ask_es, };
2638
2639 // Peru
2640 const PrepopulatedEngine* engines_PE[] =
2641 { &google, &bing_es_XL, &yahoo_pe, };
2642
2643 // Philippines
2644 const PrepopulatedEngine* engines_PH[] =
2645 { &google, &yahoo_ph, &bing_en_PH, };
2646
2647 // Pakistan
2648 const PrepopulatedEngine* engines_PK[] =
2649 { &google, &yahoo, &bing, };
2650
2651 // Puerto Rico
2652 const PrepopulatedEngine* engines_PR[] =
2653 { &google, &bing_es_XL, &yahoo, &ask_es, };
2654
2655 // Poland
2656 const PrepopulatedEngine* engines_PL[] =
2657 { &google, &bing_pl_PL, &netsprint, &yahoo_uk, &onet, &wp, };
2658
2659 // Portugal
2660 const PrepopulatedEngine* engines_PT[] =
2661 { &google, &sapo, &bing_pt_PT, &yahoo, };
2662
2663 // Paraguay
2664 const PrepopulatedEngine* engines_PY[] =
2665 { &google, &bing_es_XL, &yahoo, };
2666
2667 // Qatar
2668 const PrepopulatedEngine* engines_QA[] =
2669 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &araby };
2670
2671 // Romania
2672 const PrepopulatedEngine* engines_RO[] =
2673 { &google, &yahoo_uk, &bing_ro_RO, };
2674
2675 // Serbia
2676 const PrepopulatedEngine* engines_RS[] =
2677 { &google, &pogodak_rs, &bing, };
2678
2679 // Russia
2680 const PrepopulatedEngine* engines_RU[] =
2681 { &google, &yandex_ru, &mail_ru, &tut, &rambler, &bing_ru_RU, };
2682
2683 // Rwanda
2684 const PrepopulatedEngine* engines_RW[] =
2685 { &google, &yahoo, &bing, };
2686
2687 // Saudi Arabia
2688 const PrepopulatedEngine* engines_SA[] =
2689 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, };
2690
2691 // Sweden
2692 const PrepopulatedEngine* engines_SE[] =
2693 { &google, &bing_sv_SE, &yahoo_se, &altavista_se, &spray, &eniro_se };
2694
2695 // Singapore
2696 const PrepopulatedEngine* engines_SG[] =
2697 { &google, &yahoo_sg, &bing_en_SG, &rednano, };
2698
2699 // Slovenia
2700 const PrepopulatedEngine* engines_SI[] =
2701 { &google, &najdi, &yahoo, &bing_sl_SI, };
2702
2703 // Slovakia
2704 const PrepopulatedEngine* engines_SK[] =
2705 { &google, &zoznam, &bing_sk_SK, &atlas_sk, ¢rum_sk };
2706
2707 // El Salvador
2708 const PrepopulatedEngine* engines_SV[] =
2709 { &google, &bing_es_XL, &yahoo, };
2710
2711 // Syria
2712 const PrepopulatedEngine* engines_SY[] =
2713 { &google, &bing_en_XA, &yahoo, &bing_ar_XA, &maktoob, &yamli, };
2714
2715 // Thailand
2716 const PrepopulatedEngine* engines_TH[] =
2717 { &google, &sanook, &yahoo_th, &bing_th_TH, };
2718
2719 // Tunisia
2720 const PrepopulatedEngine* engines_TN[] =
2721 { &google, &bing_en_XA, &yahoo, &bing_ar_XA, &maktoob, &yamli };
2722
2723 // Turkey
2724 const PrepopulatedEngine* engines_TR[] =
2725 { &google, &bing_tr_TR, &yahoo, &mynet, };
2726
2727 // Trinidad and Tobago
2728 const PrepopulatedEngine* engines_TT[] =
2729 { &google, &bing, &yahoo, &aol, };
2730
2731 // Taiwan
2732 const PrepopulatedEngine* engines_TW[] =
2733 { &google, &yahoo_tw, &bing_zh_TW, };
2734
2735 // Tanzania
2736 const PrepopulatedEngine* engines_TZ[] =
2737 { &google, &yahoo, &bing, };
2738
2739 // Ukraine
2740 const PrepopulatedEngine* engines_UA[] =
2741 { &google, &yandex_ua, &mail_ru, &rambler, };
2742
2743 // United States
2744 const PrepopulatedEngine* engines_US[] =
2745 { &google, &yahoo, &bing_en_US, };
2746
2747 // Uruguay
2748 const PrepopulatedEngine* engines_UY[] =
2749 { &google, &bing_es_XL, &yahoo, };
2750
2751 // Venezuela
2752 const PrepopulatedEngine* engines_VE[] =
2753 { &google, &bing_es_XL, &yahoo_ve, };
2754
2755 // Vietnam
2756 const PrepopulatedEngine* engines_VN[] =
2757 { &google, &yahoo_vn, };
2758
2759 // Yemen
2760 const PrepopulatedEngine* engines_YE[] =
2761 { &google, &yahoo, &bing_en_XA, &bing_ar_XA, &maktoob, &araby, };
2762
2763 // South Africa
2764 const PrepopulatedEngine* engines_ZA[] =
2765 { &google, &yahoo, &bing_en_ZA, };
2766
2767 // Zimbabwe
2768 const PrepopulatedEngine* engines_ZW[] =
2769 { &google, &yahoo, &bing, };
2770
2771
2772 // A list of all the engines that we know about.
2773 const PrepopulatedEngine* kAllEngines[] =
2774 { &abcsok, &altavista, &altavista_ar, &altavista_se, &aol, &araby, &ask,
2775 &ask_de, &ask_es, &ask_it, &ask_nl, &ask_uk, &atlas_cz, &atlas_sk, &baidu,
2776 &bing, &bing_ar_XA, &bing_bg_BG, &bing_cs_CZ, &bing_da_DK, &bing_de_AT,
2777 &bing_de_CH, &bing_de_DE, &bing_el_GR, &bing_en_AU, &bing_en_CA,
2778 &bing_en_GB, &bing_en_ID, &bing_en_IE, &bing_en_IN, &bing_en_MY,
2779 &bing_en_NZ, &bing_en_PH, &bing_en_SG, &bing_en_US, &bing_en_XA,
2780 &bing_en_ZA, &bing_es_AR, &bing_es_CL, &bing_es_ES, &bing_es_MX,
2781 &bing_es_XL, &bing_et_EE, &bing_fi_FI, &bing_fr_BE, &bing_fr_CA,
2782 &bing_fr_CH, &bing_fr_FR, &bing_he_IL, &bing_hr_HR, &bing_hu_HU,
2783 &bing_it_IT, &bing_ja_JP, &bing_ko_KR, &bing_lt_LT, &bing_lv_LV,
2784 &bing_nb_NO, &bing_nl_BE, &bing_nl_NL, &bing_pl_PL, &bing_pt_BR,
2785 &bing_pt_PT, &bing_ro_RO, &bing_ru_RU, &bing_sl_SI, &bing_sk_SK,
2786 &bing_sv_SE, &bing_th_TH, &bing_tr_TR, &bing_uk_UA, &bing_zh_CN,
2787 &bing_zh_HK, &bing_zh_TW, ¢rum_cz, ¢rum_sk, &daum, &delfi_lt,
2788 &delfi_lv, &diri, &eniro_fi, &eniro_se, &fonecta_02_fi, &go, &goo,
2789 &google, &guruji, &hispavista, &in, &jabse, &jubii, &kvasir, &latne,
2790 &leit, &libero, &mail_ru, &maktoob, &masrawy, &mynet, &najdi, &nate,
2791 &naver, &neti, &netsprint, &nur_kz, &ok, &onet, &pogodak_ba, &pogodak_hr,
2792 &pogodak_rs, &pogodok, &rambler, &rediff, &rednano, &sanook, &sapo,
2793 &search_de_CH, &search_fr_CH, &seznam, &spray, &terra_ar, &terra_es, &tut,
2794 &uol, &virgilio, &walla, &wp, &yahoo, &yahoo_ar, &yahoo_at, &yahoo_au,
2795 &yahoo_br, &yahoo_ca, &yahoo_ch, &yahoo_cl, &yahoo_cn, &yahoo_co,
2796 &yahoo_de, &yahoo_dk, &yahoo_es, &yahoo_fi, &yahoo_fr, &yahoo_hk,
2797 &yahoo_id, &yahoo_in, &yahoo_it, &yahoo_jp, &yahoo_kr, &yahoo_malaysia,
2798 &yahoo_mx, &yahoo_nl, &yahoo_no, &yahoo_nz, &yahoo_pe, &yahoo_ph,
2799 &yahoo_qc, &yahoo_ru, &yahoo_se, &yahoo_sg, &yahoo_th, &yahoo_tw,
2800 &yahoo_uk, &yahoo_ve, &yahoo_vn, &yamli, &yandex_ru, &yandex_ua,
2801 &zoznam };
2802
2803
2804 // Geographic mappings /////////////////////////////////////////////////////////
2805
2806 // Please refer to ISO 3166-1 for information about the two-character country
2807 // codes; http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 is useful. In the
2808 // following (C++) code, we pack the two letters of the country code into an int
2809 // value we call the CountryID.
2810
2811 const int kCountryIDUnknown = -1;
2812
CountryCharsToCountryID(char c1,char c2)2813 inline int CountryCharsToCountryID(char c1, char c2) {
2814 return c1 << 8 | c2;
2815 }
2816
CountryCharsToCountryIDWithUpdate(char c1,char c2)2817 int CountryCharsToCountryIDWithUpdate(char c1, char c2) {
2818 // SPECIAL CASE: In 2003, Yugoslavia renamed itself to Serbia and Montenegro.
2819 // Serbia and Montenegro dissolved their union in June 2006. Yugoslavia was
2820 // ISO 'YU' and Serbia and Montenegro were ISO 'CS'. Serbia was subsequently
2821 // issued 'RS' and Montenegro 'ME'. Windows XP and Mac OS X Leopard still use
2822 // the value 'YU'. If we get a value of 'YU' or 'CS' we will map it to 'RS'.
2823 if ((c1 == 'Y' && c2 == 'U') ||
2824 (c1 == 'C' && c2 == 'S')) {
2825 c1 = 'R';
2826 c2 = 'S';
2827 }
2828
2829 // SPECIAL CASE: Timor-Leste changed from 'TP' to 'TL' in 2002. Windows XP
2830 // predates this; we therefore map this value.
2831 if (c1 == 'T' && c2 == 'P')
2832 c2 = 'L';
2833
2834 return CountryCharsToCountryID(c1, c2);
2835 }
2836
2837 #if defined(OS_WIN)
2838
2839 // For reference, a list of GeoIDs can be found at
2840 // http://msdn.microsoft.com/en-us/library/dd374073.aspx .
GeoIDToCountryID(GEOID geo_id)2841 int GeoIDToCountryID(GEOID geo_id) {
2842 const int kISOBufferSize = 3; // Two plus one for the terminator.
2843 wchar_t isobuf[kISOBufferSize] = { 0 };
2844 int retval = GetGeoInfo(geo_id, GEO_ISO2, isobuf, kISOBufferSize, 0);
2845
2846 if (retval == kISOBufferSize &&
2847 !(isobuf[0] == L'X' && isobuf[1] == L'X'))
2848 return CountryCharsToCountryIDWithUpdate(static_cast<char>(isobuf[0]),
2849 static_cast<char>(isobuf[1]));
2850
2851 // Various locations have ISO codes that Windows does not return.
2852 switch (geo_id) {
2853 case 0x144: // Guernsey
2854 return CountryCharsToCountryID('G', 'G');
2855 case 0x148: // Jersey
2856 return CountryCharsToCountryID('J', 'E');
2857 case 0x3B16: // Isle of Man
2858 return CountryCharsToCountryID('I', 'M');
2859
2860 // 'UM' (U.S. Minor Outlying Islands)
2861 case 0x7F: // Johnston Atoll
2862 case 0x102: // Wake Island
2863 case 0x131: // Baker Island
2864 case 0x146: // Howland Island
2865 case 0x147: // Jarvis Island
2866 case 0x149: // Kingman Reef
2867 case 0x152: // Palmyra Atoll
2868 case 0x52FA: // Midway Islands
2869 return CountryCharsToCountryID('U', 'M');
2870
2871 // 'SH' (Saint Helena)
2872 case 0x12F: // Ascension Island
2873 case 0x15C: // Tristan da Cunha
2874 return CountryCharsToCountryID('S', 'H');
2875
2876 // 'IO' (British Indian Ocean Territory)
2877 case 0x13A: // Diego Garcia
2878 return CountryCharsToCountryID('I', 'O');
2879
2880 // Other cases where there is no ISO country code; we assign countries that
2881 // can serve as reasonable defaults.
2882 case 0x154: // Rota Island
2883 case 0x155: // Saipan
2884 case 0x15A: // Tinian Island
2885 return CountryCharsToCountryID('U', 'S');
2886 case 0x134: // Channel Islands
2887 return CountryCharsToCountryID('G', 'B');
2888 case 0x143: // Guantanamo Bay
2889 default:
2890 return kCountryIDUnknown;
2891 }
2892 }
2893
GetCurrentCountryID()2894 int GetCurrentCountryID() {
2895 GEOID geo_id = GetUserGeoID(GEOCLASS_NATION);
2896
2897 return GeoIDToCountryID(geo_id);
2898 }
2899
2900 #elif defined(OS_MACOSX)
2901
GetCurrentCountryID()2902 int GetCurrentCountryID() {
2903 base::mac::ScopedCFTypeRef<CFLocaleRef> locale(CFLocaleCopyCurrent());
2904 CFStringRef country = (CFStringRef)CFLocaleGetValue(locale.get(),
2905 kCFLocaleCountryCode);
2906 if (!country)
2907 return kCountryIDUnknown;
2908
2909 UniChar isobuf[2];
2910 CFRange char_range = CFRangeMake(0, 2);
2911 CFStringGetCharacters(country, char_range, isobuf);
2912
2913 return CountryCharsToCountryIDWithUpdate(static_cast<char>(isobuf[0]),
2914 static_cast<char>(isobuf[1]));
2915 }
2916
2917 #elif defined(OS_POSIX)
2918
GetCurrentCountryID()2919 int GetCurrentCountryID() {
2920 const char* locale = setlocale(LC_MESSAGES, NULL);
2921
2922 if (!locale)
2923 return kCountryIDUnknown;
2924
2925 // The format of a locale name is:
2926 // language[_territory][.codeset][@modifier], where territory is an ISO 3166
2927 // country code, which is what we want.
2928 std::string locale_str(locale);
2929 size_t begin = locale_str.find('_');
2930 if (begin == std::string::npos || locale_str.size() - begin < 3)
2931 return kCountryIDUnknown;
2932
2933 ++begin;
2934 size_t end = locale_str.find_first_of(".@", begin);
2935 if (end == std::string::npos)
2936 end = locale_str.size();
2937
2938 // The territory part must contain exactly two characters.
2939 if (end - begin == 2) {
2940 return CountryCharsToCountryIDWithUpdate(
2941 base::ToUpperASCII(locale_str[begin]),
2942 base::ToUpperASCII(locale_str[begin + 1]));
2943 }
2944
2945 return kCountryIDUnknown;
2946 }
2947
2948 #endif // OS_*
2949
GetCountryIDFromPrefs(PrefService * prefs)2950 int GetCountryIDFromPrefs(PrefService* prefs) {
2951 // See if the user overrode the country on the command line.
2952 const std::string country(
2953 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
2954 switches::kCountry));
2955 if (country.length() == 2)
2956 return CountryCharsToCountryIDWithUpdate(country[0], country[1]);
2957
2958 // Cache first run Country ID value in prefs, and use it afterwards. This
2959 // ensures that just because the user moves around, we won't automatically
2960 // make major changes to their available search providers, which would feel
2961 // surprising.
2962 if (!prefs)
2963 return GetCurrentCountryID();
2964
2965 int new_country_id = GetCurrentCountryID();
2966 #if defined(OS_WIN)
2967 // Migrate the old platform-specific value if it's present.
2968 if (prefs->HasPrefPath(prefs::kGeoIDAtInstall)) {
2969 int geo_id = prefs->GetInteger(prefs::kGeoIDAtInstall);
2970 prefs->ClearPref(prefs::kGeoIDAtInstall);
2971 new_country_id = GeoIDToCountryID(geo_id);
2972 }
2973 #endif
2974
2975 if (!prefs->HasPrefPath(prefs::kCountryIDAtInstall))
2976 prefs->SetInteger(prefs::kCountryIDAtInstall, new_country_id);
2977
2978 return prefs->GetInteger(prefs::kCountryIDAtInstall);
2979 }
2980
GetPrepopulationSetFromCountryID(PrefService * prefs,const PrepopulatedEngine *** engines,size_t * num_engines)2981 void GetPrepopulationSetFromCountryID(PrefService* prefs,
2982 const PrepopulatedEngine*** engines,
2983 size_t* num_engines) {
2984 // NOTE: This function should ALWAYS set its outparams.
2985
2986 // If you add a new country make sure to update the unit test for coverage.
2987 switch (GetCountryIDFromPrefs(prefs)) {
2988
2989 #define CHAR_A 'A'
2990 #define CHAR_B 'B'
2991 #define CHAR_C 'C'
2992 #define CHAR_D 'D'
2993 #define CHAR_E 'E'
2994 #define CHAR_F 'F'
2995 #define CHAR_G 'G'
2996 #define CHAR_H 'H'
2997 #define CHAR_I 'I'
2998 #define CHAR_J 'J'
2999 #define CHAR_K 'K'
3000 #define CHAR_L 'L'
3001 #define CHAR_M 'M'
3002 #define CHAR_N 'N'
3003 #define CHAR_O 'O'
3004 #define CHAR_P 'P'
3005 #define CHAR_Q 'Q'
3006 #define CHAR_R 'R'
3007 #define CHAR_S 'S'
3008 #define CHAR_T 'T'
3009 #define CHAR_U 'U'
3010 #define CHAR_V 'V'
3011 #define CHAR_W 'W'
3012 #define CHAR_X 'X'
3013 #define CHAR_Y 'Y'
3014 #define CHAR_Z 'Z'
3015 #define CHAR(ch) CHAR_##ch
3016 #define CODE_TO_ID(code1, code2)\
3017 (CHAR(code1) << 8 | CHAR(code2))
3018
3019 #define UNHANDLED_COUNTRY(code1, code2)\
3020 case CODE_TO_ID(code1, code2):
3021 #define END_UNHANDLED_COUNTRIES(code1, code2)\
3022 *engines = engines_##code1##code2;\
3023 *num_engines = arraysize(engines_##code1##code2);\
3024 return;
3025 #define DECLARE_COUNTRY(code1, code2)\
3026 UNHANDLED_COUNTRY(code1, code2)\
3027 END_UNHANDLED_COUNTRIES(code1, code2)
3028
3029 // Countries with their own, dedicated engine set.
3030 DECLARE_COUNTRY(A, E) // United Arab Emirates
3031 DECLARE_COUNTRY(A, L) // Albania
3032 DECLARE_COUNTRY(A, R) // Argentina
3033 DECLARE_COUNTRY(A, T) // Austria
3034 DECLARE_COUNTRY(A, U) // Australia
3035 DECLARE_COUNTRY(B, A) // Bosnia and Herzegovina
3036 DECLARE_COUNTRY(B, E) // Belgium
3037 DECLARE_COUNTRY(B, G) // Bulgaria
3038 DECLARE_COUNTRY(B, H) // Bahrain
3039 DECLARE_COUNTRY(B, I) // Burundi
3040 DECLARE_COUNTRY(B, N) // Brunei
3041 DECLARE_COUNTRY(B, O) // Bolivia
3042 DECLARE_COUNTRY(B, R) // Brazil
3043 DECLARE_COUNTRY(B, Y) // Belarus
3044 DECLARE_COUNTRY(B, Z) // Belize
3045 DECLARE_COUNTRY(C, A) // Canada
3046 DECLARE_COUNTRY(C, H) // Switzerland
3047 DECLARE_COUNTRY(C, L) // Chile
3048 DECLARE_COUNTRY(C, N) // China
3049 DECLARE_COUNTRY(C, O) // Colombia
3050 DECLARE_COUNTRY(C, R) // Costa Rica
3051 DECLARE_COUNTRY(C, Z) // Czech Republic
3052 DECLARE_COUNTRY(D, E) // Germany
3053 DECLARE_COUNTRY(D, K) // Denmark
3054 DECLARE_COUNTRY(D, O) // Dominican Republic
3055 DECLARE_COUNTRY(D, Z) // Algeria
3056 DECLARE_COUNTRY(E, C) // Ecuador
3057 DECLARE_COUNTRY(E, E) // Estonia
3058 DECLARE_COUNTRY(E, G) // Egypt
3059 DECLARE_COUNTRY(E, S) // Spain
3060 DECLARE_COUNTRY(F, I) // Finland
3061 DECLARE_COUNTRY(F, O) // Faroe Islands
3062 DECLARE_COUNTRY(F, R) // France
3063 DECLARE_COUNTRY(G, B) // United Kingdom
3064 DECLARE_COUNTRY(G, R) // Greece
3065 DECLARE_COUNTRY(G, T) // Guatemala
3066 DECLARE_COUNTRY(H, K) // Hong Kong
3067 DECLARE_COUNTRY(H, N) // Honduras
3068 DECLARE_COUNTRY(H, R) // Croatia
3069 DECLARE_COUNTRY(H, U) // Hungary
3070 DECLARE_COUNTRY(I, D) // Indonesia
3071 DECLARE_COUNTRY(I, E) // Ireland
3072 DECLARE_COUNTRY(I, L) // Israel
3073 DECLARE_COUNTRY(I, N) // India
3074 DECLARE_COUNTRY(I, Q) // Iraq
3075 DECLARE_COUNTRY(I, R) // Iran
3076 DECLARE_COUNTRY(I, S) // Iceland
3077 DECLARE_COUNTRY(I, T) // Italy
3078 DECLARE_COUNTRY(J, M) // Jamaica
3079 DECLARE_COUNTRY(J, O) // Jordan
3080 DECLARE_COUNTRY(J, P) // Japan
3081 DECLARE_COUNTRY(K, E) // Kenya
3082 DECLARE_COUNTRY(K, R) // South Korea
3083 DECLARE_COUNTRY(K, W) // Kuwait
3084 DECLARE_COUNTRY(K, Z) // Kazakhstan
3085 DECLARE_COUNTRY(L, B) // Lebanon
3086 DECLARE_COUNTRY(L, I) // Liechtenstein
3087 DECLARE_COUNTRY(L, T) // Lithuania
3088 DECLARE_COUNTRY(L, U) // Luxembourg
3089 DECLARE_COUNTRY(L, V) // Latvia
3090 DECLARE_COUNTRY(L, Y) // Libya
3091 DECLARE_COUNTRY(M, A) // Morocco
3092 DECLARE_COUNTRY(M, C) // Monaco
3093 DECLARE_COUNTRY(M, D) // Moldova
3094 DECLARE_COUNTRY(M, E) // Montenegro
3095 DECLARE_COUNTRY(M, K) // Macedonia
3096 DECLARE_COUNTRY(M, X) // Mexico
3097 DECLARE_COUNTRY(M, Y) // Malaysia
3098 DECLARE_COUNTRY(N, I) // Nicaragua
3099 DECLARE_COUNTRY(N, L) // Netherlands
3100 DECLARE_COUNTRY(N, O) // Norway
3101 DECLARE_COUNTRY(N, Z) // New Zealand
3102 DECLARE_COUNTRY(O, M) // Oman
3103 DECLARE_COUNTRY(P, A) // Panama
3104 DECLARE_COUNTRY(P, E) // Peru
3105 DECLARE_COUNTRY(P, H) // Philippines
3106 DECLARE_COUNTRY(P, K) // Pakistan
3107 DECLARE_COUNTRY(P, L) // Poland
3108 DECLARE_COUNTRY(P, R) // Puerto Rico
3109 DECLARE_COUNTRY(P, T) // Portugal
3110 DECLARE_COUNTRY(P, Y) // Paraguay
3111 DECLARE_COUNTRY(Q, A) // Qatar
3112 DECLARE_COUNTRY(R, O) // Romania
3113 DECLARE_COUNTRY(R, S) // Serbia
3114 DECLARE_COUNTRY(R, U) // Russia
3115 DECLARE_COUNTRY(R, W) // Rwanda
3116 DECLARE_COUNTRY(S, A) // Saudi Arabia
3117 DECLARE_COUNTRY(S, E) // Sweden
3118 DECLARE_COUNTRY(S, G) // Singapore
3119 DECLARE_COUNTRY(S, I) // Slovenia
3120 DECLARE_COUNTRY(S, K) // Slovakia
3121 DECLARE_COUNTRY(S, V) // El Salvador
3122 DECLARE_COUNTRY(S, Y) // Syria
3123 DECLARE_COUNTRY(T, H) // Thailand
3124 DECLARE_COUNTRY(T, N) // Tunisia
3125 DECLARE_COUNTRY(T, R) // Turkey
3126 DECLARE_COUNTRY(T, T) // Trinidad and Tobago
3127 DECLARE_COUNTRY(T, W) // Taiwan
3128 DECLARE_COUNTRY(T, Z) // Tanzania
3129 DECLARE_COUNTRY(U, A) // Ukraine
3130 DECLARE_COUNTRY(U, S) // United States
3131 DECLARE_COUNTRY(U, Y) // Uruguay
3132 DECLARE_COUNTRY(V, E) // Venezuela
3133 DECLARE_COUNTRY(V, N) // Vietnam
3134 DECLARE_COUNTRY(Y, E) // Yemen
3135 DECLARE_COUNTRY(Z, A) // South Africa
3136 DECLARE_COUNTRY(Z, W) // Zimbabwe
3137
3138 // Countries using the "Australia" engine set.
3139 UNHANDLED_COUNTRY(C, C) // Cocos Islands
3140 UNHANDLED_COUNTRY(C, X) // Christmas Island
3141 UNHANDLED_COUNTRY(H, M) // Heard Island and McDonald Islands
3142 UNHANDLED_COUNTRY(N, F) // Norfolk Island
3143 END_UNHANDLED_COUNTRIES(A, U)
3144
3145 // Countries using the "China" engine set.
3146 UNHANDLED_COUNTRY(M, O) // Macao
3147 END_UNHANDLED_COUNTRIES(C, N)
3148
3149 // Countries using the "Denmark" engine set.
3150 UNHANDLED_COUNTRY(G, L) // Greenland
3151 END_UNHANDLED_COUNTRIES(D, K)
3152
3153 // Countries using the "Spain" engine set.
3154 UNHANDLED_COUNTRY(A, D) // Andorra
3155 END_UNHANDLED_COUNTRIES(E, S)
3156
3157 // Countries using the "Finland" engine set.
3158 UNHANDLED_COUNTRY(A, X) // Aland Islands
3159 END_UNHANDLED_COUNTRIES(F, I)
3160
3161 // Countries using the "France" engine set.
3162 UNHANDLED_COUNTRY(B, F) // Burkina Faso
3163 UNHANDLED_COUNTRY(B, J) // Benin
3164 UNHANDLED_COUNTRY(C, D) // Congo - Kinshasa
3165 UNHANDLED_COUNTRY(C, F) // Central African Republic
3166 UNHANDLED_COUNTRY(C, G) // Congo - Brazzaville
3167 UNHANDLED_COUNTRY(C, I) // Ivory Coast
3168 UNHANDLED_COUNTRY(C, M) // Cameroon
3169 UNHANDLED_COUNTRY(D, J) // Djibouti
3170 UNHANDLED_COUNTRY(G, A) // Gabon
3171 UNHANDLED_COUNTRY(G, F) // French Guiana
3172 UNHANDLED_COUNTRY(G, N) // Guinea
3173 UNHANDLED_COUNTRY(G, P) // Guadeloupe
3174 UNHANDLED_COUNTRY(H, T) // Haiti
3175 #if defined(OS_WIN)
3176 UNHANDLED_COUNTRY(I, P) // Clipperton Island ('IP' is an WinXP-ism; ISO
3177 // includes it with France)
3178 #endif
3179 UNHANDLED_COUNTRY(M, L) // Mali
3180 UNHANDLED_COUNTRY(M, Q) // Martinique
3181 UNHANDLED_COUNTRY(N, C) // New Caledonia
3182 UNHANDLED_COUNTRY(N, E) // Niger
3183 UNHANDLED_COUNTRY(P, F) // French Polynesia
3184 UNHANDLED_COUNTRY(P, M) // Saint Pierre and Miquelon
3185 UNHANDLED_COUNTRY(R, E) // Reunion
3186 UNHANDLED_COUNTRY(S, N) // Senegal
3187 UNHANDLED_COUNTRY(T, D) // Chad
3188 UNHANDLED_COUNTRY(T, F) // French Southern Territories
3189 UNHANDLED_COUNTRY(T, G) // Togo
3190 UNHANDLED_COUNTRY(W, F) // Wallis and Futuna
3191 UNHANDLED_COUNTRY(Y, T) // Mayotte
3192 END_UNHANDLED_COUNTRIES(F, R)
3193
3194 // Countries using the "Greece" engine set.
3195 UNHANDLED_COUNTRY(C, Y) // Cyprus
3196 END_UNHANDLED_COUNTRIES(G, R)
3197
3198 // Countries using the "Italy" engine set.
3199 UNHANDLED_COUNTRY(S, M) // San Marino
3200 UNHANDLED_COUNTRY(V, A) // Vatican
3201 END_UNHANDLED_COUNTRIES(I, T)
3202
3203 // Countries using the "Morocco" engine set.
3204 UNHANDLED_COUNTRY(E, H) // Western Sahara
3205 END_UNHANDLED_COUNTRIES(M, A)
3206
3207 // Countries using the "Netherlands" engine set.
3208 UNHANDLED_COUNTRY(A, N) // Netherlands Antilles
3209 UNHANDLED_COUNTRY(A, W) // Aruba
3210 END_UNHANDLED_COUNTRIES(N, L)
3211
3212 // Countries using the "Norway" engine set.
3213 UNHANDLED_COUNTRY(B, V) // Bouvet Island
3214 UNHANDLED_COUNTRY(S, J) // Svalbard and Jan Mayen
3215 END_UNHANDLED_COUNTRIES(N, O)
3216
3217 // Countries using the "New Zealand" engine set.
3218 UNHANDLED_COUNTRY(C, K) // Cook Islands
3219 UNHANDLED_COUNTRY(N, U) // Niue
3220 UNHANDLED_COUNTRY(T, K) // Tokelau
3221 END_UNHANDLED_COUNTRIES(N, Z)
3222
3223 // Countries using the "Portugal" engine set.
3224 UNHANDLED_COUNTRY(C, V) // Cape Verde
3225 UNHANDLED_COUNTRY(G, W) // Guinea-Bissau
3226 UNHANDLED_COUNTRY(M, Z) // Mozambique
3227 UNHANDLED_COUNTRY(S, T) // Sao Tome and Principe
3228 UNHANDLED_COUNTRY(T, L) // Timor-Leste
3229 END_UNHANDLED_COUNTRIES(P, T)
3230
3231 // Countries using the "Russia" engine set.
3232 UNHANDLED_COUNTRY(A, M) // Armenia
3233 UNHANDLED_COUNTRY(A, Z) // Azerbaijan
3234 UNHANDLED_COUNTRY(K, G) // Kyrgyzstan
3235 UNHANDLED_COUNTRY(T, J) // Tajikistan
3236 UNHANDLED_COUNTRY(T, M) // Turkmenistan
3237 UNHANDLED_COUNTRY(U, Z) // Uzbekistan
3238 END_UNHANDLED_COUNTRIES(R, U)
3239
3240 // Countries using the "Saudi Arabia" engine set.
3241 UNHANDLED_COUNTRY(M, R) // Mauritania
3242 UNHANDLED_COUNTRY(P, S) // Palestinian Territory
3243 UNHANDLED_COUNTRY(S, D) // Sudan
3244 END_UNHANDLED_COUNTRIES(S, A)
3245
3246 // Countries using the "United Kingdom" engine set.
3247 UNHANDLED_COUNTRY(B, M) // Bermuda
3248 UNHANDLED_COUNTRY(F, K) // Falkland Islands
3249 UNHANDLED_COUNTRY(G, G) // Guernsey
3250 UNHANDLED_COUNTRY(G, I) // Gibraltar
3251 UNHANDLED_COUNTRY(G, S) // South Georgia and the South Sandwich
3252 // Islands
3253 UNHANDLED_COUNTRY(I, M) // Isle of Man
3254 UNHANDLED_COUNTRY(I, O) // British Indian Ocean Territory
3255 UNHANDLED_COUNTRY(J, E) // Jersey
3256 UNHANDLED_COUNTRY(K, Y) // Cayman Islands
3257 UNHANDLED_COUNTRY(M, S) // Montserrat
3258 UNHANDLED_COUNTRY(M, T) // Malta
3259 UNHANDLED_COUNTRY(P, N) // Pitcairn Islands
3260 UNHANDLED_COUNTRY(S, H) // Saint Helena, Ascension Island, and Tristan da
3261 // Cunha
3262 UNHANDLED_COUNTRY(T, C) // Turks and Caicos Islands
3263 UNHANDLED_COUNTRY(V, G) // British Virgin Islands
3264 END_UNHANDLED_COUNTRIES(G, B)
3265
3266 // Countries using the "United States" engine set.
3267 UNHANDLED_COUNTRY(A, S) // American Samoa
3268 UNHANDLED_COUNTRY(G, U) // Guam
3269 UNHANDLED_COUNTRY(M, P) // Northern Mariana Islands
3270 UNHANDLED_COUNTRY(U, M) // U.S. Minor Outlying Islands
3271 UNHANDLED_COUNTRY(V, I) // U.S. Virgin Islands
3272 END_UNHANDLED_COUNTRIES(U, S)
3273
3274 // Countries using the "default" engine set.
3275 UNHANDLED_COUNTRY(A, F) // Afghanistan
3276 UNHANDLED_COUNTRY(A, G) // Antigua and Barbuda
3277 UNHANDLED_COUNTRY(A, I) // Anguilla
3278 UNHANDLED_COUNTRY(A, O) // Angola
3279 UNHANDLED_COUNTRY(A, Q) // Antarctica
3280 UNHANDLED_COUNTRY(B, B) // Barbados
3281 UNHANDLED_COUNTRY(B, D) // Bangladesh
3282 UNHANDLED_COUNTRY(B, S) // Bahamas
3283 UNHANDLED_COUNTRY(B, T) // Bhutan
3284 UNHANDLED_COUNTRY(B, W) // Botswana
3285 UNHANDLED_COUNTRY(C, U) // Cuba
3286 UNHANDLED_COUNTRY(D, M) // Dominica
3287 UNHANDLED_COUNTRY(E, R) // Eritrea
3288 UNHANDLED_COUNTRY(E, T) // Ethiopia
3289 UNHANDLED_COUNTRY(F, J) // Fiji
3290 UNHANDLED_COUNTRY(F, M) // Micronesia
3291 UNHANDLED_COUNTRY(G, D) // Grenada
3292 UNHANDLED_COUNTRY(G, E) // Georgia
3293 UNHANDLED_COUNTRY(G, H) // Ghana
3294 UNHANDLED_COUNTRY(G, M) // Gambia
3295 UNHANDLED_COUNTRY(G, Q) // Equatorial Guinea
3296 UNHANDLED_COUNTRY(G, Y) // Guyana
3297 UNHANDLED_COUNTRY(K, H) // Cambodia
3298 UNHANDLED_COUNTRY(K, I) // Kiribati
3299 UNHANDLED_COUNTRY(K, M) // Comoros
3300 UNHANDLED_COUNTRY(K, N) // Saint Kitts and Nevis
3301 UNHANDLED_COUNTRY(K, P) // North Korea
3302 UNHANDLED_COUNTRY(L, A) // Laos
3303 UNHANDLED_COUNTRY(L, C) // Saint Lucia
3304 UNHANDLED_COUNTRY(L, K) // Sri Lanka
3305 UNHANDLED_COUNTRY(L, R) // Liberia
3306 UNHANDLED_COUNTRY(L, S) // Lesotho
3307 UNHANDLED_COUNTRY(M, G) // Madagascar
3308 UNHANDLED_COUNTRY(M, H) // Marshall Islands
3309 UNHANDLED_COUNTRY(M, M) // Myanmar
3310 UNHANDLED_COUNTRY(M, N) // Mongolia
3311 UNHANDLED_COUNTRY(M, U) // Mauritius
3312 UNHANDLED_COUNTRY(M, V) // Maldives
3313 UNHANDLED_COUNTRY(M, W) // Malawi
3314 UNHANDLED_COUNTRY(N, A) // Namibia
3315 UNHANDLED_COUNTRY(N, G) // Nigeria
3316 UNHANDLED_COUNTRY(N, P) // Nepal
3317 UNHANDLED_COUNTRY(N, R) // Nauru
3318 UNHANDLED_COUNTRY(P, G) // Papua New Guinea
3319 UNHANDLED_COUNTRY(P, W) // Palau
3320 UNHANDLED_COUNTRY(S, B) // Solomon Islands
3321 UNHANDLED_COUNTRY(S, C) // Seychelles
3322 UNHANDLED_COUNTRY(S, L) // Sierra Leone
3323 UNHANDLED_COUNTRY(S, O) // Somalia
3324 UNHANDLED_COUNTRY(S, R) // Suriname
3325 UNHANDLED_COUNTRY(S, Z) // Swaziland
3326 UNHANDLED_COUNTRY(T, O) // Tonga
3327 UNHANDLED_COUNTRY(T, V) // Tuvalu
3328 UNHANDLED_COUNTRY(U, G) // Uganda
3329 UNHANDLED_COUNTRY(V, C) // Saint Vincent and the Grenadines
3330 UNHANDLED_COUNTRY(V, U) // Vanuatu
3331 UNHANDLED_COUNTRY(W, S) // Samoa
3332 UNHANDLED_COUNTRY(Z, M) // Zambia
3333 case kCountryIDUnknown:
3334 default: // Unhandled location
3335 END_UNHANDLED_COUNTRIES(def, ault)
3336 }
3337 }
3338
3339 } // namespace
3340
3341 namespace TemplateURLPrepopulateData {
3342
RegisterUserPrefs(PrefService * prefs)3343 void RegisterUserPrefs(PrefService* prefs) {
3344 prefs->RegisterIntegerPref(prefs::kCountryIDAtInstall, kCountryIDUnknown);
3345 prefs->RegisterListPref(prefs::kSearchProviderOverrides);
3346 prefs->RegisterIntegerPref(prefs::kSearchProviderOverridesVersion, -1);
3347 // Obsolete pref, for migration.
3348 prefs->RegisterIntegerPref(prefs::kGeoIDAtInstall, -1);
3349 }
3350
GetDataVersion(PrefService * prefs)3351 int GetDataVersion(PrefService* prefs) {
3352 // Increment this if you change the above data in ways that mean users with
3353 // existing data should get a new version.
3354 const int kCurrentDataVersion = 33;
3355 if (!prefs)
3356 return kCurrentDataVersion;
3357 // If a version number exist in the preferences file, it overrides the
3358 // version of the built-in data.
3359 int version =
3360 prefs->GetInteger(prefs::kSearchProviderOverridesVersion);
3361 return (version >= 0) ? version : kCurrentDataVersion;
3362 }
3363
MakePrepopulatedTemplateURL(const wchar_t * name,const wchar_t * keyword,const wchar_t * search_url,const char * favicon_url,const wchar_t * suggest_url,const wchar_t * instant_url,const char * encoding,SearchEngineType search_engine_type,int logo_id,int id)3364 TemplateURL* MakePrepopulatedTemplateURL(const wchar_t* name,
3365 const wchar_t* keyword,
3366 const wchar_t* search_url,
3367 const char* favicon_url,
3368 const wchar_t* suggest_url,
3369 const wchar_t* instant_url,
3370 const char* encoding,
3371 SearchEngineType search_engine_type,
3372 int logo_id,
3373 int id) {
3374 TemplateURL* new_turl = new TemplateURL();
3375 new_turl->SetURL(WideToUTF8(search_url), 0, 0);
3376 if (favicon_url)
3377 new_turl->SetFaviconURL(GURL(favicon_url));
3378 if (suggest_url)
3379 new_turl->SetSuggestionsURL(WideToUTF8(suggest_url), 0, 0);
3380 if (instant_url)
3381 new_turl->SetInstantURL(WideToUTF8(instant_url), 0, 0);
3382 new_turl->set_short_name(WideToUTF16Hack(name));
3383 if (keyword == NULL)
3384 new_turl->set_autogenerate_keyword(true);
3385 else
3386 new_turl->set_keyword(WideToUTF16Hack(keyword));
3387 new_turl->set_show_in_default_list(true);
3388 new_turl->set_safe_for_autoreplace(true);
3389 new_turl->set_date_created(Time());
3390 std::vector<std::string> turl_encodings;
3391 turl_encodings.push_back(encoding);
3392 new_turl->set_input_encodings(turl_encodings);
3393 new_turl->set_search_engine_type(search_engine_type);
3394 new_turl->set_logo_id(logo_id);
3395 new_turl->set_prepopulate_id(id);
3396 return new_turl;
3397 }
3398
GetPrepopulatedTemplateFromPrefs(PrefService * prefs,std::vector<TemplateURL * > * t_urls)3399 void GetPrepopulatedTemplateFromPrefs(PrefService* prefs,
3400 std::vector<TemplateURL*>* t_urls) {
3401 if (!prefs)
3402 return;
3403
3404 const ListValue* list =
3405 prefs->GetList(prefs::kSearchProviderOverrides);
3406 if (!list)
3407 return;
3408
3409 string16 name;
3410 string16 keyword;
3411 std::string search_url;
3412 std::string suggest_url;
3413 std::string instant_url;
3414 std::string favicon_url;
3415 std::string encoding;
3416 int search_engine_type;
3417 int logo_id;
3418 int id;
3419
3420 size_t num_engines = list->GetSize();
3421 for (size_t i = 0; i != num_engines; ++i) {
3422 Value* val;
3423 DictionaryValue* engine;
3424 list->GetDictionary(i, &engine);
3425 if (engine->Get("name", &val) && val->GetAsString(&name) &&
3426 engine->Get("keyword", &val) && val->GetAsString(&keyword) &&
3427 engine->Get("search_url", &val) && val->GetAsString(&search_url) &&
3428 engine->Get("suggest_url", &val) && val->GetAsString(&suggest_url) &&
3429 engine->Get("instant_url", &val) && val->GetAsString(&instant_url) &&
3430 engine->Get("favicon_url", &val) && val->GetAsString(&favicon_url) &&
3431 engine->Get("encoding", &val) && val->GetAsString(&encoding) &&
3432 engine->Get("search_engine_type", &val) && val->GetAsInteger(
3433 &search_engine_type) &&
3434 engine->Get("logo_id", &val) && val->GetAsInteger(&logo_id) &&
3435 engine->Get("id", &val) && val->GetAsInteger(&id)) {
3436 // These next fields are not allowed to be empty.
3437 if (search_url.empty() || favicon_url.empty() || encoding.empty())
3438 return;
3439 } else {
3440 // Got a parsing error. No big deal.
3441 continue;
3442 }
3443 // TODO(viettrungluu): convert |MakePrepopulatedTemplateURL()| and get rid
3444 // of conversions.
3445 t_urls->push_back(MakePrepopulatedTemplateURL(
3446 UTF16ToWideHack(name).c_str(),
3447 UTF16ToWideHack(keyword).c_str(),
3448 UTF8ToWide(search_url).c_str(),
3449 favicon_url.c_str(),
3450 UTF8ToWide(suggest_url).c_str(),
3451 UTF8ToWide(instant_url).c_str(),
3452 encoding.c_str(),
3453 static_cast<SearchEngineType>(search_engine_type),
3454 logo_id,
3455 id));
3456 }
3457 }
3458
3459 // The caller owns the returned TemplateURL.
MakePrepopulateTemplateURLFromPrepopulateEngine(const PrepopulatedEngine & engine)3460 TemplateURL* MakePrepopulateTemplateURLFromPrepopulateEngine(
3461 const PrepopulatedEngine& engine) {
3462 return MakePrepopulatedTemplateURL(engine.name,
3463 engine.keyword,
3464 engine.search_url,
3465 engine.favicon_url,
3466 engine.suggest_url,
3467 engine.instant_url,
3468 engine.encoding,
3469 engine.search_engine_type,
3470 engine.logo_id,
3471 engine.id);
3472 }
3473
GetPrepopulatedEngines(PrefService * prefs,std::vector<TemplateURL * > * t_urls,size_t * default_search_provider_index)3474 void GetPrepopulatedEngines(PrefService* prefs,
3475 std::vector<TemplateURL*>* t_urls,
3476 size_t* default_search_provider_index) {
3477 // If there is a set of search engines in the preferences file, it overrides
3478 // the built-in set.
3479 *default_search_provider_index = 0;
3480 GetPrepopulatedTemplateFromPrefs(prefs, t_urls);
3481 if (!t_urls->empty())
3482 return;
3483
3484 const PrepopulatedEngine** engines;
3485 size_t num_engines;
3486 GetPrepopulationSetFromCountryID(prefs, &engines, &num_engines);
3487 for (size_t i = 0; i != num_engines; ++i) {
3488 t_urls->push_back(
3489 MakePrepopulateTemplateURLFromPrepopulateEngine(*engines[i]));
3490 }
3491 }
3492
GetPrepopulatedDefaultSearch(PrefService * prefs)3493 TemplateURL* GetPrepopulatedDefaultSearch(PrefService* prefs) {
3494 TemplateURL* default_search_provider = NULL;
3495 ScopedVector<TemplateURL> loaded_urls;
3496 size_t default_search_index;
3497 // This could be more efficient. We are loading all the URLs to only keep
3498 // the first one.
3499 GetPrepopulatedEngines(prefs, &loaded_urls.get(), &default_search_index);
3500 if (default_search_index < loaded_urls.size()) {
3501 default_search_provider = loaded_urls[default_search_index];
3502 loaded_urls.weak_erase(loaded_urls.begin() + default_search_index);
3503 }
3504 return default_search_provider;
3505 }
3506
3507 // Helper function for the templated function GetOriginForSearchURL.
ToUTF8(const std::string & str)3508 static const std::string& ToUTF8(const std::string& str) {
3509 return str;
3510 }
3511
3512 // Helper function for the templated function GetOriginForSearchURL.
ToUTF8(const wchar_t * str)3513 static std::string ToUTF8(const wchar_t* str) {
3514 return WideToUTF8(str);
3515 }
3516
3517 template<typename STR>
GetOriginForSearchURL(const STR & url_string)3518 static GURL GetOriginForSearchURL(const STR& url_string) {
3519 // It is much faster to parse the url without generating the search URL, so
3520 // try that first. If it fails, fallback to the slow method.
3521 std::string url_utf8_string(ToUTF8(url_string));
3522 GURL url(url_utf8_string);
3523 if (!url.is_valid()) {
3524 TemplateURL turl;
3525 turl.SetURL(url_utf8_string, 0, 0);
3526
3527 UIThreadSearchTermsData search_terms_data;
3528 url = TemplateURLModel::GenerateSearchURLUsingTermsData(
3529 &turl, search_terms_data);
3530 }
3531 return url.GetOrigin();
3532 }
3533
GetEngineForOrigin(PrefService * prefs,const GURL & url_to_find)3534 TemplateURL* GetEngineForOrigin(PrefService* prefs, const GURL& url_to_find) {
3535 GURL origin_to_find = url_to_find.GetOrigin();
3536
3537 // Let's first try to find the url in the defaults. (In case the name
3538 // of logo is different for the current locale versus others.)
3539 ScopedVector<TemplateURL> loaded_urls;
3540 size_t default_search_index;
3541 GetPrepopulatedEngines(prefs, &loaded_urls.get(), &default_search_index);
3542
3543 UIThreadSearchTermsData search_terms_data;
3544 for (std::vector<TemplateURL*>::iterator i = loaded_urls->begin();
3545 i != loaded_urls->end(); ++i) {
3546 TemplateURL* template_url = *i;
3547 GURL engine_origin(GetOriginForSearchURL((*i)->url()->url()));
3548 if (origin_to_find == engine_origin) {
3549 loaded_urls.weak_erase(i);
3550 return template_url;
3551 }
3552 }
3553
3554 // Let's try all of known engines now.
3555 for (size_t i = 0; i < arraysize(kAllEngines); ++i) {
3556 GURL engine_origin(GetOriginForSearchURL(kAllEngines[i]->search_url));
3557 if (origin_to_find == engine_origin)
3558 return MakePrepopulateTemplateURLFromPrepopulateEngine(*kAllEngines[i]);
3559 }
3560 return NULL;
3561 }
3562
GetSearchEngineLogo(const GURL & url_to_find)3563 int GetSearchEngineLogo(const GURL& url_to_find) {
3564 GURL origin_to_find = url_to_find.GetOrigin();
3565 for (size_t i = 0; i < arraysize(kAllEngines); ++i) {
3566 std::string url_utf8_string(ToUTF8(kAllEngines[i]->search_url));
3567 GURL url(url_utf8_string);
3568 if (origin_to_find == url.GetOrigin())
3569 return kAllEngines[i]->logo_id;
3570 }
3571 return kNoSearchEngineLogo;
3572 }
3573
3574 } // namespace TemplateURLPrepopulateData
3575