Релиз web-браузера Chrome 72
Компания Google представила релиз web-браузера Chrome 72. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента, системой автоматической установки обновлений и передачей при поиске RLZ-параметров. Следующий выпуск Chrome 73 запланирован на 12 марта.
Основные изменения в Chrome 72:
- Внесены изменения в конфигуратор. Настройка автозаполнения полей разделена на несколько секций для отдельного управления заполнением полей с паролями, платёжными формами и адресами. В интерфейс добавлен ярлык для быстрого перехода к настройкам учётной записи в Google. В настройки версии для Android добавлена возможность добавление альтернативных поисковых систем. Прекращена поддержка настройки подключения устройств Chromecast из браузера (для настройки предлагается использовать отдельное приложение);
- Включена по умолчанию возможность просмотра видео поверх контента в режиме «картинка в картинке» (Picture-In-Picture), позволяющем отсоединить видео в форме плавающего окна, которое остаётся на виду в процессе навигации в браузере. Для просмотра в данном режиме видео с YouTube необходимо два раза кликнуть на видео правой кнопкой мыши и выбрать режим «Picture in picture». Отсоединение видео работает только при использовании на сайте API Picture-in-Picture, для не адаптированных для нового режима сайтов можно использовать внешнее дополнение;
- Активирована по умолчанию защита от попыток выполнения стороннего кода внутри процессов Chrome. Исключение сделано только для кода, подписанного цифровой подписью Microsoft и систем для людей с ограниченными возможностями. Подобные подстановки кода наблюдаются на 2/3 систем с Windows и, как правило, производятся антивирусным ПО. По статистике, данные манипуляции приводят к снижению стабильности работы и являются причиной 15% всех наблюдаемых крахов браузера. Вместо подстановки кода в запускаемые процессы следует использовать дополнения и API Native Messaging;
- При открытии сайтов с использованием TLS 1.0/1.1 теперь выводится специальное предупреждение о применении устаревшей версии TLS. По умолчанию поддержку TLS 1.0/1.1 планируют прекратить в Chrome 81, который ожидается в январе 2020 года, но настройка, дающая возможность вернуть TLS 1.0/1.1 будет сохранена до января 2021 года;
- Усилена защита от всплывающих окон — запрещено открытие окон через вызов метода window.open () в обработчиках событий закрытия страницы (onUnload);
- Реализован первый этап прекращения поддержки FTP — отключено отображение содержимого каталогов FTP, но загрузки по прямым ссылкам пока работают;
- В Web Authentication API добавлена поддержка аутентификации на сайте с использованием токенов и биометрических датчиков Bluetooth U2F и Windows Hello;
- В версии для Android добавлена возможность вызова экрана со списком ранее открытых в текущей вкладке страниц через длительное удержание нажатия кнопки возврата на предыдущую страницу («Back»). Добавлен экспериментальный режим оформления «Chrome Duet», при котором изменяется раскладка панелей и меню перемещается в нижнюю панель (для включения в chrome://flags следует активировать опцию «chrome-duet»);
- В классах добавлена возможность определения публичных полей, без явного использования конструктора и вне входящих в состав класса функций. В будущих выпусках планируется предоставить возможность определения и приватных классов.
class MyComponent extends Component { // создадим публичное поле с именем "state" state = {}; render() { doStuff(this.state); } }
- Добавлено API User Activation Query для определения активации некоторых функций, по умолчанию отключенных до того, как пользователь начнёт взаимодействие со страницей. Например, разработчик может определить появился ли доступ к функциям перехода в полноэкранный режим, автоматического воспроизведения звука и открытия дополнительных окон. Проверка активации производится через свойство userActivation, которое предлагает два параметра hasBeenActive и isActive, позволяющих определить взаимодействовал ли пользователь со страницей или она пока просто загружена и остаётся нетронутой;
- Добавлена поддержка локализованных списков. Для применения специфичных для языков связок (например, замены «or» на «или», «and» на «и») и единиц измерения предложен метод Intl.format (), который достаточно инициализировать с указанием необходимой локали.
const lf = new Intl.ListFormat('en'); lf.format(['Frank', 'Christine', 'Flora']); // → 'Frank, Christine, and Flora' // при локали "ru" будет 'Frank, Christine и Flora'
- Изменено поведение вызова Cache.addAll (). В соответствии с требованием спецификации при попытке добавления дубликатов теперь выводится ошибка, а не перезаписывается старое содержимое;
- В Service worker добавлено новое свойство FetchEvent.resultingClientId, в котором сохраняется идентификатор клиента, а не документа или обработчика;
- В MediaStreamTrack добавлено свойство resizeMode для определения отображения контента в исходном разрешении или применения кадрирования и масштабирования;
- Для возвращаемых методом JSON.stringify () Unicode-строк обеспечена более строгая проверка корректности и реализовано экранирование символов при невозможности их отображения в UTF-8. Например, при вызове JSON.stringify (»\uD800») раньше выводилось »�», а теперь будет выведено »\ud800»;
- Символ '#' теперь рассматривается как индикатор окончания данных в URL. Ранее символ мог без экранирования использоваться внутри данных в составе URL, что нарушает спецификацию. Теперь первый же символ рассматривается как окончание блока данных.
- Удалена поддержка HTTP-заголовка Public-Key-Pins (ручные привязки пока сохранены), позволяющего сайтам явно определить сертификаты каких удостоверяющих центров допустимо использовать для заданного сайта. Вместо PKP разработчикам сайтов рекомендуется использовать HTTP-заголовок Expect-CT c SCT-параметрами (SignedCertificate Timestamps) для выявления некорректных SSL-сертификатов при помощи системы Certificate Transparency, которая предусматривает возможность отмены ошибочных привязок;
- В инструментах для разработчиков обеспечена визуализация метрик производительности, полученных при профилировании загрузки страницы;
- В дереве DOM реализована подсветка узлов с текстом;
- Добавлена поддержка копирования в буфер обмена ссылки на DOM-узел в форме выражения document.querySelector ();
- Реализация панели аудита обновлена до выпуска Lighthouse 3.2, в котором появился режим определения применения на странице известных JavaScript-библиотек;
- В JavaScript-движке V8 включена по умолчанию техника «Embedded builtins», позволяющая экономить память благодаря применению общего сгенерированного кода в разных изолированных обработчиках V8. Оптимизация включена для всех платформ, за исключением ia32;
- На 30% ускорено выполнение операций парсинга JavaScript. Если раньше парсинг занимал около 9.5% времени работы движка V8, то теперь этот показатель сократился до 7.5%, что положительно отразилось на скорости открытия страниц и отзывчивости интерфейса. Например, время разбора скриптов Facebook сократилось с 270 до 170 мс.
- Задействована более быстрая реализация операций async/await. Увеличена производительность массивов с диапазонами, определяемых в виде »[…x]» или »[…x, 1, 2]». Внесены оптимизации в WebAssembly и обработчики исключений. Добавлен режим асинхронной трассировки стека (»--async-stack-traces»).
Кроме нововведений и исправления ошибок в новой версии устранено 58 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Одна из проблем (CVE-2019–5754) помечена как критическая, т.е. позволяет обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения. Указанная уязвимость вызвана ошибкой в реализации протокола QUIC (детали пока не приводятся). В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 34 премии на сумму 50.5 тысяч долларов США (по одной премии в $7500 и $4000, две премии $5000, шесть премий $3000, две премии $2000, пять премий $1000 и четыре премий $500). Размер 13 вознаграждений пока не определён.
© OpenNet