summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/search
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/search')
-rw-r--r--comm/mail/components/search/SearchIntegration.jsm871
-rw-r--r--comm/mail/components/search/components.conf16
-rw-r--r--comm/mail/components/search/content/SpotlightIntegration.js240
-rw-r--r--comm/mail/components/search/content/WinSearchIntegration.js346
-rw-r--r--comm/mail/components/search/extensions/allaannonser-sv-SE/favicon.icobin0 -> 668 bytes
-rw-r--r--comm/mail/components/search/extensions/allaannonser-sv-SE/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/allegro-pl/favicon.icobin0 -> 1150 bytes
-rw-r--r--comm/mail/components/search/extensions/allegro-pl/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/au/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/ca/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/de/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/en-GB/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/france/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/in/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/it/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/jp/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/mx/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/_locales/nl/messages.json17
-rw-r--r--comm/mail/components/search/extensions/amazon/favicon.icobin0 -> 1407 bytes
-rw-r--r--comm/mail/components/search/extensions/amazon/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/amazondotcn/favicon.icobin0 -> 1407 bytes
-rw-r--r--comm/mail/components/search/extensions/amazondotcn/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/amazondotcom/_locales/en/messages.json20
-rw-r--r--comm/mail/components/search/extensions/amazondotcom/favicon.icobin0 -> 1407 bytes
-rw-r--r--comm/mail/components/search/extensions/amazondotcom/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/atlas-sk/favicon.icobin0 -> 818 bytes
-rw-r--r--comm/mail/components/search/extensions/atlas-sk/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/azerdict/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/azerdict/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/azet-sk/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/azet-sk/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/baidu/favicon.icobin0 -> 5686 bytes
-rw-r--r--comm/mail/components/search/extensions/baidu/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/bbc-alba/favicon.icobin0 -> 958 bytes
-rw-r--r--comm/mail/components/search/extensions/bbc-alba/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/bing/favicon.icobin0 -> 3638 bytes
-rw-r--r--comm/mail/components/search/extensions/bing/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/bok-NO/favicon.pngbin0 -> 530 bytes
-rw-r--r--comm/mail/components/search/extensions/bok-NO/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/bolcom/_locales/fy-NL/messages.json14
-rw-r--r--comm/mail/components/search/extensions/bolcom/_locales/nl/messages.json14
-rw-r--r--comm/mail/components/search/extensions/bolcom/favicon.icobin0 -> 1406 bytes
-rw-r--r--comm/mail/components/search/extensions/bolcom/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/ceneji/favicon.pngbin0 -> 283 bytes
-rw-r--r--comm/mail/components/search/extensions/ceneji/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/chambers-en-GB/favicon.icobin0 -> 1425 bytes
-rw-r--r--comm/mail/components/search/extensions/chambers-en-GB/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/coccoc/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/coccoc/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/daum-kr/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/daum-kr/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/ddg/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/ddg/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/diec2/favicon.pngbin0 -> 4070 bytes
-rw-r--r--comm/mail/components/search/extensions/diec2/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/drae/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/drae/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/ecosia/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/ecosia/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/eki-ee/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/eki-ee/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/eudict/favicon.icobin0 -> 1785 bytes
-rw-r--r--comm/mail/components/search/extensions/eudict/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/faclair-beag/favicon.icobin0 -> 1091 bytes
-rw-r--r--comm/mail/components/search/extensions/faclair-beag/manifest.json23
-rw-r--r--comm/mail/components/search/extensions/flip/favicon.pngbin0 -> 342 bytes
-rw-r--r--comm/mail/components/search/extensions/flip/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/freelang/favicon.icobin0 -> 2280 bytes
-rw-r--r--comm/mail/components/search/extensions/freelang/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/google/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/google/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/gulesider-NO/favicon.icobin0 -> 1150 bytes
-rw-r--r--comm/mail/components/search/extensions/gulesider-NO/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/heureka-cz/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/heureka-cz/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/hotline-ua/favicon.icobin0 -> 1376 bytes
-rw-r--r--comm/mail/components/search/extensions/hotline-ua/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/kannadastore/favicon.pngbin0 -> 827 bytes
-rw-r--r--comm/mail/components/search/extensions/kannadastore/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/leo_ende_de/favicon.pngbin0 -> 749 bytes
-rw-r--r--comm/mail/components/search/extensions/leo_ende_de/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/list-am/favicon.gifbin0 -> 303 bytes
-rw-r--r--comm/mail/components/search/extensions/list-am/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/list.json1223
-rw-r--r--comm/mail/components/search/extensions/longdo/favicon.icobin0 -> 252 bytes
-rw-r--r--comm/mail/components/search/extensions/longdo/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/mailru/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/mailru/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/mapy-cz/favicon.icobin0 -> 1812 bytes
-rw-r--r--comm/mail/components/search/extensions/mapy-cz/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/marktplaats/_locales/fy-NL/messages.json17
-rw-r--r--comm/mail/components/search/extensions/marktplaats/_locales/nl/messages.json17
-rw-r--r--comm/mail/components/search/extensions/marktplaats/favicon.icobin0 -> 3054 bytes
-rw-r--r--comm/mail/components/search/extensions/marktplaats/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/mercadolibre/_locales/ar/messages.json17
-rw-r--r--comm/mail/components/search/extensions/mercadolibre/_locales/cl/messages.json17
-rw-r--r--comm/mail/components/search/extensions/mercadolibre/_locales/mx/messages.json17
-rw-r--r--comm/mail/components/search/extensions/mercadolibre/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/mercadolibre/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/mercadolivre/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/mercadolivre/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/morfix-dic/favicon.icobin0 -> 2286 bytes
-rw-r--r--comm/mail/components/search/extensions/morfix-dic/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/najdi-si/favicon.pngbin0 -> 683 bytes
-rw-r--r--comm/mail/components/search/extensions/najdi-si/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/naver-kr/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/naver-kr/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/neti-ee/favicon.icobin0 -> 2519 bytes
-rw-r--r--comm/mail/components/search/extensions/neti-ee/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/odpiralni/favicon.pngbin0 -> 2639 bytes
-rw-r--r--comm/mail/components/search/extensions/odpiralni/manifest.json23
-rw-r--r--comm/mail/components/search/extensions/olx/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/olx/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/oshiete-goo/favicon.icobin0 -> 8348 bytes
-rw-r--r--comm/mail/components/search/extensions/oshiete-goo/manifest.json23
-rw-r--r--comm/mail/components/search/extensions/osta-ee/favicon.pngbin0 -> 328 bytes
-rw-r--r--comm/mail/components/search/extensions/osta-ee/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/ozonru/favicon.icobin0 -> 3638 bytes
-rw-r--r--comm/mail/components/search/extensions/ozonru/manifest.json27
-rw-r--r--comm/mail/components/search/extensions/palasprint/favicon.icobin0 -> 1406 bytes
-rw-r--r--comm/mail/components/search/extensions/palasprint/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/pazaruvaj/favicon.icobin0 -> 2584 bytes
-rw-r--r--comm/mail/components/search/extensions/pazaruvaj/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/pogodak/favicon.icobin0 -> 1150 bytes
-rw-r--r--comm/mail/components/search/extensions/pogodak/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/priberam/favicon.pngbin0 -> 790 bytes
-rw-r--r--comm/mail/components/search/extensions/priberam/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/priceru/favicon.icobin0 -> 468 bytes
-rw-r--r--comm/mail/components/search/extensions/priceru/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/prisjakt-sv-SE/favicon.icobin0 -> 1406 bytes
-rw-r--r--comm/mail/components/search/extensions/prisjakt-sv-SE/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/pwn-pl/favicon.pngbin0 -> 1055 bytes
-rw-r--r--comm/mail/components/search/extensions/pwn-pl/manifest.json23
-rw-r--r--comm/mail/components/search/extensions/qwant/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/qwant/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/qxl-NO/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/qxl-NO/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/rakuten/favicon.icobin0 -> 2053 bytes
-rw-r--r--comm/mail/components/search/extensions/rakuten/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/readmoo/favicon.icobin0 -> 2468 bytes
-rw-r--r--comm/mail/components/search/extensions/readmoo/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/salidzinilv/favicon.icobin0 -> 3638 bytes
-rw-r--r--comm/mail/components/search/extensions/salidzinilv/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/seznam-cz/favicon.icobin0 -> 1743 bytes
-rw-r--r--comm/mail/components/search/extensions/seznam-cz/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/sslv/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/sslv/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/tearma/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/tearma/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/tyda-sv-SE/favicon.icobin0 -> 379 bytes
-rw-r--r--comm/mail/components/search/extensions/tyda-sv-SE/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/vatera/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/vatera/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/NN/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/NO/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/af/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/an/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ar/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/as/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ast/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/az/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/be-tarask/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/be/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/bg/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/bn/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/br/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/bs/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ca/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/crh/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/cy/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/cz/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/da/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/de/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/dsb/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/el/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/en/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/eo/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/es/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/et/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/eu/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/fa/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/fi/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/fr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/fy-NL/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ga-IE/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/gd/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/gl/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/gn/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/gu/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/he/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/hi/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/hr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/hsb/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/hu/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/hy/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ia/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/id/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/is/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/it/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ja/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ka/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/kab/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/kk/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/km/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/kn/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/kr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/lij/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/lo/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/lt/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ltg/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/lv/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/mk/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ml/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/mr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ms/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/my/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ne/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/nl/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/oc/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/or/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/pa/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/pl/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/pt/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/rm/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ro/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ru/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/si/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/sk/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/sl/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/sq/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/sr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/sv-SE/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ta/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/te/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/th/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/tl/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/tr/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/uk/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/ur/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/uz/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/vi/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/wo/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/zh-CN/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/_locales/zh-TW/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wikipedia/favicon.icobin0 -> 884 bytes
-rw-r--r--comm/mail/components/search/extensions/wikipedia/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/wiktionary/_locales/oc/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wiktionary/_locales/te/messages.json20
-rw-r--r--comm/mail/components/search/extensions/wiktionary/favicon.icobin0 -> 318 bytes
-rw-r--r--comm/mail/components/search/extensions/wiktionary/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/wolnelektury-pl/favicon.pngbin0 -> 304 bytes
-rw-r--r--comm/mail/components/search/extensions/wolnelektury-pl/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/yahoo-jp-auctions/favicon.icobin0 -> 2672 bytes
-rw-r--r--comm/mail/components/search/extensions/yahoo-jp-auctions/manifest.json25
-rw-r--r--comm/mail/components/search/extensions/yahoo-jp/favicon.icobin0 -> 5430 bytes
-rw-r--r--comm/mail/components/search/extensions/yahoo-jp/manifest.json24
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/az/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/by/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/en/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/kk/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/ru/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/_locales/tr/messages.json23
-rw-r--r--comm/mail/components/search/extensions/yandex/manifest.json26
-rw-r--r--comm/mail/components/search/extensions/yandex/yandex-en.icobin0 -> 1691 bytes
-rw-r--r--comm/mail/components/search/extensions/yandex/yandex-ru.icobin0 -> 2034 bytes
-rw-r--r--comm/mail/components/search/extensions/zoznam-sk/favicon.pngbin0 -> 222 bytes
-rw-r--r--comm/mail/components/search/extensions/zoznam-sk/manifest.json25
-rw-r--r--comm/mail/components/search/jar.mn15
-rw-r--r--comm/mail/components/search/mdimporter/English.lproj/InfoPlist.stringsbin0 -> 456 bytes
-rw-r--r--comm/mail/components/search/mdimporter/English.lproj/schema.stringsbin0 -> 1276 bytes
-rw-r--r--comm/mail/components/search/mdimporter/GetMetadataForFile.c76
-rw-r--r--comm/mail/components/search/mdimporter/Info.plist53
-rw-r--r--comm/mail/components/search/mdimporter/Makefile.in26
-rw-r--r--comm/mail/components/search/mdimporter/main.c208
-rw-r--r--comm/mail/components/search/mdimporter/moz.build22
-rw-r--r--comm/mail/components/search/mdimporter/schema.xml32
-rw-r--r--comm/mail/components/search/moz.build23
-rw-r--r--comm/mail/components/search/nsMailWinSearchHelper.cpp254
-rw-r--r--comm/mail/components/search/nsMailWinSearchHelper.h34
-rw-r--r--comm/mail/components/search/public/moz.build10
-rw-r--r--comm/mail/components/search/public/nsIMailWinSearchHelper.idl58
-rw-r--r--comm/mail/components/search/wsenable/Makefile.in6
-rw-r--r--comm/mail/components/search/wsenable/WSEnable.cpp141
-rw-r--r--comm/mail/components/search/wsenable/WSEnable.exe.manifest37
-rw-r--r--comm/mail/components/search/wsenable/WSEnable.rc6
-rw-r--r--comm/mail/components/search/wsenable/module.ver1
-rw-r--r--comm/mail/components/search/wsenable/moz.build21
287 files changed, 7803 insertions, 0 deletions
diff --git a/comm/mail/components/search/SearchIntegration.jsm b/comm/mail/components/search/SearchIntegration.jsm
new file mode 100644
index 0000000000..4bedb50f58
--- /dev/null
+++ b/comm/mail/components/search/SearchIntegration.jsm
@@ -0,0 +1,871 @@
+/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Common, useful functions for desktop search integration components.
+ *
+ * The following symbols have to be defined for each component that includes this:
+ * - gHdrIndexedProperty: the property in the database that indicates whether a message
+ * has been indexed
+ * - gFileExt: the file extension to be used for support files
+ * - gPrefBase: the base for preferences that are stored
+ * - gStreamListener: an nsIStreamListener to read message text
+ */
+
+/* exported SearchSupport */
+
+var EXPORTED_SYMBOLS = ["SearchIntegration"];
+
+const { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
+);
+const { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var PERM_DIRECTORY = 0o755;
+var PERM_FILE = 0o644;
+
+var SearchIntegration = null;
+
+var SearchSupport = {
+ /**
+ * URI of last folder indexed. Kept in sync with the pref
+ */
+ __lastFolderIndexedUri: null,
+ set _lastFolderIndexedUri(uri) {
+ this._prefBranch.setStringPref("lastFolderIndexedUri", uri);
+ this.__lastFolderIndexedUri = uri;
+ },
+ get _lastFolderIndexedUri() {
+ // If we don't know about it, get it from the pref branch
+ if (this.__lastFolderIndexedUri === null) {
+ this.__lastFolderIndexedUri = this._prefBranch.getStringPref(
+ "lastFolderIndexedUri",
+ ""
+ );
+ }
+ return this.__lastFolderIndexedUri;
+ },
+
+ /**
+ * Queue of message headers to index, along with reindex times for each header
+ */
+ _msgHdrsToIndex: [],
+
+ /**
+ * Messenger object, used primarily to get message URIs
+ */
+ __messenger: null,
+ get _messenger() {
+ if (!this.__messenger) {
+ this.__messenger = Cc["@mozilla.org/messenger;1"].createInstance(
+ Ci.nsIMessenger
+ );
+ }
+ return this.__messenger;
+ },
+
+ // The preferences branch to use
+ __prefBranch: null,
+ get _prefBranch() {
+ if (!this.__prefBranch) {
+ this.__prefBranch = Services.prefs.getBranch(this._prefBase);
+ }
+ return this.__prefBranch;
+ },
+
+ /**
+ * If this is true, we won't show any UI because the OS doesn't have the
+ * support we need
+ */
+ osVersionTooLow: false,
+
+ /**
+ * If this is true, we'll show disabled UI, because while the OS does have
+ * the support we need, not all the OS components we need are running
+ */
+ osComponentsNotRunning: false,
+
+ /**
+ * Whether the preference is enabled. The module might be in a state where
+ * the preference is on but "enabled" is false, so take care of that.
+ */
+ get prefEnabled() {
+ // Don't cache the value
+ return this._prefBranch.getBoolPref("enable");
+ },
+ set prefEnabled(aEnabled) {
+ if (this.prefEnabled != aEnabled) {
+ this._prefBranch.setBoolPref("enable", aEnabled);
+ }
+ },
+
+ /**
+ * Whether the first run has occurred. This will be used to determine if
+ * a dialog box needs to be displayed.
+ */
+ get firstRunDone() {
+ // Don't cache this value either
+ return this._prefBranch.getBoolPref("firstRunDone");
+ },
+ set firstRunDone(aAlwaysTrue) {
+ this._prefBranch.setBoolPref("firstRunDone", true);
+ },
+
+ /**
+ * Last global reindex time, used to check if reindexing is required.
+ * Kept in sync with the pref
+ */
+ _globalReindexTime: null,
+ set globalReindexTime(aTime) {
+ this._globalReindexTime = aTime;
+ // Set the pref as well
+ this._prefBranch.setCharPref("global_reindex_time", "" + aTime);
+ },
+ get globalReindexTime() {
+ if (!this._globalReindexTime) {
+ // Try getting the time from the preferences
+ try {
+ this._globalReindexTime = parseInt(
+ this._prefBranch.getCharPref("global_reindex_time")
+ );
+ } catch (e) {
+ // We don't have it defined, so set it (Unix time, in seconds)
+ this._globalReindexTime = parseInt(Date.now() / 1000);
+ this._prefBranch.setCharPref(
+ "global_reindex_time",
+ "" + this._globalReindexTime
+ );
+ }
+ }
+ return this._globalReindexTime;
+ },
+
+ /**
+ * Amount of time the user is idle before we (re)start an indexing sweep
+ */
+ _idleThresholdSecs: 30,
+
+ /**
+ * Reference to timer object
+ */
+ __timer: null,
+ get _timer() {
+ if (!this.__timer) {
+ this.__timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ }
+ return this.__timer;
+ },
+
+ _cancelTimer() {
+ try {
+ this._timer.cancel();
+ } catch (ex) {}
+ },
+
+ /**
+ * Enabled status.
+ *
+ * When we're enabled, then we get notifications about every message or folder
+ * operation, including "message displayed" operations which we bump up in
+ * priority. We also have a background sweep which we do on idle.
+ *
+ * We aren't fully disabled when we're "disabled", though. We still observe
+ * message and folder moves and deletes, as we don't want to have support
+ * files for non-existent messages.
+ */
+ _enabled: null,
+ set enabled(aEnable) {
+ // Nothing to do if there's no change in state
+ if (this._enabled == aEnable) {
+ return;
+ }
+
+ this._log.info(
+ "Enabled status changing from " + this._enabled + " to " + aEnable
+ );
+
+ this._removeObservers();
+
+ if (aEnable) {
+ // This stuff we always need to do.
+ // This code pre-dates msgsClassified.
+ // Some events intentionally omitted.
+ MailServices.mfn.addListener(
+ this._msgFolderListener,
+ MailServices.mfn.msgAdded |
+ MailServices.mfn.msgsDeleted |
+ MailServices.mfn.msgsMoveCopyCompleted |
+ MailServices.mfn.folderDeleted |
+ MailServices.mfn.folderMoveCopyCompleted |
+ MailServices.mfn.folderRenamed
+ );
+ Services.obs.addObserver(this, "MsgMsgDisplayed");
+ let idleService = Cc["@mozilla.org/widget/useridleservice;1"].getService(
+ Ci.nsIUserIdleService
+ );
+ idleService.addIdleObserver(this, this._idleThresholdSecs);
+ } else {
+ // We want to observe moves, deletes and renames in case we're disabled
+ // If we don't, we'll have no idea the support files exist later
+ MailServices.mfn.addListener(
+ this._msgFolderListener,
+ MailServices.mfn.msgsMoveCopyCompleted |
+ MailServices.mfn.msgsDeleted |
+ // folderAdded intentionally omitted
+ MailServices.mfn.folderDeleted |
+ MailServices.mfn.folderMoveCopyCompleted |
+ MailServices.mfn.folderRenamed
+ );
+ }
+
+ this._enabled = aEnable;
+ },
+ get enabled() {
+ return this._enabled;
+ },
+
+ /**
+ * Remove whatever observers are present. This is done while switching states
+ */
+ _removeObservers() {
+ if (this.enabled === null) {
+ return;
+ }
+
+ MailServices.mfn.removeListener(this._msgFolderListener);
+
+ if (this.enabled) {
+ Services.obs.removeObserver(this, "MsgMsgDisplayed");
+ let idleService = Cc["@mozilla.org/widget/useridleservice;1"].getService(
+ Ci.nsIUserIdleService
+ );
+ idleService.removeIdleObserver(this, this._idleThresholdSecs);
+
+ // in case there's a background sweep going on
+ this._cancelTimer();
+ }
+ // We don't need to do anything extra if we're disabled
+ },
+
+ /**
+ * Init function -- this should be called from the component's init function
+ */
+ _initSupport(enabled) {
+ this._log.info(
+ "Search integration running in " +
+ (enabled ? "active" : "backoff") +
+ " mode"
+ );
+ this.enabled = enabled;
+
+ // Set up a pref observer
+ this._prefBranch.addObserver("enable", this);
+ },
+
+ /**
+ * Current folder being indexed
+ */
+ _currentFolderToIndex: null,
+
+ /**
+ * For the current folder being indexed, an enumerator for all the headers in
+ * the folder
+ */
+ _headerEnumerator: null,
+
+ /*
+ * These functions are to index already existing messages
+ */
+
+ /**
+ * Generator to look for the next folder to index, and return it
+ *
+ * This first looks for folders that have their corresponding search results
+ * folders missing. If it finds such a folder first, it'll yield return that
+ * folder.
+ *
+ * Next, it looks for the next folder after the lastFolderIndexedUri. If it is
+ * in such a folder, it'll yield return that folder, then set the
+ * lastFolderIndexedUrl to the URI of that folder.
+ *
+ * It resets lastFolderIndexedUri to an empty string, then yield returns null
+ * once iteration across all folders is complete.
+ */
+ *_foldersToIndexGenerator() {
+ // Stores whether we're after the last folder indexed or before that --
+ // if the last folder indexed is empty, this needs to be true initially
+ let afterLastFolderIndexed = this._lastFolderIndexedUri.length == 0;
+
+ for (let server of MailServices.accounts.allServers) {
+ this._log.debug(
+ "in find next folder, lastFolderIndexedUri = " +
+ this._lastFolderIndexedUri
+ );
+
+ for (var folder of server.rootFolder.descendants) {
+ let searchPath = this._getSearchPathForFolder(folder);
+ searchPath.leafName = searchPath.leafName + ".mozmsgs";
+ // If after the last folder indexed, definitely index this
+ if (afterLastFolderIndexed) {
+ // Create the folder if it doesn't exist, so that we don't hit the
+ // condition below later
+ if (!searchPath.exists()) {
+ searchPath.create(Ci.nsIFile.DIRECTORY_TYPE, PERM_DIRECTORY);
+ }
+
+ yield folder;
+ // We're back after yielding -- set the last folder indexed
+ this._lastFolderIndexedUri = folder.URI;
+ } else {
+ // If a folder's entire corresponding search results folder is
+ // missing, we need to index it, and force a reindex of all the
+ // messages in it
+ if (!searchPath.exists()) {
+ this._log.debug(
+ "using folder " +
+ folder.URI +
+ " because " +
+ "corresponding search folder does not exist"
+ );
+ // Create the folder, so that next time we're checking we don't hit
+ // this
+ searchPath.create(Ci.nsIFile.DIRECTORY_TYPE, PERM_DIRECTORY);
+ folder.setStringProperty(
+ this._hdrIndexedProperty,
+ "" + Date.now() / 1000
+ );
+ yield folder;
+ } else if (this._pathNeedsReindexing(searchPath)) {
+ // folder may need reindexing for other reasons
+ folder.setStringProperty(
+ this._hdrIndexedProperty,
+ "" + Date.now() / 1000
+ );
+ yield folder;
+ }
+
+ // Even if we yielded above, check if this is the last folder
+ // indexed
+ if (this._lastFolderIndexedUri == folder.URI) {
+ afterLastFolderIndexed = true;
+ }
+ }
+ }
+ }
+ // We're done with one iteration of all the folders; time to reset the
+ // lastFolderIndexedUri
+ this._lastFolderIndexedUri = "";
+ yield null;
+ },
+
+ __foldersToIndex: null,
+ get _foldersToIndex() {
+ if (!this.__foldersToIndex) {
+ this.__foldersToIndex = this._foldersToIndexGenerator();
+ }
+ return this.__foldersToIndex;
+ },
+
+ _findNextHdrToIndex() {
+ try {
+ let reindexTime = this._getLastReindexTime(this._currentFolderToIndex);
+ this._log.debug("Reindex time for this folder is " + reindexTime);
+ if (!this._headerEnumerator) {
+ // we need to create search terms for messages to index
+ let searchSession = Cc[
+ "@mozilla.org/messenger/searchSession;1"
+ ].createInstance(Ci.nsIMsgSearchSession);
+ let searchTerms = [];
+
+ searchSession.addScopeTerm(
+ Ci.nsMsgSearchScope.offlineMail,
+ this._currentFolderToIndex
+ );
+ let nsMsgSearchAttrib = Ci.nsMsgSearchAttrib;
+ let nsMsgSearchOp = Ci.nsMsgSearchOp;
+ // first term: (_hdrIndexProperty < reindexTime)
+ let searchTerm = searchSession.createTerm();
+ searchTerm.booleanAnd = false; // actually don't care here
+ searchTerm.attrib = nsMsgSearchAttrib.Uint32HdrProperty;
+ searchTerm.op = nsMsgSearchOp.IsLessThan;
+ let value = searchTerm.value;
+ value.attrib = searchTerm.attrib;
+ searchTerm.hdrProperty = this._hdrIndexedProperty;
+ value.status = reindexTime;
+ searchTerm.value = value;
+ searchTerms.push(searchTerm);
+ this._headerEnumerator =
+ this._currentFolderToIndex.msgDatabase.getFilterEnumerator(
+ searchTerms
+ );
+ }
+
+ // iterate over the folder finding the next message to index
+ for (let msgHdr of this._headerEnumerator) {
+ // Check if the file exists. If it does, then assume indexing to be
+ // complete for this file
+ if (this._getSupportFile(msgHdr).exists()) {
+ this._log.debug(
+ "Message time not set but file exists; setting " +
+ "time to " +
+ reindexTime
+ );
+ msgHdr.setUint32Property(this._hdrIndexedProperty, reindexTime);
+ } else {
+ return [msgHdr, reindexTime];
+ }
+ }
+ } catch (ex) {
+ this._log.debug("Error while finding next header: " + ex);
+ }
+
+ // If we couldn't find any headers to index, null out the enumerator
+ this._headerEnumerator = null;
+ if (!(this._currentFolderToIndex.flags & Ci.nsMsgFolderFlags.Inbox)) {
+ this._currentFolderToIndex.msgDatabase = null;
+ }
+ return null;
+ },
+
+ /**
+ * Get the last reindex time for this folder. This will be whichever's
+ * greater, the global reindex time or the folder reindex time
+ */
+ _getLastReindexTime(aFolder) {
+ let reindexTime = this.globalReindexTime;
+
+ // Check if this folder has a separate string property set
+ let folderReindexTime;
+ try {
+ folderReindexTime = this._currentFolderToIndex.getStringProperty(
+ this._hdrIndexedProperty
+ );
+ } catch (e) {
+ folderReindexTime = "";
+ }
+
+ if (folderReindexTime.length > 0) {
+ let folderReindexTimeInt = parseInt(folderReindexTime);
+ if (folderReindexTimeInt > reindexTime) {
+ reindexTime = folderReindexTimeInt;
+ }
+ }
+ return reindexTime;
+ },
+
+ /**
+ * Whether background indexing has been completed
+ */
+ __backgroundIndexingDone: false,
+
+ /**
+ * The main background sweeping function. It first looks for a folder to
+ * start or continue indexing in, then for a header. If it can't find anything
+ * to index, it resets the last folder indexed URI so that the sweep can
+ * be restarted
+ */
+ _continueSweep() {
+ let msgHdrAndReindexTime = null;
+
+ if (this.__backgroundIndexingDone) {
+ return;
+ }
+
+ // find the current folder we're working on
+ if (!this._currentFolderToIndex) {
+ this._currentFolderToIndex = this._foldersToIndex.next().value;
+ }
+
+ // we'd like to index more than one message on each timer fire,
+ // but since streaming is async, it's hard to know how long
+ // it's going to take to stream any particular message.
+ if (this._currentFolderToIndex) {
+ msgHdrAndReindexTime = this._findNextHdrToIndex();
+ } else {
+ // We've cycled through all the folders. We should take a break
+ // from indexing of existing messages.
+ this.__backgroundIndexingDone = true;
+ }
+
+ if (!msgHdrAndReindexTime) {
+ this._log.debug("reached end of folder");
+ if (this._currentFolderToIndex) {
+ this._currentFolderToIndex = null;
+ }
+ } else {
+ this._queueMessage(msgHdrAndReindexTime[0], msgHdrAndReindexTime[1]);
+ }
+
+ // Restart the timer, and call ourselves
+ this._cancelTimer();
+ this._timer.initWithCallback(
+ this._wrapContinueSweep,
+ this._msgHdrsToIndex.length > 1 ? 5000 : 1000,
+ Ci.nsITimer.TYPE_ONE_SHOT
+ );
+ },
+
+ /**
+ * A simple wrapper to make "this" be right for _continueSweep
+ */
+ _wrapContinueSweep() {
+ SearchIntegration._continueSweep();
+ },
+
+ /**
+ * Observer implementation. Consists of
+ * - idle observer; starts running through folders when it receives an "idle"
+ * notification, and cancels any timers when it receives a "back" notification
+ * - msg displayed observer, queues the message if necessary
+ * - pref observer, to see if the preference has been poked
+ */
+ observe(aSubject, aTopic, aData) {
+ if (aTopic == "idle") {
+ this._log.debug("Idle detected, continuing sweep");
+ this._continueSweep();
+ } else if (aTopic == "back") {
+ this._log.debug("Non-idle, so suspending sweep");
+ this._cancelTimer();
+ } else if (aTopic == "MsgMsgDisplayed") {
+ this._log.debug("topic = " + aTopic + " uri = " + aData);
+ let msgHdr = this._messenger.msgHdrFromURI(aData);
+ let reindexTime = this._getLastReindexTime(msgHdr.folder);
+ this._log.debug("Reindex time for this folder is " + reindexTime);
+ if (msgHdr.getUint32Property(this._hdrIndexedProperty) < reindexTime) {
+ // Check if the file exists. If it does, then assume indexing to be
+ // complete for this file
+ if (this._getSupportFile(msgHdr).exists()) {
+ this._log.debug(
+ "Message time not set but file exists; setting " +
+ " time to " +
+ reindexTime
+ );
+ msgHdr.setUint32Property(this._hdrIndexedProperty, reindexTime);
+ } else {
+ this._queueMessage(msgHdr, reindexTime);
+ }
+ }
+ } else if (aTopic == "nsPref:changed" && aData == "enable") {
+ let prefEnabled = this.prefEnabled;
+ // Search integration turned on
+ if (prefEnabled && this.register()) {
+ this.enabled = true;
+ } else if (!prefEnabled && this.deregister()) {
+ // Search integration turned off
+ this.enabled = false;
+ } else {
+ // The call to register or deregister has failed.
+ // This is a hack to handle this case
+ let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ timer.initWithCallback(
+ function () {
+ SearchIntegration._handleRegisterFailure(!prefEnabled);
+ },
+ 200,
+ Ci.nsITimer.TYPE_ONE_SHOT
+ );
+ }
+ }
+ },
+
+ // Handle failure to register or deregister
+ _handleRegisterFailure(enabled) {
+ // Remove ourselves from the observer list, flip the pref,
+ // and add ourselves back
+ this._prefBranch.removeObserver("enable", this);
+ this.prefEnabled = enabled;
+ this._prefBranch.addObserver("enable", this);
+ },
+
+ /**
+ * This object gets notifications for new/moved/copied/deleted messages/folders
+ */
+ _msgFolderListener: {
+ msgAdded(aMsg) {
+ SearchIntegration._log.info("in msgAdded");
+ // The message already being there is an expected case
+ let file = SearchIntegration._getSupportFile(aMsg);
+ if (!file.exists()) {
+ SearchIntegration._queueMessage(
+ aMsg,
+ SearchIntegration._getLastReindexTime(aMsg.folder)
+ );
+ }
+ },
+
+ msgsDeleted(aMsgs) {
+ SearchIntegration._log.info("in msgsDeleted");
+ for (let msgHdr of aMsgs) {
+ let file = SearchIntegration._getSupportFile(msgHdr);
+ if (file.exists()) {
+ file.remove(false);
+ }
+ }
+ },
+
+ msgsMoveCopyCompleted(aMove, aSrcMsgs, aDestFolder) {
+ SearchIntegration._log.info("in msgsMoveCopyCompleted, aMove = " + aMove);
+ // Forget about copies if disabled
+ if (!aMove && !this.enabled) {
+ return;
+ }
+
+ let count = aSrcMsgs.length;
+ for (let i = 0; i < count; i++) {
+ let srcFile = SearchIntegration._getSupportFile(aSrcMsgs[i]);
+ if (srcFile && srcFile.exists()) {
+ let destFile = SearchIntegration._getSearchPathForFolder(aDestFolder);
+ destFile.leafName = destFile.leafName + ".mozmsgs";
+ if (!destFile.exists()) {
+ try {
+ // create the directory, if it doesn't exist
+ destFile.create(Ci.nsIFile.DIRECTORY_TYPE, PERM_DIRECTORY);
+ } catch (ex) {
+ SearchIntegration._log.warn(ex);
+ }
+ }
+ SearchIntegration._log.debug("dst file path = " + destFile.path);
+ SearchIntegration._log.debug("src file path = " + srcFile.path);
+ // We're not going to copy in case we're not in active mode
+ if (destFile.exists()) {
+ if (aMove) {
+ srcFile.moveTo(destFile, "");
+ } else {
+ srcFile.copyTo(destFile, "");
+ }
+ }
+ }
+ }
+ },
+
+ folderDeleted(aFolder) {
+ SearchIntegration._log.info(
+ "in folderDeleted, folder name = " + aFolder.prettyName
+ );
+ let srcFile = SearchIntegration._getSearchPathForFolder(aFolder);
+ srcFile.leafName = srcFile.leafName + ".mozmsgs";
+ if (srcFile.exists()) {
+ srcFile.remove(true);
+ }
+ },
+
+ folderMoveCopyCompleted(aMove, aSrcFolder, aDestFolder) {
+ SearchIntegration._log.info(
+ "in folderMoveCopyCompleted, aMove = " + aMove
+ );
+
+ // Forget about copies if disabled
+ if (!aMove && !this.enabled) {
+ return;
+ }
+
+ let srcFile = SearchIntegration._getSearchPathForFolder(aSrcFolder);
+ let destFile = SearchIntegration._getSearchPathForFolder(aDestFolder);
+ srcFile.leafName = srcFile.leafName + ".mozmsgs";
+ destFile.leafName += ".sbd";
+ SearchIntegration._log.debug("src file path = " + srcFile.path);
+ SearchIntegration._log.debug("dst file path = " + destFile.path);
+ if (srcFile.exists()) {
+ // We're not going to copy if we aren't in active mode
+ if (aMove) {
+ srcFile.moveTo(destFile, "");
+ } else {
+ srcFile.copyTo(destFile, "");
+ }
+ }
+ },
+
+ folderRenamed(aOrigFolder, aNewFolder) {
+ SearchIntegration._log.info(
+ "in folderRenamed, aOrigFolder = " +
+ aOrigFolder.prettyName +
+ ", aNewFolder = " +
+ aNewFolder.prettyName
+ );
+ let srcFile = SearchIntegration._getSearchPathForFolder(aOrigFolder);
+ srcFile.leafName = srcFile.leafName + ".mozmsgs";
+ let destName = aNewFolder.name + ".mozmsgs";
+ SearchIntegration._log.debug("src file path = " + srcFile.path);
+ SearchIntegration._log.debug("dst name = " + destName);
+ if (srcFile.exists()) {
+ srcFile.moveTo(null, destName);
+ }
+ },
+ },
+
+ /*
+ * Support functions to queue/generate files
+ */
+ _queueMessage(msgHdr, reindexTime) {
+ if (this._msgHdrsToIndex.push([msgHdr, reindexTime]) == 1) {
+ this._log.info("generating support file for id = " + msgHdr.messageId);
+ this._streamListener.startStreaming(msgHdr, reindexTime);
+ } else {
+ this._log.info(
+ "queueing support file generation for id = " + msgHdr.messageId
+ );
+ }
+ },
+
+ /**
+ * Handle results from the command line. This method is the inverse of the
+ * _getSupportFile method below.
+ *
+ * @param aFile the file passed in by the command line
+ * @returns the nsIMsgDBHdr corresponding to the file passed in
+ */
+ handleResult(aFile) {
+ // The file path has two components -- the search path, which needs to be
+ // converted into a folder, and the message ID.
+ let searchPath = aFile.parent;
+ // Strip off ".mozmsgs" from the end (8 characters)
+ searchPath.leafName = searchPath.leafName.slice(0, -8);
+
+ let folder = this._getFolderForSearchPath(searchPath);
+
+ // Get rid of the file extension at the end (7 characters), and unescape
+ let messageID = decodeURIComponent(aFile.leafName.slice(0, -7));
+
+ // Look for the message ID in the folder
+ return folder.msgDatabase.getMsgHdrForMessageID(messageID);
+ },
+
+ _getSupportFile(msgHdr) {
+ let folder = msgHdr.folder;
+ if (folder) {
+ let messageId = encodeURIComponent(msgHdr.messageId);
+ this._log.debug("encoded message id = " + messageId);
+ let file = this._getSearchPathForFolder(folder);
+ file.leafName = file.leafName + ".mozmsgs";
+ file.appendRelativePath(messageId + this._fileExt);
+ this._log.debug("getting support file path = " + file.path);
+ return file;
+ }
+ return null;
+ },
+
+ /**
+ * Base to use for stream listeners, extended by the respective
+ * implementations
+ */
+ _streamListenerBase: {
+ // Output file
+ _outputFile: null,
+
+ // Stream to use to write to the output file
+ __outputStream: null,
+ set _outputStream(stream) {
+ if (this.__outputStream) {
+ this.__outputStream.close();
+ }
+ this.__outputStream = stream;
+ },
+ get _outputStream() {
+ return this.__outputStream;
+ },
+
+ // Reference to message header
+ _msgHdr: null,
+
+ // Reindex time for this message header
+ _reindexTime: null,
+
+ QueryInterface: ChromeUtils.generateQI(["nsIStreamListener"]),
+
+ // "Finish" function, cleans up behind itself if unsuccessful
+ _onDoneStreaming(successful) {
+ this._outputStream = null;
+ if (!successful && this._msgHdr) {
+ let file = SearchIntegration._getSupportFile(this._msgHdr);
+ if (file && file.exists()) {
+ file.remove(false);
+ }
+ }
+ // should we try to delete the file on disk in case not successful?
+ SearchIntegration._msgHdrsToIndex.shift();
+
+ if (SearchIntegration._msgHdrsToIndex.length > 0) {
+ let [msgHdr, reindexTime] = SearchIntegration._msgHdrsToIndex[0];
+ this.startStreaming(msgHdr, reindexTime);
+ }
+ },
+
+ // "Start" function
+ startStreaming(msgHdr, reindexTime) {
+ try {
+ let folder = msgHdr.folder;
+ if (folder) {
+ let messageId = encodeURIComponent(msgHdr.messageId);
+ SearchIntegration._log.info(
+ "generating support file, id = " + messageId
+ );
+ let file = SearchIntegration._getSearchPathForFolder(folder);
+
+ file.leafName = file.leafName + ".mozmsgs";
+ SearchIntegration._log.debug("file leafname = " + file.leafName);
+ if (!file.exists()) {
+ try {
+ // create the directory, if it doesn't exist
+ file.create(Ci.nsIFile.DIRECTORY_TYPE, PERM_DIRECTORY);
+ } catch (ex) {
+ this._log.error(ex);
+ }
+ }
+
+ file.appendRelativePath(messageId + SearchIntegration._fileExt);
+ SearchIntegration._log.debug("file path = " + file.path);
+ file.create(0, PERM_FILE);
+ let uri = folder.getUriForMsg(msgHdr);
+ let msgService = MailServices.messageServiceFromURI(uri);
+ this._msgHdr = msgHdr;
+ this._outputFile = file;
+ this._reindexTime = reindexTime;
+ try {
+ // XXX For now, try getting the messages from the server. This has
+ // to be improved so that we don't generate any excess network
+ // traffic
+ msgService.streamMessage(uri, this, null, null, false, "", false);
+ } catch (ex) {
+ // This is an expected case, in case we're offline
+ SearchIntegration._log.warn(
+ "StreamMessage unsuccessful for id = " + messageId
+ );
+ this._onDoneStreaming(false);
+ }
+ }
+ } catch (ex) {
+ SearchIntegration._log.error(ex);
+ this._onDoneStreaming(false);
+ }
+ },
+ },
+
+ /**
+ * Logging functionality, shamelessly ripped from gloda
+ * If enabled, warnings and above are logged to the error console, while dump
+ * gets everything
+ */
+ _log: null,
+ _initLogging() {
+ this._log = console.createInstance({
+ prefix: this._prefBase.slice(0, -1),
+ maxLogLevel: "Warn",
+ maxLogLevelPref: `${this._prefBase}loglevel`,
+ });
+ this._log.info("Logging initialized");
+ },
+};
+
+if (AppConstants.platform == "win") {
+ Services.scriptloader.loadSubScript(
+ "chrome://messenger/content/WinSearchIntegration.js"
+ );
+} else if (AppConstants.platform == "macosx") {
+ Services.scriptloader.loadSubScript(
+ "chrome://messenger/content/SpotlightIntegration.js"
+ );
+}
diff --git a/comm/mail/components/search/components.conf b/comm/mail/components/search/components.conf
new file mode 100644
index 0000000000..f34fbdc04d
--- /dev/null
+++ b/comm/mail/components/search/components.conf
@@ -0,0 +1,16 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at http://mozilla.org/MPL/2.0/.
+
+Classes = []
+
+if buildconfig.substs["OS_ARCH"] == "WINNT":
+ Classes += [
+ {
+ "cid": "{5dd31c99-08c7-4a3b-aeb3-d2e60665a31a}",
+ "contract_ids": ["@mozilla.org/mail/windows-search-helper;1"],
+ "type": "nsMailWinSearchHelper",
+ "init_method": "Init",
+ "headers": ["/comm/mail/components/search/nsMailWinSearchHelper.h"],
+ },
+ ]
diff --git a/comm/mail/components/search/content/SpotlightIntegration.js b/comm/mail/components/search/content/SpotlightIntegration.js
new file mode 100644
index 0000000000..0757800ee6
--- /dev/null
+++ b/comm/mail/components/search/content/SpotlightIntegration.js
@@ -0,0 +1,240 @@
+/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// SearchIntegration.jsm
+/* globals SearchIntegration, SearchSupport, Services */
+
+var { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
+
+var MSG_DB_LARGE_COMMIT = 1;
+var gFileHeader =
+ '<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.\ncom/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>';
+
+// eslint-disable-next-line no-global-assign
+SearchIntegration = {
+ __proto__: SearchSupport,
+
+ // The property of the header and (sometimes) folders that's used to check
+ // if a message is indexed
+ _hdrIndexedProperty: "spotlight_reindex_time",
+
+ // The file extension that is used for support files of this component
+ _fileExt: ".mozeml",
+
+ // The Spotlight pref base
+ _prefBase: "mail.spotlight.",
+
+ // The user's profile dir, which we'll cache and use a lot for path clean-up
+ get _profileDir() {
+ delete this._profileDir;
+ return (this._profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile));
+ },
+
+ get _metadataDir() {
+ delete this._metadataDir;
+ let metadataDir = Services.dirsvc.get("Home", Ci.nsIFile);
+ metadataDir.append("Library");
+ metadataDir.append("Caches");
+ metadataDir.append("Metadata");
+ metadataDir.append("Thunderbird");
+ return (this._metadataDir = metadataDir);
+ },
+
+ // Spotlight won't index files in the profile dir, but will use ~/Library/Caches/Metadata
+ _getSearchPathForFolder(aFolder) {
+ // Swap the metadata dir for the profile dir prefix in the folder's path
+ let folderPath = aFolder.filePath.path;
+ let fixedPath = folderPath.replace(
+ this._profileDir.path,
+ this._metadataDir.path
+ );
+ let searchPath = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+ searchPath.initWithPath(fixedPath);
+ return searchPath;
+ },
+
+ // Replace ~/Library/Caches/Metadata with the profile directory, then convert
+ _getFolderForSearchPath(aPath) {
+ let folderPath = aPath.path.replace(
+ this._metadataDir.path,
+ this._profileDir.path
+ );
+ let folderFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+ folderFile.initWithPath(folderPath);
+ return MailUtils.getFolderForFileInProfile(folderFile);
+ },
+
+ _pathNeedsReindexing(aPath) {
+ // We used to set permissions incorrectly (see bug 670566).
+ const PERM_DIRECTORY = parseInt("0755", 8);
+ if (aPath.permissions != PERM_DIRECTORY) {
+ aPath.permissions = PERM_DIRECTORY;
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * These two functions won't do anything, as Spotlight integration is handled
+ * using Info.plist files
+ */
+ register() {
+ return true;
+ },
+
+ deregister() {
+ return true;
+ },
+
+ _init() {
+ this._initLogging();
+
+ let enabled = this._prefBranch.getBoolPref("enable", false);
+ if (enabled) {
+ this._log.info("Initializing Spotlight integration");
+ }
+ this._initSupport(enabled);
+ },
+
+ // The stream listener to read messages
+ _streamListener: {
+ __proto__: SearchSupport._streamListenerBase,
+
+ // Buffer to store the message
+ _message: null,
+
+ // Encodes reserved XML characters
+ _xmlEscapeString(s) {
+ return s.replace(/[<>&]/g, function (s) {
+ switch (s) {
+ case "<":
+ return "&lt;";
+ case ">":
+ return "&gt;";
+ case "&":
+ return "&amp;";
+ default:
+ throw new Error("Unexpected match");
+ }
+ });
+ },
+
+ onStartRequest(request) {
+ try {
+ let outputFileStream = Cc[
+ "@mozilla.org/network/file-output-stream;1"
+ ].createInstance(Ci.nsIFileOutputStream);
+ outputFileStream.init(this._outputFile, -1, -1, 0);
+ this._outputStream = Cc[
+ "@mozilla.org/intl/converter-output-stream;1"
+ ].createInstance(Ci.nsIConverterOutputStream);
+ this._outputStream.init(outputFileStream, "UTF-8");
+
+ this._outputStream.writeString(gFileHeader);
+ this._outputStream.writeString(
+ "<key>kMDItemLastUsedDate</key><string>"
+ );
+ // need to write the date as a string
+ let curTimeStr = new Date().toLocaleString();
+ this._outputStream.writeString(curTimeStr);
+
+ // need to write the subject in utf8 as the title
+ this._outputStream.writeString(
+ "</string>\n<key>kMDItemTitle</key>\n<string>"
+ );
+
+ let escapedSubject = this._xmlEscapeString(
+ this._msgHdr.mime2DecodedSubject
+ );
+ this._outputStream.writeString(escapedSubject);
+
+ this._outputStream.writeString(
+ "</string>\n<key>kMDItemDisplayName</key>\n<string>"
+ );
+ this._outputStream.writeString(escapedSubject);
+
+ this._outputStream.writeString(
+ "</string>\n<key>kMDItemTextContent</key>\n<string>"
+ );
+ this._outputStream.writeString(
+ this._xmlEscapeString(this._msgHdr.mime2DecodedAuthor)
+ );
+ this._outputStream.writeString(
+ this._xmlEscapeString(this._msgHdr.mime2DecodedRecipients)
+ );
+
+ this._outputStream.writeString(escapedSubject);
+ this._outputStream.writeString(" ");
+ } catch (ex) {
+ this._onDoneStreaming(false);
+ }
+ },
+
+ onStopRequest(request, status) {
+ try {
+ // we want to write out the from, to, cc, and subject headers into the
+ // Text Content value, so they'll be indexed.
+ let stringStream = Cc[
+ "@mozilla.org/io/string-input-stream;1"
+ ].createInstance(Ci.nsIStringInputStream);
+ stringStream.setData(this._message, this._message.length);
+ let folder = this._msgHdr.folder;
+ let text = folder.getMsgTextFromStream(
+ stringStream,
+ this._msgHdr.charset,
+ 20000,
+ 20000,
+ false,
+ true,
+ {}
+ );
+ text = this._xmlEscapeString(text);
+ SearchIntegration._log.debug(
+ "escaped text = *****************\n" + text
+ );
+ this._outputStream.writeString(text);
+ // close out the content, dict, and plist
+ this._outputStream.writeString("</string>\n</dict>\n</plist>\n");
+
+ this._msgHdr.setUint32Property(
+ SearchIntegration._hdrIndexedProperty,
+ this._reindexTime
+ );
+ folder.msgDatabase.commit(MSG_DB_LARGE_COMMIT);
+
+ this._message = "";
+ } catch (ex) {
+ SearchIntegration._log.error(ex);
+ this._onDoneStreaming(false);
+ return;
+ }
+ this._onDoneStreaming(true);
+ },
+
+ onDataAvailable(request, inputStream, offset, count) {
+ try {
+ let inStream = Cc[
+ "@mozilla.org/scriptableinputstream;1"
+ ].createInstance(Ci.nsIScriptableInputStream);
+ inStream.init(inputStream);
+
+ // It is necessary to read in data from the input stream
+ let inData = inStream.read(count);
+
+ // ignore stuff after the first 20K or so
+ if (this._message && this._message.length > 20000) {
+ return;
+ }
+
+ this._message += inData;
+ } catch (ex) {
+ SearchIntegration._log.error(ex);
+ this._onDoneStreaming(false);
+ }
+ },
+ },
+};
+
+SearchIntegration._init();
diff --git a/comm/mail/components/search/content/WinSearchIntegration.js b/comm/mail/components/search/content/WinSearchIntegration.js
new file mode 100644
index 0000000000..2f4c51b0e3
--- /dev/null
+++ b/comm/mail/components/search/content/WinSearchIntegration.js
@@ -0,0 +1,346 @@
+/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// SearchIntegration.jsm
+/* globals SearchIntegration, SearchSupport, Services */
+
+var { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
+
+var MSG_DB_LARGE_COMMIT = 1;
+var CRLF = "\r\n";
+
+/**
+ * Required to access the 64-bit registry, even though we're probably a 32-bit
+ * program
+ */
+var ACCESS_WOW64_64KEY = 0x0100;
+
+/**
+ * The contract ID for the helper service.
+ */
+var WINSEARCHHELPER_CONTRACTID = "@mozilla.org/mail/windows-search-helper;1";
+
+/**
+ * All the registry keys required for integration
+ */
+var gRegKeys = [
+ // This is the property handler
+ {
+ root: Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
+ key: "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\PropertySystem\\PropertyHandlers\\.wdseml",
+ name: "",
+ value: "{5FA29220-36A1-40f9-89C6-F4B384B7642E}",
+ },
+ // These two are the association with the MIME IFilter
+ {
+ root: Ci.nsIWindowsRegKey.ROOT_KEY_CLASSES_ROOT,
+ key: ".wdseml",
+ name: "Content Type",
+ value: "message/rfc822",
+ },
+ {
+ root: Ci.nsIWindowsRegKey.ROOT_KEY_CLASSES_ROOT,
+ key: ".wdseml\\PersistentHandler",
+ name: "",
+ value: "{5645c8c4-e277-11cf-8fda-00aa00a14f93}",
+ },
+ // This is the association with the Windows mail preview handler
+ {
+ root: Ci.nsIWindowsRegKey.ROOT_KEY_CLASSES_ROOT,
+ key: ".wdseml\\shellex\\{8895B1C6-B41F-4C1C-A562-0D564250836F}",
+ name: "",
+ value: "{b9815375-5d7f-4ce2-9245-c9d4da436930}",
+ },
+ // This is the association made to display results under email
+ {
+ root: Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE,
+ key: "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\KindMap",
+ name: ".wdseml",
+ value: "email;communication",
+ },
+];
+
+/**
+ * @namespace Windows Search-specific desktop search integration functionality
+ */
+// eslint-disable-next-line no-global-assign
+SearchIntegration = {
+ __proto__: SearchSupport,
+
+ // The property of the header and (sometimes) folders that's used to check
+ // if a message is indexed
+ _hdrIndexedProperty: "winsearch_reindex_time",
+
+ // The file extension that is used for support files of this component
+ _fileExt: ".wdseml",
+
+ // The Windows Search pref base
+ _prefBase: "mail.winsearch.",
+
+ // Helper (native) component
+ __winSearchHelper: null,
+ get _winSearchHelper() {
+ if (!this.__winSearchHelper) {
+ this.__winSearchHelper = Cc[WINSEARCHHELPER_CONTRACTID].getService(
+ Ci.nsIMailWinSearchHelper
+ );
+ }
+ return this.__winSearchHelper;
+ },
+
+ // Whether the folders are already in the crawl scope
+ get _foldersInCrawlScope() {
+ return this._winSearchHelper.foldersInCrawlScope;
+ },
+
+ /**
+ * Whether all the required registry keys are present
+ * We'll be optimistic here and assume that once the registry keys have been
+ * added, they won't be removed, at least while Thunderbird is open
+ */
+ __regKeysPresent: false,
+ get _regKeysPresent() {
+ if (!this.__regKeysPresent) {
+ for (let i = 0; i < gRegKeys.length; i++) {
+ let regKey = Cc["@mozilla.org/windows-registry-key;1"].createInstance(
+ Ci.nsIWindowsRegKey
+ );
+ try {
+ regKey.open(
+ gRegKeys[i].root,
+ gRegKeys[i].key,
+ regKey.ACCESS_READ | ACCESS_WOW64_64KEY
+ );
+ } catch (e) {
+ return false;
+ }
+ let valuePresent =
+ regKey.hasValue(gRegKeys[i].name) &&
+ regKey.readStringValue(gRegKeys[i].name) == gRegKeys[i].value;
+ regKey.close();
+ if (!valuePresent) {
+ return false;
+ }
+ }
+ this.__regKeysPresent = true;
+ }
+ return true;
+ },
+
+ // Use the folder's path (i.e., in profile dir) as is
+ _getSearchPathForFolder(aFolder) {
+ return aFolder.filePath;
+ },
+
+ // Use the search path as is
+ _getFolderForSearchPath(aDir) {
+ return MailUtils.getFolderForFileInProfile(aDir);
+ },
+
+ _pathNeedsReindexing(aPath) {
+ // only needed on MacOSX (see bug 670566).
+ return false;
+ },
+
+ _init() {
+ this._initLogging();
+ // If the helper service isn't present, we weren't compiled with the needed
+ // support. Mark ourselves null and return
+ if (!(WINSEARCHHELPER_CONTRACTID in Cc)) {
+ SearchIntegration = null; // eslint-disable-line no-global-assign
+ return;
+ }
+
+ // The search module is currently only enabled on Vista and above,
+ // and the app can only be installed on Windows 7 and above.
+ this.osVersionTooLow = false;
+
+ let serviceRunning = false;
+ try {
+ serviceRunning = this._winSearchHelper.serviceRunning;
+ } catch (e) {}
+ // If the service isn't running, then we should stay in backoff mode
+ if (!serviceRunning) {
+ this._log.info("Windows Search service not running");
+ this.osComponentsNotRunning = true;
+ this._initSupport(false);
+ return;
+ }
+
+ let enabled = this.prefEnabled;
+
+ if (enabled) {
+ this._log.info("Initializing Windows Search integration");
+ }
+ this._initSupport(enabled);
+ },
+
+ /**
+ * Add necessary hooks to Windows
+ *
+ * @returns false if registration did not succeed, because the elevation
+ * request was denied
+ */
+ register() {
+ // If any of the two are not present, we need to elevate.
+ if (!this._foldersInCrawlScope || !this._regKeysPresent) {
+ try {
+ this._winSearchHelper.runSetup(true);
+ } catch (e) {
+ return false;
+ }
+ }
+
+ if (!this._winSearchHelper.isFileAssociationSet) {
+ try {
+ this._winSearchHelper.setFileAssociation();
+ } catch (e) {
+ this._log.warn("File association not set");
+ }
+ }
+ // Also set the FANCI bit to 0 for the profile directory
+ let profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
+ this._winSearchHelper.setFANCIBit(profD, false, true);
+
+ return true;
+ },
+
+ /**
+ * Remove integration from Windows. The only thing removed is the directory
+ * from the index list. This will ask for elevation.
+ *
+ * @returns false if deregistration did not succeed, because the elevation
+ * request was denied
+ */
+ deregister() {
+ try {
+ this._winSearchHelper.runSetup(false);
+ } catch (e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ // The stream listener to read messages
+ _streamListener: {
+ __proto__: SearchSupport._streamListenerBase,
+
+ // Buffer to store the message
+ _message: "",
+
+ onStartRequest(request) {
+ try {
+ let outputFileStream = Cc[
+ "@mozilla.org/network/file-output-stream;1"
+ ].createInstance(Ci.nsIFileOutputStream);
+ outputFileStream.init(this._outputFile, -1, -1, 0);
+ this._outputStream = Cc[
+ "@mozilla.org/intl/converter-output-stream;1"
+ ].createInstance(Ci.nsIConverterOutputStream);
+ this._outputStream.init(outputFileStream, "UTF-8");
+ } catch (ex) {
+ this._onDoneStreaming(false);
+ }
+ },
+
+ onStopRequest(request, status) {
+ try {
+ // XXX Once the JS emitter gets checked in, this code should probably be
+ // switched over to use that
+ // Decode using getMsgTextFromStream
+ let stringStream = Cc[
+ "@mozilla.org/io/string-input-stream;1"
+ ].createInstance(Ci.nsIStringInputStream);
+ stringStream.setData(this._message, this._message.length);
+ let contentType = {};
+ let folder = this._msgHdr.folder;
+ let text = folder.getMsgTextFromStream(
+ stringStream,
+ this._msgHdr.charset,
+ 65536,
+ 50000,
+ false,
+ false,
+ contentType
+ );
+
+ // To get the Received header, we need to parse the message headers.
+ // We only need the first header, which contains the latest received
+ // date
+ let headers = this._message.split(/\r\n\r\n|\r\r|\n\n/, 1)[0];
+ let mimeHeaders = Cc[
+ "@mozilla.org/messenger/mimeheaders;1"
+ ].createInstance(Ci.nsIMimeHeaders);
+ mimeHeaders.initialize(headers);
+ let receivedHeader = mimeHeaders.extractHeader("Received", false);
+
+ this._outputStream.writeString("From: " + this._msgHdr.author + CRLF);
+ // If we're a newsgroup, then add the name of the folder as the
+ // newsgroups header
+ if (folder instanceof Ci.nsIMsgNewsFolder) {
+ this._outputStream.writeString("Newsgroups: " + folder.name + CRLF);
+ } else {
+ this._outputStream.writeString(
+ "To: " + this._msgHdr.recipients + CRLF
+ );
+ }
+ this._outputStream.writeString("CC: " + this._msgHdr.ccList + CRLF);
+ this._outputStream.writeString(
+ "Subject: " + this._msgHdr.subject + CRLF
+ );
+ if (receivedHeader) {
+ this._outputStream.writeString("Received: " + receivedHeader + CRLF);
+ }
+ this._outputStream.writeString(
+ "Date: " + new Date(this._msgHdr.date / 1000).toUTCString() + CRLF
+ );
+ this._outputStream.writeString(
+ "Content-Type: " + contentType.value + "; charset=utf-8" + CRLF + CRLF
+ );
+
+ this._outputStream.writeString(text + CRLF + CRLF);
+
+ this._msgHdr.setUint32Property(
+ SearchIntegration._hdrIndexedProperty,
+ this._reindexTime
+ );
+ folder.msgDatabase.commit(MSG_DB_LARGE_COMMIT);
+
+ this._message = "";
+ SearchIntegration._log.info("Successfully written file");
+ } catch (ex) {
+ SearchIntegration._log.error(ex);
+ this._onDoneStreaming(false);
+ return;
+ }
+ this._onDoneStreaming(true);
+ },
+
+ onDataAvailable(request, inputStream, offset, count) {
+ try {
+ let inStream = Cc[
+ "@mozilla.org/scriptableinputstream;1"
+ ].createInstance(Ci.nsIScriptableInputStream);
+ inStream.init(inputStream);
+
+ // It is necessary to read in data from the input stream
+ let inData = inStream.read(count);
+
+ // Ignore stuff after the first 50K or so
+ if (this._message && this._message.length > 50000) {
+ return;
+ }
+
+ this._message += inData;
+ } catch (ex) {
+ SearchIntegration._log.error(ex);
+ this._onDoneStreaming(false);
+ }
+ },
+ },
+};
+
+SearchIntegration._init();
diff --git a/comm/mail/components/search/extensions/allaannonser-sv-SE/favicon.ico b/comm/mail/components/search/extensions/allaannonser-sv-SE/favicon.ico
new file mode 100644
index 0000000000..3917eaec10
--- /dev/null
+++ b/comm/mail/components/search/extensions/allaannonser-sv-SE/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/allaannonser-sv-SE/manifest.json b/comm/mail/components/search/extensions/allaannonser-sv-SE/manifest.json
new file mode 100644
index 0000000000..a5b5914634
--- /dev/null
+++ b/comm/mail/components/search/extensions/allaannonser-sv-SE/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Allaannonser",
+ "description": "Allaannonser",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "allaannonser-sv-SE@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Allaannonser",
+ "encoding": "ISO-8859-1",
+ "search_url": "https://www.allaannonser.se/hitlist.php",
+ "search_form": "https://www.allaannonser.se",
+ "search_url_get_params": "sourceid=Mozilla-search&keyword={searchTerms}&order=date&desc=1"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/allegro-pl/favicon.ico b/comm/mail/components/search/extensions/allegro-pl/favicon.ico
new file mode 100644
index 0000000000..42b4f90149
--- /dev/null
+++ b/comm/mail/components/search/extensions/allegro-pl/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/allegro-pl/manifest.json b/comm/mail/components/search/extensions/allegro-pl/manifest.json
new file mode 100644
index 0000000000..ad38f187dc
--- /dev/null
+++ b/comm/mail/components/search/extensions/allegro-pl/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Allegro",
+ "description": "Wyszukiwanie w aukcjach Allegro",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "allegro-pl@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Allegro",
+ "search_url": "https://allegro.pl/listing/listing.php",
+ "search_form": "https://allegro.pl",
+ "search_url_get_params": "string={searchTerms}&sourceid=Mozilla-search"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/au/messages.json b/comm/mail/components/search/extensions/amazon/_locales/au/messages.json
new file mode 100644
index 0000000000..c8fbcbcb69
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/au/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.com.au"
+ },
+ "extensionDescription": {
+ "message": "Amazon.com.au Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.com.au/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.com.au/exec/obidos/external-search/?field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/ca/messages.json b/comm/mail/components/search/extensions/amazon/_locales/ca/messages.json
new file mode 100644
index 0000000000..cb54e55658
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/ca/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.ca"
+ },
+ "extensionDescription": {
+ "message": "Amazon.ca Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.ca/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.ca/exec/obidos/external-search/?field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/de/messages.json b/comm/mail/components/search/extensions/amazon/_locales/de/messages.json
new file mode 100644
index 0000000000..e9eebaf229
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/de/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.de"
+ },
+ "extensionDescription": {
+ "message": "Amazon.de Suche"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.de/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.de/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/en-GB/messages.json b/comm/mail/components/search/extensions/amazon/_locales/en-GB/messages.json
new file mode 100644
index 0000000000..596283dd0d
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/en-GB/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.co.uk"
+ },
+ "extensionDescription": {
+ "message": "Amazon.co.uk Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.co.uk/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.co.uk/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/france/messages.json b/comm/mail/components/search/extensions/amazon/_locales/france/messages.json
new file mode 100644
index 0000000000..77730b1a40
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/france/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.fr"
+ },
+ "extensionDescription": {
+ "message": "Recherche Amazon.fr"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.fr/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.fr/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/in/messages.json b/comm/mail/components/search/extensions/amazon/_locales/in/messages.json
new file mode 100644
index 0000000000..d4f912cc96
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/in/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.in"
+ },
+ "extensionDescription": {
+ "message": "Amazon.in Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.in/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.in/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/it/messages.json b/comm/mail/components/search/extensions/amazon/_locales/it/messages.json
new file mode 100644
index 0000000000..07382eec95
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/it/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.it"
+ },
+ "extensionDescription": {
+ "message": "Ricerca Amazon.it"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.it/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.it/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/jp/messages.json b/comm/mail/components/search/extensions/amazon/_locales/jp/messages.json
new file mode 100644
index 0000000000..b3bebb43c2
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/jp/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.co.jp"
+ },
+ "extensionDescription": {
+ "message": "Amazon.co.jp Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.co.jp/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.co.jp/"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/mx/messages.json b/comm/mail/components/search/extensions/amazon/_locales/mx/messages.json
new file mode 100644
index 0000000000..a70ed76634
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/mx/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.com.mx"
+ },
+ "extensionDescription": {
+ "message": "Amazon.com.mx Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.com.mx/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.com.mx/exec/obidos/external-search/?field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/_locales/nl/messages.json b/comm/mail/components/search/extensions/amazon/_locales/nl/messages.json
new file mode 100644
index 0000000000..5d5e62e637
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/_locales/nl/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Amazon.nl"
+ },
+ "extensionDescription": {
+ "message": "Amazon.nl Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.nl/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.nl/exec/obidos/external-search/?field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazon/favicon.ico b/comm/mail/components/search/extensions/amazon/favicon.ico
new file mode 100644
index 0000000000..1c39eaf8fe
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/amazon/manifest.json b/comm/mail/components/search/extensions/amazon/manifest.json
new file mode 100644
index 0000000000..fd44cf29cb
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazon/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.1",
+ "applications": {
+ "gecko": {
+ "id": "amazon@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "au",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazondotcn/favicon.ico b/comm/mail/components/search/extensions/amazondotcn/favicon.ico
new file mode 100644
index 0000000000..1c39eaf8fe
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazondotcn/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/amazondotcn/manifest.json b/comm/mail/components/search/extensions/amazondotcn/manifest.json
new file mode 100644
index 0000000000..e6215d9660
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazondotcn/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "亚马逊",
+ "description": "亚马逊搜索",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "amazondotcn@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "亚马逊",
+ "search_url": "https://www.amazon.cn/mn/searchApp",
+ "search_form": "https://www.amazon.cn/",
+ "search_url_get_params": "keywords={searchTerms}&ix=sunray&pageletid=headsearch&searchType=&Go.x=0&Go.y=0&bestSaleNum=0"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazondotcom/_locales/en/messages.json b/comm/mail/components/search/extensions/amazondotcom/_locales/en/messages.json
new file mode 100644
index 0000000000..e1f3405dab
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazondotcom/_locales/en/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Amazon.com"
+ },
+ "extensionDescription": {
+ "message": "Amazon.com Search"
+ },
+ "searchUrl": {
+ "message": "https://www.amazon.com/exec/obidos/external-search/"
+ },
+ "searchForm": {
+ "message": "https://www.amazon.com/exec/obidos/external-search/?field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://completion.amazon.com/search/complete?q={searchTerms}&search-alias=aps&mkt=1"
+ },
+ "searchUrlGetParams": {
+ "message": "field-keywords={searchTerms}&ie={inputEncoding}&mode=blended&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/amazondotcom/favicon.ico b/comm/mail/components/search/extensions/amazondotcom/favicon.ico
new file mode 100644
index 0000000000..1c39eaf8fe
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazondotcom/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/amazondotcom/manifest.json b/comm/mail/components/search/extensions/amazondotcom/manifest.json
new file mode 100644
index 0000000000..5def9f413d
--- /dev/null
+++ b/comm/mail/components/search/extensions/amazondotcom/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.1",
+ "applications": {
+ "gecko": {
+ "id": "amazondotcom@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "en",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "suggest_url": "__MSG_suggestUrl__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/atlas-sk/favicon.ico b/comm/mail/components/search/extensions/atlas-sk/favicon.ico
new file mode 100644
index 0000000000..eb4d3ec31a
--- /dev/null
+++ b/comm/mail/components/search/extensions/atlas-sk/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/atlas-sk/manifest.json b/comm/mail/components/search/extensions/atlas-sk/manifest.json
new file mode 100644
index 0000000000..774c021f91
--- /dev/null
+++ b/comm/mail/components/search/extensions/atlas-sk/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Atlas",
+ "description": "Internetovy portal - Atlas.sk",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "atlas-sk@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Atlas",
+ "search_url": "https://www.atlas.sk/search.php",
+ "search_form": "https://www.atlas.sk/",
+ "search_url_get_params": "phrase={searchTerms}&sourceid=firefox"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/azerdict/favicon.ico b/comm/mail/components/search/extensions/azerdict/favicon.ico
new file mode 100644
index 0000000000..ba687ca8e7
--- /dev/null
+++ b/comm/mail/components/search/extensions/azerdict/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/azerdict/manifest.json b/comm/mail/components/search/extensions/azerdict/manifest.json
new file mode 100644
index 0000000000..9454d14600
--- /dev/null
+++ b/comm/mail/components/search/extensions/azerdict/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Azerdict",
+ "description": "Azərbaycanın Online Lüğəti",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "azerdict@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Azerdict",
+ "search_url": "https://azerdict.com/english/",
+ "search_form": "https://azerdict.com/",
+ "search_url_get_params": "word={searchTerms}",
+ "suggest_url": "https://api.azerdict.com/english/autocomplete",
+ "suggest_url_get_params": "action=opensearch&query={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/azet-sk/favicon.ico b/comm/mail/components/search/extensions/azet-sk/favicon.ico
new file mode 100644
index 0000000000..39ab78bbd9
--- /dev/null
+++ b/comm/mail/components/search/extensions/azet-sk/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/azet-sk/manifest.json b/comm/mail/components/search/extensions/azet-sk/manifest.json
new file mode 100644
index 0000000000..84b6faa38d
--- /dev/null
+++ b/comm/mail/components/search/extensions/azet-sk/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Azet",
+ "description": "Azet - portal, kde je vzdy najviac ludi",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "azet-sk@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Azet",
+ "search_url": "https://www.azet.sk/katalog/vyhladavanie/firmy/",
+ "search_form": "https://www.azet.sk/katalog/",
+ "search_url_get_params": "q={searchTerms}&k="
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/baidu/favicon.ico b/comm/mail/components/search/extensions/baidu/favicon.ico
new file mode 100644
index 0000000000..6c27b018c8
--- /dev/null
+++ b/comm/mail/components/search/extensions/baidu/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/baidu/manifest.json b/comm/mail/components/search/extensions/baidu/manifest.json
new file mode 100644
index 0000000000..a53f905716
--- /dev/null
+++ b/comm/mail/components/search/extensions/baidu/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "百度",
+ "description": "百度网页搜索",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "baidu@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "百度",
+ "search_url": "https://www.baidu.com/baidu",
+ "search_form": "https://www.baidu.com/",
+ "search_url_get_params": "wd={searchTerms}&ie=utf-8",
+ "suggest_url": "https://www.baidu.com/su",
+ "suggest_url_get_params": "wd={searchTerms}&ie=utf-8&action=opensearch"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/bbc-alba/favicon.ico b/comm/mail/components/search/extensions/bbc-alba/favicon.ico
new file mode 100644
index 0000000000..8f62b07af8
--- /dev/null
+++ b/comm/mail/components/search/extensions/bbc-alba/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/bbc-alba/manifest.json b/comm/mail/components/search/extensions/bbc-alba/manifest.json
new file mode 100644
index 0000000000..6de91c53c9
--- /dev/null
+++ b/comm/mail/components/search/extensions/bbc-alba/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "BBC ┐ BBC Alba",
+ "description": "Lorg BBC ┐ BBC Alba",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "bbc-alba@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "BBC ┐ BBC Alba",
+ "search_url": "https://search.bbc.co.uk/search",
+ "search_form": "https://www.bbc.co.uk/alba/",
+ "search_url_get_params": "opensearch=all-1&q={searchTerms}",
+ "suggest_url": "https://search.bbc.co.uk/suggest",
+ "suggest_url_get_params": "format=opensearch&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/bing/favicon.ico b/comm/mail/components/search/extensions/bing/favicon.ico
new file mode 100644
index 0000000000..1e90a10d6e
--- /dev/null
+++ b/comm/mail/components/search/extensions/bing/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/bing/manifest.json b/comm/mail/components/search/extensions/bing/manifest.json
new file mode 100644
index 0000000000..bc0a1060ab
--- /dev/null
+++ b/comm/mail/components/search/extensions/bing/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Bing",
+ "description": "Bing. Search by Microsoft.",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "bing@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Bing",
+ "search_url": "https://www.bing.com/search",
+ "search_form": "https://www.bing.com/search?q={searchTerms}",
+ "search_url_get_params": "q={searchTerms}",
+ "suggest_url": "https://www.bing.com/osjson.aspx",
+ "suggest_url_get_params": "query={searchTerms}&form=OSDJAS&language={moz:locale}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/bok-NO/favicon.png b/comm/mail/components/search/extensions/bok-NO/favicon.png
new file mode 100644
index 0000000000..c2d46117ef
--- /dev/null
+++ b/comm/mail/components/search/extensions/bok-NO/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/bok-NO/manifest.json b/comm/mail/components/search/extensions/bok-NO/manifest.json
new file mode 100644
index 0000000000..fb0138103b
--- /dev/null
+++ b/comm/mail/components/search/extensions/bok-NO/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Ordbok",
+ "description": "Norske ordbøker",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "bok-NO@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Ordbok",
+ "search_url": "https://ordbok.uib.no/perl/ordbok.cgi",
+ "search_form": "https://ordbok.uib.no/",
+ "search_url_get_params": "OPP={searchTerms}&sourceid=Mozilla-search"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/bolcom/_locales/fy-NL/messages.json b/comm/mail/components/search/extensions/bolcom/_locales/fy-NL/messages.json
new file mode 100644
index 0000000000..252afad896
--- /dev/null
+++ b/comm/mail/components/search/extensions/bolcom/_locales/fy-NL/messages.json
@@ -0,0 +1,14 @@
+{
+ "extensionName": {
+ "message": "bol.com"
+ },
+ "extensionDescription": {
+ "message": "Sykje by bol.com"
+ },
+ "searchUrl": {
+ "message": "https://www.bol.com/nl/s/algemeen/zoekresultaten/Ntt/{searchTerms}/Ntk/media_all/Nty/1/suggestedFor/{searchTerms}/N/0/Ne/0/search/true/searchType/qck/index.html"
+ },
+ "searchForm": {
+ "message": "https://www.bol.com/"
+ }
+}
diff --git a/comm/mail/components/search/extensions/bolcom/_locales/nl/messages.json b/comm/mail/components/search/extensions/bolcom/_locales/nl/messages.json
new file mode 100644
index 0000000000..7e9baa8b3b
--- /dev/null
+++ b/comm/mail/components/search/extensions/bolcom/_locales/nl/messages.json
@@ -0,0 +1,14 @@
+{
+ "extensionName": {
+ "message": "bol.com"
+ },
+ "extensionDescription": {
+ "message": "Zoeken bij bol.com"
+ },
+ "searchUrl": {
+ "message": "https://www.bol.com/nl/s/algemeen/zoekresultaten/Ntt/{searchTerms}/Ntk/media_all/Nty/1/suggestedFor/{searchTerms}/N/0/Ne/0/search/true/searchType/qck/index.html"
+ },
+ "searchForm": {
+ "message": "https://www.bol.com/"
+ }
+}
diff --git a/comm/mail/components/search/extensions/bolcom/favicon.ico b/comm/mail/components/search/extensions/bolcom/favicon.ico
new file mode 100644
index 0000000000..0f0db9b990
--- /dev/null
+++ b/comm/mail/components/search/extensions/bolcom/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/bolcom/manifest.json b/comm/mail/components/search/extensions/bolcom/manifest.json
new file mode 100644
index 0000000000..25a08232e7
--- /dev/null
+++ b/comm/mail/components/search/extensions/bolcom/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "bolcom@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "fy-NL",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/ceneji/favicon.png b/comm/mail/components/search/extensions/ceneji/favicon.png
new file mode 100644
index 0000000000..3c77b64d3c
--- /dev/null
+++ b/comm/mail/components/search/extensions/ceneji/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/ceneji/manifest.json b/comm/mail/components/search/extensions/ceneji/manifest.json
new file mode 100644
index 0000000000..3c915c8b15
--- /dev/null
+++ b/comm/mail/components/search/extensions/ceneji/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Ceneje.si",
+ "description": "Iskalnik Ceneje.si",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "ceneji@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Ceneje.si",
+ "search_url": "https://www.ceneje.si/search_new.aspx",
+ "search_form": "https://www.ceneje.si",
+ "search_url_get_params": "q={searchTerms}&FF-SearchBox=1"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/chambers-en-GB/favicon.ico b/comm/mail/components/search/extensions/chambers-en-GB/favicon.ico
new file mode 100644
index 0000000000..ecea4aac74
--- /dev/null
+++ b/comm/mail/components/search/extensions/chambers-en-GB/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/chambers-en-GB/manifest.json b/comm/mail/components/search/extensions/chambers-en-GB/manifest.json
new file mode 100644
index 0000000000..17ce83d616
--- /dev/null
+++ b/comm/mail/components/search/extensions/chambers-en-GB/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Chambers (UK)",
+ "description": "Chambers 21st Century Dictionary Search",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "chambers-en-GB@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Chambers (UK)",
+ "search_url": "https://chambers.co.uk/search/",
+ "search_form": "https://chambers.co.uk/search/?query={searchTerms}&title=21st&sourceid=Mozilla-search",
+ "search_url_get_params": "query={searchTerms}&title=21st&sourceid=Mozilla-search"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/coccoc/favicon.ico b/comm/mail/components/search/extensions/coccoc/favicon.ico
new file mode 100644
index 0000000000..e6e82d938e
--- /dev/null
+++ b/comm/mail/components/search/extensions/coccoc/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/coccoc/manifest.json b/comm/mail/components/search/extensions/coccoc/manifest.json
new file mode 100644
index 0000000000..790d56badd
--- /dev/null
+++ b/comm/mail/components/search/extensions/coccoc/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Cốc Cốc",
+ "description": "Use Cốc Cốc to search on coccoc.com",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "coccoc@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Cốc Cốc",
+ "search_url": "https://coccoc.com/search",
+ "search_url_get_params": "query={searchTerms}&s=ff&utm_source=firefox",
+ "suggest_url": "https://coccoc.com/composer/autocomplete",
+ "suggest_url_get_params": "of=b&q={searchTerms}&s=ff"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/daum-kr/favicon.ico b/comm/mail/components/search/extensions/daum-kr/favicon.ico
new file mode 100644
index 0000000000..ed803f50e2
--- /dev/null
+++ b/comm/mail/components/search/extensions/daum-kr/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/daum-kr/manifest.json b/comm/mail/components/search/extensions/daum-kr/manifest.json
new file mode 100644
index 0000000000..1e0946be7a
--- /dev/null
+++ b/comm/mail/components/search/extensions/daum-kr/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "다음",
+ "description": "다음 검색",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "daum-kr@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "다음",
+ "search_url": "https://search.daum.net/search",
+ "search_form": "https://search.daum.net",
+ "search_url_get_params": "q={searchTerms}&w=tot&nil_ch=ffsr",
+ "suggest_url": "https://sug.search.daum.net/search_nsuggest",
+ "suggest_url_get_params": "mod=fxjson&code=utf_in_out&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/ddg/favicon.ico b/comm/mail/components/search/extensions/ddg/favicon.ico
new file mode 100644
index 0000000000..dda80dfd88
--- /dev/null
+++ b/comm/mail/components/search/extensions/ddg/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/ddg/manifest.json b/comm/mail/components/search/extensions/ddg/manifest.json
new file mode 100644
index 0000000000..402a305684
--- /dev/null
+++ b/comm/mail/components/search/extensions/ddg/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "DuckDuckGo",
+ "description": "Search DuckDuckGo",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "ddg@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "DuckDuckGo",
+ "search_url": "https://duckduckgo.com/",
+ "search_form": "https://duckduckgo.com/?q={searchTerms}",
+ "search_url_get_params": "q={searchTerms}",
+ "suggest_url": "https://ac.duckduckgo.com/ac/",
+ "suggest_url_get_params": "q={searchTerms}&type=list"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/diec2/favicon.png b/comm/mail/components/search/extensions/diec2/favicon.png
new file mode 100644
index 0000000000..fa0fb8f1ff
--- /dev/null
+++ b/comm/mail/components/search/extensions/diec2/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/diec2/manifest.json b/comm/mail/components/search/extensions/diec2/manifest.json
new file mode 100644
index 0000000000..c4a11a0c36
--- /dev/null
+++ b/comm/mail/components/search/extensions/diec2/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "DIEC2",
+ "description": "Diccionari de l'Institut d'Estudis Catalans",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "diec2@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "DIEC2",
+ "encoding": "ISO-8859-1",
+ "search_url": "https://dlc.iec.cat/results.asp",
+ "search_form": "https://dlc.iec.cat",
+ "search_url_get_params": "txtEntrada={searchTerms}&OperEntrada=0"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/drae/favicon.ico b/comm/mail/components/search/extensions/drae/favicon.ico
new file mode 100644
index 0000000000..6b3a278678
--- /dev/null
+++ b/comm/mail/components/search/extensions/drae/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/drae/manifest.json b/comm/mail/components/search/extensions/drae/manifest.json
new file mode 100644
index 0000000000..e181545da1
--- /dev/null
+++ b/comm/mail/components/search/extensions/drae/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Diccionario RAE",
+ "description": "Real Academia Española. Diccionario Usual.",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "drae@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Diccionario RAE",
+ "search_url": "https://dle.rae.es/",
+ "search_form": "https://dle.rae.es/?w={searchTerms}",
+ "search_url_get_params": "w={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/ecosia/favicon.ico b/comm/mail/components/search/extensions/ecosia/favicon.ico
new file mode 100644
index 0000000000..cc72d09d6d
--- /dev/null
+++ b/comm/mail/components/search/extensions/ecosia/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/ecosia/manifest.json b/comm/mail/components/search/extensions/ecosia/manifest.json
new file mode 100644
index 0000000000..a1dc0cf385
--- /dev/null
+++ b/comm/mail/components/search/extensions/ecosia/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Ecosia",
+ "description": "Search Ecosia",
+ "manifest_version": 2,
+ "version": "1.1",
+ "applications": {
+ "gecko": {
+ "id": "ecosia@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Ecosia",
+ "search_url": "https://www.ecosia.org/search",
+ "search_form": "https://www.ecosia.org/",
+ "search_url_get_params": "tt=mzl&q={searchTerms}",
+ "suggest_url": "https://ac.ecosia.org/autocomplete",
+ "suggest_url_get_params": "type=list&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/eki-ee/favicon.ico b/comm/mail/components/search/extensions/eki-ee/favicon.ico
new file mode 100644
index 0000000000..537829c30f
--- /dev/null
+++ b/comm/mail/components/search/extensions/eki-ee/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/eki-ee/manifest.json b/comm/mail/components/search/extensions/eki-ee/manifest.json
new file mode 100644
index 0000000000..c0c9ee7175
--- /dev/null
+++ b/comm/mail/components/search/extensions/eki-ee/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Õigekeelsussõnaraamat",
+ "description": "EKI.ee Eesti õigekeelsussõnaraamat ÕS 2013",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "eki-ee@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Õigekeelsussõnaraamat",
+ "search_url": "https://www.eki.ee/dict/qs/index.cgi",
+ "search_form": "https://www.eki.ee/dict/qs/",
+ "search_url_get_params": "F=M&Q={searchTerms}",
+ "suggest_url": "https://www.eki.ee/dict/soovita.cgi",
+ "suggest_url_get_params": "D=qs&Q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/eudict/favicon.ico b/comm/mail/components/search/extensions/eudict/favicon.ico
new file mode 100644
index 0000000000..20750d0c19
--- /dev/null
+++ b/comm/mail/components/search/extensions/eudict/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/eudict/manifest.json b/comm/mail/components/search/extensions/eudict/manifest.json
new file mode 100644
index 0000000000..3b0e881291
--- /dev/null
+++ b/comm/mail/components/search/extensions/eudict/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "EUdict Eng->Cro",
+ "description": "EUdict - englesko-hrvatski rječnik",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "eudict@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "EUdict Eng->Cro",
+ "search_url": "https://eudict.com",
+ "search_form": "https://eudict.com?lang=engcro&word={searchTerms}",
+ "search_url_get_params": "lang=engcro&word={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/faclair-beag/favicon.ico b/comm/mail/components/search/extensions/faclair-beag/favicon.ico
new file mode 100644
index 0000000000..990cf93298
--- /dev/null
+++ b/comm/mail/components/search/extensions/faclair-beag/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/faclair-beag/manifest.json b/comm/mail/components/search/extensions/faclair-beag/manifest.json
new file mode 100644
index 0000000000..d183697b78
--- /dev/null
+++ b/comm/mail/components/search/extensions/faclair-beag/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Am Faclair Beag",
+ "description": "Lorg Am Faclair Beag",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "faclair-beag@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Am Faclair Beag",
+ "search_url": "https://www.faclair.com/",
+ "search_url_get_params": "txtSearch={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/flip/favicon.png b/comm/mail/components/search/extensions/flip/favicon.png
new file mode 100644
index 0000000000..96fc159dbf
--- /dev/null
+++ b/comm/mail/components/search/extensions/flip/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/flip/manifest.json b/comm/mail/components/search/extensions/flip/manifest.json
new file mode 100644
index 0000000000..75a2d0abaa
--- /dev/null
+++ b/comm/mail/components/search/extensions/flip/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "flip.kz",
+ "description": "Қазақстандық интернет-дүкенде іздеу",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "flip@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "flip.kz",
+ "search_url": "https://www.flip.kz/search",
+ "search_form": "https://flip.kz/",
+ "search_url_get_params": "search={searchTerms}",
+ "suggest_url": "https://www.flip.kz/ajax/search_keyword.php",
+ "suggest_url_get_params": "q={searchTerms}&type=os"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/freelang/favicon.ico b/comm/mail/components/search/extensions/freelang/favicon.ico
new file mode 100644
index 0000000000..510a0379f8
--- /dev/null
+++ b/comm/mail/components/search/extensions/freelang/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/freelang/manifest.json b/comm/mail/components/search/extensions/freelang/manifest.json
new file mode 100644
index 0000000000..3f49d83fbc
--- /dev/null
+++ b/comm/mail/components/search/extensions/freelang/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Freelang (br)",
+ "description": "Geriadur Freelang",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "freelang@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Freelang (br)",
+ "search_url": "https://www.freelang.com/enligne/breton.php",
+ "search_form": "https://www.freelang.com/enligne/breton.php",
+ "search_url_post_params": "dico=fr_bre_fra&lg=fr&mot1={searchTerms}&mot2=&entier=on"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/google/favicon.ico b/comm/mail/components/search/extensions/google/favicon.ico
new file mode 100644
index 0000000000..82339b3b1d
--- /dev/null
+++ b/comm/mail/components/search/extensions/google/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/google/manifest.json b/comm/mail/components/search/extensions/google/manifest.json
new file mode 100644
index 0000000000..98d177e465
--- /dev/null
+++ b/comm/mail/components/search/extensions/google/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Google",
+ "description": "Google Search",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "google@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Google",
+ "search_url": "https://www.google.com/search",
+ "search_form": "https://www.google.com/search?q={searchTerms}",
+ "search_url_get_params": "q={searchTerms}",
+ "suggest_url": "https://www.google.com/complete/search?client=firefox&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/gulesider-NO/favicon.ico b/comm/mail/components/search/extensions/gulesider-NO/favicon.ico
new file mode 100644
index 0000000000..e35572a557
--- /dev/null
+++ b/comm/mail/components/search/extensions/gulesider-NO/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/gulesider-NO/manifest.json b/comm/mail/components/search/extensions/gulesider-NO/manifest.json
new file mode 100644
index 0000000000..37e7461e22
--- /dev/null
+++ b/comm/mail/components/search/extensions/gulesider-NO/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Gule sider",
+ "description": "Gule sider person og firmasøk",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "gulesider-NO@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Gule sider",
+ "search_url": "https://www.gulesider.no/query",
+ "search_form": "https://www.gulesider.no/",
+ "search_url_get_params": "what=all&search_word={searchTerms}&cmpid=fre_partner_fire_gssbtop"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/heureka-cz/favicon.ico b/comm/mail/components/search/extensions/heureka-cz/favicon.ico
new file mode 100644
index 0000000000..95ceff009d
--- /dev/null
+++ b/comm/mail/components/search/extensions/heureka-cz/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/heureka-cz/manifest.json b/comm/mail/components/search/extensions/heureka-cz/manifest.json
new file mode 100644
index 0000000000..023d3455d9
--- /dev/null
+++ b/comm/mail/components/search/extensions/heureka-cz/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Heureka",
+ "description": "Vyhledávání na Heureka.cz",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "heureka-cz@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Heureka",
+ "search_url": "https://www.heureka.cz/",
+ "search_form": "https://www.heureka.cz/",
+ "search_url_get_params": "h[fraze]={searchTerms}&utm_source=firefox-search",
+ "suggest_url": "https://www.heureka.cz/direct/firefox/autocompleter.php",
+ "suggest_url_get_params": "query={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/hotline-ua/favicon.ico b/comm/mail/components/search/extensions/hotline-ua/favicon.ico
new file mode 100644
index 0000000000..53d8fc3bac
--- /dev/null
+++ b/comm/mail/components/search/extensions/hotline-ua/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/hotline-ua/manifest.json b/comm/mail/components/search/extensions/hotline-ua/manifest.json
new file mode 100644
index 0000000000..9f642d18a5
--- /dev/null
+++ b/comm/mail/components/search/extensions/hotline-ua/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Hotline",
+ "description": "Hotline - порівняти ціни в інтернет-магазинах України",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "hotline-ua@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Hotline",
+ "search_url": "https://hotline.ua/sr/",
+ "search_form": "https://hotline.ua/",
+ "search_url_get_params": "q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/kannadastore/favicon.png b/comm/mail/components/search/extensions/kannadastore/favicon.png
new file mode 100644
index 0000000000..8c96fe851f
--- /dev/null
+++ b/comm/mail/components/search/extensions/kannadastore/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/kannadastore/manifest.json b/comm/mail/components/search/extensions/kannadastore/manifest.json
new file mode 100644
index 0000000000..e87aeea130
--- /dev/null
+++ b/comm/mail/components/search/extensions/kannadastore/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Kannada Store",
+ "description": "Kanada Store, Online store",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "kannadastore@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Kannada Store",
+ "encoding": "ISO-8859-1",
+ "search_url": "https://www.kannadastore.com/advanced_search_result.php",
+ "search_form": "https://www.kannadastore.com/advanced_search_result.php",
+ "search_url_get_params": "keywords={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/leo_ende_de/favicon.png b/comm/mail/components/search/extensions/leo_ende_de/favicon.png
new file mode 100644
index 0000000000..04e5e344ef
--- /dev/null
+++ b/comm/mail/components/search/extensions/leo_ende_de/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/leo_ende_de/manifest.json b/comm/mail/components/search/extensions/leo_ende_de/manifest.json
new file mode 100644
index 0000000000..6f1b77a581
--- /dev/null
+++ b/comm/mail/components/search/extensions/leo_ende_de/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "LEO Eng-Deu",
+ "description": "Deutsch-Englisch Wörterbuch von LEO",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "leo_ende_de@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "LEO Eng-Deu",
+ "search_url": "https://dict.leo.org/englisch-deutsch/{searchTerms}",
+ "search_form": "https://dict.leo.org",
+ "suggest_url": "https://dict.leo.org/dictQuery/m-query/conf/ende/query.conf/strlist.json",
+ "suggest_url_get_params": "q={searchTerms}&sort=PLa&shortQuery=undefined&noDescription=undefined&noQueryURLs=undefined"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/list-am/favicon.gif b/comm/mail/components/search/extensions/list-am/favicon.gif
new file mode 100644
index 0000000000..031afb5dfc
--- /dev/null
+++ b/comm/mail/components/search/extensions/list-am/favicon.gif
Binary files differ
diff --git a/comm/mail/components/search/extensions/list-am/manifest.json b/comm/mail/components/search/extensions/list-am/manifest.json
new file mode 100644
index 0000000000..e2dd32304b
--- /dev/null
+++ b/comm/mail/components/search/extensions/list-am/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "List.am",
+ "description": "Հանրային զերծ ads մասին: Վաճառք եւ գնման բնակարաններ, կենցաղային իրեր, որոնել աշխատանքի.",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "list-am@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.gif"
+ },
+ "web_accessible_resources": ["favicon.gif"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "List.am",
+ "search_url": "https://www.list.am/category",
+ "search_form": "https://www.list.am/category?q=",
+ "search_url_get_params": "q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/list.json b/comm/mail/components/search/extensions/list.json
new file mode 100644
index 0000000000..b3b440481c
--- /dev/null
+++ b/comm/mail/components/search/extensions/list.json
@@ -0,0 +1,1223 @@
+{
+ "default": {
+ "searchDefault": "Google",
+ "searchOrder": ["Google", "Bing"],
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "bing",
+ "ddg",
+ "wikipedia"
+ ]
+ },
+ "regionOverrides": {
+ "CA": {
+ "amazondotcom": "amazon-ca",
+ "amazon-france": "amazon-ca"
+ },
+ "AU": {
+ "amazondotcom": "amazon-au",
+ "amazon-en-GB": "amazon-au"
+ },
+ "FR": {
+ "amazondotcom": "amazon-france"
+ },
+ "GB": {
+ "amazondotcom": "amazon-en-GB"
+ }
+ },
+ "locales": {
+ "en-US": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "bing",
+ "ddg",
+ "wikipedia"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": [
+ "amazon-ca",
+ "amazon-au",
+ "yandex-en",
+ "google"
+ ]
+ }
+ },
+ "ach": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia"
+ ]
+ }
+ },
+ "af": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-af"
+ ]
+ }
+ },
+ "an": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "wikipedia-an", "ddg"]
+ }
+ },
+ "ar": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-ar"
+ ]
+ }
+ },
+ "as": {
+ "default": {
+ "visibleDefaultEngines": ["google", "amazon-in", "ddg", "wikipedia-as"]
+ }
+ },
+ "ast": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-ast"]
+ }
+ },
+ "az": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "azerdict",
+ "bing",
+ "ddg",
+ "wikipedia-az",
+ "yandex-az"
+ ]
+ }
+ },
+ "be": {
+ "default": {
+ "visibleDefaultEngines": [
+ "yandex-by",
+ "google",
+ "ddg",
+ "wikipedia-be",
+ "wikipedia-be-tarask"
+ ]
+ },
+ "BY": {
+ "searchDefault": "Яндекс"
+ },
+ "KZ": {
+ "searchDefault": "Яндекс"
+ },
+ "RU": {
+ "searchDefault": "Яндекс"
+ },
+ "TR": {
+ "searchDefault": "Яндекс"
+ }
+ },
+ "bg": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "ddg",
+ "pazaruvaj",
+ "wikipedia-bg"
+ ]
+ }
+ },
+ "bn": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-in",
+ "bing",
+ "ddg",
+ "wikipedia-bn"
+ ]
+ }
+ },
+ "bn-BD": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-bn"]
+ }
+ },
+ "bn-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-in",
+ "bing",
+ "ddg",
+ "wikipedia-bn"
+ ]
+ }
+ },
+ "br": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-france",
+ "ddg",
+ "freelang",
+ "wikipedia-br"
+ ]
+ }
+ },
+ "bs": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "olx", "wikipedia-bs"]
+ }
+ },
+ "ca": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "diec2",
+ "ddg",
+ "wikipedia-ca"
+ ]
+ }
+ },
+ "cak": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-es"
+ ]
+ }
+ },
+ "crh": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "wikipedia-crh"]
+ }
+ },
+ "cs": {
+ "default": {
+ "searchOrder": ["Google", "Seznam"],
+ "visibleDefaultEngines": [
+ "google",
+ "seznam-cz",
+ "ddg",
+ "heureka-cz",
+ "mapy-cz",
+ "wikipedia-cz"
+ ]
+ }
+ },
+ "cy": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "ddg",
+ "palasprint",
+ "wikipedia-cy"
+ ]
+ }
+ },
+ "da": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-en-GB",
+ "ddg",
+ "wikipedia-da"
+ ]
+ }
+ },
+ "de": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-de",
+ "bing",
+ "ddg",
+ "ecosia",
+ "leo_ende_de",
+ "wikipedia-de"
+ ]
+ }
+ },
+ "dsb": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-de",
+ "ddg",
+ "leo_ende_de",
+ "wikipedia-dsb"
+ ]
+ }
+ },
+ "el": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "bing",
+ "ddg",
+ "wikipedia-el"
+ ]
+ }
+ },
+ "en-CA": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-ca",
+ "bing",
+ "ddg",
+ "wikipedia"
+ ]
+ }
+ },
+ "en-GB": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-en-GB",
+ "chambers-en-GB",
+ "ddg",
+ "wikipedia"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": ["yandex-en"]
+ }
+ },
+ "en-ZA": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia"
+ ]
+ }
+ },
+ "eo": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-eo"
+ ]
+ }
+ },
+ "es-AR": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "drae",
+ "ddg",
+ "mercadolibre-ar",
+ "wikipedia-es"
+ ]
+ }
+ },
+ "es-CL": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "drae",
+ "ddg",
+ "mercadolibre-cl",
+ "wikipedia-es"
+ ]
+ }
+ },
+ "es-ES": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "drae",
+ "ddg",
+ "wikipedia-es"
+ ]
+ }
+ },
+ "es-MX": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "ddg",
+ "mercadolibre-mx",
+ "wikipedia-es"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": ["amazon-mx"]
+ }
+ },
+ "et": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "neti-ee",
+ "ddg",
+ "osta-ee",
+ "wikipedia-et",
+ "eki-ee"
+ ]
+ }
+ },
+ "eu": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-en-GB",
+ "ddg",
+ "wikipedia-eu"
+ ]
+ }
+ },
+ "fa": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "bing",
+ "ddg",
+ "wikipedia-fa"
+ ]
+ }
+ },
+ "ff": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-france",
+ "ddg",
+ "wikipedia-fr"
+ ]
+ }
+ },
+ "fi": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-fi"]
+ }
+ },
+ "fr": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-france",
+ "ddg",
+ "qwant",
+ "wikipedia-fr"
+ ]
+ }
+ },
+ "fy-NL": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "bolcom-fy-NL",
+ "ddg",
+ "marktplaats-fy-NL",
+ "wikipedia-fy-NL"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": ["amazon-nl"]
+ }
+ },
+ "ga-IE": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "ddg",
+ "tearma",
+ "wikipedia-ga-IE"
+ ]
+ }
+ },
+ "gd": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "bbc-alba",
+ "ddg",
+ "faclair-beag",
+ "wikipedia-gd"
+ ]
+ }
+ },
+ "gl": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "ddg",
+ "wikipedia-gl"
+ ]
+ }
+ },
+ "gn": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-gn"
+ ]
+ }
+ },
+ "gu-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia-gu"
+ ]
+ }
+ },
+ "he": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "wikipedia-he", "morfix-dic"]
+ }
+ },
+ "hi-IN": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-hi"]
+ }
+ },
+ "hr": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "bing",
+ "ddg",
+ "eudict",
+ "wikipedia-hr"
+ ]
+ }
+ },
+ "hsb": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-de",
+ "ddg",
+ "leo_ende_de",
+ "wikipedia-hsb"
+ ]
+ }
+ },
+ "hu": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "vatera", "wikipedia-hu"]
+ }
+ },
+ "hy-AM": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "ddg",
+ "list-am",
+ "wikipedia-hy"
+ ]
+ }
+ },
+ "ia": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-ia"
+ ]
+ }
+ },
+ "id": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "wikipedia-id"]
+ }
+ },
+ "is": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-is"
+ ]
+ }
+ },
+ "it": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-it",
+ "ddg",
+ "wikipedia-it"
+ ]
+ }
+ },
+ "ja-JP-macos": {
+ "default": {
+ "searchOrder": [
+ "Google",
+ "Yahoo! JAPAN",
+ "Bing",
+ "Amazon.co.jp",
+ "楽天市場",
+ "ヤフオク!",
+ "教えて!goo",
+ "Wikipedia (ja)"
+ ],
+ "visibleDefaultEngines": [
+ "google",
+ "yahoo-jp",
+ "bing",
+ "amazon-jp",
+ "rakuten",
+ "yahoo-jp-auctions",
+ "oshiete-goo",
+ "wikipedia-ja",
+ "ddg"
+ ]
+ }
+ },
+ "ja": {
+ "default": {
+ "searchOrder": [
+ "Google",
+ "Yahoo! JAPAN",
+ "Bing",
+ "Amazon.co.jp",
+ "楽天市場",
+ "ヤフオク!",
+ "教えて!goo",
+ "Wikipedia (ja)"
+ ],
+ "visibleDefaultEngines": [
+ "google",
+ "yahoo-jp",
+ "bing",
+ "amazon-jp",
+ "rakuten",
+ "yahoo-jp-auctions",
+ "oshiete-goo",
+ "wikipedia-ja",
+ "ddg"
+ ]
+ }
+ },
+ "ka": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-ka"
+ ]
+ }
+ },
+ "kab": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-kab"]
+ }
+ },
+ "kk": {
+ "default": {
+ "visibleDefaultEngines": [
+ "yandex-kk",
+ "google",
+ "ddg",
+ "flip",
+ "wikipedia-kk"
+ ]
+ },
+ "KZ": {
+ "searchDefault": "Яндекс"
+ },
+ "BY": {
+ "searchDefault": "Яндекс"
+ },
+ "RU": {
+ "searchDefault": "Яндекс"
+ },
+ "TR": {
+ "searchDefault": "Яндекс"
+ }
+ },
+ "km": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-km"
+ ]
+ }
+ },
+ "kn": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "kannadastore",
+ "wikipedia-kn"
+ ]
+ }
+ },
+ "ko": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "ddg",
+ "naver-kr",
+ "daum-kr",
+ "wikipedia-kr"
+ ]
+ }
+ },
+ "lij": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-it",
+ "ddg",
+ "wikipedia-lij"
+ ]
+ }
+ },
+ "lo": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-lo"]
+ }
+ },
+ "lt": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "wikipedia-lt",
+ "bing",
+ "amazondotcom",
+ "ddg"
+ ]
+ }
+ },
+ "ltg": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "ddg",
+ "salidzinilv",
+ "sslv",
+ "wikipedia-ltg"
+ ]
+ }
+ },
+ "lv": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "ddg",
+ "salidzinilv",
+ "sslv",
+ "wikipedia-lv"
+ ]
+ }
+ },
+ "mai": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia-hi"
+ ]
+ }
+ },
+ "mk": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-mk"
+ ]
+ }
+ },
+ "ml": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia",
+ "wikipedia-ml"
+ ]
+ }
+ },
+ "mr": {
+ "default": {
+ "visibleDefaultEngines": ["google", "amazon-in", "ddg", "wikipedia-mr"]
+ }
+ },
+ "ms": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-ms"
+ ]
+ }
+ },
+ "my": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-my"
+ ]
+ }
+ },
+ "nb-NO": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "bing",
+ "ddg",
+ "gulesider-NO",
+ "bok-NO",
+ "qxl-NO",
+ "wikipedia-NO"
+ ]
+ }
+ },
+ "ne-NP": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia-ne"]
+ }
+ },
+ "nl": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "bolcom-nl",
+ "ddg",
+ "marktplaats-nl",
+ "wikipedia-nl"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": ["amazon-nl"]
+ }
+ },
+ "nn-NO": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-en-GB",
+ "ddg",
+ "gulesider-NO",
+ "bok-NO",
+ "qxl-NO",
+ "wikipedia-NN"
+ ]
+ }
+ },
+ "oc": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "ddg",
+ "wikipedia-oc",
+ "wiktionary-oc"
+ ]
+ }
+ },
+ "or": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia-or"
+ ]
+ }
+ },
+ "pa-IN": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia-pa"
+ ]
+ }
+ },
+ "pl": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "allegro-pl",
+ "ddg",
+ "pwn-pl",
+ "wikipedia-pl",
+ "wolnelektury-pl"
+ ]
+ }
+ },
+ "pt-BR": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "ddg",
+ "mercadolivre",
+ "wikipedia-pt"
+ ]
+ },
+ "experimental-hidden": {
+ "visibleDefaultEngines": ["amazon-br"]
+ }
+ },
+ "pt-PT": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "ddg",
+ "priberam",
+ "wikipedia-pt"
+ ]
+ }
+ },
+ "rm": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "ddg",
+ "leo_ende_de",
+ "wikipedia-rm"
+ ]
+ }
+ },
+ "ro": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-ro"
+ ]
+ }
+ },
+ "ru": {
+ "default": {
+ "visibleDefaultEngines": [
+ "yandex-ru",
+ "google",
+ "ddg",
+ "ozonru",
+ "priceru",
+ "wikipedia-ru",
+ "mailru"
+ ]
+ },
+ "RU": {
+ "searchDefault": "Яндекс"
+ },
+ "BY": {
+ "searchDefault": "Яндекс"
+ },
+ "KZ": {
+ "searchDefault": "Яндекс"
+ },
+ "TR": {
+ "searchDefault": "Яндекс"
+ }
+ },
+ "si": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-si"
+ ]
+ }
+ },
+ "sk": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "azet-sk",
+ "atlas-sk",
+ "ddg",
+ "wikipedia-sk",
+ "zoznam-sk"
+ ]
+ }
+ },
+ "sl": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "ceneji",
+ "ddg",
+ "najdi-si",
+ "odpiralni",
+ "wikipedia-sl"
+ ]
+ }
+ },
+ "son": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-france",
+ "ddg",
+ "wikipedia-fr"
+ ]
+ }
+ },
+ "sq": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-en-GB",
+ "ddg",
+ "wikipedia-sq"
+ ]
+ }
+ },
+ "sr": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-en-GB",
+ "bing",
+ "ddg",
+ "wikipedia-sr",
+ "pogodak"
+ ]
+ }
+ },
+ "sv-SE": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "allaannonser-sv-SE",
+ "ddg",
+ "prisjakt-sv-SE",
+ "tyda-sv-SE",
+ "wikipedia-sv-SE"
+ ]
+ }
+ },
+ "ta": {
+ "default": {
+ "visibleDefaultEngines": ["google", "amazon-in", "ddg", "wikipedia-ta"]
+ }
+ },
+ "te": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazon-in",
+ "ddg",
+ "wikipedia-te",
+ "wiktionary-te"
+ ]
+ }
+ },
+ "th": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "amazondotcom",
+ "bing",
+ "ddg",
+ "longdo",
+ "wikipedia-th"
+ ]
+ }
+ },
+ "tl": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-tl"
+ ]
+ }
+ },
+ "tr": {
+ "default": {
+ "visibleDefaultEngines": ["yandex-tr", "google", "ddg", "wikipedia-tr"]
+ },
+ "TR": {
+ "searchDefault": "Yandex"
+ },
+ "BY": {
+ "searchDefault": "Yandex"
+ },
+ "KZ": {
+ "searchDefault": "Yandex"
+ },
+ "RU": {
+ "searchDefault": "Yandex"
+ }
+ },
+ "trs": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-es"
+ ]
+ }
+ },
+ "uk": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "ddg",
+ "wikipedia-uk",
+ "hotline-ua"
+ ]
+ }
+ },
+ "ur": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-in",
+ "ddg",
+ "wikipedia-ur"
+ ]
+ }
+ },
+ "uz": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazondotcom",
+ "ddg",
+ "wikipedia-uz"
+ ]
+ }
+ },
+ "vi": {
+ "default": {
+ "visibleDefaultEngines": ["google", "coccoc", "ddg", "wikipedia-vi"]
+ }
+ },
+ "wo": {
+ "default": {
+ "visibleDefaultEngines": [
+ "google",
+ "bing",
+ "amazon-france",
+ "ddg",
+ "wikipedia-wo"
+ ]
+ }
+ },
+ "xh": {
+ "default": {
+ "visibleDefaultEngines": ["google", "bing", "ddg", "wikipedia"]
+ }
+ },
+ "zh-CN": {
+ "default": {
+ "visibleDefaultEngines": [
+ "baidu",
+ "google",
+ "bing",
+ "ddg",
+ "wikipedia-zh-CN",
+ "amazondotcn"
+ ]
+ },
+ "CN": {
+ "searchDefault": "百度"
+ }
+ },
+ "zh-TW": {
+ "default": {
+ "visibleDefaultEngines": ["google", "ddg", "readmoo", "wikipedia-zh-TW"]
+ }
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/longdo/favicon.ico b/comm/mail/components/search/extensions/longdo/favicon.ico
new file mode 100644
index 0000000000..aa42cda97f
--- /dev/null
+++ b/comm/mail/components/search/extensions/longdo/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/longdo/manifest.json b/comm/mail/components/search/extensions/longdo/manifest.json
new file mode 100644
index 0000000000..1b86c951d5
--- /dev/null
+++ b/comm/mail/components/search/extensions/longdo/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "พจนานุกรม ลองดู",
+ "description": "พจนานุกรม ลองดู",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "longdo@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "พจนานุกรม ลองดู",
+ "search_url": "https://dict.longdo.org/",
+ "search_form": "https://dict.longdo.org/",
+ "search_url_get_params": "search={searchTerms}&src=moz",
+ "suggest_url": "https://search.longdo.com/Suggest/HeadSearch",
+ "suggest_url_get_params": "ds=head&fxjson=1&key={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/mailru/favicon.ico b/comm/mail/components/search/extensions/mailru/favicon.ico
new file mode 100644
index 0000000000..a2d3a48883
--- /dev/null
+++ b/comm/mail/components/search/extensions/mailru/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/mailru/manifest.json b/comm/mail/components/search/extensions/mailru/manifest.json
new file mode 100644
index 0000000000..9d5e799296
--- /dev/null
+++ b/comm/mail/components/search/extensions/mailru/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Поиск Mail.Ru",
+ "description": "Search with Поиск Mail.Ru",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "mailru@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Поиск Mail.Ru",
+ "search_url": "https://go.mail.ru/search",
+ "search_form": "https://go.mail.ru/?gp=900200",
+ "search_url_get_params": "q={searchTerms}&fr=osmi&gp=900200&frc=900200",
+ "suggest_url": "https://suggests.go.mail.ru/ff3",
+ "suggest_url_get_params": "q={searchTerms}&gp=900200"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/mapy-cz/favicon.ico b/comm/mail/components/search/extensions/mapy-cz/favicon.ico
new file mode 100644
index 0000000000..051204c35c
--- /dev/null
+++ b/comm/mail/components/search/extensions/mapy-cz/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/mapy-cz/manifest.json b/comm/mail/components/search/extensions/mapy-cz/manifest.json
new file mode 100644
index 0000000000..2f8fdc32f1
--- /dev/null
+++ b/comm/mail/components/search/extensions/mapy-cz/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Mapy.cz",
+ "description": "Vyhledávání na Mapy.cz",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "mapy-cz@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Mapy.cz",
+ "search_url": "https://www.mapy.cz/",
+ "search_form": "https://www.mapy.cz/",
+ "search_url_get_params": "query={searchTerms}&sourceid=Searchmodule_3"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/marktplaats/_locales/fy-NL/messages.json b/comm/mail/components/search/extensions/marktplaats/_locales/fy-NL/messages.json
new file mode 100644
index 0000000000..4d7f884b17
--- /dev/null
+++ b/comm/mail/components/search/extensions/marktplaats/_locales/fy-NL/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Marktplaats.nl"
+ },
+ "extensionDescription": {
+ "message": "Sykje yn alle kategoryen op Marktplaats.nl"
+ },
+ "searchUrl": {
+ "message": "https://www.marktplaats.nl/z.html"
+ },
+ "searchForm": {
+ "message": "https://www.marktplaats.nl"
+ },
+ "searchUrlGetParams": {
+ "message": "query={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/marktplaats/_locales/nl/messages.json b/comm/mail/components/search/extensions/marktplaats/_locales/nl/messages.json
new file mode 100644
index 0000000000..c44a0a25cc
--- /dev/null
+++ b/comm/mail/components/search/extensions/marktplaats/_locales/nl/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "Marktplaats.nl"
+ },
+ "extensionDescription": {
+ "message": "Zoeken in alle categorieën op Marktplaats.nl"
+ },
+ "searchUrl": {
+ "message": "https://www.marktplaats.nl/z.html"
+ },
+ "searchForm": {
+ "message": "https://www.marktplaats.nl"
+ },
+ "searchUrlGetParams": {
+ "message": "query={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/marktplaats/favicon.ico b/comm/mail/components/search/extensions/marktplaats/favicon.ico
new file mode 100644
index 0000000000..ed0ff305a6
--- /dev/null
+++ b/comm/mail/components/search/extensions/marktplaats/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/marktplaats/manifest.json b/comm/mail/components/search/extensions/marktplaats/manifest.json
new file mode 100644
index 0000000000..b1a41bbd02
--- /dev/null
+++ b/comm/mail/components/search/extensions/marktplaats/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "marktplaats@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "fy-NL",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/mercadolibre/_locales/ar/messages.json b/comm/mail/components/search/extensions/mercadolibre/_locales/ar/messages.json
new file mode 100644
index 0000000000..b83f37c6fc
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolibre/_locales/ar/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "MercadoLibre Argentina"
+ },
+ "extensionDescription": {
+ "message": "MercadoLibre Argentina"
+ },
+ "searchUrl": {
+ "message": "https://www.mercadolibre.com.ar/jm/search"
+ },
+ "searchForm": {
+ "message": "https://www.mercadolibre.com.ar/"
+ },
+ "searchUrlGetParams": {
+ "message": "as_word={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/mercadolibre/_locales/cl/messages.json b/comm/mail/components/search/extensions/mercadolibre/_locales/cl/messages.json
new file mode 100644
index 0000000000..3c37756464
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolibre/_locales/cl/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "MercadoLibre Chile"
+ },
+ "extensionDescription": {
+ "message": "MercadoLibre Chile"
+ },
+ "searchUrl": {
+ "message": "https://www.mercadolibre.cl/jm/search"
+ },
+ "searchForm": {
+ "message": "https://www.mercadolibre.cl/"
+ },
+ "searchUrlGetParams": {
+ "message": "as_word={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/mercadolibre/_locales/mx/messages.json b/comm/mail/components/search/extensions/mercadolibre/_locales/mx/messages.json
new file mode 100644
index 0000000000..cb4d2b4b79
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolibre/_locales/mx/messages.json
@@ -0,0 +1,17 @@
+{
+ "extensionName": {
+ "message": "MercadoLibre Mexico"
+ },
+ "extensionDescription": {
+ "message": "MercadoLibre Mexico"
+ },
+ "searchUrl": {
+ "message": "https://www.mercadolibre.com.mx/jm/search"
+ },
+ "searchForm": {
+ "message": "https://www.mercadolibre.com.mx/"
+ },
+ "searchUrlGetParams": {
+ "message": "as_word={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/mercadolibre/favicon.ico b/comm/mail/components/search/extensions/mercadolibre/favicon.ico
new file mode 100644
index 0000000000..dc9ad5b2a9
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolibre/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/mercadolibre/manifest.json b/comm/mail/components/search/extensions/mercadolibre/manifest.json
new file mode 100644
index 0000000000..7af5ecc3cf
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolibre/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "mercadolibre@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "ar",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/mercadolivre/favicon.ico b/comm/mail/components/search/extensions/mercadolivre/favicon.ico
new file mode 100644
index 0000000000..dc9ad5b2a9
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolivre/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/mercadolivre/manifest.json b/comm/mail/components/search/extensions/mercadolivre/manifest.json
new file mode 100644
index 0000000000..d70f94573f
--- /dev/null
+++ b/comm/mail/components/search/extensions/mercadolivre/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "MercadoLivre",
+ "description": "Onde comprar e vender de Tudo.",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "mercadolivre@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "MercadoLivre",
+ "search_url": "https://www.mercadolivre.com.br/jm/search",
+ "search_form": "https://www.mercadolivre.com.br/",
+ "search_url_get_params": "as_word={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/morfix-dic/favicon.ico b/comm/mail/components/search/extensions/morfix-dic/favicon.ico
new file mode 100644
index 0000000000..6a3231b172
--- /dev/null
+++ b/comm/mail/components/search/extensions/morfix-dic/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/morfix-dic/manifest.json b/comm/mail/components/search/extensions/morfix-dic/manifest.json
new file mode 100644
index 0000000000..cacaad9ccf
--- /dev/null
+++ b/comm/mail/components/search/extensions/morfix-dic/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "מילון מורפיקס",
+ "description": "",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "morfix-dic@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "מילון מורפיקס",
+ "search_url": "https://milon.morfix.co.il/default.aspx",
+ "search_form": "https://milon.morfix.co.il/",
+ "search_url_get_params": "q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/najdi-si/favicon.png b/comm/mail/components/search/extensions/najdi-si/favicon.png
new file mode 100644
index 0000000000..b470991648
--- /dev/null
+++ b/comm/mail/components/search/extensions/najdi-si/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/najdi-si/manifest.json b/comm/mail/components/search/extensions/najdi-si/manifest.json
new file mode 100644
index 0000000000..2d7e0caaad
--- /dev/null
+++ b/comm/mail/components/search/extensions/najdi-si/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Najdi.si",
+ "description": "Iskalnik Najdi.si",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "najdi-si@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Najdi.si",
+ "search_url": "https://www.najdi.si/search.jsp",
+ "search_form": "https://www.najdi.si/",
+ "search_url_get_params": "q={searchTerms}&o=0&foxsbar=ff"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/naver-kr/favicon.ico b/comm/mail/components/search/extensions/naver-kr/favicon.ico
new file mode 100644
index 0000000000..eed93a92cb
--- /dev/null
+++ b/comm/mail/components/search/extensions/naver-kr/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/naver-kr/manifest.json b/comm/mail/components/search/extensions/naver-kr/manifest.json
new file mode 100644
index 0000000000..240fc2e0d3
--- /dev/null
+++ b/comm/mail/components/search/extensions/naver-kr/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "네이버",
+ "description": "네이버 검색",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "naver-kr@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "네이버",
+ "search_url": "https://search.naver.com/search.naver",
+ "search_form": "https://search.naver.com",
+ "search_url_get_params": "where=nexearch&frm=ff&sm=oss&ie=utf8&query={searchTerms}",
+ "suggest_url": "https://ac.search.naver.com/nx/ac",
+ "suggest_url_get_params": "of=os&ie=utf-8&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/neti-ee/favicon.ico b/comm/mail/components/search/extensions/neti-ee/favicon.ico
new file mode 100644
index 0000000000..1bc10ea7fb
--- /dev/null
+++ b/comm/mail/components/search/extensions/neti-ee/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/neti-ee/manifest.json b/comm/mail/components/search/extensions/neti-ee/manifest.json
new file mode 100644
index 0000000000..900789fceb
--- /dev/null
+++ b/comm/mail/components/search/extensions/neti-ee/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Neti",
+ "description": "Neti",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "neti-ee@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Neti",
+ "search_url": "https://www.neti.ee/cgi-bin/otsing",
+ "search_form": "https://www.neti.ee/",
+ "search_url_get_params": "query={searchTerms}&src=web"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/odpiralni/favicon.png b/comm/mail/components/search/extensions/odpiralni/favicon.png
new file mode 100644
index 0000000000..044d4f13d4
--- /dev/null
+++ b/comm/mail/components/search/extensions/odpiralni/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/odpiralni/manifest.json b/comm/mail/components/search/extensions/odpiralni/manifest.json
new file mode 100644
index 0000000000..cee70b5cb6
--- /dev/null
+++ b/comm/mail/components/search/extensions/odpiralni/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Odpiralni Časi",
+ "description": "Odpiralni Časi v Sloveniji",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "odpiralni@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Odpiralni Časi",
+ "search_url": "https://www.odpiralnicasi.com/spots",
+ "search_url_get_params": "q={searchTerms}&source=1"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/olx/favicon.ico b/comm/mail/components/search/extensions/olx/favicon.ico
new file mode 100644
index 0000000000..22e472190b
--- /dev/null
+++ b/comm/mail/components/search/extensions/olx/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/olx/manifest.json b/comm/mail/components/search/extensions/olx/manifest.json
new file mode 100644
index 0000000000..da80367b2f
--- /dev/null
+++ b/comm/mail/components/search/extensions/olx/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "OLX.ba",
+ "description": "OLX.ba pretraživač",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "olx@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "OLX.ba",
+ "search_url": "https://www.olx.ba/pretraga",
+ "search_form": "https://www.olx.ba/",
+ "search_url_get_params": "trazilica={searchTerms}",
+ "suggest_url": "https://www.olx.ba/sugestije/firefox_pojmovi",
+ "suggest_url_get_params": "sta={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/oshiete-goo/favicon.ico b/comm/mail/components/search/extensions/oshiete-goo/favicon.ico
new file mode 100644
index 0000000000..ee454036dd
--- /dev/null
+++ b/comm/mail/components/search/extensions/oshiete-goo/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/oshiete-goo/manifest.json b/comm/mail/components/search/extensions/oshiete-goo/manifest.json
new file mode 100644
index 0000000000..be6d6fb8e5
--- /dev/null
+++ b/comm/mail/components/search/extensions/oshiete-goo/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "教えて!goo",
+ "description": "教えて!goo",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "oshiete-goo@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "教えて!goo",
+ "search_url": "https://oshiete.goo.ne.jp/search_goo/result/",
+ "search_url_get_params": "MT={searchTerms}&from=Firefox30&PT=Firefox30"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/osta-ee/favicon.png b/comm/mail/components/search/extensions/osta-ee/favicon.png
new file mode 100644
index 0000000000..e67b9c3abf
--- /dev/null
+++ b/comm/mail/components/search/extensions/osta-ee/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/osta-ee/manifest.json b/comm/mail/components/search/extensions/osta-ee/manifest.json
new file mode 100644
index 0000000000..7940471355
--- /dev/null
+++ b/comm/mail/components/search/extensions/osta-ee/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Osta",
+ "description": "Osta",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "osta-ee@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Osta",
+ "search_url": "https://www.osta.ee/firefox/",
+ "search_form": "https://www.osta.ee/",
+ "search_url_get_params": "keyword={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/ozonru/favicon.ico b/comm/mail/components/search/extensions/ozonru/favicon.ico
new file mode 100644
index 0000000000..eecb97a330
--- /dev/null
+++ b/comm/mail/components/search/extensions/ozonru/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/ozonru/manifest.json b/comm/mail/components/search/extensions/ozonru/manifest.json
new file mode 100644
index 0000000000..35d0d3f1a5
--- /dev/null
+++ b/comm/mail/components/search/extensions/ozonru/manifest.json
@@ -0,0 +1,27 @@
+{
+ "name": "OZON.ru",
+ "description": "OZON.ru provider",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "ozonru@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "OZON.ru",
+ "encoding": "WINDOWS-1251",
+ "search_url": "https://www.ozon.ru/?",
+ "search_form": "https://www.ozon.ru/",
+ "search_url_get_params": "context=search&text={searchTerms}&from=firefox",
+ "suggest_url": "https://www.ozon.ru/JSONSuggestionHandler.ashx",
+ "suggest_url_get_params": "text={searchTerms}&from=firefox"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/palasprint/favicon.ico b/comm/mail/components/search/extensions/palasprint/favicon.ico
new file mode 100644
index 0000000000..afa4eef392
--- /dev/null
+++ b/comm/mail/components/search/extensions/palasprint/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/palasprint/manifest.json b/comm/mail/components/search/extensions/palasprint/manifest.json
new file mode 100644
index 0000000000..9786e0679c
--- /dev/null
+++ b/comm/mail/components/search/extensions/palasprint/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Palas Print",
+ "description": "Palas Print - Heb Ffiniau",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "palasprint@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Palas Print",
+ "search_url": "https://palasprint.com/siopa/search_all.php",
+ "search_form": "https://palasprint.com/siopa/advanced_search.php",
+ "search_url_get_params": "keywords={searchTerms}&source=mozilla"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/pazaruvaj/favicon.ico b/comm/mail/components/search/extensions/pazaruvaj/favicon.ico
new file mode 100644
index 0000000000..36f0cff233
--- /dev/null
+++ b/comm/mail/components/search/extensions/pazaruvaj/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/pazaruvaj/manifest.json b/comm/mail/components/search/extensions/pazaruvaj/manifest.json
new file mode 100644
index 0000000000..b94dce2668
--- /dev/null
+++ b/comm/mail/components/search/extensions/pazaruvaj/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Pazaruvaj",
+ "description": "Надежден помощник за покупки, сравнение на цени, онлайн магазини, описания, мнения, видеоклипове",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "pazaruvaj@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Pazaruvaj",
+ "search_url": "https://www.pazaruvaj.com/CategorySearch.php",
+ "search_form": "https://www.pazaruvaj.com/",
+ "search_url_get_params": "st={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/pogodak/favicon.ico b/comm/mail/components/search/extensions/pogodak/favicon.ico
new file mode 100644
index 0000000000..1bae4f838d
--- /dev/null
+++ b/comm/mail/components/search/extensions/pogodak/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/pogodak/manifest.json b/comm/mail/components/search/extensions/pogodak/manifest.json
new file mode 100644
index 0000000000..e17e175620
--- /dev/null
+++ b/comm/mail/components/search/extensions/pogodak/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Погодак",
+ "description": "Погодак: претраживач Интернета",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "pogodak@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Погодак",
+ "search_url": "https://www.pogodak.rs/pretraga",
+ "search_form": "https://www.pogodak.rs",
+ "search_url_get_params": "q={searchTerms}&foxsbar=ff"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/priberam/favicon.png b/comm/mail/components/search/extensions/priberam/favicon.png
new file mode 100644
index 0000000000..98924439d5
--- /dev/null
+++ b/comm/mail/components/search/extensions/priberam/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/priberam/manifest.json b/comm/mail/components/search/extensions/priberam/manifest.json
new file mode 100644
index 0000000000..f344d4def4
--- /dev/null
+++ b/comm/mail/components/search/extensions/priberam/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Priberam",
+ "description": "Dicionário Priberam",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "priberam@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Priberam",
+ "encoding": "ISO-8859-15",
+ "search_url": "https://www.priberam.pt/dlpo/firefox.aspx",
+ "search_form": "https://www.priberam.pt/dlpo/",
+ "search_url_get_params": "pal={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/priceru/favicon.ico b/comm/mail/components/search/extensions/priceru/favicon.ico
new file mode 100644
index 0000000000..ee4ca656ca
--- /dev/null
+++ b/comm/mail/components/search/extensions/priceru/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/priceru/manifest.json b/comm/mail/components/search/extensions/priceru/manifest.json
new file mode 100644
index 0000000000..1eff4b2e47
--- /dev/null
+++ b/comm/mail/components/search/extensions/priceru/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Price.ru",
+ "description": "Поиск предложений и цен",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "priceru@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Price.ru",
+ "search_url": "https://price.ru/search",
+ "search_form": "https://price.ru/index.html",
+ "search_url_get_params": "query={searchTerms}&from=fx3"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/prisjakt-sv-SE/favicon.ico b/comm/mail/components/search/extensions/prisjakt-sv-SE/favicon.ico
new file mode 100644
index 0000000000..feac665f71
--- /dev/null
+++ b/comm/mail/components/search/extensions/prisjakt-sv-SE/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/prisjakt-sv-SE/manifest.json b/comm/mail/components/search/extensions/prisjakt-sv-SE/manifest.json
new file mode 100644
index 0000000000..442cb0414e
--- /dev/null
+++ b/comm/mail/components/search/extensions/prisjakt-sv-SE/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Prisjakt",
+ "description": "Prisjakt - jämför priser och produkter",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "prisjakt-sv-SE@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Prisjakt",
+ "search_url": "https://www.prisjakt.nu/#rparams=ss={searchTerms}",
+ "search_form": "https://www.prisjakt.nu/#rparams=ss={searchTerms}",
+ "suggest_url": "https://www.prisjakt.nu/plugins/opensearch/suggestions.php",
+ "suggest_url_get_params": "search={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/pwn-pl/favicon.png b/comm/mail/components/search/extensions/pwn-pl/favicon.png
new file mode 100644
index 0000000000..3cbae12d48
--- /dev/null
+++ b/comm/mail/components/search/extensions/pwn-pl/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/pwn-pl/manifest.json b/comm/mail/components/search/extensions/pwn-pl/manifest.json
new file mode 100644
index 0000000000..46375e9983
--- /dev/null
+++ b/comm/mail/components/search/extensions/pwn-pl/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Encyklopedia PWN",
+ "description": "Wyszukiwanie w Encyklopedii PWN",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "pwn-pl@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Encyklopedia PWN",
+ "search_url": "https://encyklopedia.pwn.pl/szukaj/{searchTerms}",
+ "search_form": "https://encyklopedia.pwn.pl/szukaj/"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/qwant/favicon.ico b/comm/mail/components/search/extensions/qwant/favicon.ico
new file mode 100644
index 0000000000..d43d1d5aa6
--- /dev/null
+++ b/comm/mail/components/search/extensions/qwant/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/qwant/manifest.json b/comm/mail/components/search/extensions/qwant/manifest.json
new file mode 100644
index 0000000000..07fbf85cce
--- /dev/null
+++ b/comm/mail/components/search/extensions/qwant/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Qwant",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "qwant@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Qwant",
+ "search_url": "https://www.qwant.com/",
+ "search_url_get_params": "client=brz-moz&q={searchTerms}",
+ "suggest_url": "https://api.qwant.com/api/suggest/",
+ "suggest_url_get_params": "client=opensearch&q={searchTerms}",
+ "search_form": "https://www.qwant.com/"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/qxl-NO/favicon.ico b/comm/mail/components/search/extensions/qxl-NO/favicon.ico
new file mode 100644
index 0000000000..02ee1fc283
--- /dev/null
+++ b/comm/mail/components/search/extensions/qxl-NO/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/qxl-NO/manifest.json b/comm/mail/components/search/extensions/qxl-NO/manifest.json
new file mode 100644
index 0000000000..8f98d766ce
--- /dev/null
+++ b/comm/mail/components/search/extensions/qxl-NO/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "QXL",
+ "description": "QXL søk",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "qxl-NO@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "QXL",
+ "search_url": "https://www.qxl.no/search/search.asp",
+ "search_form": "https://www.qxl.no/",
+ "search_url_get_params": "txtSearch={searchTerms}&InTitleAndDesc=1&sourceid=Mozilla-search"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/rakuten/favicon.ico b/comm/mail/components/search/extensions/rakuten/favicon.ico
new file mode 100644
index 0000000000..66afe98469
--- /dev/null
+++ b/comm/mail/components/search/extensions/rakuten/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/rakuten/manifest.json b/comm/mail/components/search/extensions/rakuten/manifest.json
new file mode 100644
index 0000000000..ba590dba76
--- /dev/null
+++ b/comm/mail/components/search/extensions/rakuten/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "楽天市場",
+ "description": "楽天市場 商品検索",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "rakuten@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "楽天市場",
+ "encoding": "EUC-JP",
+ "search_url": "https://pt.afl.rakuten.co.jp/c/013ca98b.cd7c5f0c/",
+ "search_form": "https://www.rakuten.co.jp/",
+ "search_url_get_params": "sitem={searchTerms}&sv=2&p=0"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/readmoo/favicon.ico b/comm/mail/components/search/extensions/readmoo/favicon.ico
new file mode 100644
index 0000000000..75396dc9ca
--- /dev/null
+++ b/comm/mail/components/search/extensions/readmoo/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/readmoo/manifest.json b/comm/mail/components/search/extensions/readmoo/manifest.json
new file mode 100644
index 0000000000..f9d8a24f3c
--- /dev/null
+++ b/comm/mail/components/search/extensions/readmoo/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Readmoo 讀墨電子書",
+ "description": "Readmoo 讀墨電子書",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "readmoo@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Readmoo 讀墨電子書",
+ "search_url": "https://readmoo.com/search/keyword",
+ "search_form": "https://readmoo.com/search/keyword?pi=0&q={searchTerms}&st=true",
+ "search_url_get_params": "pi=0&q={searchTerms}&st=true"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/salidzinilv/favicon.ico b/comm/mail/components/search/extensions/salidzinilv/favicon.ico
new file mode 100644
index 0000000000..0a7d01cae8
--- /dev/null
+++ b/comm/mail/components/search/extensions/salidzinilv/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/salidzinilv/manifest.json b/comm/mail/components/search/extensions/salidzinilv/manifest.json
new file mode 100644
index 0000000000..322a378eae
--- /dev/null
+++ b/comm/mail/components/search/extensions/salidzinilv/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Salidzini.lv",
+ "description": "Salidzini.lv - Latvijas interneta veikalu mekletajs",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "salidzinilv@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Salidzini.lv",
+ "search_url": "https://www.salidzini.lv/search.php",
+ "search_form": "https://salidzini.lv",
+ "search_url_get_params": "q={searchTerms}&utm_source=firefox-plugin",
+ "suggest_url": "https://www.salidzini.lv/suggested_search.php",
+ "suggest_url_get_params": "q={searchTerms}&utm_source=firefox-plugin"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/seznam-cz/favicon.ico b/comm/mail/components/search/extensions/seznam-cz/favicon.ico
new file mode 100644
index 0000000000..f3e078a107
--- /dev/null
+++ b/comm/mail/components/search/extensions/seznam-cz/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/seznam-cz/manifest.json b/comm/mail/components/search/extensions/seznam-cz/manifest.json
new file mode 100644
index 0000000000..838cbb497f
--- /dev/null
+++ b/comm/mail/components/search/extensions/seznam-cz/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Seznam",
+ "description": "Vyhledávání na Seznam.cz",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "seznam-cz@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Seznam",
+ "search_url": "https://search.seznam.cz/",
+ "search_form": "https://search.seznam.cz/?q={searchTerms}&sourceid=firefox",
+ "search_url_get_params": "q={searchTerms}&sourceid=firefox",
+ "suggest_url": "https://suggest.seznam.cz/fulltext_ff",
+ "suggest_url_get_params": "phrase={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/sslv/favicon.ico b/comm/mail/components/search/extensions/sslv/favicon.ico
new file mode 100644
index 0000000000..c6869229a2
--- /dev/null
+++ b/comm/mail/components/search/extensions/sslv/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/sslv/manifest.json b/comm/mail/components/search/extensions/sslv/manifest.json
new file mode 100644
index 0000000000..3de8483fae
--- /dev/null
+++ b/comm/mail/components/search/extensions/sslv/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "SS.lv",
+ "description": "SS.lv - Lielākais sludinājumu serviss Latvijā",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "sslv@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "SS.lv",
+ "search_url": "https://www.ss.lv/lv/search_result/index.html",
+ "search_form": "https://www.ss.lv",
+ "search_url_post_params": "txt={searchTerms}&from=firefox-plugin"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/tearma/favicon.ico b/comm/mail/components/search/extensions/tearma/favicon.ico
new file mode 100644
index 0000000000..23866521ea
--- /dev/null
+++ b/comm/mail/components/search/extensions/tearma/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/tearma/manifest.json b/comm/mail/components/search/extensions/tearma/manifest.json
new file mode 100644
index 0000000000..ae081f5927
--- /dev/null
+++ b/comm/mail/components/search/extensions/tearma/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "tearma.ie",
+ "description": "tearma.ie: Cuardach Comhtháite",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "tearma@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "tearma.ie",
+ "search_url": "https://www.tearma.ie/Search.aspx",
+ "search_form": "https://www.tearma.ie/Home.aspx",
+ "search_url_get_params": "term={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/tyda-sv-SE/favicon.ico b/comm/mail/components/search/extensions/tyda-sv-SE/favicon.ico
new file mode 100644
index 0000000000..7415cbb160
--- /dev/null
+++ b/comm/mail/components/search/extensions/tyda-sv-SE/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/tyda-sv-SE/manifest.json b/comm/mail/components/search/extensions/tyda-sv-SE/manifest.json
new file mode 100644
index 0000000000..2e13ba2a52
--- /dev/null
+++ b/comm/mail/components/search/extensions/tyda-sv-SE/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Tyda.se",
+ "description": "Tyda.se, lexikon, ordlista och översättning.",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "tyda-sv-SE@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Tyda.se",
+ "search_url": "https://tyda.se",
+ "search_form": "https://tyda.se",
+ "search_url_get_params": "w={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/vatera/favicon.ico b/comm/mail/components/search/extensions/vatera/favicon.ico
new file mode 100644
index 0000000000..5b02f16cb9
--- /dev/null
+++ b/comm/mail/components/search/extensions/vatera/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/vatera/manifest.json b/comm/mail/components/search/extensions/vatera/manifest.json
new file mode 100644
index 0000000000..af690f27e0
--- /dev/null
+++ b/comm/mail/components/search/extensions/vatera/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Vatera.hu",
+ "description": "Keresés a Vatera.hu piacterén",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "vatera@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Vatera.hu",
+ "encoding": "ISO-8859-2",
+ "search_url": "https://www.vatera.hu/listings/index.php",
+ "search_form": "https://www.vatera.hu/",
+ "search_url_get_params": "q={searchTerms}&c=0&td=on"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/NN/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/NN/messages.json
new file mode 100644
index 0000000000..04f669eed9
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/NN/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (nn)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, det frie oppslagsverket"
+ },
+ "searchUrl": {
+ "message": "https://nn.wikipedia.org/wiki/Spesial:Søk"
+ },
+ "searchForm": {
+ "message": "https://nn.wikipedia.org/wiki/Spesial:Søk?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://nn.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/NO/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/NO/messages.json
new file mode 100644
index 0000000000..243806e727
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/NO/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (no)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, den frie encyklopedi"
+ },
+ "searchUrl": {
+ "message": "https://no.wikipedia.org/wiki/Spesial:Søk"
+ },
+ "searchForm": {
+ "message": "https://no.wikipedia.org/wiki/Spesial:Søk?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://no.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/af/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/af/messages.json
new file mode 100644
index 0000000000..9314533645
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/af/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (af)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, die vrye ensiklopedie"
+ },
+ "searchUrl": {
+ "message": "https://af.wikipedia.org/wiki/Spesiaal:Soek"
+ },
+ "searchForm": {
+ "message": "https://af.wikipedia.org/wiki/Spesiaal:Soek?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://af.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/an/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/an/messages.json
new file mode 100644
index 0000000000..ec6fdbf01e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/an/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Biquipedia (an)"
+ },
+ "extensionDescription": {
+ "message": "A enciclopedia Libre"
+ },
+ "searchUrl": {
+ "message": "https://an.wikipedia.org/wiki/Especial:Mirar"
+ },
+ "searchForm": {
+ "message": "https://an.wikipedia.org/wiki/Especial:Mirar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://an.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ar/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ar/messages.json
new file mode 100644
index 0000000000..7b5b0a2cab
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ar/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ويكيبيديا (ar)"
+ },
+ "extensionDescription": {
+ "message": "ويكيبيديا (ar)"
+ },
+ "searchUrl": {
+ "message": "https://ar.wikipedia.org/wiki/خاص:بحث"
+ },
+ "searchForm": {
+ "message": "https://ar.wikipedia.org/wiki/خاص:بحث?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ar.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/as/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/as/messages.json
new file mode 100644
index 0000000000..ecdffd517e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/as/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (as)"
+ },
+ "extensionDescription": {
+ "message": "ৱিকিপিডিয়া, এখন মুক্ত বিশ্বকোষ"
+ },
+ "searchUrl": {
+ "message": "https://as.wikipedia.org/wiki/বিশেষ:সন্ধান"
+ },
+ "searchForm": {
+ "message": "https://as.wikipedia.org/wiki/বিশেষ:সন্ধান?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://as.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ast/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ast/messages.json
new file mode 100644
index 0000000000..c6b9c18c88
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ast/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Uiquipedia (ast)"
+ },
+ "extensionDescription": {
+ "message": "La enciclopedia llibre"
+ },
+ "searchUrl": {
+ "message": "https://ast.wikipedia.org/wiki/Especial:Gueta"
+ },
+ "searchForm": {
+ "message": "https://ast.wikipedia.org/wiki/Especial:Gueta?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ast.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/az/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/az/messages.json
new file mode 100644
index 0000000000..638af3d874
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/az/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipediya (az)"
+ },
+ "extensionDescription": {
+ "message": "Vikipediya, açıq ensiklopediya"
+ },
+ "searchUrl": {
+ "message": "https://az.wikipedia.org/wiki/Xüsusi:Axtar"
+ },
+ "searchForm": {
+ "message": "https://az.wikipedia.org/wiki/Xüsusi:Axtar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://az.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/be-tarask/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/be-tarask/messages.json
new file mode 100644
index 0000000000..6a399c8268
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/be-tarask/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Вікіпэдыя (be-tarask)"
+ },
+ "extensionDescription": {
+ "message": "Вікіпэдыя, вольная энцыкляпэдыя"
+ },
+ "searchUrl": {
+ "message": "https://be-tarask.wikipedia.org/wiki/Спэцыяльныя:Пошук"
+ },
+ "searchForm": {
+ "message": "https://be-tarask.wikipedia.org/wiki/Спэцыяльныя:Пошук?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://be-tarask.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/be/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/be/messages.json
new file mode 100644
index 0000000000..651ecfa2aa
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/be/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Вікіпедыя (be)"
+ },
+ "extensionDescription": {
+ "message": "Вікіпедыя, свабодная энцыклапедыя"
+ },
+ "searchUrl": {
+ "message": "https://be.wikipedia.org/wiki/Адмысловае:Search"
+ },
+ "searchForm": {
+ "message": "https://be.wikipedia.org/wiki/Адмысловае:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://be.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/bg/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/bg/messages.json
new file mode 100644
index 0000000000..4061aa8e94
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/bg/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Уикипедия (bg)"
+ },
+ "extensionDescription": {
+ "message": "Уикипедия, свободната енциклоподия"
+ },
+ "searchUrl": {
+ "message": "https://bg.wikipedia.org/wiki/Специални:Търсене"
+ },
+ "searchForm": {
+ "message": "https://bg.wikipedia.org/wiki/Специални:Търсене?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://bg.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/bn/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/bn/messages.json
new file mode 100644
index 0000000000..c41a811f81
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/bn/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "উইকিপিডিয়া (bn)"
+ },
+ "extensionDescription": {
+ "message": "উইকিপিডিয়া, মুক্ত বিশ্বকোষ"
+ },
+ "searchUrl": {
+ "message": "https://bn.wikipedia.org/wiki/বিশেষ:Search"
+ },
+ "searchForm": {
+ "message": "https://bn.wikipedia.org/wiki/বিশেষ:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://bn.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/br/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/br/messages.json
new file mode 100644
index 0000000000..7f59a6dd26
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/br/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (br)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, an holloueziadur digor"
+ },
+ "searchUrl": {
+ "message": "https://br.wikipedia.org/wiki/Dibar:Klask"
+ },
+ "searchForm": {
+ "message": "https://br.wikipedia.org/wiki/Dibar:Klask?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://br.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/bs/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/bs/messages.json
new file mode 100644
index 0000000000..06e27829f3
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/bs/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (bs)"
+ },
+ "extensionDescription": {
+ "message": "Slobodna enciklopedija"
+ },
+ "searchUrl": {
+ "message": "https://bs.wikipedia.org/wiki/Posebno:Pretraga"
+ },
+ "searchForm": {
+ "message": "https://bs.wikipedia.org/wiki/Posebno:Pretraga?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://bs.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ca/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ca/messages.json
new file mode 100644
index 0000000000..22ab489096
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ca/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Viquipèdia (ca)"
+ },
+ "extensionDescription": {
+ "message": "L'enciclopèdia lliure"
+ },
+ "searchUrl": {
+ "message": "https://ca.wikipedia.org/wiki/Especial:Cerca"
+ },
+ "searchForm": {
+ "message": "https://ca.wikipedia.org/wiki/Especial:Cerca?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ca.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/crh/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/crh/messages.json
new file mode 100644
index 0000000000..1e1a76452c
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/crh/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipediya (crh)"
+ },
+ "extensionDescription": {
+ "message": "Vikipediya, Azat Entsiklopediya"
+ },
+ "searchUrl": {
+ "message": "https://crh.wikipedia.org/wiki/Mahsus:Search"
+ },
+ "searchForm": {
+ "message": "https://crh.wikipedia.org/wiki/Mahsus:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://crh.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/cy/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/cy/messages.json
new file mode 100644
index 0000000000..62915e52a5
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/cy/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wicipedia (cy)"
+ },
+ "extensionDescription": {
+ "message": "Wicipedia, Y Gwyddioniadur Rhydd"
+ },
+ "searchUrl": {
+ "message": "https://cy.wikipedia.org/wiki/Arbennig:Search"
+ },
+ "searchForm": {
+ "message": "https://cy.wikipedia.org/wiki/Arbennig:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://cy.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/cz/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/cz/messages.json
new file mode 100644
index 0000000000..53b17f885a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/cz/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedie (cs)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, svobodná encyclopedie"
+ },
+ "searchUrl": {
+ "message": "https://cs.wikipedia.org/wiki/Speciální:Hledání"
+ },
+ "searchForm": {
+ "message": "https://cs.wikipedia.org/wiki/Speciální:Hledání?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://cs.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/da/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/da/messages.json
new file mode 100644
index 0000000000..5deb79d125
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/da/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (da)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, den frie encyklopædi"
+ },
+ "searchUrl": {
+ "message": "https://da.wikipedia.org/wiki/Speciel:Søgning"
+ },
+ "searchForm": {
+ "message": "https://da.wikipedia.org/wiki/Speciel:Søgning?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://da.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/de/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/de/messages.json
new file mode 100644
index 0000000000..c4d2dd558c
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/de/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (de)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, die freie Enzyklopädie"
+ },
+ "searchUrl": {
+ "message": "https://de.wikipedia.org/wiki/Spezial:Suche"
+ },
+ "searchForm": {
+ "message": "https://de.wikipedia.org/wiki/Spezial:Suche?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://de.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/dsb/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/dsb/messages.json
new file mode 100644
index 0000000000..e8cb687084
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/dsb/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedija (dsb)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedija, lichotna encyklopedija"
+ },
+ "searchUrl": {
+ "message": "https://dsb.wikipedia.org/wiki/Specialne:Pytaś"
+ },
+ "searchForm": {
+ "message": "https://dsb.wikipedia.org/wiki/Specialne:Pytaś?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://dsb.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/el/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/el/messages.json
new file mode 100644
index 0000000000..5b8c494f98
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/el/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (el)"
+ },
+ "extensionDescription": {
+ "message": "Βικιπαίδεια, η ελεύθερη εγκυκλοπαίδεια"
+ },
+ "searchUrl": {
+ "message": "https://el.wikipedia.org/wiki/Ειδικό:Αναζήτηση"
+ },
+ "searchForm": {
+ "message": "https://el.wikipedia.org/wiki/Ειδικό:Αναζήτηση?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://el.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/en/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/en/messages.json
new file mode 100644
index 0000000000..56c69e5c32
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/en/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (en)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, the Free Encyclopedia"
+ },
+ "searchUrl": {
+ "message": "https://en.wikipedia.org/wiki/Special:Search"
+ },
+ "searchForm": {
+ "message": "https://en.wikipedia.org/wiki/Special:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://en.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/eo/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/eo/messages.json
new file mode 100644
index 0000000000..66b3212e5b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/eo/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipedio (eo)"
+ },
+ "extensionDescription": {
+ "message": "Vikipedio, la libera enciklopedio"
+ },
+ "searchUrl": {
+ "message": "https://eo.wikipedia.org/wiki/Specialaĵo:Serĉi"
+ },
+ "searchForm": {
+ "message": "https://eo.wikipedia.org/wiki/Specialaĵo:Serĉi?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://eo.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/es/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/es/messages.json
new file mode 100644
index 0000000000..ff797d0834
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/es/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (es)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, la enciclopedia libre"
+ },
+ "searchUrl": {
+ "message": "https://es.wikipedia.org/wiki/Especial:Buscar"
+ },
+ "searchForm": {
+ "message": "https://es.wikipedia.org/wiki/Especial:Buscar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://es.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/et/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/et/messages.json
new file mode 100644
index 0000000000..25cf22893b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/et/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipeedia (et)"
+ },
+ "extensionDescription": {
+ "message": "Vikipeedia, vaba entsüklopeedia"
+ },
+ "searchUrl": {
+ "message": "https://et.wikipedia.org/wiki/Eri:Otsimine"
+ },
+ "searchForm": {
+ "message": "https://et.wikipedia.org/wiki/Eri:Otsimine?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://et.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/eu/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/eu/messages.json
new file mode 100644
index 0000000000..eea1c365d8
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/eu/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (eu)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, entziklopedia askea"
+ },
+ "searchUrl": {
+ "message": "https://eu.wikipedia.org/wiki/Berezi:Bilatu"
+ },
+ "searchForm": {
+ "message": "https://eu.wikipedia.org/wiki/Berezi:Bilatu?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://eu.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/fa/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/fa/messages.json
new file mode 100644
index 0000000000..a48eca478f
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/fa/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ویکی‌پدیا (fa)"
+ },
+ "extensionDescription": {
+ "message": "ویکی‌پدیا، دانشنامهٔ آزاد"
+ },
+ "searchUrl": {
+ "message": "https://fa.wikipedia.org/wiki/ویژه:جستجو"
+ },
+ "searchForm": {
+ "message": "https://fa.wikipedia.org/wiki/ویژه:جستجو?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://fa.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/fi/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/fi/messages.json
new file mode 100644
index 0000000000..696a953ca1
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/fi/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (fi)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia (fi), vapaa tietosanakirja"
+ },
+ "searchUrl": {
+ "message": "https://fi.wikipedia.org/wiki/Toiminnot:Haku"
+ },
+ "searchForm": {
+ "message": "https://fi.wikipedia.org/wiki/Toiminnot:Haku?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://fi.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/fr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/fr/messages.json
new file mode 100644
index 0000000000..80612181ad
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/fr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipédia (fr)"
+ },
+ "extensionDescription": {
+ "message": "Wikipédia, l'encyclopédie libre"
+ },
+ "searchUrl": {
+ "message": "https://fr.wikipedia.org/wiki/Spécial:Recherche"
+ },
+ "searchForm": {
+ "message": "https://fr.wikipedia.org/wiki/Spécial:Recherche?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://fr.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/fy-NL/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/fy-NL/messages.json
new file mode 100644
index 0000000000..4767aad436
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/fy-NL/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedy (fy)"
+ },
+ "extensionDescription": {
+ "message": "De fergese ensyklopedy"
+ },
+ "searchUrl": {
+ "message": "https://fy.wikipedia.org/wiki/Wiki:Sykje"
+ },
+ "searchForm": {
+ "message": "https://fy.wikipedia.org/wiki/Wiki:Sykje?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://fy.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ga-IE/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ga-IE/messages.json
new file mode 100644
index 0000000000..a9330bb066
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ga-IE/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vicipéid (ga)"
+ },
+ "extensionDescription": {
+ "message": "Vicipéid, an Chiclipéid Shaor"
+ },
+ "searchUrl": {
+ "message": "https://ga.wikipedia.org/wiki/Speisialta:Search"
+ },
+ "searchForm": {
+ "message": "https://ga.wikipedia.org/wiki/Speisialta:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ga.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/gd/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/gd/messages.json
new file mode 100644
index 0000000000..3b389e12c8
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/gd/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Uicipeid (gd)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, An leabhar mòr-eòlais"
+ },
+ "searchUrl": {
+ "message": "https://gd.wikipedia.org/wiki/Sònraichte:Search"
+ },
+ "searchForm": {
+ "message": "https://gd.wikipedia.org/wiki/Sònraichte:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://gd.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/gl/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/gl/messages.json
new file mode 100644
index 0000000000..18cc3d73f6
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/gl/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (gl)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, a enciclopedia libre"
+ },
+ "searchUrl": {
+ "message": "https://gl.wikipedia.org/wiki/Especial:Procurar"
+ },
+ "searchForm": {
+ "message": "https://gl.wikipedia.org/wiki/Especial:Procurar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://gl.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/gn/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/gn/messages.json
new file mode 100644
index 0000000000..e914aa66bb
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/gn/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipetã (gn)"
+ },
+ "extensionDescription": {
+ "message": "Vikipetã, opaite tembikuaa hekosãsóva renda"
+ },
+ "searchUrl": {
+ "message": "https://gn.wikipedia.org/wiki/Mba'echĩchĩ:Buscar"
+ },
+ "searchForm": {
+ "message": "https://gn.wikipedia.org/wiki/Mba'echĩchĩ:Buscar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://gn.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/gu/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/gu/messages.json
new file mode 100644
index 0000000000..f268ccb6af
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/gu/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "વિકિપીડિયા (gu)"
+ },
+ "extensionDescription": {
+ "message": "વીકીપીડિયા, મુક્ત એનસાયક્લોપીડિયા"
+ },
+ "searchUrl": {
+ "message": "https://gu.wikipedia.org/wiki/વિશેષ:શોધ"
+ },
+ "searchForm": {
+ "message": "https://gu.wikipedia.org/wiki/વિશેષ:શોધ?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://gu.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/he/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/he/messages.json
new file mode 100644
index 0000000000..f8a548f72c
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/he/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ויקיפדיה"
+ },
+ "extensionDescription": {
+ "message": "ויקיפדיה"
+ },
+ "searchUrl": {
+ "message": "https://he.wikipedia.org/wiki/מיוחד:חיפוש"
+ },
+ "searchForm": {
+ "message": "https://he.wikipedia.org/wiki/מיוחד:חיפוש?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://he.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/hi/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/hi/messages.json
new file mode 100644
index 0000000000..7db4ed195f
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/hi/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "विकिपीडिया (hi)"
+ },
+ "extensionDescription": {
+ "message": "विकिपीडिया (हिन्दी)"
+ },
+ "searchUrl": {
+ "message": "https://hi.wikipedia.org/wiki/विशेष:खोज"
+ },
+ "searchForm": {
+ "message": "https://hi.wikipedia.org/wiki/विशेष:खोज?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://hi.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/hr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/hr/messages.json
new file mode 100644
index 0000000000..f02f694c9a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/hr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedija (hr)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedija, slobodna enciklopedija"
+ },
+ "searchUrl": {
+ "message": "https://hr.wikipedia.org/wiki/Posebno:Traži"
+ },
+ "searchForm": {
+ "message": "https://hr.wikipedia.org/wiki/Posebno:Traži?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://hr.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/hsb/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/hsb/messages.json
new file mode 100644
index 0000000000..a459ffbe46
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/hsb/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedija (hsb)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedija, swobodna encyklopedija"
+ },
+ "searchUrl": {
+ "message": "https://hsb.wikipedia.org/wiki/Specialnje:Pytać"
+ },
+ "searchForm": {
+ "message": "https://hsb.wikipedia.org/wiki/Specialnje:Pytać?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://hsb.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/hu/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/hu/messages.json
new file mode 100644
index 0000000000..37e725d687
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/hu/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipédia (hu)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, a szabad enciklopédia"
+ },
+ "searchUrl": {
+ "message": "https://hu.wikipedia.org/wiki/Speciális:Keresés"
+ },
+ "searchForm": {
+ "message": "https://hu.wikipedia.org/wiki/Speciális:Keresés?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://hu.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/hy/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/hy/messages.json
new file mode 100644
index 0000000000..a6d527cc4e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/hy/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (hy)"
+ },
+ "extensionDescription": {
+ "message": "Վիքիփեդիա՝ ազատ հանրագիտարան"
+ },
+ "searchUrl": {
+ "message": "https://hy.wikipedia.org/wiki/Սպասարկող:Որոնել"
+ },
+ "searchForm": {
+ "message": "https://hy.wikipedia.org/wiki/Սպասարկող:Որոնել?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://hy.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ia/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ia/messages.json
new file mode 100644
index 0000000000..fbca585c30
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ia/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (ia)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, le encyclopedia libere"
+ },
+ "searchUrl": {
+ "message": "https://ia.wikipedia.org/wiki/Special:Recerca"
+ },
+ "searchForm": {
+ "message": "https://ia.wikipedia.org/wiki/Special:Recerca?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ia.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/id/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/id/messages.json
new file mode 100644
index 0000000000..608dad05b7
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/id/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (id)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, ensiklopedia bebas"
+ },
+ "searchUrl": {
+ "message": "https://id.wikipedia.org/wiki/Istimewa:Pencarian"
+ },
+ "searchForm": {
+ "message": "https://id.wikipedia.org/wiki/Istimewa:Pencarian?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://id.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/is/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/is/messages.json
new file mode 100644
index 0000000000..f33e0dd015
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/is/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (is)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, the free encyclopedia"
+ },
+ "searchUrl": {
+ "message": "https://is.wikipedia.org/wiki/Kerfissíða:Leit"
+ },
+ "searchForm": {
+ "message": "https://is.wikipedia.org/wiki/Kerfissíða:Leit?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://is.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/it/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/it/messages.json
new file mode 100644
index 0000000000..27cff3c07b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/it/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (it)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, l'enciclopedia libera"
+ },
+ "searchUrl": {
+ "message": "https://it.wikipedia.org/wiki/Speciale:Ricerca"
+ },
+ "searchForm": {
+ "message": "https://it.wikipedia.org/wiki/Speciale:Ricerca?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://it.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ja/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ja/messages.json
new file mode 100644
index 0000000000..84df085d54
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ja/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (ja)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia - フリー百科事典"
+ },
+ "searchUrl": {
+ "message": "https://ja.wikipedia.org/wiki/特別:検索"
+ },
+ "searchForm": {
+ "message": "https://ja.wikipedia.org/wiki/特別:検索?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ja.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ka/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ka/messages.json
new file mode 100644
index 0000000000..efe876cded
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ka/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ვიკიპედია (ka)"
+ },
+ "extensionDescription": {
+ "message": "ვიკიპედია, თავისუფალი ენციკლოპედია"
+ },
+ "searchUrl": {
+ "message": "https://ka.wikipedia.org/wiki/სპეციალური:ძიება"
+ },
+ "searchForm": {
+ "message": "https://ka.wikipedia.org/wiki/სპეციალური:ძიება?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ka.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/kab/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/kab/messages.json
new file mode 100644
index 0000000000..375b69d098
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/kab/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (kab)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, tasanayt tilellit"
+ },
+ "searchUrl": {
+ "message": "https://kab.wikipedia.org/wiki/Uslig:Search"
+ },
+ "searchForm": {
+ "message": "https://kab.wikipedia.org/wiki/Uslig:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://kab.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/kk/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/kk/messages.json
new file mode 100644
index 0000000000..ae3ce7cc1a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/kk/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Уикипедия (kk)"
+ },
+ "extensionDescription": {
+ "message": "Уикипедия (kk)"
+ },
+ "searchUrl": {
+ "message": "https://kk.wikipedia.org/wiki/Арнайы:Іздеу"
+ },
+ "searchForm": {
+ "message": "https://kk.wikipedia.org/wiki/Арнайы:Іздеу?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://kk.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/km/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/km/messages.json
new file mode 100644
index 0000000000..ca51223b15
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/km/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "វីគីភីឌា (km)"
+ },
+ "extensionDescription": {
+ "message": "វីគីភីឌា សព្វ​វចនា​ធិប្បាយ​សេរី"
+ },
+ "searchUrl": {
+ "message": "https://km.wikipedia.org/wiki/ពិសេស:ស្វែងរក"
+ },
+ "searchForm": {
+ "message": "https://km.wikipedia.org/wiki/ពិសេស:ស្វែងរក?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://km.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/kn/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/kn/messages.json
new file mode 100644
index 0000000000..20958768cb
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/kn/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (kn)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, the free encyclopedia"
+ },
+ "searchUrl": {
+ "message": "https://kn.wikipedia.org/wiki/ವಿಶೇಷ:Search"
+ },
+ "searchForm": {
+ "message": "https://kn.wikipedia.org/wiki/ವಿಶೇಷ:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://kn.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/kr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/kr/messages.json
new file mode 100644
index 0000000000..9504c3ffb9
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/kr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "위키백과 (ko)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, the free encyclopedia"
+ },
+ "searchUrl": {
+ "message": "https://ko.wikipedia.org/wiki/특수기능:찾기"
+ },
+ "searchForm": {
+ "message": "https://ko.wikipedia.org/wiki/특수기능:찾기?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ko.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/lij/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/lij/messages.json
new file mode 100644
index 0000000000..83a20b3776
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/lij/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (lij)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, l'enciclopedia libera"
+ },
+ "searchUrl": {
+ "message": "https://lij.wikipedia.org/wiki/Speçiale:Riçerca"
+ },
+ "searchForm": {
+ "message": "https://lij.wikipedia.org/wiki/Speçiale:Riçerca?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://lij.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/lo/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/lo/messages.json
new file mode 100644
index 0000000000..30f9b0ff26
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/lo/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ວິກິພີເດຍ (lo)"
+ },
+ "extensionDescription": {
+ "message": "ວິກິພີເດຍ, ສາລານຸກົມເສລີ"
+ },
+ "searchUrl": {
+ "message": "https://lo.wikipedia.org/wiki/ພິເສດ:ຊອກຫາ"
+ },
+ "searchForm": {
+ "message": "https://lo.wikipedia.org/wiki/ພິເສດ:ຊອກຫາ?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://lo.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/lt/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/lt/messages.json
new file mode 100644
index 0000000000..93ce604144
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/lt/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (lt)"
+ },
+ "extensionDescription": {
+ "message": "Vikipedija, laisvoji enciklopedija"
+ },
+ "searchUrl": {
+ "message": "https://lt.wikipedia.org/wiki/Specialus:Paieška"
+ },
+ "searchForm": {
+ "message": "https://lt.wikipedia.org/wiki/Specialus:Paieška?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://lt.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ltg/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ltg/messages.json
new file mode 100644
index 0000000000..0456f31dba
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ltg/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipedeja (ltg)"
+ },
+ "extensionDescription": {
+ "message": "Vikipēdija, breivuo eņciklopedeja"
+ },
+ "searchUrl": {
+ "message": "https://ltg.wikipedia.org/wiki/Seviškuo:Search"
+ },
+ "searchForm": {
+ "message": "https://ltg.wikipedia.org/wiki/Seviškuo:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ltg.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/lv/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/lv/messages.json
new file mode 100644
index 0000000000..90b542f4b4
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/lv/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipēdija"
+ },
+ "extensionDescription": {
+ "message": "Vikipēdija, brīvā enciklopēdija"
+ },
+ "searchUrl": {
+ "message": "https://lv.wikipedia.org/wiki/Special:Search"
+ },
+ "searchForm": {
+ "message": "https://lv.wikipedia.org/wiki/Special:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://lv.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/mk/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/mk/messages.json
new file mode 100644
index 0000000000..ae826197ff
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/mk/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Википедија (mk)"
+ },
+ "extensionDescription": {
+ "message": "Википедија, слободната енциклопедија"
+ },
+ "searchUrl": {
+ "message": "https://mk.wikipedia.org/wiki/Специјална:Барај"
+ },
+ "searchForm": {
+ "message": "https://mk.wikipedia.org/wiki/Специјална:Барај?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://mk.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ml/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ml/messages.json
new file mode 100644
index 0000000000..9f4b397904
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ml/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "വിക്കിപീഡിയ (ml)"
+ },
+ "extensionDescription": {
+ "message": "വിക്കിപീഡിയ, സ്വതന്ത്ര സര്‍വ്വവിജ്ഞാനകോശം "
+ },
+ "searchUrl": {
+ "message": "https://ml.wikipedia.org/wiki/പ്രത്യേകം:അന്വേഷണം"
+ },
+ "searchForm": {
+ "message": "https://ml.wikipedia.org/wiki/പ്രത്യേകം:അന്വേഷണം?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ml.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/mr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/mr/messages.json
new file mode 100644
index 0000000000..42bd8e2426
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/mr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "विकिपीडिया (mr)"
+ },
+ "extensionDescription": {
+ "message": "विकिपीडिया, मोफत माहितीकोष"
+ },
+ "searchUrl": {
+ "message": "https://mr.wikipedia.org/wiki/विशेष:शोधा"
+ },
+ "searchForm": {
+ "message": "https://mr.wikipedia.org/wiki/विशेष:शोधा?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://mr.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ms/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ms/messages.json
new file mode 100644
index 0000000000..e804b1796a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ms/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (ms)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, ensiklopedia bebas"
+ },
+ "searchUrl": {
+ "message": "https://ms.wikipedia.org/wiki/Khas:Gelintar"
+ },
+ "searchForm": {
+ "message": "https://ms.wikipedia.org/wiki/Khas:Gelintar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ms.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/my/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/my/messages.json
new file mode 100644
index 0000000000..e0fda1a466
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/my/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (my)"
+ },
+ "extensionDescription": {
+ "message": "အခမဲ့လွတ်လပ်စွယ်စုံကျမ်း"
+ },
+ "searchUrl": {
+ "message": "https://my.wikipedia.org/wiki/Special:Search"
+ },
+ "searchForm": {
+ "message": "https://my.wikipedia.org/wiki/Special:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://my.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ne/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ne/messages.json
new file mode 100644
index 0000000000..1d549a943e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ne/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "विकिपीडिया (ne)"
+ },
+ "extensionDescription": {
+ "message": "विकिपिडिया एक स्वतन्त्र विश्वकोष"
+ },
+ "searchUrl": {
+ "message": "https://ne.wikipedia.org/wiki/विशेष:Search"
+ },
+ "searchForm": {
+ "message": "https://ne.wikipedia.org/wiki/विशेष:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ne.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/nl/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/nl/messages.json
new file mode 100644
index 0000000000..2dda1f6deb
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/nl/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (nl)"
+ },
+ "extensionDescription": {
+ "message": "De vrije encyclopedie"
+ },
+ "searchUrl": {
+ "message": "https://nl.wikipedia.org/wiki/Speciaal:Zoeken"
+ },
+ "searchForm": {
+ "message": "https://nl.wikipedia.org/wiki/Speciaal:Zoeken?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://nl.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/oc/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/oc/messages.json
new file mode 100644
index 0000000000..b341752c63
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/oc/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipèdia (oc)"
+ },
+ "extensionDescription": {
+ "message": "Wikipèdia, l'enciclopèdia liura"
+ },
+ "searchUrl": {
+ "message": "https://oc.wikipedia.org/wiki/Especial:Recèrca"
+ },
+ "searchForm": {
+ "message": "https://oc.wikipedia.org/wiki/Especial:Recèrca?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://oc.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/or/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/or/messages.json
new file mode 100644
index 0000000000..b07957a4b7
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/or/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (or)"
+ },
+ "extensionDescription": {
+ "message": "ୱିକିପିଡ଼ିଆ (ଓଡ଼ିଆ)"
+ },
+ "searchUrl": {
+ "message": "https://or.wikipedia.org/wiki/ବିଶେଷ:ଖୋଜନ୍ତୁ"
+ },
+ "searchForm": {
+ "message": "https://or.wikipedia.org/wiki/ବିଶେଷ:ଖୋଜନ୍ତୁ?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://or.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/pa/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/pa/messages.json
new file mode 100644
index 0000000000..07804ca265
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/pa/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (pa)"
+ },
+ "extensionDescription": {
+ "message": "ਵਿਕਿਪੀਡਿਆ, ਮੁਫ਼ਤ/ਮੁਕਤ ਸ਼ਬਦਕੋਸ਼"
+ },
+ "searchUrl": {
+ "message": "https://pa.wikipedia.org/wiki/ਖ਼ਾਸ:ਖੋਜੋ"
+ },
+ "searchForm": {
+ "message": "https://pa.wikipedia.org/wiki/ਖ਼ਾਸ:ਖੋਜੋ?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://pa.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/pl/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/pl/messages.json
new file mode 100644
index 0000000000..3e7704b21a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/pl/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (pl)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, wolna encyklopedia"
+ },
+ "searchUrl": {
+ "message": "https://pl.wikipedia.org/wiki/Specjalna:Szukaj"
+ },
+ "searchForm": {
+ "message": "https://pl.wikipedia.org/wiki/Specjalna:Szukaj?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://pl.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/pt/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/pt/messages.json
new file mode 100644
index 0000000000..8e9bc20c77
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/pt/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (pt)"
+ },
+ "extensionDescription": {
+ "message": "Wikipédia, a enciclopédia livre"
+ },
+ "searchUrl": {
+ "message": "https://pt.wikipedia.org/wiki/Especial:Pesquisar"
+ },
+ "searchForm": {
+ "message": "https://pt.wikipedia.org/wiki/Especial:Pesquisar?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://pt.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/rm/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/rm/messages.json
new file mode 100644
index 0000000000..889657ad7e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/rm/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (rm)"
+ },
+ "extensionDescription": {
+ "message": "Vichipedia, l'enciclopedia libra"
+ },
+ "searchUrl": {
+ "message": "https://rm.wikipedia.org/wiki/Spezial:Search"
+ },
+ "searchForm": {
+ "message": "https://rm.wikipedia.org/wiki/Spezial:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://rm.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ro/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ro/messages.json
new file mode 100644
index 0000000000..8aac1e2244
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ro/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (ro)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, enciclopedia liberă"
+ },
+ "searchUrl": {
+ "message": "https://ro.wikipedia.org/wiki/Special:Căutare"
+ },
+ "searchForm": {
+ "message": "https://ro.wikipedia.org/wiki/Special:Căutare?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ro.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ru/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ru/messages.json
new file mode 100644
index 0000000000..49243790a6
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ru/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Википедия (ru)"
+ },
+ "extensionDescription": {
+ "message": "Википедия, свободная энциклопедия"
+ },
+ "searchUrl": {
+ "message": "https://ru.wikipedia.org/wiki/Служебная:Поиск"
+ },
+ "searchForm": {
+ "message": "https://ru.wikipedia.org/wiki/Служебная:Поиск?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ru.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/si/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/si/messages.json
new file mode 100644
index 0000000000..dea75a5308
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/si/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (si)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, the free encyclopedia"
+ },
+ "searchUrl": {
+ "message": "https://si.wikipedia.org/wiki/විශේෂ:ගවේෂණය"
+ },
+ "searchForm": {
+ "message": "https://si.wikipedia.org/wiki/විශේෂ:ගවේෂණය?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://si.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/sk/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/sk/messages.json
new file mode 100644
index 0000000000..3cfa642df7
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/sk/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipédia (sk)"
+ },
+ "extensionDescription": {
+ "message": "Wikipédia, slobodná a otvorená encyklopédia"
+ },
+ "searchUrl": {
+ "message": "https://sk.wikipedia.org/wiki/Špeciálne:Hľadanie"
+ },
+ "searchForm": {
+ "message": "https://sk.wikipedia.org/wiki/Špeciálne:Hľadanie?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://sk.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/sl/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/sl/messages.json
new file mode 100644
index 0000000000..0e9b8433a4
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/sl/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedija (sl)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedija, prosta enciklopedija"
+ },
+ "searchUrl": {
+ "message": "https://sl.wikipedia.org/wiki/Posebno:Iskanje"
+ },
+ "searchForm": {
+ "message": "https://sl.wikipedia.org/wiki/Posebno:Iskanje?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://sl.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/sq/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/sq/messages.json
new file mode 100644
index 0000000000..6d6240b54f
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/sq/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (sq)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, enciklopedia e lirë"
+ },
+ "searchUrl": {
+ "message": "https://sq.wikipedia.org/wiki/Speciale:Kërkim"
+ },
+ "searchForm": {
+ "message": "https://sq.wikipedia.org/wiki/Speciale:Kërkim?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://sq.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/sr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/sr/messages.json
new file mode 100644
index 0000000000..cf1558ffe9
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/sr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Википедија (sr)"
+ },
+ "extensionDescription": {
+ "message": "Претрага Википедије на српском језику"
+ },
+ "searchUrl": {
+ "message": "https://sr.wikipedia.org/wiki/Посебно:Претражи"
+ },
+ "searchForm": {
+ "message": "https://sr.wikipedia.org/wiki/Посебно:Претражи?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://sr.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/sv-SE/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/sv-SE/messages.json
new file mode 100644
index 0000000000..4912d25364
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/sv-SE/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (sv)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, den fria encyklopedin"
+ },
+ "searchUrl": {
+ "message": "https://sv.wikipedia.org/wiki/Special:Sök"
+ },
+ "searchForm": {
+ "message": "https://sv.wikipedia.org/wiki/Special:Sök?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://sv.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ta/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ta/messages.json
new file mode 100644
index 0000000000..b6de753a1f
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ta/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "விக்கிப்பீடியா (ta)"
+ },
+ "extensionDescription": {
+ "message": "விக்கிப்பீடியா (ta)"
+ },
+ "searchUrl": {
+ "message": "https://ta.wikipedia.org/wiki/சிறப்பு:Search"
+ },
+ "searchForm": {
+ "message": "https://ta.wikipedia.org/wiki/சிறப்பு:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ta.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/te/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/te/messages.json
new file mode 100644
index 0000000000..f9352844d1
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/te/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "వికీపీడియా (te)"
+ },
+ "extensionDescription": {
+ "message": "వికీపీడియా (te)"
+ },
+ "searchUrl": {
+ "message": "https://te.wikipedia.org/wiki/ప్రత్యేక:అన్వేషణ"
+ },
+ "searchForm": {
+ "message": "https://te.wikipedia.org/wiki/ప్రత్యేక:అన్వేషణ?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://te.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/th/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/th/messages.json
new file mode 100644
index 0000000000..0176b84b7b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/th/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "วิกิพีเดีย"
+ },
+ "extensionDescription": {
+ "message": "วิกิพีเดีย สารานุกรมเสรี"
+ },
+ "searchUrl": {
+ "message": "https://th.wikipedia.org/wiki/พิเศษ:ค้นหา"
+ },
+ "searchForm": {
+ "message": "https://th.wikipedia.org/wiki/พิเศษ:ค้นหา?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://th.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/tl/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/tl/messages.json
new file mode 100644
index 0000000000..a5faae07cd
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/tl/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (tl)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, ang malayang ensiklopedya"
+ },
+ "searchUrl": {
+ "message": "https://tl.wikipedia.org/wiki/Natatangi:Maghanap"
+ },
+ "searchForm": {
+ "message": "https://tl.wikipedia.org/wiki/Natatangi:Maghanap?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://tl.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/tr/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/tr/messages.json
new file mode 100644
index 0000000000..7551d615f0
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/tr/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (tr)"
+ },
+ "extensionDescription": {
+ "message": "Vikipedi, özgür ansiklopedi"
+ },
+ "searchUrl": {
+ "message": "https://tr.wikipedia.org/wiki/Özel:Ara"
+ },
+ "searchForm": {
+ "message": "https://tr.wikipedia.org/wiki/Özel:Ara?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://tr.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/uk/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/uk/messages.json
new file mode 100644
index 0000000000..c81490394b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/uk/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Вікіпедія (uk)"
+ },
+ "extensionDescription": {
+ "message": "Вікіпедія, вільна енциклопедія"
+ },
+ "searchUrl": {
+ "message": "https://uk.wikipedia.org/wiki/Спеціальна:Пошук"
+ },
+ "searchForm": {
+ "message": "https://uk.wikipedia.org/wiki/Спеціальна:Пошук?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://uk.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/ur/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/ur/messages.json
new file mode 100644
index 0000000000..f27436e3a4
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/ur/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "ویکیپیڈیا (ur)"
+ },
+ "extensionDescription": {
+ "message": "ویکیپیڈیا آزاد دائرۃ المعارف"
+ },
+ "searchUrl": {
+ "message": "https://ur.wikipedia.org/wiki/خاص:تلاش"
+ },
+ "searchForm": {
+ "message": "https://ur.wikipedia.org/wiki/خاص:تلاش?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://ur.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/uz/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/uz/messages.json
new file mode 100644
index 0000000000..eff11c31e2
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/uz/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Vikipediya (uz)"
+ },
+ "extensionDescription": {
+ "message": "Vikipediya, ochiq ensiklopediya"
+ },
+ "searchUrl": {
+ "message": "https://uz.wikipedia.org/wiki/Maxsus:Search"
+ },
+ "searchForm": {
+ "message": "https://uz.wikipedia.org/wiki/Maxsus:Search?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://uz.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/vi/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/vi/messages.json
new file mode 100644
index 0000000000..cfab54090e
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/vi/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (vi)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, bách khoa toàn thư mở"
+ },
+ "searchUrl": {
+ "message": "https://vi.wikipedia.org/wiki/Đặc_biệt:Tìm_kiếm"
+ },
+ "searchForm": {
+ "message": "https://vi.wikipedia.org/wiki/Đặc_biệt:Tìm_kiếm?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://vi.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/wo/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/wo/messages.json
new file mode 100644
index 0000000000..43f133c54b
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/wo/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (wo)"
+ },
+ "extensionDescription": {
+ "message": "Wikipedia, Jimbulang bu Ubbeeku bi"
+ },
+ "searchUrl": {
+ "message": "https://wo.wikipedia.org/wiki/Jagleel:Ceet"
+ },
+ "searchForm": {
+ "message": "https://wo.wikipedia.org/wiki/Jagleel:Ceet?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://wo.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/zh-CN/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/zh-CN/messages.json
new file mode 100644
index 0000000000..840677e3dd
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/zh-CN/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "维基百科"
+ },
+ "extensionDescription": {
+ "message": "维基百科,自由的百科全书"
+ },
+ "searchUrl": {
+ "message": "https://zh.wikipedia.org/wiki/Special:搜索"
+ },
+ "searchForm": {
+ "message": "https://zh.wikipedia.org/wiki/Special:搜索?search={searchTerms}&sourceid=Mozilla-search"
+ },
+ "suggestUrl": {
+ "message": "https://zh.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/_locales/zh-TW/messages.json b/comm/mail/components/search/extensions/wikipedia/_locales/zh-TW/messages.json
new file mode 100644
index 0000000000..60151f4265
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/_locales/zh-TW/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikipedia (zh)"
+ },
+ "extensionDescription": {
+ "message": "維基百科,自由的百科全書"
+ },
+ "searchUrl": {
+ "message": "https://zh.wikipedia.org/wiki/Special:搜索"
+ },
+ "searchForm": {
+ "message": "https://zh.wikipedia.org/wiki/Special:搜索?search={searchTerms}&sourceid=Mozilla-search&variant=zh-tw"
+ },
+ "suggestUrl": {
+ "message": "https://zh.wikipedia.org/w/api.php?action=opensearch&search={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}&sourceid=Mozilla-search&variant=zh-tw"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wikipedia/favicon.ico b/comm/mail/components/search/extensions/wikipedia/favicon.ico
new file mode 100644
index 0000000000..4314071e24
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/wikipedia/manifest.json b/comm/mail/components/search/extensions/wikipedia/manifest.json
new file mode 100644
index 0000000000..f26061aadb
--- /dev/null
+++ b/comm/mail/components/search/extensions/wikipedia/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "wikipedia@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "en",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "suggest_url": "__MSG_suggestUrl__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/wiktionary/_locales/oc/messages.json b/comm/mail/components/search/extensions/wiktionary/_locales/oc/messages.json
new file mode 100644
index 0000000000..612ef8c44a
--- /dev/null
+++ b/comm/mail/components/search/extensions/wiktionary/_locales/oc/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "Wikiccionari (oc)"
+ },
+ "extensionDescription": {
+ "message": "Wikiccionari, lo diccionari liure"
+ },
+ "searchUrl": {
+ "message": "https://oc.wiktionary.org/wiki/Especial:Recèrca"
+ },
+ "searchForm": {
+ "message": "https://oc.wiktionary.org/wiki/Especial:Recèrca?search={searchTerms}"
+ },
+ "suggestUrl": {
+ "message": "https://oc.wiktionary.org/w/api.php?action=opensearch&search={searchTerms}&namespace=0"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wiktionary/_locales/te/messages.json b/comm/mail/components/search/extensions/wiktionary/_locales/te/messages.json
new file mode 100644
index 0000000000..7bca94e025
--- /dev/null
+++ b/comm/mail/components/search/extensions/wiktionary/_locales/te/messages.json
@@ -0,0 +1,20 @@
+{
+ "extensionName": {
+ "message": "విక్షనరీ (te)"
+ },
+ "extensionDescription": {
+ "message": "విక్షనరీ (te)"
+ },
+ "searchUrl": {
+ "message": "https://te.wiktionary.org/wiki/ప్రత్యేక:అన్వేషణ"
+ },
+ "searchForm": {
+ "message": "https://te.wiktionary.org/wiki/ప్రత్యేక:అన్వేషణ?search={searchTerms}"
+ },
+ "suggestUrl": {
+ "message": "https://te.wiktionary.org/w/api.php?action=opensearch&search={searchTerms}&namespace=0"
+ },
+ "searchUrlGetParams": {
+ "message": "search={searchTerms}"
+ }
+}
diff --git a/comm/mail/components/search/extensions/wiktionary/favicon.ico b/comm/mail/components/search/extensions/wiktionary/favicon.ico
new file mode 100644
index 0000000000..31b0e38092
--- /dev/null
+++ b/comm/mail/components/search/extensions/wiktionary/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/wiktionary/manifest.json b/comm/mail/components/search/extensions/wiktionary/manifest.json
new file mode 100644
index 0000000000..2206a2f8bb
--- /dev/null
+++ b/comm/mail/components/search/extensions/wiktionary/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "wiktionary@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "oc",
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "suggest_url": "__MSG_suggestUrl__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/wolnelektury-pl/favicon.png b/comm/mail/components/search/extensions/wolnelektury-pl/favicon.png
new file mode 100644
index 0000000000..77f6db5322
--- /dev/null
+++ b/comm/mail/components/search/extensions/wolnelektury-pl/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/wolnelektury-pl/manifest.json b/comm/mail/components/search/extensions/wolnelektury-pl/manifest.json
new file mode 100644
index 0000000000..25d93be370
--- /dev/null
+++ b/comm/mail/components/search/extensions/wolnelektury-pl/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Wolne Lektury",
+ "description": "Biblioteka internetowa WolneLektury.pl",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "wolnelektury-pl@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Wolne Lektury",
+ "search_url": "https://wolnelektury.pl/szukaj/?q={searchTerms}",
+ "search_form": "https://wolnelektury.pl",
+ "suggest_url": "https://wolnelektury.pl/katalog/jtags/?mozhint=1&q={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/yahoo-jp-auctions/favicon.ico b/comm/mail/components/search/extensions/yahoo-jp-auctions/favicon.ico
new file mode 100644
index 0000000000..4401c7a40e
--- /dev/null
+++ b/comm/mail/components/search/extensions/yahoo-jp-auctions/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/yahoo-jp-auctions/manifest.json b/comm/mail/components/search/extensions/yahoo-jp-auctions/manifest.json
new file mode 100644
index 0000000000..62f5fe20b4
--- /dev/null
+++ b/comm/mail/components/search/extensions/yahoo-jp-auctions/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "ヤフオク!",
+ "description": "ヤフオク! 検索",
+ "manifest_version": 2,
+ "version": "1.3",
+ "applications": {
+ "gecko": {
+ "id": "yahoo-jp-auctions@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "ヤフオク!",
+ "encoding": "EUC-JP",
+ "search_url": "https://auctions.yahoo.co.jp/search/search",
+ "search_form": "https://auctions.yahoo.co.jp/",
+ "search_url_get_params": "p={searchTerms}&ei=EUC-JP"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/yahoo-jp/favicon.ico b/comm/mail/components/search/extensions/yahoo-jp/favicon.ico
new file mode 100644
index 0000000000..34a916ccde
--- /dev/null
+++ b/comm/mail/components/search/extensions/yahoo-jp/favicon.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/yahoo-jp/manifest.json b/comm/mail/components/search/extensions/yahoo-jp/manifest.json
new file mode 100644
index 0000000000..6f0c339fbd
--- /dev/null
+++ b/comm/mail/components/search/extensions/yahoo-jp/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Yahoo! JAPAN",
+ "description": "Yahoo Search",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "yahoo-jp@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.ico"
+ },
+ "web_accessible_resources": ["favicon.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Yahoo! JAPAN",
+ "search_url": "https://search.yahoo.co.jp/search",
+ "search_form": "https://search.yahoo.co.jp/",
+ "search_url_get_params": "p={searchTerms}&ei=UTF-8"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/az/messages.json b/comm/mail/components/search/extensions/yandex/_locales/az/messages.json
new file mode 100644
index 0000000000..a26b49f041
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/az/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Yandex"
+ },
+ "extensionDescription": {
+ "message": "İnternetdə axtarış üçün Yandexdən istifadə edin."
+ },
+ "searchUrl": {
+ "message": "https://yandex.az/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.az/"
+ },
+ "suggestUrl": {
+ "message": "https://yandex.az/suggest/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-ru.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/by/messages.json b/comm/mail/components/search/extensions/yandex/_locales/by/messages.json
new file mode 100644
index 0000000000..440c062610
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/by/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Яндекс"
+ },
+ "extensionDescription": {
+ "message": "Пошук з дапамогаю Яндекс"
+ },
+ "searchUrl": {
+ "message": "https://yandex.by/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.by/"
+ },
+ "suggestUrl": {
+ "message": "https://suggest.yandex.by/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-ru.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/en/messages.json b/comm/mail/components/search/extensions/yandex/_locales/en/messages.json
new file mode 100644
index 0000000000..593c0c93e7
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/en/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Yandex"
+ },
+ "extensionDescription": {
+ "message": "Use Yandex to search the Internet."
+ },
+ "searchUrl": {
+ "message": "https://www.yandex.com/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.com/"
+ },
+ "suggestUrl": {
+ "message": "https://suggest.yandex.com/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-en.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/kk/messages.json b/comm/mail/components/search/extensions/yandex/_locales/kk/messages.json
new file mode 100644
index 0000000000..2796cd93ec
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/kk/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Яндекс"
+ },
+ "extensionDescription": {
+ "message": "Воспользуйтесь Яндексом для поиска в Интернете."
+ },
+ "searchUrl": {
+ "message": "https://yandex.kz/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.kz/"
+ },
+ "suggestUrl": {
+ "message": "https://suggest.yandex.kz/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-ru.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/ru/messages.json b/comm/mail/components/search/extensions/yandex/_locales/ru/messages.json
new file mode 100644
index 0000000000..cdc5ff13be
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/ru/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Яндекс"
+ },
+ "extensionDescription": {
+ "message": "Воспользуйтесь Яндексом для поиска в Интернете."
+ },
+ "searchUrl": {
+ "message": "https://yandex.ru/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.ru/"
+ },
+ "suggestUrl": {
+ "message": "https://suggest.yandex.ru/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-ru.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/_locales/tr/messages.json b/comm/mail/components/search/extensions/yandex/_locales/tr/messages.json
new file mode 100644
index 0000000000..55d16d9956
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/_locales/tr/messages.json
@@ -0,0 +1,23 @@
+{
+ "extensionName": {
+ "message": "Yandex"
+ },
+ "extensionDescription": {
+ "message": "Yandex Türkiye arama motoru"
+ },
+ "searchUrl": {
+ "message": "https://yandex.com.tr/search"
+ },
+ "searchForm": {
+ "message": "https://www.yandex.com.tr/"
+ },
+ "suggestUrl": {
+ "message": "https://suggest.yandex.com.tr/suggest-ff.cgi?part={searchTerms}"
+ },
+ "searchUrlGetParams": {
+ "message": "text={searchTerms}"
+ },
+ "extensionIcon": {
+ "message": "yandex-en.ico"
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/manifest.json b/comm/mail/components/search/extensions/yandex/manifest.json
new file mode 100644
index 0000000000..d5885f5c29
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "manifest_version": 2,
+ "version": "1.0",
+ "applications": {
+ "gecko": {
+ "id": "yandex@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "default_locale": "en",
+ "icons": {
+ "16": "__MSG_extensionIcon__"
+ },
+ "web_accessible_resources": ["yandex-en.ico", "yandex-ru.ico"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "__MSG_extensionName__",
+ "search_url": "__MSG_searchUrl__",
+ "search_form": "__MSG_searchForm__",
+ "suggest_url": "__MSG_suggestUrl__",
+ "search_url_get_params": "__MSG_searchUrlGetParams__"
+ }
+ }
+}
diff --git a/comm/mail/components/search/extensions/yandex/yandex-en.ico b/comm/mail/components/search/extensions/yandex/yandex-en.ico
new file mode 100644
index 0000000000..6398f30e9d
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/yandex-en.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/yandex/yandex-ru.ico b/comm/mail/components/search/extensions/yandex/yandex-ru.ico
new file mode 100644
index 0000000000..226fc0a071
--- /dev/null
+++ b/comm/mail/components/search/extensions/yandex/yandex-ru.ico
Binary files differ
diff --git a/comm/mail/components/search/extensions/zoznam-sk/favicon.png b/comm/mail/components/search/extensions/zoznam-sk/favicon.png
new file mode 100644
index 0000000000..5774c6ff52
--- /dev/null
+++ b/comm/mail/components/search/extensions/zoznam-sk/favicon.png
Binary files differ
diff --git a/comm/mail/components/search/extensions/zoznam-sk/manifest.json b/comm/mail/components/search/extensions/zoznam-sk/manifest.json
new file mode 100644
index 0000000000..118cd1ba7f
--- /dev/null
+++ b/comm/mail/components/search/extensions/zoznam-sk/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Zoznam",
+ "description": "Zoznam slovenskeho internetu",
+ "manifest_version": 2,
+ "version": "1.2",
+ "applications": {
+ "gecko": {
+ "id": "zoznam-sk@search.mozilla.org"
+ }
+ },
+ "hidden": true,
+ "icons": {
+ "16": "favicon.png"
+ },
+ "web_accessible_resources": ["favicon.png"],
+ "chrome_settings_overrides": {
+ "search_provider": {
+ "name": "Zoznam",
+ "encoding": "WINDOWS-1250",
+ "search_url": "https://www.zoznam.sk/hladaj.fcgi",
+ "search_form": "https://www.zoznam.sk/",
+ "search_url_get_params": "co=odkazy&s={searchTerms}"
+ }
+ }
+}
diff --git a/comm/mail/components/search/jar.mn b/comm/mail/components/search/jar.mn
new file mode 100644
index 0000000000..b8d36a114b
--- /dev/null
+++ b/comm/mail/components/search/jar.mn
@@ -0,0 +1,15 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+messenger.jar:
+ search-extensions/ (extensions/**)
+#ifdef XP_MACOSX
+ content/messenger/SpotlightIntegration.js (content/SpotlightIntegration.js)
+#endif
+#ifdef XP_WIN
+ content/messenger/WinSearchIntegration.js (content/WinSearchIntegration.js)
+#endif
+
+% resource search-plugins %searchplugins/ contentaccessible=yes
+% resource search-extensions %search-extensions/ contentaccessible=yes
diff --git a/comm/mail/components/search/mdimporter/English.lproj/InfoPlist.strings b/comm/mail/components/search/mdimporter/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..ca96e65b7e
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/English.lproj/InfoPlist.strings
Binary files differ
diff --git a/comm/mail/components/search/mdimporter/English.lproj/schema.strings b/comm/mail/components/search/mdimporter/English.lproj/schema.strings
new file mode 100644
index 0000000000..0f7b8d6297
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/English.lproj/schema.strings
Binary files differ
diff --git a/comm/mail/components/search/mdimporter/GetMetadataForFile.c b/comm/mail/components/search/mdimporter/GetMetadataForFile.c
new file mode 100644
index 0000000000..cafb3f05ee
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/GetMetadataForFile.c
@@ -0,0 +1,76 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
+
+/* -----------------------------------------------------------------------------
+ Get metadata attributes from file
+
+ This function's job is to extract useful information from the .mozeml file
+ and return it as a dictionary
+ -----------------------------------------------------------------------------
+ */
+
+Boolean GetMetadataForFile(void* thisInterface,
+ CFMutableDictionaryRef attributes,
+ CFStringRef contentTypeUTI, CFStringRef pathToFile) {
+ /* Pull any available metadata from the file at the specified path */
+ /* Return the attribute keys and attribute values in the dict */
+ /* Return TRUE if successful, FALSE if there was no data provided */
+ Boolean success;
+ CFURLRef fileURL = CFURLCreateWithFileSystemPath(
+ kCFAllocatorDefault, pathToFile, kCFURLPOSIXPathStyle, false);
+ CFReadStreamRef stream =
+ CFReadStreamCreateWithFile(kCFAllocatorDefault, fileURL);
+ CFReadStreamOpen(stream);
+
+ CFErrorRef err = NULL;
+ CFPropertyListRef ticket = CFPropertyListCreateWithStream(
+ kCFAllocatorDefault, stream,
+ /*streamLength*/ 0, kCFPropertyListImmutable, NULL, &err);
+ if (err != NULL) {
+ CFStringRef errorString = CFErrorCopyDescription(err);
+ if (errorString != NULL) {
+ printf("failed creating property list from stream\n");
+ printf("error = %s\n", (const char*)errorString);
+ }
+ CFRelease(err);
+ success = FALSE;
+ } else {
+ CFTypeRef value;
+ value = CFDictionaryGetValue(ticket, kMDItemTitle);
+ if (value) {
+ CFDictionarySetValue(attributes, kMDItemTitle, value);
+ }
+ value = CFDictionaryGetValue(ticket, kMDItemTextContent);
+ if (value) {
+ CFDictionarySetValue(attributes, kMDItemTextContent, value);
+ }
+ value = CFDictionaryGetValue(ticket, kMDItemDisplayName);
+ if (value) CFDictionarySetValue(attributes, kMDItemDisplayName, value);
+
+ CFDateFormatterRef dateFormatter = CFDateFormatterCreate(
+ NULL, NULL, kCFDateFormatterLongStyle, kCFDateFormatterLongStyle);
+
+ value = CFDictionaryGetValue(ticket, kMDItemLastUsedDate);
+
+ if (value && dateFormatter) {
+ printf("trying to parse date \n");
+ CFDateRef curDate =
+ CFDateFormatterCreateDateFromString(NULL, dateFormatter, value, NULL);
+ printf("got cur date\n");
+ if (curDate)
+ CFDictionarySetValue(attributes, kMDItemLastUsedDate, curDate);
+ }
+ success = TRUE;
+ }
+ // contents are kMDItemTextContent
+
+ CFReadStreamClose(stream);
+ CFRelease(stream);
+ CFRelease(fileURL);
+ return success;
+}
diff --git a/comm/mail/components/search/mdimporter/Info.plist b/comm/mail/components/search/mdimporter/Info.plist
new file mode 100644
index 0000000000..ccb2f3cd10
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/Info.plist
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeOSTypes</key>
+ <array>
+ <string>TBMZ</string>
+ </array>
+ <key>CFBundleTypeRole</key>
+ <string>MDImporter</string>
+ <key>LSItemContentTypes</key>
+ <array>
+ <string>com.mozilla.thunderbird.mozeml</string>
+ </array>
+ </dict>
+ </array>
+ <key>CFBundleExecutable</key>
+ <string>thunderbird-mdimport</string>
+ <key>CFBundleIconFile</key>
+ <string>thunderbird-mdimport</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.mozilla.MDImporter.Thunderbird</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Thunderbird-MDImport</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CFPlugInDynamicRegisterFunction</key>
+ <string></string>
+ <key>CFPlugInDynamicRegistration</key>
+ <string>NO</string>
+ <key>CFPlugInFactories</key>
+ <dict>
+ <key>37401ADE-1058-42DB-BBE5-F2AAB9D7C13E</key>
+ <string>MetadataImporterPluginFactory</string>
+ </dict>
+ <key>CFPlugInTypes</key>
+ <dict>
+ <key>8B08C4BF-415B-11D8-B3F9-0003936726FC</key>
+ <array>
+ <string>37401ADE-1058-42DB-BBE5-F2AAB9D7C13E</string>
+ </array>
+ </dict>
+ <key>CFPlugInUnloadFunction</key>
+ <string></string>
+</dict>
+</plist>
diff --git a/comm/mail/components/search/mdimporter/Makefile.in b/comm/mail/components/search/mdimporter/Makefile.in
new file mode 100644
index 0000000000..fbc6d27034
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/Makefile.in
@@ -0,0 +1,26 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# This directory is producing a framework as a target. The output of this
+# framework will be located here.
+FRAMEWORK_DIR := $(DIST)/package/thunderbird.mdimporter
+
+STRING_FILES := $(srcdir)/English.lproj/InfoPlist.strings $(srcdir)/English.lproj/schema.strings
+STRING_DEST := $(FRAMEWORK_DIR)/Contents/Resources/English.lproj
+INSTALL_TARGETS += STRING
+
+SCHEMA_FILES := $(srcdir)/schema.xml
+SCHEMA_DEST := $(FRAMEWORK_DIR)/Contents/Resources
+INSTALL_TARGETS += SCHEMA
+
+PLIST_FILES := $(srcdir)/Info.plist
+PLIST_DEST := $(FRAMEWORK_DIR)/Contents
+INSTALL_TARGETS += PLIST
+
+CFLAGS += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
+# We don't need mozglue
+WRAP_LDFLAGS :=
+
+include $(topsrcdir)/config/rules.mk
+
diff --git a/comm/mail/components/search/mdimporter/main.c b/comm/mail/components/search/mdimporter/main.c
new file mode 100644
index 0000000000..20afc65351
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/main.c
@@ -0,0 +1,208 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//==============================================================================
+//
+// DO NO MODIFY THE CONTENT OF THIS FILE
+//
+// This file contains the generic CFPlug-in code necessary for TB Spotlight
+// The actual importer is implemented in GetMetadataForFile.c
+//
+//==============================================================================
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFPlugInCOM.h>
+#include <CoreServices/CoreServices.h>
+
+// -----------------------------------------------------------------------------
+// constants
+// -----------------------------------------------------------------------------
+
+#define PLUGIN_ID "37401ADE-1058-42DB-BBE5-F2AAB9D7C13E"
+
+//
+// Below is the generic glue code for all plug-ins.
+//
+// You should not have to modify this code aside from changing
+// names if you decide to change the names defined in the Info.plist
+//
+
+// -----------------------------------------------------------------------------
+// typedefs
+// -----------------------------------------------------------------------------
+
+// The import function to be implemented in GetMetadataForFile.c
+Boolean GetMetadataForFile(void* thisInterface,
+ CFMutableDictionaryRef attributes,
+ CFStringRef contentTypeUTI, CFStringRef pathToFile);
+
+// The layout for an instance of MetaDataImporterPlugIn
+typedef struct __MetadataImporterPluginType {
+ MDImporterInterfaceStruct* conduitInterface;
+ CFUUIDRef factoryID;
+ UInt32 refCount;
+} MetadataImporterPluginType;
+
+// -----------------------------------------------------------------------------
+// prototypes
+// -----------------------------------------------------------------------------
+// Forward declaration for the IUnknown implementation.
+//
+
+MetadataImporterPluginType* AllocMetadataImporterPluginType(
+ CFUUIDRef inFactoryID);
+void DeallocMetadataImporterPluginType(
+ MetadataImporterPluginType* thisInstance);
+HRESULT MetadataImporterQueryInterface(void* thisInstance, REFIID iid,
+ LPVOID* ppv);
+void* MetadataImporterPluginFactory(CFAllocatorRef allocator, CFUUIDRef typeID);
+ULONG MetadataImporterPluginAddRef(void* thisInstance);
+ULONG MetadataImporterPluginRelease(void* thisInstance);
+// -----------------------------------------------------------------------------
+// testInterfaceFtbl definition
+// -----------------------------------------------------------------------------
+// The TestInterface function table.
+//
+
+static MDImporterInterfaceStruct testInterfaceFtbl = {
+ NULL, MetadataImporterQueryInterface, MetadataImporterPluginAddRef,
+ MetadataImporterPluginRelease, GetMetadataForFile};
+
+// -----------------------------------------------------------------------------
+// AllocMetadataImporterPluginType
+// -----------------------------------------------------------------------------
+// Utility function that allocates a new instance.
+// You can do some initial setup for the importer here if you wish
+// like allocating globals etc...
+//
+MetadataImporterPluginType* AllocMetadataImporterPluginType(
+ CFUUIDRef inFactoryID) {
+ MetadataImporterPluginType* theNewInstance;
+
+ theNewInstance =
+ (MetadataImporterPluginType*)malloc(sizeof(MetadataImporterPluginType));
+ memset(theNewInstance, 0, sizeof(MetadataImporterPluginType));
+
+ /* Point to the function table */
+ theNewInstance->conduitInterface = &testInterfaceFtbl;
+
+ /* Retain and keep an open instance refcount for each factory. */
+ theNewInstance->factoryID = CFRetain(inFactoryID);
+ CFPlugInAddInstanceForFactory(inFactoryID);
+
+ /* This function returns the IUnknown interface so set the refCount to one. */
+ theNewInstance->refCount = 1;
+ return theNewInstance;
+}
+
+// -----------------------------------------------------------------------------
+// DeallocTBSpotlightMDImporterPluginType
+// -----------------------------------------------------------------------------
+// Utility function that deallocates the instance when
+// the refCount goes to zero.
+// In the current implementation importer interfaces are never deallocated
+// but implement this as this might change in the future
+//
+void DeallocMetadataImporterPluginType(
+ MetadataImporterPluginType* thisInstance) {
+ CFUUIDRef theFactoryID;
+
+ theFactoryID = thisInstance->factoryID;
+ free(thisInstance);
+ if (theFactoryID) {
+ CFPlugInRemoveInstanceForFactory(theFactoryID);
+ CFRelease(theFactoryID);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// MetadataImporterQueryInterface
+// -----------------------------------------------------------------------------
+// Implementation of the IUnknown QueryInterface function.
+//
+HRESULT MetadataImporterQueryInterface(void* thisInstance, REFIID iid,
+ LPVOID* ppv) {
+ CFUUIDRef interfaceID;
+
+ interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid);
+
+ if (CFEqual(interfaceID, kMDImporterInterfaceID)) {
+ /* If the Right interface was requested, bump the ref count,
+ * set the ppv parameter equal to the instance, and
+ * return good status.
+ */
+ ((MetadataImporterPluginType*)thisInstance)
+ ->conduitInterface->AddRef(thisInstance);
+ *ppv = thisInstance;
+ CFRelease(interfaceID);
+ return S_OK;
+ } else {
+ if (CFEqual(interfaceID, IUnknownUUID)) {
+ /* If the IUnknown interface was requested, same as above. */
+ ((MetadataImporterPluginType*)thisInstance)
+ ->conduitInterface->AddRef(thisInstance);
+ *ppv = thisInstance;
+ CFRelease(interfaceID);
+ return S_OK;
+ } else {
+ /* Requested interface unknown, bail with error. */
+ *ppv = NULL;
+ CFRelease(interfaceID);
+ return E_NOINTERFACE;
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// MetadataImporterPluginAddRef
+// -----------------------------------------------------------------------------
+// Implementation of reference counting for this type. Whenever an interface
+// is requested, bump the refCount for the instance. NOTE: returning the
+// refcount is a convention but is not required so don't rely on it.
+//
+ULONG MetadataImporterPluginAddRef(void* thisInstance) {
+ ((MetadataImporterPluginType*)thisInstance)->refCount += 1;
+ return ((MetadataImporterPluginType*)thisInstance)->refCount;
+}
+
+// -----------------------------------------------------------------------------
+// SampleCMPluginRelease
+// -----------------------------------------------------------------------------
+// When an interface is released, decrement the refCount.
+// If the refCount goes to zero, deallocate the instance.
+//
+ULONG MetadataImporterPluginRelease(void* thisInstance) {
+ ((MetadataImporterPluginType*)thisInstance)->refCount -= 1;
+ if (((MetadataImporterPluginType*)thisInstance)->refCount == 0) {
+ DeallocMetadataImporterPluginType(
+ (MetadataImporterPluginType*)thisInstance);
+ return 0;
+ } else {
+ return ((MetadataImporterPluginType*)thisInstance)->refCount;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// TBSpotlightMDImporterPluginFactory
+// -----------------------------------------------------------------------------
+// Implementation of the factory function for this type.
+//
+void* MetadataImporterPluginFactory(CFAllocatorRef allocator,
+ CFUUIDRef typeID) {
+ MetadataImporterPluginType* result;
+ CFUUIDRef uuid;
+
+ /* If correct type is being requested, allocate an
+ * instance of TestType and return the IUnknown interface.
+ */
+ if (CFEqual(typeID, kMDImporterTypeID)) {
+ uuid = CFUUIDCreateFromString(kCFAllocatorDefault, CFSTR(PLUGIN_ID));
+ result = AllocMetadataImporterPluginType(uuid);
+ CFRelease(uuid);
+ return result;
+ }
+ /* If the requested type is incorrect, return NULL. */
+ return NULL;
+}
diff --git a/comm/mail/components/search/mdimporter/moz.build b/comm/mail/components/search/mdimporter/moz.build
new file mode 100644
index 0000000000..8bfc3e6c80
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/moz.build
@@ -0,0 +1,22 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+SOURCES = [
+ "GetMetadataForFile.c",
+ "main.c",
+]
+
+Program("thunderbird-mdimport")
+# This directory is producing a framework as a target. The output of this
+# framework will be located here.
+FINAL_TARGET = "dist/package/thunderbird.mdimporter/Contents/MacOS"
+
+OS_LIBS += [
+ "-framework CoreFoundation",
+ "-framework CoreServices",
+]
+
+# We're also a bundle.
+LDFLAGS += ["-bundle"]
diff --git a/comm/mail/components/search/mdimporter/schema.xml b/comm/mail/components/search/mdimporter/schema.xml
new file mode 100644
index 0000000000..f450209378
--- /dev/null
+++ b/comm/mail/components/search/mdimporter/schema.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+
+<schema version="1.0" xmlns="http://www.apple.com/metadata"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.apple.com/metadata file:///System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/MetadataSchema.xsd">
+ <note>
+ Start off by supporting the same attributes as Mail.importer
+ </note>
+ <attributes>
+ <attribute name="kMDItemAuthorEmailAddresses" multivalued="true" type="CFString"/>
+ <attribute name="kMDItemRecipientEmailAddresses" multivalued="true" type="CFString"/>
+ </attributes>
+
+ <types>
+ <type name="com.mozilla.thunderbird.mozeml">
+ <note>
+ The keys that this metadata importer handles.
+ </note>
+ <allattrs>
+ kMDItemAuthorEmailAddresses
+ kMDItemRecipientEmailAddresses
+ </allattrs>
+ <displayattrs>
+ </displayattrs>
+ </type>
+ </types>
+</schema>
+
diff --git a/comm/mail/components/search/moz.build b/comm/mail/components/search/moz.build
new file mode 100644
index 0000000000..219ea99355
--- /dev/null
+++ b/comm/mail/components/search/moz.build
@@ -0,0 +1,23 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
+ DIRS += ["mdimporter"]
+elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
+ DIRS += ["wsenable"]
+ SOURCES += ["nsMailWinSearchHelper.cpp"]
+ FINAL_LIBRARY = "mailcomps"
+
+DIRS += ["public"]
+
+EXTRA_JS_MODULES += [
+ "SearchIntegration.jsm",
+]
+
+JAR_MANIFESTS += ["jar.mn"]
+
+XPCOM_MANIFESTS += [
+ "components.conf",
+]
diff --git a/comm/mail/components/search/nsMailWinSearchHelper.cpp b/comm/mail/components/search/nsMailWinSearchHelper.cpp
new file mode 100644
index 0000000000..9cfdc40cc0
--- /dev/null
+++ b/comm/mail/components/search/nsMailWinSearchHelper.cpp
@@ -0,0 +1,254 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsMailWinSearchHelper.h"
+#include "nsDirectoryServiceUtils.h"
+#include "nsString.h"
+#include "nsIDirectoryEnumerator.h"
+#include "mozilla/ArrayUtils.h"
+
+#ifdef _WIN32_WINNT
+# undef _WIN32_WINNT
+#endif
+#define _WIN32_WINNT 0x0600
+#include <SearchAPI.h>
+#include <winsvc.h>
+#include <ShellAPI.h>
+#include <shlobj.h>
+
+static const CLSID CLSID_CSearchManager = {
+ 0x7d096c5f,
+ 0xac08,
+ 0x4f1f,
+ {0xbe, 0xb7, 0x5c, 0x22, 0xc5, 0x17, 0xce, 0x39}};
+static const IID IID_ISearchManager = {
+ 0xab310581,
+ 0xac80,
+ 0x11d1,
+ {0x8d, 0xf3, 0x00, 0xc0, 0x4f, 0xb6, 0xef, 0x69}};
+
+static const char* const sFoldersToIndex[] = {"Mail", "ImapMail", "News"};
+
+// APP_REG_NAME_MAIL should be kept in synch with AppRegNameMail
+// in the installer file: defines.nsi.in
+#define APP_REG_NAME_MAIL L"Thunderbird"
+
+nsMailWinSearchHelper::nsMailWinSearchHelper() {}
+
+nsresult nsMailWinSearchHelper::Init() {
+ CoInitialize(NULL);
+ return NS_GetSpecialDirectory("ProfD", getter_AddRefs(mProfD));
+}
+
+nsMailWinSearchHelper::~nsMailWinSearchHelper() { CoUninitialize(); }
+
+NS_IMPL_ISUPPORTS(nsMailWinSearchHelper, nsIMailWinSearchHelper)
+
+NS_IMETHODIMP nsMailWinSearchHelper::GetFoldersInCrawlScope(bool* aResult) {
+ *aResult = false;
+ NS_ENSURE_ARG_POINTER(mProfD);
+
+ // If the service isn't present or running, we shouldn't proceed.
+ bool serviceRunning;
+ nsresult rv = GetServiceRunning(&serviceRunning);
+ if (!serviceRunning || NS_FAILED(rv)) return rv;
+
+ // We need to do this every time so that we have the latest data
+ RefPtr<ISearchManager> searchManager;
+ HRESULT hr =
+ CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_ALL,
+ IID_ISearchManager, getter_AddRefs(searchManager));
+ if (FAILED(hr)) return NS_ERROR_FAILURE;
+
+ RefPtr<ISearchCatalogManager> catalogManager;
+ hr =
+ searchManager->GetCatalog(L"SystemIndex", getter_AddRefs(catalogManager));
+ if (FAILED(hr)) return NS_ERROR_FAILURE;
+
+ RefPtr<ISearchCrawlScopeManager> crawlScopeManager;
+ hr = catalogManager->GetCrawlScopeManager(getter_AddRefs(crawlScopeManager));
+ if (FAILED(hr)) return NS_ERROR_FAILURE;
+
+ // We need to create appropriate URLs to check with the crawl scope manager.
+ for (uint32_t i = 0; i < MOZ_ARRAY_LENGTH(sFoldersToIndex); i++) {
+ nsCOMPtr<nsIFile> subdir;
+ rv = mProfD->Clone(getter_AddRefs(subdir));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ nsDependentCString relativeStr(sFoldersToIndex[i]);
+ rv = subdir->AppendNative(relativeStr);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ nsString subdirPath;
+ rv = subdir->GetPath(subdirPath);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ // Form a URL as required by the crawl scope manager
+ nsString subdirURL(u"file:///"_ns);
+ subdirURL.Append(subdirPath);
+ subdirURL.Append('\\');
+
+ BOOL included;
+ if (FAILED(crawlScopeManager->IncludedInCrawlScope(subdirURL.get(),
+ &included)))
+ return NS_ERROR_FAILURE;
+
+ // If even one of the folders isn't there, we return false
+ if (!included) return NS_OK;
+ }
+ *aResult = true;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsMailWinSearchHelper::GetServiceRunning(bool* aResult) {
+ *aResult = false;
+ SC_HANDLE hSCManager =
+ OpenSCManagerW(nullptr, SERVICES_ACTIVE_DATABASEW, SERVICE_QUERY_STATUS);
+ if (!hSCManager) return NS_ERROR_FAILURE;
+
+ SC_HANDLE hService =
+ OpenServiceW(hSCManager, L"wsearch", SERVICE_QUERY_STATUS);
+ CloseServiceHandle(hSCManager);
+ if (!hService)
+ // The service isn't present. Never mind.
+ return NS_ERROR_NOT_AVAILABLE;
+
+ SERVICE_STATUS status;
+ if (!QueryServiceStatus(hService, &status)) {
+ CloseServiceHandle(hService);
+ return NS_ERROR_FAILURE;
+ }
+
+ *aResult = (status.dwCurrentState == SERVICE_RUNNING);
+ CloseServiceHandle(hService);
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsMailWinSearchHelper::SetFANCIBit(nsIFile* aFile, bool aBit,
+ bool aRecurse) {
+ NS_ENSURE_ARG_POINTER(aFile);
+
+ bool exists;
+ nsresult rv = aFile->Exists(&exists);
+ NS_ENSURE_SUCCESS(rv, rv);
+ if (!exists) return NS_ERROR_FILE_NOT_FOUND;
+
+ nsString filePath;
+ rv = aFile->GetPath(filePath);
+ NS_ENSURE_SUCCESS(rv, rv);
+ LPCWSTR pathStr = filePath.get();
+
+ // We should set the file attribute only if it isn't already set.
+ DWORD dwAttrs = GetFileAttributesW(pathStr);
+ if (dwAttrs == INVALID_FILE_ATTRIBUTES) return NS_ERROR_FAILURE;
+
+ if (aBit) {
+ if (!(dwAttrs & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED))
+ SetFileAttributesW(pathStr, dwAttrs | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
+ } else {
+ if (dwAttrs & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)
+ SetFileAttributesW(pathStr,
+ dwAttrs & ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
+ }
+
+ // We should only try to recurse if it's a directory
+ bool isDirectory;
+ rv = aFile->IsDirectory(&isDirectory);
+ NS_ENSURE_SUCCESS(rv, rv);
+ if (aRecurse && isDirectory) {
+ nsCOMPtr<nsIDirectoryEnumerator> children;
+ rv = aFile->GetDirectoryEntries(getter_AddRefs(children));
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ bool hasMore = false;
+ while (NS_SUCCEEDED(children->HasMoreElements(&hasMore)) && hasMore) {
+ nsCOMPtr<nsIFile> childFile;
+ rv = children->GetNextFile(getter_AddRefs(childFile));
+ NS_ENSURE_SUCCESS(rv, rv);
+ rv = SetFANCIBit(childFile, aBit, aRecurse);
+ }
+ }
+ return rv;
+}
+
+NS_IMETHODIMP nsMailWinSearchHelper::GetIsFileAssociationSet(bool* aResult) {
+ NS_ENSURE_ARG_POINTER(aResult);
+
+ // We'll use the Vista method here
+ RefPtr<IApplicationAssociationRegistration> pAAR;
+ HRESULT hr = CoCreateInstance(
+ CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC,
+ IID_IApplicationAssociationRegistration, getter_AddRefs(pAAR));
+
+ BOOL res = false;
+ if (SUCCEEDED(hr))
+ pAAR->QueryAppIsDefault(L".wdseml", AT_FILEEXTENSION, AL_EFFECTIVE,
+ APP_REG_NAME_MAIL, &res);
+ *aResult = res;
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsMailWinSearchHelper::SetFileAssociation() {
+ RefPtr<IApplicationAssociationRegistration> pAAR;
+ HRESULT hr = CoCreateInstance(
+ CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC,
+ IID_IApplicationAssociationRegistration, getter_AddRefs(pAAR));
+ if (SUCCEEDED(hr))
+ hr = pAAR->SetAppAsDefault(APP_REG_NAME_MAIL, L".wdseml", AT_FILEEXTENSION);
+
+ return SUCCEEDED(hr) ? NS_OK : NS_ERROR_FAILURE;
+}
+
+NS_IMETHODIMP nsMailWinSearchHelper::RunSetup(bool aEnable) {
+ nsresult rv;
+ if (!mCurProcD) {
+ rv = NS_GetSpecialDirectory("CurProcD", getter_AddRefs(mCurProcD));
+ NS_ENSURE_SUCCESS(rv, rv);
+ rv = mCurProcD->Append(u"WSEnable.exe"_ns);
+ NS_ENSURE_SUCCESS(rv, rv);
+ }
+
+ nsAutoString filePath;
+ rv = mCurProcD->GetPath(filePath);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ // The parameters are of the format "1 <path>" for enabling and "0 <path>" for
+ // disabling
+ nsAutoString params(aEnable ? u"1 \""_ns : u"0 \""_ns);
+ nsAutoString profDPath;
+ rv = mProfD->GetPath(profDPath);
+ NS_ENSURE_SUCCESS(rv, rv);
+ params.Append(profDPath);
+ params.Append(u"\""_ns);
+
+ // We need an hWnd to cause UAC to pop up immediately
+ // If GetForegroundWindow returns NULL, then the UAC prompt will still appear,
+ // but minimized.
+ HWND hWnd = GetForegroundWindow();
+
+ SHELLEXECUTEINFOW executeInfo = {0};
+
+ executeInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
+ executeInfo.hwnd = hWnd;
+ executeInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
+ executeInfo.lpDirectory = NULL;
+ executeInfo.lpFile = filePath.get();
+ executeInfo.lpParameters = params.get();
+ executeInfo.nShow = SW_SHOWNORMAL;
+
+ DWORD dwRet = ERROR_SUCCESS;
+
+ if (ShellExecuteExW(&executeInfo)) {
+ // We want to block until the program exits
+ DWORD dwSignaled = WaitForSingleObject(executeInfo.hProcess, INFINITE);
+ if (dwSignaled == WAIT_OBJECT_0)
+ if (!GetExitCodeProcess(executeInfo.hProcess, &dwRet))
+ dwRet = GetLastError();
+ } else
+ return NS_ERROR_ABORT;
+
+ return SUCCEEDED(HRESULT_FROM_WIN32(dwRet)) ? NS_OK : NS_ERROR_FAILURE;
+}
diff --git a/comm/mail/components/search/nsMailWinSearchHelper.h b/comm/mail/components/search/nsMailWinSearchHelper.h
new file mode 100644
index 0000000000..ee313e6acf
--- /dev/null
+++ b/comm/mail/components/search/nsMailWinSearchHelper.h
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsMailWinSearchHelper_h_
+#define nsMailWinSearchHelper_h_
+
+#include "nsIMailWinSearchHelper.h"
+#include "nsIFile.h"
+#include "nsCOMPtr.h"
+
+#define NS_MAILWINSEARCHHELPER_CID \
+ { \
+ 0x5dd31c99, 0x8c7, 0x4a3b, { \
+ 0xae, 0xb3, 0xd2, 0xe6, 0x6, 0x65, 0xa3, 0x1a \
+ } \
+ }
+
+class nsMailWinSearchHelper : public nsIMailWinSearchHelper {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIMAILWINSEARCHHELPER
+
+ nsresult Init();
+ nsMailWinSearchHelper();
+
+ private:
+ virtual ~nsMailWinSearchHelper();
+ nsCOMPtr<nsIFile> mProfD;
+ nsCOMPtr<nsIFile> mCurProcD;
+};
+
+#endif
diff --git a/comm/mail/components/search/public/moz.build b/comm/mail/components/search/public/moz.build
new file mode 100644
index 0000000000..e920335704
--- /dev/null
+++ b/comm/mail/components/search/public/moz.build
@@ -0,0 +1,10 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+XPIDL_SOURCES += [
+ "nsIMailWinSearchHelper.idl",
+]
+
+XPIDL_MODULE = "mailwinsearch"
diff --git a/comm/mail/components/search/public/nsIMailWinSearchHelper.idl b/comm/mail/components/search/public/nsIMailWinSearchHelper.idl
new file mode 100644
index 0000000000..1c1d03a07f
--- /dev/null
+++ b/comm/mail/components/search/public/nsIMailWinSearchHelper.idl
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+#include "nsISupports.idl"
+
+interface nsIFile;
+
+[scriptable, uuid(a65307b3-64f8-49fc-96a7-2cfc7d1f18ee)]
+interface nsIMailWinSearchHelper : nsISupports
+{
+ /**
+ * Whether the Windows Search service is installed and running.
+ *
+ * @exception NS_ERROR_NOT_AVAILABLE if the Windows Search service is
+ * not installed
+ */
+ readonly attribute boolean serviceRunning;
+
+ /**
+ * Whether the Mail, ImapMail, and News folders are in the crawl scope.
+ *
+ * @exception NS_ERROR_NOT_AVAILABLE if the Windows Search service is not
+ * installed or running
+ */
+ readonly attribute boolean foldersInCrawlScope;
+
+ /**
+ * Sets the File Attribute Not Content Indexed bit. For proper operation
+ * of the indexer, this bit must be set to 0/false.
+ *
+ * @param aFile the file or directory for which this bit is supposed to be set
+ * @param aBit false if the content is to be indexed, true if not
+ * @param aRecurse whether this bit is to be set recursively for all subdirectories
+ * and files inside a directory
+ */
+ void setFANCIBit(in nsIFile aFile, in boolean aBit, in boolean aRecurse);
+
+ /**
+ * Returns whether the .wdseml file association has been set to Thunderbird or not.
+ */
+ readonly attribute boolean isFileAssociationSet;
+
+ /**
+ * Sets the .wdseml file association.
+ */
+ void setFileAssociation();
+
+ /**
+ * Runs the setup application using ShellExecute, passing the profile directory as
+ * a parameter.
+ *
+ * @param aEnable true to enable, false to disable
+ */
+ void runSetup(in boolean aEnable);
+};
diff --git a/comm/mail/components/search/wsenable/Makefile.in b/comm/mail/components/search/wsenable/Makefile.in
new file mode 100644
index 0000000000..254509ee77
--- /dev/null
+++ b/comm/mail/components/search/wsenable/Makefile.in
@@ -0,0 +1,6 @@
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+MOZ_WINCONSOLE = 0
diff --git a/comm/mail/components/search/wsenable/WSEnable.cpp b/comm/mail/components/search/wsenable/WSEnable.cpp
new file mode 100644
index 0000000000..825e0c4fe4
--- /dev/null
+++ b/comm/mail/components/search/wsenable/WSEnable.cpp
@@ -0,0 +1,141 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include <SearchAPI.h>
+#include <shellapi.h>
+#include <objbase.h>
+#include <string>
+
+static const CLSID CLSID_CSearchManager = {
+ 0x7d096c5f,
+ 0xac08,
+ 0x4f1f,
+ {0xbe, 0xb7, 0x5c, 0x22, 0xc5, 0x17, 0xce, 0x39}};
+static const IID IID_ISearchManager = {
+ 0xab310581,
+ 0xac80,
+ 0x11d1,
+ {0x8d, 0xf3, 0x00, 0xc0, 0x4f, 0xb6, 0xef, 0x69}};
+
+static const WCHAR* const sFoldersToIndex[] = {L"\\Mail\\", L"\\ImapMail\\",
+ L"\\News\\"};
+
+struct RegKey {
+ HKEY mRoot;
+ LPCWSTR mSubKey;
+ LPCWSTR mName;
+ LPCWSTR mValue;
+
+ RegKey(HKEY aRoot, LPCWSTR aSubKey, LPCWSTR aName, LPCWSTR aValue)
+ : mRoot(aRoot), mSubKey(aSubKey), mName(aName), mValue(aValue) {}
+};
+
+static const RegKey* const sRegKeys[] = {
+ new RegKey(HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\PropertySystem\\"
+ L"PropertyHandlers\\.wdseml",
+ L"", L"{5FA29220-36A1-40f9-89C6-F4B384B7642E}"),
+ new RegKey(HKEY_CLASSES_ROOT, L".wdseml", L"Content Type",
+ L"message/rfc822"),
+ new RegKey(HKEY_CLASSES_ROOT, L".wdseml\\PersistentHandler", L"",
+ L"{5645c8c4-e277-11cf-8fda-00aa00a14f93}"),
+ new RegKey(HKEY_CLASSES_ROOT,
+ L".wdseml\\shellex\\{8895B1C6-B41F-4C1C-A562-0D564250836F}", L"",
+ L"{b9815375-5d7f-4ce2-9245-c9d4da436930}"),
+ new RegKey(
+ HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\explorer\\KindMap",
+ L".wdseml", L"email;communication")};
+
+HRESULT GetCrawlScopeManager(ISearchCrawlScopeManager** aCrawlScopeManager) {
+ *aCrawlScopeManager = NULL;
+
+ ISearchManager* searchManager;
+ HRESULT hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_ALL,
+ IID_ISearchManager, (void**)&searchManager);
+ if (SUCCEEDED(hr)) {
+ ISearchCatalogManager* catalogManager;
+ hr = searchManager->GetCatalog(L"SystemIndex", &catalogManager);
+ if (SUCCEEDED(hr)) {
+ hr = catalogManager->GetCrawlScopeManager(aCrawlScopeManager);
+ catalogManager->Release();
+ }
+ searchManager->Release();
+ }
+ return hr;
+}
+
+LSTATUS SetRegistryKeys() {
+ LSTATUS rv = ERROR_SUCCESS;
+ for (uint32_t i = 0; rv == ERROR_SUCCESS && i < _countof(sRegKeys); i++) {
+ const RegKey* key = sRegKeys[i];
+ HKEY subKey;
+ // Since we're administrator, we should be able to do this just fine
+ rv = RegCreateKeyExW(key->mRoot, key->mSubKey, 0, NULL,
+ REG_OPTION_NON_VOLATILE,
+ KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &subKey, NULL);
+ if (rv == ERROR_SUCCESS)
+ rv = RegSetValueExW(subKey, key->mName, 0, REG_SZ, (LPBYTE)key->mValue,
+ (lstrlenW(key->mValue) + 1) * sizeof(WCHAR));
+ RegCloseKey(subKey);
+ }
+
+ return rv;
+}
+
+int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ LPWSTR lpCmdLine, int nCmdShow) {
+ UNREFERENCED_PARAMETER(lpCmdLine);
+
+ HRESULT hr =
+ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
+ if (SUCCEEDED(hr)) {
+ int argc;
+ LPWSTR* argv = CommandLineToArgvW(lpCmdLine, &argc);
+ if (argc != 2) hr = E_INVALIDARG;
+ if (SUCCEEDED(hr)) {
+ ISearchCrawlScopeManager* crawlScopeManager;
+ hr = GetCrawlScopeManager(&crawlScopeManager);
+ if (SUCCEEDED(hr)) {
+ if (*argv[0] == L'1') {
+ // We first add the required registry entries
+ LSTATUS rv = SetRegistryKeys();
+ if (rv != ERROR_SUCCESS) hr = E_FAIL;
+
+ // Next, we add rules for each of the three folders
+ for (uint32_t i = 0; SUCCEEDED(hr) && i < _countof(sFoldersToIndex);
+ i++) {
+ std::wstring path = L"file:///";
+ path.append(argv[1]);
+ path.append(sFoldersToIndex[i]);
+ // Add only if the rule isn't already there
+ BOOL isIncluded = FALSE;
+ hr = crawlScopeManager->IncludedInCrawlScope(path.c_str(),
+ &isIncluded);
+ if (SUCCEEDED(hr) && !isIncluded)
+ hr = crawlScopeManager->AddUserScopeRule(path.c_str(), TRUE, TRUE,
+ TRUE);
+ }
+ } else if (*argv[0] == L'0') {
+ // This is simple, we just exclude the profile dir and override
+ // children
+ std::wstring path = L"file:///";
+ path.append(argv[1]);
+ hr = crawlScopeManager->AddUserScopeRule(path.c_str(), FALSE, TRUE,
+ TRUE);
+ } else
+ hr = E_INVALIDARG;
+
+ if (SUCCEEDED(hr)) {
+ hr = crawlScopeManager->SaveAll();
+ }
+ crawlScopeManager->Release();
+ }
+ }
+ LocalFree(argv);
+ }
+
+ return hr;
+}
diff --git a/comm/mail/components/search/wsenable/WSEnable.exe.manifest b/comm/mail/components/search/wsenable/WSEnable.exe.manifest
new file mode 100644
index 0000000000..1c5ebf8e57
--- /dev/null
+++ b/comm/mail/components/search/wsenable/WSEnable.exe.manifest
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+ version="1.0.0.0"
+ processorArchitecture="*"
+ name="Mozilla.Thunderbird"
+ type="win32"
+/>
+<description>Mozilla Thunderbird Windows Search Integration Handler</description>
+<dependency>
+ <dependentAssembly>
+ <assemblyIdentity
+ type="win32"
+ name="Microsoft.Windows.Common-Controls"
+ version="6.0.0.0"
+ processorArchitecture="*"
+ publicKeyToken="6595b64144ccf1df"
+ language="*"
+ />
+ </dependentAssembly>
+</dependency>
+<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
+ <ms_asmv3:security>
+ <ms_asmv3:requestedPrivileges>
+ <ms_asmv3:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+ </ms_asmv3:requestedPrivileges>
+ </ms_asmv3:security>
+</ms_asmv3:trustInfo>
+ <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+ </application>
+ </compatibility>
+</assembly>
diff --git a/comm/mail/components/search/wsenable/WSEnable.rc b/comm/mail/components/search/wsenable/WSEnable.rc
new file mode 100644
index 0000000000..857298e160
--- /dev/null
+++ b/comm/mail/components/search/wsenable/WSEnable.rc
@@ -0,0 +1,6 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+1 24 "WSEnable.exe.manifest"
diff --git a/comm/mail/components/search/wsenable/module.ver b/comm/mail/components/search/wsenable/module.ver
new file mode 100644
index 0000000000..bd6f7f1c84
--- /dev/null
+++ b/comm/mail/components/search/wsenable/module.ver
@@ -0,0 +1 @@
+WIN32_MODULE_DESCRIPTION=@MOZ_APP_DISPLAYNAME@ Windows Search Integration Handler
diff --git a/comm/mail/components/search/wsenable/moz.build b/comm/mail/components/search/wsenable/moz.build
new file mode 100644
index 0000000000..bf9cdab1dc
--- /dev/null
+++ b/comm/mail/components/search/wsenable/moz.build
@@ -0,0 +1,21 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+Program("WSEnable")
+
+SOURCES += [
+ "WSEnable.cpp",
+]
+
+OS_LIBS += [
+ "advapi32",
+ "ole32",
+ "shell32",
+]
+
+RCINCLUDE = "WSEnable.rc"
+
+# This isn't XPCOM code, but it wants to use STL so disable STL wrappers
+DisableStlWrapping()