Компания Google представила релиз web-браузера Chrome 95. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента (DRM), системой автоматической установки обновлений и передачей при поиске RLZ-параметров. В соответствии с новым 4-недельным циклом разработки следующий выпуск Chrome 96 запланирован на 16 ноября. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель, в которой сформировано обновление для прошлого выпуска Chrome 94.
Основные изменения в Chrome 95:
- Для пользователей Linux, Windows, macOS и ChromeOS предложена новая боковая панель, показываемая справа от содержимого и активируемая при клике на специальный значок в панели с адресной строкой. В панели выводится сводка с закладками и списком для чтения. Изменение включено не для всех пользователей, для активации можно использовать настройку “chrome://flags/#side-panel”.
- Реализован вывод явного запроса полномочий на сохранение адресов, введённых в web-формах, для последующего использования в системе автозаполнения форм. При определении наличия адресов в формах пользователю теперь показывается диалог, позволяющий сохранить адрес, отредактировать, обновить ранее сохранённый адрес или отказаться от сохранения.
- Удалён код для поддержки протокола FTP. В Chrome 88 поддержка FTP была отключена по умолчанию, но был оставлен флаг для её возвращения.
- Прекращена поддержка URL с именами хостов, заканчивающихся цифрой, но не соответствующих адресам IPv4. Например, URL “https://127.1/”, “https://foo.127.1/” и “https://127.0.0.0.1” теперь будут считаться некорректными.
- Для WebAssembly реализована возможность создания обработчиков исключений, которые могут перехватить выполнение в случае возникновения исключения при выполнении определённого кода. Поддерживается как перехват известных модулю WebAssembly исключений, так и исключений в процессе вызова импортированных функций. Для перехвата исключений модуль WebAssembly должен быть собран поддерживающим исключения компилятором, таким как Emscripten.
Отмечается, что обработка исключений на уровне WebAssembly позволяет существенно сократить размер генерируемого кода, по сравнению с обработкой исключений силами JavaScript. Например, сборка оптимизатора Binaryen с обработкой исключений силами JavaScript приводит к увеличению кода на 43%, а силами WebAssembly – на 9%. Кроме того, при использовании режима оптимизации “-O3” код с обработкой исключений силами WebAssembly практически не отличается по производительности от кода без обработчиков исключений, в то время как обработка исключений при помощи JavaScript приводит к замедлению выполнения на 30%.
- Запрещено совместное использование модулей WebAssembly между разными доменами (cross-origin) при обработке одного сайта.
- В режиме Origin Trials (экспериментальные возможности, требующие отдельной активации) добавлено несколько новых API. Origin Trial подразумевает возможность работы с указанным API из приложений, загруженных с localhost или 127.0.0.1, или после прохождения регистрации и получения специального токена, который действует ограниченное время для конкретного сайта.
- Включено урезание информации в HTTP-заголовке User-Agent и JavaScript параметрах navigator.userAgent, navigator.appVersion и navigator.platform. В заголовке оставлены только сведения о названии браузера, значительной версии браузера, платформе и типе устройства (мобильный телефон, ПК, планшет). Для получения дополнительных данных, таких как точная версия и расширенные данные о платформе, необходимо использовать API User Agent Client Hints. Начало урезания User-Agent на системах обычных пользователей намечено на выпуск Chrome 102, который будет опубликован через пол года.
- Предложена возможность создания дескрипторов доступа (Access Handles) для API File System Access, позволяющего web-приложениям читать и записывать данные напрямую в файлы и каталоги на устройстве пользователя. Для сокращения способов обращения web-приложений к файловой системе компания Google планирует объединить API File System Access и Storage Foundation. В качестве подготовительного этапа к подобному объединению предложена поддержка дескрипторов доступа, дополняющего методы работы на основе файловых дескрипторов расширенными возможностями, такими как выставление блокировки записи другими процессами и создание раздельных потоков на запись и чтение, в том числе с поддержкой чтения и записи из worker-ов в синхронном режиме.
- Стабилизирован и предложен по умолчанию API Secure Payment Confirmation с реализацией нового расширения ‘payment’, обеспечивающего дополнительное подтверждение совершаемой платёжной операции. Проверяющая сторона, например, банк, имеет возможность сгенерировать открытый ключ PublicKeyCredential, который может быть запрошен продавцом для дополнительного безопасного подтверждения платежа через API Payment Request, используя метод платежа ‘secure-payment-confirmation’.
- В callback-вызовы, установленные через конструктор PerformanceObserver, реализована передача свойства droppedEntriesCount, позволяющего понять сколько метрик производительности сайта было отброшено из-за того, что они не уместились в предоставленный буфер.
- Добавлен API EyeDropper, позволяющий вызвать предоставляемый браузером интерфейс для определения цвета произвольных пикселей на экране, что может применяться, например, в графических редакторах, реализованных в виде web-приложений. const eyeDropper = new EyeDropper(); const result = await eyeDropper.open(); // result = {sRGBHex: ‘#160731’}
- Добавлена функция self.reportError(), позволяющая скриптам выводить ошибки на консоль, эмулируя возникновение неперехватываемого исключения.
- Добавлен API URLPattern, для проверки соответствия URL определённому шаблону, что, например может применяться для разбора ссылок и для перенаправления запросов на обработчики в service worker. const p = new URLPattern({ protocol: ‘https’, hostname: ‘example.com’, pathname: ‘/:folder/*/:fileName.jpg’, });
- Расширен API Intl.DisplayNames, через который можно получить локализированные названия языков, стран, валют, элементов дат и т.п. В новой версии добавлены новые типы имён “calendar” и “dateTimeField”, через которые можно узнать локализованные названия календаря и полей даты и времени (например, название месяцев). Для типа “language” добавлена поддержка использования диалектов языков.
- В API Intl.DateTimeFormat добавлена поддержка новых значений параметра timeZoneName: “shortGeneric” для вывода короткого идентификатора часового пояса (например, “PT”, “ET”), “longGeneric” – длинного (“Pacific Time”, “Mountain Time”), “shortOffset” – с коротким смещением относительно GMT (“GMT+5”) и “longOffset” с длинным смещением относительно GMT (“GMT+0500”).
- Объявлен устаревшим API U2F (Cryptotoken), вместо которого следует использовать API Web Authentication. API U2F будет отключён по умолчанию в выпуске Chrome 98 и полностью удалён в Chrome 104.
- Внесены улучшения в инструменты для web-разработчиков. В панели Styles упрощена корректировка свойств CSS, связанных с размером (height, padding и т.п.). Во вкладке Issues предоставлена возможность скрытия отдельных проблем. В web-консоли и панелях Sources и Properties улучшено отображение свойств (собственные свойства теперь выделяются жирным шрифтом и показываются в верху списка).
Кроме нововведений и исправления ошибок в новой версии устранено 19 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 16 премий на сумму 74 тысячи долларов США (одна премия $20000, две премии $10000, одна премия $7500, одна премия $6000, три премии $5000 и по одной премии в $3000, $2000 и $1000). Размер 5 вознаграждений пока не определён.