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

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

  • Активирован по умолчанию режим защиты от передачи сторонних Cookie, который в случае отсутствие атрибута SameSite в заголовке Set-Cookie по умолчанию выставляет значение «SameSite=Lax», ограничивающее отправку Cookie для вставок со сторонних сайтов (но сайты по-прежнему смогут отменить ограничение, явно выставляя при установке Cookie значение SameSite=None). До сих пор браузер передавал Cookie на любой запрос к сайту, для которого имеются выставленные Cookie, даже если изначально открыт другой сайт, а обращение осуществляется косвенно при помощи загрузки картинки или через iframe. В режиме ‘Lax’ передача Cookie блокируется только для межсайтовых субзапросов, таких как запрос изображения или загрузка контента через iframe, которые часто используются для организации CSRF-атак и для отслеживания перемещений пользователя между сайтами.
  • Прекращено воспроизведение Flash-контента по умолчанию. До выпуска Chrome 87, ожидаемого в декабре 2020 года, поддержку Flash можно будет вернуть в настройках (Advanced > Privacy and Security > Site Settings) с последующим явным подтверждением операции воспроизведения Flash-контента для каждого сайта (подтверждение запоминается до перезапуска браузера). Полное удаление кода для обеспечения поддержки Flash синхронизировано с ранее озвученным компанией Adobe планом прекращения сопровождения технологии Flash в 2020 году;
  • Для предприятий в адресную строку добавлена возможность поиска файлов в хранилище Google Drive;

  • Началась массовая блокировка в Chrome неприемлемой рекламы, мешающей восприятию содержимого и не соответствующей критериям, выработанным Коалицией по улучшению рекламы;
  • Реализован адаптивный режим переключения на новую страницу, при котором очистка текущего содержимого и отображение белого фона производится не сразу, а через небольшую задержку. Для быстро загружающихся страниц очистка приводит лишь к мерцанию и не несёт полезной нагрузки, призванной информировать пользователя о начале загрузки новой страницы. В новом выпуске если страница открывается быстро и укладывается в небольшую задержку, то новая страница отображается по месту, бесшовно заменяя предыдущую (например, удобно при переходе на близкие по оформлению и цветовой гамме другие страницы того же сайта). Если для отображения страницы требуется какое-то заметное пользователю время, то как и раньше экран будет предварительно очищен;
  • Ужесточены критерии определения активности пользователя на странице. Chrome разрешает выводить всплывающие уведомления и воспроизводить назойливый видео/аудио контент только после действий пользователя со страницей. В новом выпуске нажатие Escape, наведение курсора на ссылку и касания экрана больше не воспринимаются как активирующие страницу взаимодействие (требуется явный клик, ввод текста или прокрутка);
  • Добавлен медиа-запрос «prefers-color-scheme», позволяющий сайтам определить применение в браузере тёмной темы оформления и автоматически включить тёмное оформление для просматриваемого сайта.
  • При включении тёмной темы оформления в сборках для Linux, тёмным цветом теперь отображается и адресная строка;
  • Блокирована возможность определения открытия страницы в режиме инкогнито через манипуляции с FileSystem API, которая ранее использовалась некоторыми изданиями для навязывания платной подписки в случае обезличенного открытия страниц без запоминания Cookie (чтобы пользователи не использовали приватный режим для обхода механизма предоставления бесплатного пробного доступа). Раньше при работе в режиме инкогнито браузер блокировал доступ к FileSystem API для предотвращения оседания данных между сеансами, что позволяло из JavaScript проверить возможность сохранения данных через FileSystem API и в случае сбоя судить об активности режима инкогнито. Теперь доступ к FileSystem API не блокируется, а содержимое очищается после завершения сеанса;
  • Добавлены новые вызовы в
    API Payment Request и Payment Handler. В объекте PaymentRequestEvent появился новый метод changePaymentMethod(), а в объект PaymentRequest добавлен новый обработчик события paymentmethodchange, которые позволяют собирающей платежи площадке или web-приложению, отреагировать на смену пользователем метода проведения платежа. В новом выпуске в связанных с платежами API также упрощено тестирование приложений с использованием самоподписанных сертификатов. Для игнорирования ошибок проверки сертификатов в процессе разработки добавлена новая опция командной строки «—ignore-certificate-errors»;

  • В адресную строку рядом с кнопкой для добавления в закладки для web-приложений, работающих в режиме Desktop Progressive Web Apps (PWA), добавлен ярлык для установки web-приложения в систему для работы как с обособленной программой;

  • Для мобильных устройств предоставлена возможность управления выводом мини-панели с приглашением по добавлению приложения на домашний экран. Для PWA-приложений (Progressive Web App) мини-панель по умолчанию автоматически показывается при первом открытии сайта. Разработчик теперь может отказаться от вывода данной панели и реализовать собственное приглашение к установке, для чего можно установить обработчик события
    beforeinstallprompt и привязать к нему вызов preventDefault();

  • Увеличена частота проверки обновления для установленных в окружении Android PWA-приложений (Progressive Web App). Обновления WebAPK теперь проверяются раз в день, а не раз в три дня как раньше. Если в манифесте при такой проверке будет выявлено изменение хоть одного ключевого свойства, браузер загрузит и установит новый WebAPK;
  • В API Async Clipboard добавлена возможность программного чтения и записи изображений через буфер обмена, используя методы navigator.clipboard.read() и navigator.clipboard.write();
  • Реализована поддержка группы HTTP-заголовков Fetch Metadata (Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site и Sec-Fetch-User), позволяющих отправить дополнительные метаданные о характере запроса (межсайтовый запрос, запрос через тег img и т.п.) для принятия на сервере мер для защиты от некоторых типов атак (например, маловероятно, что ссылка на обработчик для перевода денег будет задана через тег img, поэтому такие запросы можно блокировать без передачи приложению);
  • Добавлена функция form.requestSubmit(), которая инициирует программную отправку данных формы по аналогии с кликом на кнопку отправки данных. Функция может применяться при разработке собственных кнопок отправки формы, для которых вызова form.submit() недостаточно из-за того, что он не приводит к интерактивной проверке параметров, генерации события ‘submit’ и передаче привязанных к кнопке отправки данных;
  • В IndexedDB добавлена функция commit(), позволяющая фиксировать транзакции, связанные с объектом IDBTransaction, не дожидаясь завершения обработчиков событий во всех связанных запросах. Использование commit() позволяет увеличить пропускную способность запросов на запись и чтение в хранилище и явно контролировать завершения транзакции;
  • В функции Intl.DateTimeFormat, такие как formatToParts() и resolveOptions(), добавлены опции dateStyle и timeStyle, позволяющие запросить специфичные для локали стили отображения даты и времени;
  • Метод BigInt.prototype.toLocaleString() изменён для форматирования чисел с учётом локали, а метод Intl.NumberFormat.prototype.format() и функция formatToParts() адаптированы для поддержки входных значений с типом BigInt;
  • Разрешено использование API Media Capabilities во всех типах Web Worker-ов, что может быть использовано для выбора оптимальных параметров при создании MediaStream из worker-а;
  • Добавлен метод Promise.allSettled(), который возвращает только уже выполнение или отклонённые promise, не учитывая promise, ожидающих выполнения;
  • Удалена опция «—disable-infobars», которая ранее могла применяться для скрытия всплывающих предупреждений в интерфейсе Chrome (для скрытия связанных с безопасностью предупреждений предложено правило CommandLineFlagSecurityWarningsEnabled);
  • В интерфейс для работы с блобами добавлены методы text(), arrayBuffer() и stream() для чтения определённых типов данных;
  • Добавлено CSS-свойство «white-space:break-spaces», определяющее, что любая последовательность пробелов, приводящая к переполнению строки, должна быть разорвана;
  • Началась работа по чистке флагов в chrome://flags, например, удалён флаг для отключения атрибута «ping», позволяющего владельцам сайтов отслеживать переходы по ссылкам с их страниц. В случае перехода по ссылке при наличии в теге «a href» атрибута «ping=URL» в браузере теперь нельзя отключить отправку дополнительного POST-запроса к указанному в атрибуте URL со сведениями о состоявшемся переходе. Смысл блокирования ping теряется так как данный атрибут определён в спецификациях HTML5 и существует множество обходных методов для совершения того же действия (например, проброс через транзитную ссылку или перехват кликов обработчиками на JavaScript);
  • Убран флаг для отключения режима строгой изоляции сайтов, при котором страницы разных хостов всегда размещаются в памяти разных процессов, в каждом из которых применяется свой sandbox.
  • В движке V8 существенно увеличена производительность сканирования и парсинга формата JSON. Для популярных web-страниц отмечается ускорение выполнения JSON.parse до 2.7 раз. Значительно ускорено преобразование unicode-строк, например, скорость работы вызовов String#localeCompare, String#normalize, а также некоторых API Intl, возросла почти в два раза. Также существенно оптимизирована производительность операций с замороженными массивами при использовании операций, подобных frozen.indexOf(v), frozen.includes(v), fn(…frozen), fn(…[…frozen]) и fn.apply(this, […frozen]).