Chromium что это
Перейти к содержимому

Chromium что это

Chromium

Chromium— приложение с открытым исходным кодом, ставшее основой для популярного браузера Google Chrome.

Разработчики Google улучшили Chrome и расширили его функциональность, тем не менее Chromium не сильно отличается от браузера, который является главным конкурентом Firefox и Internet Explorer.

Chromium легче, чем Chrome и предоставляет почти такую же производительность, как и решение от Google. Включает поддержку вкладок, инструменты управления загрузками и закладками, а также поддержку расширений из интернет-магазина Chrome.

Обзор возможностей Chromium

Интерфейс программы идентичен Google Chrome и включает такие же параметры настройки, как и более популярный собрат, а также полностью поддерживает расширения и темы оформления. Таким образом, два браузера имеют не так много различий, но для некоторых пользователей они имеют важное значение.

В отличие от Chromium, Chrome поставляется со встроенным флеш-плеером, функцией автоматического обновления, общей с другими продуктами Google и другими важными улучшениями.

Несмотря на эти различия, Chromium является более быстрым решением для веб-серфинга. Действительно, простота программы и функциональность могут не устроить некоторых пользователей.

Выбор браузера зависит от ваших нужд. Если Вы ищете простой браузер для просмотра страниц, Chromium может стать отличным выбором.

Chromium — это не только браузер, но и хороший фреймворк

Большинство людей привыкли, что Chromium — это и браузер, и основа для других браузеров. До недавнего времени я тоже так думал, но, изучая эту тему уже пару месяцев, я начал открывать другой дивный мир. Chromium — это огромная экосистема, в которой есть всё: и система зависимостей, и система кроссплатформенной сборки, и компоненты почти на все случаи жизни. Так почему же не попробовать создавать свои приложения, используя всю эту мощь?

Под катом небольшое руководство, как начать это делать.

Подготовка окружения

В статье я буду использовать Ubuntu 18.04, порядок действий для других ОС можно посмотреть в документации:

Установка depot_tools

depot_tools — это набор инструментов для разработки Chromium. Для его установки необходимо выполнить:

И добавить путь в переменную окружения PATH:

Важно: если depot_tools были скачаны в домашнюю папку, то не используйте

в переменной PATH , иначе могут возникнуть проблемы. Необходимо использовать переменную $HOME :

Получение кода

Для начала надо создать папку для исходников. Например, в домашней директории (необходимо около 30 Гб свободного места):

После этого можно скачать исходники с помощью утилиты fetch из depot_tools :

Теперь можно пойти попить чай/кофе, так как процедура небыстрая. Для экспериментов история не нужна, поэтому используется флаг —no-history . С историей будет ещё дольше.

Установка зависимостей

Все исходники лежат в папке src , идём в неё:

Теперь нужно поставить все зависимости с помощью скрипта:

И запустить хуки:

На этом подготовка окружения завершена.

Система сборки

В качестве основной системы сборки Chromium используется Ninja, а утилита GN применяется для генерирования .ninja -файлов.

Чтобы понять, как пользоваться этими инструментами, предлагаю создать тестовую утилиту example. Для этого в папке src надо создать подпапку example :

Затем в папке src/example надо создать файл BUILD.gn , который содержит:

BUILD.gn состоит из цели (исполняемого файла example ) и списка файлов, которые необходимы для сборки цели.

Следующим шагом надо создать сам файл example.cc . Для начала предлагаю сделать классическое приложение «Hello world»:

Исходный код можно найти на GitHub.

Чтобы GN узнала о новом проекте, нужно в файле BUILD.gn , который находится в src , в разделе deps добавить строку «//example» :

Теперь необходимо вернуться в папку src и сгенерировать проект с помощью команды:

GN также позволяет подготовить проект для одной из поддерживаемых IDE:

  • eclipse
  • vs
  • vs2013
  • vs2015
  • vs2017
  • vs2019
  • xcode
  • qtcreator
  • json

Например, для работы с проектом example в QtCreator надо выполнить команду:

После этого можно открыть проект в QtCreator:

Финальный шаг — сборка проекта с помощью Ninja:

На этом краткое ознакомление с системой сборки можно завершить.

Приложение можно запустить с помощью команды:

И увидеть Hello world. На самом деле, про систему сборки в Chromium можно написать отдельную статью. Возможно, и не одну.

Работа с командной строкой

В качестве первого примера использования кодовой базы Chromium как фреймворка предлагаю поиграться с командной строкой.

Задача: вывести на экран все аргументы, переданные приложению в стиле Chromium.
Для работы с командной строкой необходимо в example.cc подключить заголовочный файл:

А также надо не забыть в BUILD.gn добавить зависимость от проекта base . BUILD.gn должен выглядеть так:

Теперь всё необходимое будет подключено к example .

Для работы с командной строкой Chromium предоставляет синглтон base::CommandLine . Чтобы получить ссылку на него, надо использовать статический метод base::CommandLine::ForCurrentProcess , но сначала надо его инициализировать с помощью метода base::CommandLine::Init :

