Найти тему
Проект OpenNet

Релиз web-браузера Chrome 72

Компания Google представила релиз web-браузера Chrome 72. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента, системой автоматической установки обновлений и передачей при поиске RLZ-параметров. Следующий выпуск Chrome 73 запланирован на 12 марта.

Основные изменения в Chrome 72:

Внесены изменения в конфигуратор. Настройка  автозаполнения полей разделена на несколько секций для отдельного  управления заполнением полей с паролями, платёжными формами и адресами. В  интерфейс добавлен ярлык для быстрого перехода к настройкам учётной  записи в Google. В настройки версии для Android добавлена возможность  добавление альтернативных поисковых систем. Прекращена поддержка  настройки подключения устройств Chromecast из браузера (для настройки  предлагается использовать отдельное приложение);
Внесены изменения в конфигуратор. Настройка автозаполнения полей разделена на несколько секций для отдельного управления заполнением полей с паролями, платёжными формами и адресами. В интерфейс добавлен ярлык для быстрого перехода к настройкам учётной записи в Google. В настройки версии для Android добавлена возможность добавление альтернативных поисковых систем. Прекращена поддержка настройки подключения устройств Chromecast из браузера (для настройки предлагается использовать отдельное приложение);
Включена  по умолчанию возможность просмотра видео поверх контента в режиме  "картинка в картинке" (Picture-In-Picture), позволяющем отсоединить  видео в форме плавающего окна, которое остаётся на виду в процессе  навигации в браузере. Для просмотра в данном режиме видео с YouTube  необходимо два раза кликнуть на видео правой кнопкой мыши и выбрать  режим "Picture in picture". Отсоединение видео работает только при использовании на сайте API Picture-in-Picture, для не адаптированных для нового режима сайтов можно использовать внешнее дополнение;
Включена по умолчанию возможность просмотра видео поверх контента в режиме "картинка в картинке" (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 реализована подсветка узлов с текстом;
Добавлена поддержка копирования в буфер обмена ссылки на DOM-узел в  форме выражения document.querySelector();
Добавлена поддержка копирования в буфер обмена ссылки на DOM-узел в форме выражения document.querySelector();
Реализация панели аудита обновлена до выпуска Lighthouse 3.2, в котором появился режим определения применения на странице известных JavaScript-библиотек;
Реализация панели аудита обновлена до выпуска Lighthouse 3.2, в котором появился режим определения применения на странице известных JavaScript-библиотек;
  • В JavaScript-движке V8 включена по умолчанию техника "Embedded builtins", позволяющая экономить память благодаря применению общего сгенерированного кода в разных изолированных обработчиках V8. Оптимизация включена для всех платформ, за исключением ia32;
На 30% ускорено выполнение операций парсинга  JavaScript. Если раньше парсинг занимал около 9.5% времени работы движка  V8, то теперь этот показатель сократился до 7.5%, что положительно  отразилось на скорости открытия страниц и отзывчивости интерфейса.   Например, время разбора скриптов Facebook сократилось с 270 до 170 мс.
На 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 вознаграждений пока не определён.