Firefox 59

Firefox 59 — первый весенний выпуск современного веб-браузера.

HTML, CSS

  • Обновлена в соответствии с текущей спецификацией интерпретация CSS-объявления display: contents для элементов, отрисовываемых особым образом, в том числе изображений и элементов форм. В частности, для элементов без текстового содержимого, таких как элементы форм, изображения, элементы AUDIO, VIDEO и BR, значение display: contents эквивалентно их скрытию с помощью display: none. Для LEGEND при этом отключается особое оформление, а значит уходит в прошлое головная боль, которая многие годы была связана с кроссбраузерной реализацией нестандартного оформления этого элемента.
  • Поддержка атрибута autocomplete элементов TEXTAREA. Значение on атрибута даёт браузеру возможность предлагать значения на основании данных, введённых пользователем в аналогичные поля ранее. Если атрибут не указан, его значение наследуется из формы, к которой относится элемент.
  • Поддержка нового стенографического CSS-свойства overscroll-behavior и его дочерних свойств для отдельных осей overscroll-behavior-x и overscroll-behavior-y. Свойства ориентированы главным образом на мобильные устройства и позволяют управлять поведением браузера при достижении границы прокручиваемой области элемента или страницы, в том числе с помощью значения contain предотвращать прокрутку родительского элемента при окончании прокрутки дочернего и с помощью значения none предотвращать перезагрузку страницы при достижении крайнего верхнего положения прокрутки страницы.
  • Поддержка объявления position: sticky для ячеек таблиц. Объявление позволяет «приклеивать» элемент к определённому месту прокручиваемой области.
  • Поддержка CSS-функции calc(), предназначенной для математических вычислений в смешанных единицах измерения, внутри цветовых функций rgb(), rgba(), hsl() и hsla().
  • Поддержка CSS-функции calc() в условиях Media Queries. Технически была возможна ещё при переходе на написанный на языке Rust новый CSS-движок Stylo в Firefox 57, но её на всякий случай временно отключили из-за отсутствия поддержки в других браузерах.
  • Поддержка CSS-свойства font-optical-sizing. Значение none свойства позволяет отключить автоматическую подстройку отрисовки символов, которую по умолчанию (значение auto) может осуществлять браузер — например, утолщение штрихов и увеличение засечек при малых размерах шрифта для улучшения разборчивости символов.

JavaScript, DOM

  • Поддержка программного интерфейса (API) Pointer Events — унифицированного механизма обработки событий мыши, сенсорного экрана и электронного пера. Разработку вёл Олег Ромашин из компании Microsoft, которая изначально и предложила новый механизм. Pointer Events API не имеет отношения к CSS-свойству pointer-events, позволяющему управлять прозрачностью элементов для событий мыши.
  • Новый метод Event.composedPath() возвращает список объектов, для которых будут вызваны обработчики данного события. В этот список не включаются узлы деревьев Shadow DOM, созданных с использованием значения closed параметра ShadowRoot.mode.
  • Удалена поддержка очень редко (около 0,2%) используемого параметра version в атрибуте type элемента SCRIPT.
  • Поддержка интерфейса CSSNamespaceRule со свойствами namespaceURL и prefix, соответствующего CSS-правилам @namespace.
  • Новый метод browser.tabs.captureTab() позволяет расширению получить в формате Data URI скриншот видимой части страницы в заданной вкладке. Работает аналогично методу browser.tabs.captureVisibleTab(), предназначенному для получения скриншота активной вкладки.

Быстродействие

  • Повышенная скорость загрузки кэшированных ресурсов благодаря их параллельной загрузке из сети и из кэша (алгоритм RCWN — Race Cache With Network). Может быть полезно для пользователей быстрых интернет-каналов при хранении кэша на таких медленных носителях, как механические жёсткие диски.
  • В версии Firefox для macOS отрисовка графики вынесена из основного потока исполнения (Off-Main-Thread Painting), что даёт выигрыш в быстродействии браузерных игр до 30%. В Firefox для Windows эта функциональность реализована начиная с предыдущей версии 58.

Безопасность

  • Теперь блокируются переходы на псевдоадреса Data URI средствами JavaScript, вследствие перенаправлений (редиректов) или открытия ссылок из сторонних программ. Псевдоадреса Data URI не являются обычными адресами, а непосредственно содержат в закодированном виде содержимое ресурса — например, изображения или HTML-файла. Это могло использоваться для имитации знакомых пользователю сайтов с целью похищения конфиденциальных данных.
  • В Nightly- и ранних бета-версиях: возможность использования CSS-правила @-moz-document теперь из соображений безопасности отключена для веб-страниц и ограничена дополнениями и собственным кодом Firefox. Это исключает так называемые CSS-инъекции (CSS injections), или бесскриптовые атаки, которые могли приводить к утечкам на сторонние сайты секретных данных, содержащихся в URL-адресе — таких как идентификатор сессии или OAuth-ключ.
  • Значение SAMEORIGIN заголовка ответа сервера X-Frame-Options теперь применяется не только к самому документу, но и к документам, загружаемым через содержащиеся в нём фреймы (элементы IFRAME). Значение SAMEORIGIN позволяет загружать ресурс внутрь фреймов только на страницах этого же сайта.
  • В приватных окнах из значения заголовка запроса Referer теперь удаляется путь к конкретной странице с целью затруднения отслеживания переходов пользователя между разными сайтами.
  • Изображения со сторонних сайтов теперь не могут запрашивать ввод данных HTTP-аутентификации. Это могло использоваться для похищения паролей пользователей ресурсов, где разрешена вставка изображений со сторонних сайтов.

Прочее

  • Новый параметр page_action → show_matches в манифесте расширения позволяет расширению отображать кнопку типа pageAction по умолчанию для страниц, адреса которых соответствуют заданной маске. Параметр hide_matches позволяет задать маску для страниц-исключений. Ранее отобразить такую кнопку, в отличие от browserAction, можно было только явным вызовом метода browser.pageAction.show().
  • Имя пользователя и пароль в рамках HTTP-аутентификации теперь передаются на сервер в кодировке UTF-8 вместо ISO-8859-1 для единообразия с другими реализациями, в том числе браузером Chrome, утилитой cURL и веб-сервером nginx.

См. также официальные примечания к выпуску и информацию для разработчиков.