Выпуск web-браузера Chrome 59
Компания Google представила релиз web-браузера Chrome 59. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищенного видеоконтента, системой автоматической установки обновлений и передачей при поиске RLZ-параметров.
Основные изменения в Chrome 59:
- Для платформы Linux сборка по умолчанию теперь осуществляется с использованием библиотеки GTK3+, что значительно улучшило сочетаемость браузера с темами оформления современных дистрибутивов на основе GTK3+. Например, в интерфейсе теперь корректно применяются цветовые схемы, используются более современные системные виджеты, корректно оформляются контекстные меню и всплывающие диалоги;
- Представлено новое оформление раздела настроек, в котором задействован стиль Material Design. Новый интерфейс примечателен более широкой и заметной строкой поиска, новыми пиктограммами в меню в, левой части экрана, слиянием секций "Sign In" и "People", упрощением раздела настройки контента и переименованием ряда секций ("Search" переименован в "Search Engine", "Privacy" в "Privacy and Security"). Настройка работы через прокси перемещена в секцию "System", настройки размеров шрифта и масштабирования в секцию "Appearance", а настройки сертификатов HTTPS в "Privacy and Security";
- В JavaScript-движке V8 задействована новая упрощенная схема компиляции, основанная на применении интерпретатора Ignition и JIT-компилятора Turbofan. Ранее в V8 использовался достаточно сложный многоуровневый процесс компиляции JavaScript, в котором одноразовый код интерпретировался на первой стадии, после чего генерировался машинный код для JIT, который периодически обновлялся и улучшался двумя оптимизирующими JIT-компиляторами. Новая схема подразумевает применение на первой стадии только интерпретатора с байткодом с подключением по мере выполнения кода JIT-компилятора Turbofan.
Таким образом, полностью исключена фаза упреждающей генерации неоптимизированного машинного кода JIT-компилятром FullCodegen, а также удалены привязки к старому JIT-компилятору Crankshaft и лишняя логика разветвлений. Вместо машинного кода интерпретатор Ignition использует байткод, выполняемый в регистровой виртуальной машине, который требует в 2-4 раза меньше памяти, а по скорости выполнения в реальных приложениях этот байткод очень близок к неоптимизированному машинному коду. Задействование по умолчанию новой схемы привело к повышению производительности выполнения JavaScript-приложений и снижению потребления памяти; - Добавлен режим работы без вывода на экран (headless), который позволяет запускать браузер на системах без монитора и графической подсистемы, например, на серверах. Режим активируется через запуск с опцией "--headless". В качестве областей применения называется автоматизированное тестирование при помощи Selenium и возможность автоматизированной обработки страниц с использованием полноценной платформы Chromium, например, можно загрузить страницу, извлечь нужные элементы DOM и сохранить результат в виде картинки (или PDF). Для управления предлагается использовать протокол удаленной отладки (RemoteDebug);
- Организован вывод уведомлений через штатную систему нотификации macOS, вместо вывода уведомлений в браузере;
- В Service Worker добавлен новый API Navigation Preload, позволяющий организовать упреждающее выполнение навигационных запросов во время запуска Service worker, сведя к минимуму ожидание загрузки элементов навигации;
- Добавлено свойство MediaError.message для извлечения детальной информации об ошибке, возникшей в процессе воспроизведения мультимедийного контейнта в тегах audio и video;
- Streams API расширено функциями WritableStreams, предоставляющими дополнительный уровень абстракции для организации записи потоковых данных в канал, имеющий встроенные средства ограничения потока. Также добавлена возможность создания неименованных каналов (pipe) между ReadableStreams и WritableStreams через использование методов pipeTo() и pipeThrough();
- Разработчикам предоставлена возможность применения функции getInstalledRelatedApps для консолидации push-уведомлений между web-страницей и приложениями;
- В API Image Capture добавлены средства для создания снимков высокого разрешения и полного управления настройками камеры, такими как коэффициент увеличения, ISO и баланс белого;
- Для CSS-файлов теперь можно определять отдельные правила обработки Referrer через соответствующий HTTP-заголовок, вместо наследования правил, заданных в документе;
- Для того чтобы не раздражать пользователя постоянными запросами, Chrome теперь автоматически временно (на одну неделю) блокирует запросы на подтверждение операций, в случае если пользователь уже три раза отклонил этот запрос;
- Добавлена новая CSP (Content Security Policy) директива worker-src, позволяющая ограничить URL только загрузкой Worker, SharedWorker или ServiceWorker;
- Запрещен вывод запросов для предоставления полномочий на вывод уведомлений, отправленных без шифрования по HTTP;
- Для повышения защиты обеспечено блокирование запросов к ресурсам, которые содержат встроенные параметры аутентификации. Подобные запросы теперь приводят к выводу ошибки;
- Обеспечено блокирование запросов к URL "ftp://" из документов, открытых по HTTP и HTTPS;
- Переведена в разряд устаревших возможность вызова Notification.requestPermission() из не первичных фреймов;
- Временно отключена по умолчанию поддержка расширения протокола SDCH (Shared Dictionary Compression over HTTP), до стандартизации стабильного API.
Кроме нововведений и исправления ошибок в новой версии устранено 30 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity и LibFuzzer. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе, за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 16 премий на сумму 23.5 тысяч долларов США (одна премия $7500, две премии $3000,, две премии $2000, пять премий $1000 и две премии $500). Размер четырех вознаграждений пока не определен.