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

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

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

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