Первый мобильный браузер с поддержкой расширений для Chromium. Новая альфа Яндекс.Браузера
Первые дополнения появились в Internet Explorer еще в 1999 году и за следующее десятилетие практика открытия доступа к API стала обязательной для любого более-менее популярного браузера. Сейчас многие из нас не представляют себе работу за компьютером без возможности добавить в браузер необходимую функцию собственными руками. А вот с Android пока еще все не так. Несмотря на рост производительности современных мобильных устройств, браузерные расширения на Android — скорее исключение, чем правило.
Мобильные браузеры не всегда воспринимались пользователями всерьез. Во времена медленного интернета и слабых мобильных устройств люди предпочитали решать свои задачи с помощью компьютера. Сейчас их отношение постепенно меняется. Нас все чаще просят добавить в продукт специфичные функции и инструменты. Что-то из этого мы встраиваем в Яндекс.Браузер (например, режим чтения и переводчик). Но многие из запросов было бы логично решить с помощью сторонних дополнений, а не перегружать Браузер. Добавим к этому традиционную просьбу поддержать дополнения на Android, которую достаточно часто присылают через обратную связь. В общем, мы стали не закрывать глаза на изменения вокруг и приступили к разработке.
Поддержать дополнения в браузере на Android можно двумя способами. Можно предусмотреть API, с которым бы работали другие приложения из Google Play. Эта практика уже многим знакома: например, кодеки для видеоплееров зачастую распространяются в виде отдельных приложений. Мы и сами нечто подобное совсем недавно сделали с блокировкой рекламы. У этого подхода есть два больших минуса: отсутствие дополнений на старте и необходимость создавать свой велосипед, который был бы несовместим с дополнениями для настольной версии браузера. А нам бы хотелось, чтобы люди могли использовать на Android те же инструменты, к которым они привыкли на компьютере.
В чем заключается второй способ, вы уже догадались. Расширения для Chrome и других браузеров на основе Chromium появились в начале 2010 года, и тысячи разработчиков со всего мира в течение всех этих лет создавали собственные инструменты. Яндекс.Браузер, несмотря на функциональные отличия, также основан на Chromium и поддерживает установку дополнений на компьютере. И вполне логично в этой ситуации распространить поддержку еще и на Android. До нас этого никто не сделал, но какие тут могут быть сложности, ведь на Windows все работает?
Сначала может показаться, что все проблемы в отсутствии интерфейса для дополнений. Этого кода и правда нет в проекте, но мы изначально использовали собственный интерфейс, поэтому так нам было даже проще. Но нарисовать интерфейс — это капля в море, основные трудности связаны не с ним.
Когда мы попробовали собрать Яндекс.Браузер для Android с флагом enable_extensions, то получили порядка 600 ошибок совместимости. Флаг включения расширений, как и отвечающий за них код, был до мозга костей завязан на специфичное для десктопа окружение. Небольшой пример для любопытных разработчиков. Возьмем объект Browser. Browser — центральный контроллер UI десктопного браузера. Он содержит много чего интересного, в том числе модель TabStripModel, которая активно используется дополнениями для работы с вкладками. Но под Android все это не собирается. Мы начинаем тянуть за одну нить, а вытягиваем целый ворох несовместимостей. И так на каждом шагу.
Платформа расширений за 6 лет обросла большим количеством API. И у каждого из них могут быть десятки методов со своей непредсказуемой работой на Android. Поэтому для начала мы поддержали наиболее востребованные возможности, которых вполне достаточно для того, чтобы уже в альфе заработали такие дополнения, как Evernote, LastPass, Ghostery, SaveFrom.net, Tampermonkey, Яндекс.Погода и многие другие. Кстати, с этим нам помогли разработчики популярных дополнений, которых примерно месяц назад мы пригласили на закрытое тестирование ранних сборок. Чтобы им было проще ориентироваться в наших возможностях, мы написали диагностическое расширение, которое формирует наглядный отчет.
Что касается источников дополнений, то тут мы традиционно не ограничиваем людей каким-то одним каталогом и поддерживаем установку из Chrome Web Store, Opera Addons, собственного раздела рекомендованных дополнений, по inline-ссылкам или просто из каталога на SD-карте.
В заключение несколько слов о безопасности. Наша реализация дополнений на Android полностью соответствует общепринятой модели, т.е. дополнения работают в «песочнице» и изолированы как от остальной части браузера, так и от операционной системы. К тому же, как и на десктопе, мы умеем блокировать известные вредоносные разработки.
Установить альфа-версию Яндекс.Браузера можно из Google Play. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.