Все аргументы, переданные приложению в командной строке и начинающиеся с символа — возвращаются в виде base::SwitchMap (по сути, map<string, string> ) с помощью метода GetSwitches . Все остальные аргументы возвращаются в виде base::StringVector (по сути, vectоr<striпg> ). Этих знаний достаточно, чтобы реализовать код для задачи:

Полную версию можно найти на GitHub.

Чтобы собрать и запустить приложение надо выполнить:

На экран будет выведено:

Работа с сетью

В качестве второго и последнего на сегодня примера предлагаю поработать с сетевой частью Chromium.

Задача: вывести на экран содержимое URL’а, переданного в качестве аргумента.

Сетевая подсистема Chromium

Сетевая подсистема довольно большая и сложная. Входной точкой для запросов к HTTP, HTTPS, FTP и другим data-ресурсам является URLRequest , который уже определяет, какой из клиентов задействовать. Упрощённая схема выглядит так:

Полную версию можно посмотреть в документации.

Для создания URLRequest ‘а необходимо использовать URLRequestContext . Создание контекста — довольно сложная операция, поэтому рекомендуется использовать URLRequestContextBuilder . Он проинициализирует все необходимые переменные значениями по умолчанию, но, при желании, их можно поменять на свои, например:

Многопоточность

Сетевой стек Chromium расчитан на работу в многопоточной среде, поэтому пропустить эту тему нельзя. Базовыми объектами для работы с многопоточностью в Chromium являются:

  • Task — задача для выполнения, в Chromium это функция с типом base::Callback , которую можно создать с помощью base::Bind .
  • Task queue — очередь задач для выполнения.
  • Physical thread — кроссплатформенная обёртка над потоком операционной системы ( pthread в POSIX или CreateThread() в Windows). Реализовано в классе base::PlatformThread , не используйте напрямую.
  • base::Thread — реальный поток, который бесконечно обрабатывает сообщения из выделенной очереди задач; не рекомендуется создавать их напрямую.
  • Thread pool — пул потоков с общей очередью задач. Реализован в классе base::ThreadPool . Как правило, создают один экземпляр. Задачи в него отправляются с помощью функций из base/task/post_task.h .
  • Sequence or Virtual thread — виртуальный поток, который использует реальные потоки и может переключаться между ними.
  • Task runner — интерфейс для постановки задач, реализован в классе base::TaskRunner .
  • Sequenced task runner — интерфейс для постановки задач, который гарантирует, что задачи будут исполнены в том же порядке, в каком пришли. Реализовано в классе base::SequencedTaskRunner .
  • Single-thread task runner — аналогичен предыдущему, но гарантирует, что все задачи будут выполнены в одном потоке ОС. Реализовано в классе base::SingleThreadTaskRunner .

Реализация

Некоторые компоненты Chromium требуют наличия base::AtExitManager — это класс, позволяющий зарегистрировать операции, которые надо выполнить при завершении приложения. Использовать его очень просто, необходимо в стеке создать объект:

Когда exit_manager выйдет из области видимости, все зарегистрированные callback’и будут выполнены.

Теперь нужно позаботиться о наличии всех необходимых компонентов многопоточности для сетевой подсистемы. Для этого нужно создать Thread pool , Message loop с типом TYPE_IO для обработки сетевых сообщений, и Run loop — основной цикл программы:

Дальше нужно с помощью Context builder ‘а создать Context :

Чтобы послать запрос, необходимо с помощью метода CreateRequest объекта ctx создать объект URLRequest . В качестве параметров передаются:

  • URL, строка с типом GURL;
  • приоритет;
  • делегат, который обрабатывает события.

Вся основная логика находится в обработчике события OnResponseStarted : содержимое ответа вычитывается, пока не произойдёт ошибка или будет нечего читать. Так как после чтения ответа нужно завершить приложение, то делегат должен иметь доступ к функции, которая прервёт основной Run loop , в данном случае используется callback типа base::Closure .

Теперь всё готово для отправки запроса:

Чтобы запрос начал обрабатываться, надо запустить Run loop :

Полную версию можно найти на GitHub.

Чтобы собрать и запустить приложение нужно выполнить:

Финал

На самом деле, в Chromium можно найти много полезных кубиков и кирпичиков, из которых можно строить приложения. Он постоянно развивается, что, с одной стороны, является плюсом, а с другой стороны, регулярные изменения API не дают расслабиться. Например, в последнем релизе base::TaskScheduler превратился в base::ThreadPool , к счастью, без изменения API.

Что такое Chromium

Многие пользователи понятия не имеют о том, что такое Chromium, и ошибочно путают его с популярным веб-браузером Google Chrome. Названия похожи, но это не одно и то же. В данном материале мы расскажем о ключевых особенностях Хромиума.

Подробности

