Выпуск web-браузера Chrome 64
Компания Google представила релиз web-браузера Chrome 64. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента, системой автоматической установки обновлений и передачей при поиске RLZ-параметров.
Основные изменения в Chrome 64:
- В сборках для платформы Linux вывод уведомлений, отправленных через Notifications API или chrome.notifications, теперь производится через штатные механизмы пользовательских окружений (например, уведомления Chrome теперь выводятся как обычные уведомления KDE Plasma и GNOME);
- Запрещено автоматическое перенаправление на ссылки из внешних iframe-блоков, что позволяет блокировать работу жульнических рекламных вставок, открывающих другие страницы без ведома пользователя. Предложенный способ позволяет бороться со ссылками, закамуфлированными под кнопки воспроизведения или закрытия, или активируемыми через наложение прозрачного слоя, перехватывающего любые клики. Например, будут блокироваться всплывающие предложения, в которых нажатие кнопки закрытия диалога приводит к открытию дополнительных окон или вкладок с рекламируемыми страницами.
- Прекращено автоматическое воспроизведение видео со звуком на текущей вкладке, если в видеовставке по умолчанию не отключен звук (выставлен флаг mute или отсутствует звуковая дорожка). Для воспроизведения видео со звуком потребуется явный клик. Новое поведение позволит автоматически блокировать показ видеорекламы со звуком, которая создаёт неудобства и отвлекает пользователя при просмотре страниц. Блокировка будет сниматься для сайтов, на которых пользователь часто просматривает мультимедийный контент, которым пользователь предоставил специальные полномочия или которые добавлены на домашний экран в мобильной версии;
- На 15 февраля намечено включение встроенного блокировщика рекламы, нацеленного на борьбу с рекламными блоками, мешающими восприятию содержимого и не соответствующими критериям, выработанным Коалицией по улучшению рекламы (перекрывающие контент всплывающие окна, реклама со счётчиком секунд до закрытия, отображаемая до загрузки контента, очень большие закреплённые блоки, мигание фона, агрессивное изменение цветов);
- Помимо представленных в январском обновлении Chrome 63 мер про предотвращению эксплуатации уязвимостей Meltdown и Spectre (ограничена точность измерения интервалов времени функцией performance.now () и полностью отключена поддержка типа SharedArrayBuffer), в Chrome 64 внесены некоторые дополнительные изменения для противодействия подобным атакам на уровне движка V8. В частности, выполнена защита от обращения к памяти вне границ области, отведённой для WebAssembly и asm.js, а также доступной через массивы и строки JavaScript;
- Внесена серия оптимизаций в движок V8: Производительность оператора instanceof возросла в 3.6 раза, что привело к увеличению производительности библиотеки uglify-js на 15–20%. Устранены некоторые узкие места с производительностью Function.prototype.bind. WeakMap и WeakSet переписаны на базе CodeStubAssembler, что отразилось пятикратным ростом их производительности. С использованием CodeStubAssembler также переписан Array.prototype.slice, что позволило ускорить его примерно в 4 раза;
- Проведена работа по сокращению потребления памяти в движке V8 — при просмотре типичных сайтов расход памяти каждой вкладкой снизился на несколько сотен килобайт.
- На страницу chrome://gpu добавлены сведения о доступных механизмах аппаратного ускорения декодирования и кодирования видео для для различных форматов (h.264, vp8, vp9 и т.п.);
- Добавлен API Resize Observer, позволяющий подключить обработчик, которому будут направляться уведомления об изменении размера указанных элементов на странице. Ключевое отличие нового API от window.onresize и CSS Media Queries, заключается в том, что можно определить факт изменения конкретного элемента на странице, а не всей видимой области, что позволяет отреагировать изменением только этого элемента без изменения всего видимого содержимого;
- Представлено свойство import.meta, при помощи которого можно запросить метаданные с информацией об определённом используемом модуле. В настоящее время доступно только свойство import.meta.url, позволяющее узнать URL, с которого был загружен модуль (например, для определения базового адреса для загрузки ресурсов, связанных с модулем), но в дальнейшем ожидается появление и других свойств, таких как размер модуля;
- Добавлена возможность создания анимации при помощи CSS-свойства offset-path, определив в данном свойстве геометрический путь по которому должен перемещаться элемент;
- Добавлено CSS-свойство text-decoration-skip-ink для управления поведением отрисовки в случае если верхнее или нижнее подчеркивание накладывается на глиф в другой строке;
- Координаты PointerEvent для курсора мыши (pointerType=mouse) теперь передаются в дробном виде, что позволяет определять позицию курсора с большей точностью;
- В регулярных выражениях появилась поддержка именованных групп (named captures), позволяющий связать сопоставленные регулярным выражением части строки с определёнными именами вместо порядковых номеров совпадений (например, вместо »/(\d{4})-(\d{2})-(\d{2})/» можно указать »/(? ‹year›\d{4})-(? ‹month›\d{2})-(? ‹day›\d{2})/» и получить доступ к году не через result[1], через result.groups.year);
- В регулярных выражениях добавлена возможность экранирования классов Unicode-символов при помощи конструкций \p{…} и \P{…}. Например, \p{Number} определяет все возможные знаки с изображением цифр (включая символы вида ①), \p{Alphabetic} — буквы (в том числе иероглифы), \p{Math} — математические символы и т.п.
- Добавлен метод Intl.Numberformat.prototype.formatToParts (), позволяющий использовать форматирования с использованием правил текущей локали для строк, выдаваемых функциями форматирования NumberTimeFormat;
- Для элементов video и audio включена по умолчанию упреждающая загрузка метаданных (вместо попытки загрузки самого ресурса), для соответствия с поведением других браузеров и экономии трафика;
- Добавлена возможность воспроизведения HDR-видео (профиль HDR VP9 Profile 2 10-bit) на платформе Windows 10 в режиме HDR;
- Для совместимости со спецификациями HTML браузер теперь возвращае ошибку «NotSupportedError» через DOMException, если для мультимедийного элемента заданы неподдерживаемые требования к пропускной способности (playbackRate), например, отрицательное значение;
- Добавлен «Origin Trial» для API Media Capabilities, позволяющий получить доступ к статистике о производительности и эффективности потребления энергии во время воспроизведения звука или видео;
- В объект Request добавлен атрибут cache для управления режимом кэшировани («default», «no-store», «reload», «no-cache», «force-cache», «only-if-cached»). Для просмотра применяемого режима кэширования можно использовать свойство Request.prototype.cache;
- Добавлена возможность применения Permissions API для получения информации о подтверждении пользователем доступа к камере и микрофону;
- В Focus Management API добавлен атрибут preventScroll для установки фокуса на элементе без прокрутки экрана;
- Для SVG добавлено CSS-свойство transform-box для трансформации и смены позиции преобразованного SVG-элемента;
- Добавлена экспериментальная (chrome://flags/#enable-experimental-web-platform-features) поддержка API AudioWorklet для низкоуровневой обработки звука через определение собственных AudioNodes.
- Вызов функции window.alert () теперь не приводит к выводу фоновой вкладки на передний план, вместо этого отображается специальный индикатор, а диалог выводится только после перехода на вкладку из которой было выведено предупреждение.
Кроме нововведений и исправления ошибок в новой версии устранено 53 уязвимости. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity и LibFuzzer. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе, за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 24 премии на сумму 22 тысячи долларов США (по одной премии в $4500, $3000 и $2500, две премии $2000, пять премий $1000, семь премий $500). Размер семи вознаграждений пока не определён.
© OpenNet