Компания Google опубликовала релиз web-браузера Chrome 126. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google API и передачей при поиске RLZ-параметров. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель. Следующий выпуск Chrome 127 запланирован на 23 июля.
Основные изменения в Chrome 126:
- Во встроенный PDF-просмотрщик интегрирована возможность извлечения текста из документа, вызываемая через опцию “Extract text from PDF” в контекстном меню. Для извлечения текста из отсканированных документов, в которых текст вставлен в виде изображения, используется механизм оптического распознавания символов (OCR) на базе системы машинного обучения. Ожидается, что новая возможность упростит работу с PDF-документами людей, имеющих проблемы со зрением и пользующихся экранными ридерами. В дальнейшем планируется реализовать распознавание текста на показываемых на страницах изображениях и на скриншотах. OCR-движок включён по умолчанию у 50% пользователей, а остальные могут активировать его через настройку “chrome://flags/#pdf-ocr”.
- На страницу конфигуратора с параметрами производительности
(“Производительность/ Экономия памяти” в разделе chrome://settings/performance) добавлена возможность настройки уровня агрессивности применения режима экономии памяти (Memory Saver), который снижает потребление оперативной памяти за счёт освобождения памяти, занимаемой неактивными вкладками. Например, при выборе умеренного уровня браузер будет выгружать из памяти меньше вкладок, чем при установки максимального. Настройку, которая по умолчанию доступна лишь для части пользователей, можно активировать через параметр “chrome://flags/#memory-saver-aggressiveness”. - Для некоторых пользователей в просмотрщике PDF задействована по умолчанию новая архитектура OOPIF (out-of-process iframe), при которой содержимое документа обрабатывается в отдельном процессе. Новая архитектура избавлена от усложнений, свойственных реализации на базе механизма GuestView, и упрощает добавление новых возможностей в PDF-просмотрщик. Для включения новой архитектуры можно использовать настройку “chrome://flags/#pdf-oopif”.
- Добавлен режим реактивной упреждающей загрузки (Reactive prefetch), осуществляющий загрузку связанных со страницей ресурсов во время навигации, не дожидаясь их фактического запроса, что позволяет ускорить открытие новых страниц. Для предсказания ресурсов, которые могут потребоваться в дальнейшем, задействован внешний сервис Google, возвращающий список рекомендаций после отправки в него URL страниц, по которым выполняется навигация.
- Добавлена возможность поиска в сервисе Google Lens по любым изображениям и тексту, видимым на экране. Возможность включается через контекстное меню, индикатор в адресной строке или меню “⋮”, после чего пользователь может выделить интересующий объект на экране и получить информацию о нём из Google Lens. При выполнении операции на сервер Google осуществляется отправка
скриншота экрана. Возможность пока активирована по умолчанию для 1% пользователей. Для включения и выключения поддержки Google Lens может использоваться параметр “chrome://flags/#enable-lens-region-search-static-page”. - Подведены итоги оптимизаций для ускорения прохождения теста Speedometer 3 – за два года производительность Chrome в этом тесте увеличилась на 72%. Например, была ускорена работа функции SpaceSplitString, используемой при разборе выражений типа “class=’foo bar'”, оптимизированы функции работы с памятью, убраны лишние операции при работе с элементами web-форм и ускорены наиболее часто используемые действия, оптимизировано использование innerHTML, ускорена отрисовка шрифтов. Ускорения также удалось добиться благодаря оптимизации сборщика мусора в движке V8, эффективность которого повысилась благодаря активации сборки мусора во время простоя процесса отрисовки, что бы не конкурировать с приложением за ресурсы CPU.
- Значительно повышена эффективность работы с Cookie, позволившая снизить задержки при работе с сайтами. Ранее при каждом обращении к Cookie, из занимающегося обработкой сайта процесса отправлялся синхронный IPC-запрос в процесс, обеспечивающий сетевое взаимодействие. Так как в web-приложениях достаточно активно используются значения из Cookie подобные запросы между процессами замедляли работу, при том, что 87% обращений к другому процессу были избыточны.
Для решения проблемы задействована новая архитектура, при которой каждый процесс содержит свою копию данных Cookie и обращается к ней напрямую, а изменения в Cookie, которые, например, могут произойти при работе с теми же Cookie в другой вкладке, отслеживаются через механизм версионирования. Суть данного механизма в том, что к каждому значению
document.cookie прикрепляется счётчик с номером версии, который хранится в разделяемой памяти, увеличивается при изменении значения и сверяется с имеющимся экземпляром при чтении. - API View Transitions, упрощающий создание переходных анимационных эффектов между разными состояниями DOM (например, плавный переход от одного изображения к другому), по умолчанию разрешён для создания эффектов перехода от одной страницы к другой в пределах одного сайта (same-origin). Ранее данный API можно было использовать только при изменении состояний на одной странице. Для применения эффектов перехода между разными документами следует использовать в @-правиле “view-transition” свойство “navigation: auto”.
- Включено API CloseWatcher, дающее возможность отслеживать в web-приложениях Close-запросы и реагировать на их поступление (например, можно создать обработчик нажатия кнопки “назад” на Android-смартфоне).
Close-запросы формируются при попытке закрытия модальных () и всплывающих диалогов (popover=””) через нажатие клавиши Esc, используя кнопку “Назад” или экранный жест на смартфонах. - В API Gamepad, позволяющий отслеживать и обрабатывать события от геймпадов и игровых контроллеров, добавлена поддержка механизмов обеспечения обратной связи (trigger-rumble), например, вибрации контроллера.
- В интерфейсы GeolocationCoordinates и GeolocationPosition добавлен метод .toJSON() для сериализации объектов с координатами формате JSON.
- В версии для ChromeOS добавлена поддержка режима отображения вкладок (CSS-свойство “display: tabbed”), включающий использование вкладок, что, например, можно использовать для организации редактирования нескольких документов в одном web-приложении.
- Добавлена экспериментальная возможность (origin trial) предпросмотра содержимого, получаемого с камеры или микрофона.
- В API WebGPU значительно ускорена компиляция шейдеров. В бэкенде для графического API Vulkan оптимизирована загрузка данных в GPU (обеспечена прямая запись в буфер GPU без промежуточного копирования).
- Внесены улучшения в инструменты для web-разработчиков. В секции ‘Application > Storage’ добавлена возможность инспектирования данных, сохранённых с использованием API Storage Buckets, позволяющим организовать хранение данных с разбиением хранилища на отдельные сегменты, ассоциированные с API IndexedDB и CacheStorage. В панели оценки производительности добавлена возможность перемещения и скрытия треков, а также исключения информации о выполнении скриптов из графика производительности и включения режима искусственного замедления производительности системы в 20 раз.
В панели отслеживания сетевой активности предоставлена поддержка подстановки в полученный ответ полной строки с HTTP-заголовком в формате “имя: значение”. В панель наблюдения за потреблением памяти добавлены фильтры для выявления неэффективной работы с памятью, например, наличие дубликатов строк или оставление объектов, связанных с отсоединёнными DOM-узлами.
Кроме нововведений и исправления ошибок в новой версии устранена 21 уязвимость. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. 9 проблемам присвоен высокий уровень опасности. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 11 премии на сумму более 168 тысяч долларов США.
За уязвимость CVE-2024-5839, связанную с проблемой в реализации механизма выделения памяти, выплачена рекордная премия, размером 100115 долларов. Данной уязвимости присвоен средний уровень опасности, при том, что она потенциально позволяет добиться повреждения памяти в кучу при обработке специально оформленного HTML-содержимого. Кроме того, выплачено по одной премии в 25000, 7000, 3000, 2000, 1000 и 500 долларов, а также по две премии в 10000 и 5000 долларов. Размер 7 вознаграждений пока не определён.