История Chromium началась в 2008 году. Именно тогда компания Google решила создать самый лучший в мире браузер. На тот момент было запланировано использовать высокоскоростной движок WebKit. И его начали использовать.

Картинка Надпись Chromium

А вот с Java скрипами не все было хорошо. Решения, для их нормальной поддержки были проприетарными. И ребята из Google не придумали ничего лучше, чем с нуля написать собственный движок для своих нужд. Его назвали V8.

В результате появился браузер, который работал намного быстрее конкурентов и поддерживал все современные технологии. Это был звездный час Google. И все было неплохо. Пока они не перевели свое детище на движок Blink.

Что же такое Хромиум?

Chromium – это свободный браузер с открытым исходным кодом, который лишен сервисов Google и поддержки медиа контента. Если пользователю нужны какие-то специальные плагины, то он устанавливает их самостоятельно.

Ключевой особенностью проекта Хромиум является безопасность. Разработчики данного веб-обозревателя тратят уйму времени на то, чтобы залатать дыры и повысить безопасность своего продукта.

По сути, это конструктор, на основе которого любой пользователь может собрать браузер своей мечты. Компанией предоставляется исключительно основа. Все остальное юзер делает сам. С одной стороны, это хорошо, так как пользователь сам решает, что ему нужно.

С другой стороны, данный веб-обозреватель не подходит новичкам, так как его очень трудно настраивать. Так что тем, кому нужен просто стабильный браузер лучше обратить внимание на Google Chrome и подобные продукты.

Отличия от Гугл Хром

Начнем с того, что Хромиум – свободный браузер с открытым исходным кодом. Он распространяется под лицензией GNU/GPL. А Chrome использует проприетарную лицензию и его исходный код закрыт. Со всеми вытекающими.

Еще одно отличие: Chromium напрочь лишен телеметрии и механизмов сбора данных для Google. А вот в Хроме такая неприятная штука есть. Данный браузер беззастенчиво собирает информацию о пользователях и ничуть этого не стесняется.

Картинка Сравнение Chromium и Google Chrome

Также в Хроме интегрирована поддержка таких форматов, как WebM, Theora, MP3, AAC и Vorbis. А Хромиум может поддерживать только свободные форматы. Вроде WebM и Vorbis. Все остальное доступно только при подключении соответствующих плагинов.

Chrome регулярно обновляется, а вот в Хромиуме механизм обновления выпилен. Данный браузер можно обновить только при помощи переустановки всего приложения. Такой способ не является удобным.

И, наконец, о стабильности. Гугл Хром априори стабильнее свободного Chromium по той простой причине, что разработкой браузера занимается целая команда. А над Хромиумом трудятся всего несколько разработчиков.

Вот чем Chromium отличается от Chrome. Естественно, большинство пользователей предпочтут стабильный и современный веб-обозреватель с поддержкой всех современных технологий. А проект Хромиум могут использовать только единицы.

Безопасность

Картинка Chromium

У Хромиума весьма интересная система безопасности. Она основана на принципе песочницы. Разработчики перевели всю работу движка веб-обозревателя именно в песочницу – этакий «предбанник», ограничивающий площадь для атаки на компьютер пользователя.

Именно поэтому Chromium считается одним из самых безопасных браузеров. Вредоносные объекты просто не могут добраться до компьютера пользователя через веб-обозреватель потому, что постоянно находятся в этой самой песочнице.

Инструменты разработчика

Ключевая особенность браузера Chromium. Этот веб-обозреватель обладает богатым набором инструментов для тестирования стабильности продукта и разработки расширений для него. Именно поэтому многие профессионалы предпочитают сие приложение.

В составе веб-обозревателя присутствует продвинутая консоль, позволяющая оперативно вносить изменения в код. Это полезно для тех, кто занимается доработкой браузера в домашних условиях. И это еще одна причина, по которой данный продукт не подходит обычным пользователям.

Для каких систем существует браузер?

Картинка Mac OS, Windows и Linux

Chromium доступен для всех версий ОС Windows (начиная с XP), Mac OS X, Linux Mint, Ubuntu, Arch, Mandriva, Slackware, Kali Linux, CentOS, Manjaro, Red Hat Linux и других ОС. Есть даже порт для Free BSD. Хоть и неофициальный.

А вот для мобильных платформ такого браузера, увы, не существует. В отличие от того же Гугл Хром. Однако это не так страшно. Да и зачем такой конструктор на мобильной платформе? Владельцам смартфонов нужен нормальный веб-обозреватель, а не приложение «сделай сам».

Заключение

А теперь подведем итоги и попытаемся ответить на вопрос о том, что лучше: Хром или Хромиум. Все зависит от того, в какой плоскости рассматривать вопрос. Chromium лучше тем, что не следит за пользователем и обладает повышенной безопасностью.

Но в тоже время, Chrome более прост в использовании. И большинство юзеров выберут именно его, так как настраивать веб-обозреватель «под себя» очень долго и нудно. И все-таки, Хромиум действительно лучше, так как не является проприетарными продуктом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *