Merge inbound to mozilla-central. a=merge
authorCiure Andrei <aciure@mozilla.com>
Sat, 01 Sep 2018 01:40:48 +0300
changeset 434354 3686bea81d04bce59d3b601e744babe3d814e3d6
parent 434353 d90dcb1712d4957676643616337e420d197a83c9 (current diff)
parent 434317 6920b1cc9a3310cad6132e7fb30b5f1d5fc1fc41 (diff)
child 434355 0aa31e702587617919d21d135d757b1004dd6aca
push id107338
push useraciure@mozilla.com
push dateFri, 31 Aug 2018 23:45:51 +0000
treeherdermozilla-inbound@ee4f4e66f861 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to mozilla-central. a=merge
dom/interfaces/storage/nsIDOMStorage.idl
netwerk/protocol/http/nsHttpChannel.cpp
testing/marionette/driver.js
testing/web-platform/tests/compat/webkit-pseudo-element.html
testing/web-platform/tests/css/selectors/CHANGES
testing/web-platform/tests/css/selectors/Makefile
testing/web-platform/tests/css/selectors/README
testing/web-platform/tests/css/selectors/TODO
testing/web-platform/tests/css/selectors/css3-modsel-1.xml
testing/web-platform/tests/css/selectors/css3-modsel-10.xml
testing/web-platform/tests/css/selectors/css3-modsel-100.xml
testing/web-platform/tests/css/selectors/css3-modsel-100b.xml
testing/web-platform/tests/css/selectors/css3-modsel-101.xml
testing/web-platform/tests/css/selectors/css3-modsel-101b.xml
testing/web-platform/tests/css/selectors/css3-modsel-102.xml
testing/web-platform/tests/css/selectors/css3-modsel-102b.xml
testing/web-platform/tests/css/selectors/css3-modsel-103.xml
testing/web-platform/tests/css/selectors/css3-modsel-103b.xml
testing/web-platform/tests/css/selectors/css3-modsel-104.xml
testing/web-platform/tests/css/selectors/css3-modsel-104b.xml
testing/web-platform/tests/css/selectors/css3-modsel-105.xml
testing/web-platform/tests/css/selectors/css3-modsel-105b.xml
testing/web-platform/tests/css/selectors/css3-modsel-106.xml
testing/web-platform/tests/css/selectors/css3-modsel-106b.xml
testing/web-platform/tests/css/selectors/css3-modsel-107.xml
testing/web-platform/tests/css/selectors/css3-modsel-107b.xml
testing/web-platform/tests/css/selectors/css3-modsel-108.xml
testing/web-platform/tests/css/selectors/css3-modsel-108b.xml
testing/web-platform/tests/css/selectors/css3-modsel-109.xml
testing/web-platform/tests/css/selectors/css3-modsel-109b.xml
testing/web-platform/tests/css/selectors/css3-modsel-11.xml
testing/web-platform/tests/css/selectors/css3-modsel-110.xml
testing/web-platform/tests/css/selectors/css3-modsel-110b.xml
testing/web-platform/tests/css/selectors/css3-modsel-111.xml
testing/web-platform/tests/css/selectors/css3-modsel-111b.xml
testing/web-platform/tests/css/selectors/css3-modsel-112.xml
testing/web-platform/tests/css/selectors/css3-modsel-112b.xml
testing/web-platform/tests/css/selectors/css3-modsel-113.xml
testing/web-platform/tests/css/selectors/css3-modsel-113b.xml
testing/web-platform/tests/css/selectors/css3-modsel-114.xml
testing/web-platform/tests/css/selectors/css3-modsel-114b.xml
testing/web-platform/tests/css/selectors/css3-modsel-115.xml
testing/web-platform/tests/css/selectors/css3-modsel-115b.xml
testing/web-platform/tests/css/selectors/css3-modsel-116.xml
testing/web-platform/tests/css/selectors/css3-modsel-116b.xml
testing/web-platform/tests/css/selectors/css3-modsel-117.xml
testing/web-platform/tests/css/selectors/css3-modsel-117b.xml
testing/web-platform/tests/css/selectors/css3-modsel-118.xml
testing/web-platform/tests/css/selectors/css3-modsel-119.xml
testing/web-platform/tests/css/selectors/css3-modsel-12.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-120.xml
testing/web-platform/tests/css/selectors/css3-modsel-121.xml
testing/web-platform/tests/css/selectors/css3-modsel-122.xml
testing/web-platform/tests/css/selectors/css3-modsel-123.xml
testing/web-platform/tests/css/selectors/css3-modsel-123b.xml
testing/web-platform/tests/css/selectors/css3-modsel-124.xml
testing/web-platform/tests/css/selectors/css3-modsel-124b.xml
testing/web-platform/tests/css/selectors/css3-modsel-125.xml
testing/web-platform/tests/css/selectors/css3-modsel-125b.xml
testing/web-platform/tests/css/selectors/css3-modsel-126.xml
testing/web-platform/tests/css/selectors/css3-modsel-126b.xml
testing/web-platform/tests/css/selectors/css3-modsel-127.xml
testing/web-platform/tests/css/selectors/css3-modsel-127b.xml
testing/web-platform/tests/css/selectors/css3-modsel-128.xml
testing/web-platform/tests/css/selectors/css3-modsel-128b.xml
testing/web-platform/tests/css/selectors/css3-modsel-129.xml
testing/web-platform/tests/css/selectors/css3-modsel-129b.xml
testing/web-platform/tests/css/selectors/css3-modsel-13.xml
testing/web-platform/tests/css/selectors/css3-modsel-130.xml
testing/web-platform/tests/css/selectors/css3-modsel-130b.xml
testing/web-platform/tests/css/selectors/css3-modsel-131.xml
testing/web-platform/tests/css/selectors/css3-modsel-131b.xml
testing/web-platform/tests/css/selectors/css3-modsel-132.xml
testing/web-platform/tests/css/selectors/css3-modsel-132b.xml
testing/web-platform/tests/css/selectors/css3-modsel-133.xml
testing/web-platform/tests/css/selectors/css3-modsel-133b.xml
testing/web-platform/tests/css/selectors/css3-modsel-134.xml
testing/web-platform/tests/css/selectors/css3-modsel-134b.xml
testing/web-platform/tests/css/selectors/css3-modsel-135.xml
testing/web-platform/tests/css/selectors/css3-modsel-135b.xml
testing/web-platform/tests/css/selectors/css3-modsel-136.xml
testing/web-platform/tests/css/selectors/css3-modsel-136b.xml
testing/web-platform/tests/css/selectors/css3-modsel-137.xml
testing/web-platform/tests/css/selectors/css3-modsel-137b.xml
testing/web-platform/tests/css/selectors/css3-modsel-138.xml
testing/web-platform/tests/css/selectors/css3-modsel-138b.xml
testing/web-platform/tests/css/selectors/css3-modsel-139.xml
testing/web-platform/tests/css/selectors/css3-modsel-139b.xml
testing/web-platform/tests/css/selectors/css3-modsel-14.xml
testing/web-platform/tests/css/selectors/css3-modsel-140.xml
testing/web-platform/tests/css/selectors/css3-modsel-140b.xml
testing/web-platform/tests/css/selectors/css3-modsel-141.xml
testing/web-platform/tests/css/selectors/css3-modsel-141b.xml
testing/web-platform/tests/css/selectors/css3-modsel-142.xml
testing/web-platform/tests/css/selectors/css3-modsel-142b.xml
testing/web-platform/tests/css/selectors/css3-modsel-143.xml
testing/web-platform/tests/css/selectors/css3-modsel-143b.xml
testing/web-platform/tests/css/selectors/css3-modsel-144.xml
testing/web-platform/tests/css/selectors/css3-modsel-145a.xml
testing/web-platform/tests/css/selectors/css3-modsel-145b.xml
testing/web-platform/tests/css/selectors/css3-modsel-146a.xml
testing/web-platform/tests/css/selectors/css3-modsel-146b.xml
testing/web-platform/tests/css/selectors/css3-modsel-147a.xml
testing/web-platform/tests/css/selectors/css3-modsel-147b.xml
testing/web-platform/tests/css/selectors/css3-modsel-148.xml
testing/web-platform/tests/css/selectors/css3-modsel-149.xml
testing/web-platform/tests/css/selectors/css3-modsel-149b.xml
testing/web-platform/tests/css/selectors/css3-modsel-14b.xml
testing/web-platform/tests/css/selectors/css3-modsel-14c.xml
testing/web-platform/tests/css/selectors/css3-modsel-14d.xml
testing/web-platform/tests/css/selectors/css3-modsel-14e.xml
testing/web-platform/tests/css/selectors/css3-modsel-15.xml
testing/web-platform/tests/css/selectors/css3-modsel-150.xml
testing/web-platform/tests/css/selectors/css3-modsel-151.xml
testing/web-platform/tests/css/selectors/css3-modsel-152.xml
testing/web-platform/tests/css/selectors/css3-modsel-153.xml
testing/web-platform/tests/css/selectors/css3-modsel-154.xml
testing/web-platform/tests/css/selectors/css3-modsel-155.xml
testing/web-platform/tests/css/selectors/css3-modsel-155a.xml
testing/web-platform/tests/css/selectors/css3-modsel-155b.xml
testing/web-platform/tests/css/selectors/css3-modsel-155c.xml
testing/web-platform/tests/css/selectors/css3-modsel-155d.xml
testing/web-platform/tests/css/selectors/css3-modsel-156.xml
testing/web-platform/tests/css/selectors/css3-modsel-156b.xml
testing/web-platform/tests/css/selectors/css3-modsel-156c.xml
testing/web-platform/tests/css/selectors/css3-modsel-157.xml
testing/web-platform/tests/css/selectors/css3-modsel-158.xml
testing/web-platform/tests/css/selectors/css3-modsel-159.xml
testing/web-platform/tests/css/selectors/css3-modsel-15b.xml
testing/web-platform/tests/css/selectors/css3-modsel-15c.xml
testing/web-platform/tests/css/selectors/css3-modsel-16.xml
testing/web-platform/tests/css/selectors/css3-modsel-160.xml
testing/web-platform/tests/css/selectors/css3-modsel-161.xml
testing/web-platform/tests/css/selectors/css3-modsel-162.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed
testing/web-platform/tests/css/selectors/css3-modsel-164.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-165.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-166.xml
testing/web-platform/tests/css/selectors/css3-modsel-166a.xml
testing/web-platform/tests/css/selectors/css3-modsel-167.xml
testing/web-platform/tests/css/selectors/css3-modsel-167a.xml
testing/web-platform/tests/css/selectors/css3-modsel-168.xml
testing/web-platform/tests/css/selectors/css3-modsel-168a.xml
testing/web-platform/tests/css/selectors/css3-modsel-169.xml
testing/web-platform/tests/css/selectors/css3-modsel-169a.xml
testing/web-platform/tests/css/selectors/css3-modsel-17.xml
testing/web-platform/tests/css/selectors/css3-modsel-170.xml
testing/web-platform/tests/css/selectors/css3-modsel-170a.xml
testing/web-platform/tests/css/selectors/css3-modsel-170b.xml
testing/web-platform/tests/css/selectors/css3-modsel-170c.xml
testing/web-platform/tests/css/selectors/css3-modsel-170d.xml
testing/web-platform/tests/css/selectors/css3-modsel-171.xml
testing/web-platform/tests/css/selectors/css3-modsel-172a.xml
testing/web-platform/tests/css/selectors/css3-modsel-172b.xml
testing/web-platform/tests/css/selectors/css3-modsel-173a.xml
testing/web-platform/tests/css/selectors/css3-modsel-173b.xml
testing/web-platform/tests/css/selectors/css3-modsel-174a.xml
testing/web-platform/tests/css/selectors/css3-modsel-174b.xml
testing/web-platform/tests/css/selectors/css3-modsel-175a.xml
testing/web-platform/tests/css/selectors/css3-modsel-175b.xml
testing/web-platform/tests/css/selectors/css3-modsel-175c.xml
testing/web-platform/tests/css/selectors/css3-modsel-176.xml
testing/web-platform/tests/css/selectors/css3-modsel-177a.xml
testing/web-platform/tests/css/selectors/css3-modsel-177b.xml
testing/web-platform/tests/css/selectors/css3-modsel-178.xml
testing/web-platform/tests/css/selectors/css3-modsel-179.xml
testing/web-platform/tests/css/selectors/css3-modsel-179a.xml
testing/web-platform/tests/css/selectors/css3-modsel-18.xml
testing/web-platform/tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion
testing/web-platform/tests/css/selectors/css3-modsel-180a.xml
testing/web-platform/tests/css/selectors/css3-modsel-181.xml
testing/web-platform/tests/css/selectors/css3-modsel-182.xml
testing/web-platform/tests/css/selectors/css3-modsel-183.xml
testing/web-platform/tests/css/selectors/css3-modsel-184a.xml
testing/web-platform/tests/css/selectors/css3-modsel-184b.xml
testing/web-platform/tests/css/selectors/css3-modsel-184c.xml
testing/web-platform/tests/css/selectors/css3-modsel-184d.xml
testing/web-platform/tests/css/selectors/css3-modsel-184e.xml
testing/web-platform/tests/css/selectors/css3-modsel-184f.xml
testing/web-platform/tests/css/selectors/css3-modsel-18a.xml
testing/web-platform/tests/css/selectors/css3-modsel-18b.xml
testing/web-platform/tests/css/selectors/css3-modsel-18c.xml
testing/web-platform/tests/css/selectors/css3-modsel-19.xml
testing/web-platform/tests/css/selectors/css3-modsel-19a.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-19b.xml
testing/web-platform/tests/css/selectors/css3-modsel-2.xml
testing/web-platform/tests/css/selectors/css3-modsel-20.xml
testing/web-platform/tests/css/selectors/css3-modsel-21.xml
testing/web-platform/tests/css/selectors/css3-modsel-21b.xml
testing/web-platform/tests/css/selectors/css3-modsel-21c.xml
testing/web-platform/tests/css/selectors/css3-modsel-22.xml
testing/web-platform/tests/css/selectors/css3-modsel-23.xml
testing/web-platform/tests/css/selectors/css3-modsel-24.xml
testing/web-platform/tests/css/selectors/css3-modsel-25.xml
testing/web-platform/tests/css/selectors/css3-modsel-27.xml
testing/web-platform/tests/css/selectors/css3-modsel-27a.xml
testing/web-platform/tests/css/selectors/css3-modsel-27b.xml
testing/web-platform/tests/css/selectors/css3-modsel-28.xml
testing/web-platform/tests/css/selectors/css3-modsel-28b.xml
testing/web-platform/tests/css/selectors/css3-modsel-28c.pl-draft
testing/web-platform/tests/css/selectors/css3-modsel-29.xml
testing/web-platform/tests/css/selectors/css3-modsel-29b.xml
testing/web-platform/tests/css/selectors/css3-modsel-3.xml
testing/web-platform/tests/css/selectors/css3-modsel-30.xml
testing/web-platform/tests/css/selectors/css3-modsel-31.xml
testing/web-platform/tests/css/selectors/css3-modsel-32.xml
testing/web-platform/tests/css/selectors/css3-modsel-33.xml
testing/web-platform/tests/css/selectors/css3-modsel-34.xml
testing/web-platform/tests/css/selectors/css3-modsel-35.xml
testing/web-platform/tests/css/selectors/css3-modsel-36.xml
testing/web-platform/tests/css/selectors/css3-modsel-37.xml
testing/web-platform/tests/css/selectors/css3-modsel-38.xml
testing/web-platform/tests/css/selectors/css3-modsel-39.xml
testing/web-platform/tests/css/selectors/css3-modsel-39a.xml
testing/web-platform/tests/css/selectors/css3-modsel-39b.xml
testing/web-platform/tests/css/selectors/css3-modsel-39c.xml
testing/web-platform/tests/css/selectors/css3-modsel-3a.xml
testing/web-platform/tests/css/selectors/css3-modsel-4.xml
testing/web-platform/tests/css/selectors/css3-modsel-40.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-41.xml
testing/web-platform/tests/css/selectors/css3-modsel-41a.xml
testing/web-platform/tests/css/selectors/css3-modsel-42.xml
testing/web-platform/tests/css/selectors/css3-modsel-42a.xml
testing/web-platform/tests/css/selectors/css3-modsel-43.xml
testing/web-platform/tests/css/selectors/css3-modsel-43b.xml
testing/web-platform/tests/css/selectors/css3-modsel-44.xml
testing/web-platform/tests/css/selectors/css3-modsel-44b.xml
testing/web-platform/tests/css/selectors/css3-modsel-44c.xml
testing/web-platform/tests/css/selectors/css3-modsel-44d.xml
testing/web-platform/tests/css/selectors/css3-modsel-45.xml
testing/web-platform/tests/css/selectors/css3-modsel-45b.xml
testing/web-platform/tests/css/selectors/css3-modsel-45c.xml
testing/web-platform/tests/css/selectors/css3-modsel-46.xml
testing/web-platform/tests/css/selectors/css3-modsel-46b.xml
testing/web-platform/tests/css/selectors/css3-modsel-47.xml
testing/web-platform/tests/css/selectors/css3-modsel-48.xml
testing/web-platform/tests/css/selectors/css3-modsel-49.xml
testing/web-platform/tests/css/selectors/css3-modsel-5.xml
testing/web-platform/tests/css/selectors/css3-modsel-50.xml
testing/web-platform/tests/css/selectors/css3-modsel-51.xml
testing/web-platform/tests/css/selectors/css3-modsel-52.xml
testing/web-platform/tests/css/selectors/css3-modsel-53.xml
testing/web-platform/tests/css/selectors/css3-modsel-54.xml
testing/web-platform/tests/css/selectors/css3-modsel-55.xml
testing/web-platform/tests/css/selectors/css3-modsel-56.xml
testing/web-platform/tests/css/selectors/css3-modsel-57.xml
testing/web-platform/tests/css/selectors/css3-modsel-57b.xml
testing/web-platform/tests/css/selectors/css3-modsel-58.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-59.xml
testing/web-platform/tests/css/selectors/css3-modsel-6.xml
testing/web-platform/tests/css/selectors/css3-modsel-60.xml
testing/web-platform/tests/css/selectors/css3-modsel-61.xml
testing/web-platform/tests/css/selectors/css3-modsel-62.xml
testing/web-platform/tests/css/selectors/css3-modsel-63.xml
testing/web-platform/tests/css/selectors/css3-modsel-64.xml
testing/web-platform/tests/css/selectors/css3-modsel-65.xml
testing/web-platform/tests/css/selectors/css3-modsel-66.xml
testing/web-platform/tests/css/selectors/css3-modsel-66b.xml
testing/web-platform/tests/css/selectors/css3-modsel-67.xml
testing/web-platform/tests/css/selectors/css3-modsel-68.xml
testing/web-platform/tests/css/selectors/css3-modsel-69.xml
testing/web-platform/tests/css/selectors/css3-modsel-7.xml
testing/web-platform/tests/css/selectors/css3-modsel-70.xml
testing/web-platform/tests/css/selectors/css3-modsel-72.xml
testing/web-platform/tests/css/selectors/css3-modsel-72b.xml
testing/web-platform/tests/css/selectors/css3-modsel-73.xml
testing/web-platform/tests/css/selectors/css3-modsel-73b.xml
testing/web-platform/tests/css/selectors/css3-modsel-74.xml
testing/web-platform/tests/css/selectors/css3-modsel-74b.xml
testing/web-platform/tests/css/selectors/css3-modsel-75.xml
testing/web-platform/tests/css/selectors/css3-modsel-75b.xml
testing/web-platform/tests/css/selectors/css3-modsel-76.xml
testing/web-platform/tests/css/selectors/css3-modsel-76b.xml
testing/web-platform/tests/css/selectors/css3-modsel-77.xml
testing/web-platform/tests/css/selectors/css3-modsel-77b.xml
testing/web-platform/tests/css/selectors/css3-modsel-78.xml
testing/web-platform/tests/css/selectors/css3-modsel-78b.xml
testing/web-platform/tests/css/selectors/css3-modsel-79.xml
testing/web-platform/tests/css/selectors/css3-modsel-7b.xml
testing/web-platform/tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system
testing/web-platform/tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system
testing/web-platform/tests/css/selectors/css3-modsel-8.xml
testing/web-platform/tests/css/selectors/css3-modsel-80.xml
testing/web-platform/tests/css/selectors/css3-modsel-81.xml
testing/web-platform/tests/css/selectors/css3-modsel-81b.xml
testing/web-platform/tests/css/selectors/css3-modsel-82.xml
testing/web-platform/tests/css/selectors/css3-modsel-82b.xml
testing/web-platform/tests/css/selectors/css3-modsel-83.xml
testing/web-platform/tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed
testing/web-platform/tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed
testing/web-platform/tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed
testing/web-platform/tests/css/selectors/css3-modsel-86.xml
testing/web-platform/tests/css/selectors/css3-modsel-87.xml
testing/web-platform/tests/css/selectors/css3-modsel-87b.xml
testing/web-platform/tests/css/selectors/css3-modsel-88.xml
testing/web-platform/tests/css/selectors/css3-modsel-88b.xml
testing/web-platform/tests/css/selectors/css3-modsel-89.xml
testing/web-platform/tests/css/selectors/css3-modsel-9.xml
testing/web-platform/tests/css/selectors/css3-modsel-90.xml
testing/web-platform/tests/css/selectors/css3-modsel-90b.xml
testing/web-platform/tests/css/selectors/css3-modsel-91.xml
testing/web-platform/tests/css/selectors/css3-modsel-92.xml
testing/web-platform/tests/css/selectors/css3-modsel-93.xml
testing/web-platform/tests/css/selectors/css3-modsel-94.xml
testing/web-platform/tests/css/selectors/css3-modsel-94b.xml
testing/web-platform/tests/css/selectors/css3-modsel-95.xml
testing/web-platform/tests/css/selectors/css3-modsel-96.xml
testing/web-platform/tests/css/selectors/css3-modsel-96b.xml
testing/web-platform/tests/css/selectors/css3-modsel-97.xml
testing/web-platform/tests/css/selectors/css3-modsel-97b.xml
testing/web-platform/tests/css/selectors/css3-modsel-98.xml
testing/web-platform/tests/css/selectors/css3-modsel-98b.xml
testing/web-platform/tests/css/selectors/css3-modsel-99.xml
testing/web-platform/tests/css/selectors/css3-modsel-99b.xml
testing/web-platform/tests/css/selectors/css3-modsel-d1.xml
testing/web-platform/tests/css/selectors/css3-modsel-d1b.xml
testing/web-platform/tests/css/selectors/css3-modsel-d2.xml
testing/web-platform/tests/css/selectors/css3-modsel-d3.xml
testing/web-platform/tests/css/selectors/css3-modsel-d4.xml
testing/web-platform/tests/css/selectors/css3-modsel-d5.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-d5a.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-d5b.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-d5c.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-d5d.xml-removed
testing/web-platform/tests/css/selectors/css3-modsel-d5e.xml-removed
testing/web-platform/tests/css/selectors/generate.pl
testing/web-platform/tests/css/selectors/htaccess
testing/web-platform/tests/css/selectors/html-full.css
testing/web-platform/tests/css/selectors/html-shell.css
testing/web-platform/tests/css/selectors/tng.css
testing/web-platform/tests/css/selectors/utils/generators.pm
testing/web-platform/tests/css/selectors/utils/helpers.pm
testing/web-platform/tests/css/selectors/utils/parser.pm
testing/web-platform/tests/css/selectors/xhtml-full.css
testing/web-platform/tests/css/selectors/xhtml-shell.css
testing/web-platform/tests/css/selectors/xml-full.css
testing/web-platform/tests/css/selectors/xml-shell.css
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html
testing/web-platform/tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html
testing/web-platform/tests/input-device-capabilities/interfaces.html
testing/web-platform/tests/webdriver/tests/support/fixtures.py
--- a/accessible/tests/browser/.eslintrc.js
+++ b/accessible/tests/browser/.eslintrc.js
@@ -53,17 +53,16 @@ module.exports = {
     "no-plusplus": "off",
     "no-process-env": "off",
     "no-process-exit": "off",
     "no-proto": "error",
     "no-reserved-keys": "off",
     "no-restricted-modules": "off",
     "no-return-assign": "error",
     "no-script-url": "off",
-    "no-sequences": "error",
     "no-shadow": "error",
     "no-space-before-semi": "off",
     "no-sync": "off",
     "no-ternary": "off",
     "no-throw-literal": "error",
     "no-underscore-dangle": "off",
     "no-undefined": "off",
     "no-unused-vars": ["error", {"vars": "all", "args": "none"}],
--- a/accessible/tests/mochitest/actions/test_media.html
+++ b/accessible/tests/mochitest/actions/test_media.html
@@ -37,17 +37,17 @@ https://bugzilla.mozilla.org/show_bug.cg
       };
     }
 
     function nameChecker(aAcc, aName) {
       this.type = EVENT_NAME_CHANGE;
       this.target = aAcc;
       this.getID = function nameChecker_getID() {
         return "name change handling";
-      },
+      };
       this.check = function nameChecker_check(aEvent) {
         is(aEvent.accessible.name, aName,
            "Wrong name of " + prettyName(aEvent.accessible) + " on focus");
       };
     }
 
     function doTest() {
       // ////////////////////////////////////////////////////////////////////////
--- a/accessible/tests/mochitest/events/test_text_alg.html
+++ b/accessible/tests/mochitest/events/test_text_alg.html
@@ -186,24 +186,28 @@
 
       var newStr = "a" + longStr1 + "b", insStr = longStr1, rmStr = "";
       events = [
         [ kRemoval, rmStr, 1, kUnexpected ],
         [ kInsertion, insStr, 1 ]
       ];
       gQueue.push(new changeText("p12", newStr, events));
 
-      newStr = "a" + longStr2 + "b", insStr = longStr2, rmStr = longStr1;
+      newStr = "a" + longStr2 + "b";
+      insStr = longStr2;
+      rmStr = longStr1;
       events = [
         [ kRemoval, rmStr, 1 ],
         [ kInsertion, insStr, 1]
       ];
       gQueue.push(new changeText("p12", newStr, events));
 
-      newStr = "ab", insStr = "", rmStr = longStr2;
+      newStr = "ab";
+      insStr = "";
+      rmStr = longStr2;
       events = [
         [ kRemoval, rmStr, 1 ],
         [ kInsertion, insStr, 1, kUnexpected ]
       ];
       gQueue.push(new changeText("p12", newStr, events));
 
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
--- a/accessible/tests/mochitest/scroll/test_zoom.html
+++ b/accessible/tests/mochitest/scroll/test_zoom.html
@@ -36,17 +36,18 @@
 
       anchor.scrollToPoint(COORDTYPE_WINDOW_RELATIVE, scrollToX, scrollToY);
       testPos(anchor, [x, docY]);
 
       // scrollToPoint relative parent
       anchor = getAccessible("bottom3");
       [x, /* y */] = getPos(anchor);
       var [parentX, parentY] = getPos(anchor.parent);
-      scrollToX = parentX - docX, scrollToY = parentY - docY;
+      scrollToX = parentX - docX;
+      scrollToY = parentY - docY;
 
       anchor.scrollToPoint(COORDTYPE_PARENT_RELATIVE, scrollToX, scrollToY);
       testPos(anchor, [x, docY]);
     }
 
     function doTest() {
       testScrollToPoint();
       zoomDocument(document, 2.0);
--- a/browser/base/content/test/sanitize/browser_sanitize-timespans.js
+++ b/browser/base/content/test/sanitize/browser_sanitize-timespans.js
@@ -596,92 +596,92 @@ async function setupFormHistory() {
 async function setupDownloads() {
 
   let publicList = await Downloads.getList(Downloads.PUBLIC);
 
   let download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=480169",
     target: "fakefile-10-minutes",
   });
-  download.startTime = new Date(now_mSec - 10 * kMsecPerMin), // 10 minutes ago
+  download.startTime = new Date(now_mSec - 10 * kMsecPerMin); // 10 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=453440",
     target: "fakefile-1-hour",
   });
-  download.startTime = new Date(now_mSec - 45 * kMsecPerMin), // 45 minutes ago
+  download.startTime = new Date(now_mSec - 45 * kMsecPerMin); // 45 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=480169",
     target: "fakefile-1-hour-10-minutes",
   });
-  download.startTime = new Date(now_mSec - 70 * kMsecPerMin), // 70 minutes ago
+  download.startTime = new Date(now_mSec - 70 * kMsecPerMin); // 70 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=453440",
     target: "fakefile-2-hour",
   });
-  download.startTime = new Date(now_mSec - 90 * kMsecPerMin), // 90 minutes ago
+  download.startTime = new Date(now_mSec - 90 * kMsecPerMin); // 90 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=480169",
     target: "fakefile-2-hour-10-minutes",
   });
-  download.startTime = new Date(now_mSec - 130 * kMsecPerMin), // 130 minutes ago
+  download.startTime = new Date(now_mSec - 130 * kMsecPerMin); // 130 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=453440",
     target: "fakefile-4-hour",
   });
-  download.startTime = new Date(now_mSec - 180 * kMsecPerMin), // 180 minutes ago
+  download.startTime = new Date(now_mSec - 180 * kMsecPerMin); // 180 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=480169",
     target: "fakefile-4-hour-10-minutes",
   });
-  download.startTime = new Date(now_mSec - 250 * kMsecPerMin), // 250 minutes ago
+  download.startTime = new Date(now_mSec - 250 * kMsecPerMin); // 250 minutes ago
   download.canceled = true;
   await publicList.add(download);
 
   // Add "today" download
   let today = new Date();
   today.setHours(0);
   today.setMinutes(0);
   today.setSeconds(0);
   today.setMilliseconds(1);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=453440",
     target: "fakefile-today",
   });
-  download.startTime = today, // 12:00:01 AM this morning
+  download.startTime = today; // 12:00:01 AM this morning
   download.canceled = true;
   await publicList.add(download);
 
   // Add "before today" download
   let lastYear = new Date();
   lastYear.setFullYear(lastYear.getFullYear() - 1);
 
   download = await Downloads.createDownload({
     source: "https://bugzilla.mozilla.org/show_bug.cgi?id=453440",
     target: "fakefile-old",
   });
-  download.startTime = lastYear,
+  download.startTime = lastYear;
   download.canceled = true;
   await publicList.add(download);
 
   // Confirm everything worked
   let downloads = await publicList.getAll();
   is(downloads.length, 9, "9 Pretend downloads added");
 
   ok((await downloadExists(publicList, "fakefile-old")), "Pretend download for everything case should exist");
--- a/browser/components/migration/.eslintrc.js
+++ b/browser/components/migration/.eslintrc.js
@@ -6,17 +6,16 @@ module.exports = {
     "complexity": ["error", {"max": 22}],
     "indent-legacy": ["error", 2, {"SwitchCase": 1, "ArrayExpression": "first", "ObjectExpression": "first"}],
     "max-nested-callbacks": ["error", 3],
     "new-parens": "error",
     "no-extend-native": "error",
     "no-fallthrough": ["error", { "commentPattern": ".*[Ii]ntentional(?:ly)?\\s+fall(?:ing)?[\\s-]*through.*" }],
     "no-multi-str": "error",
     "no-return-assign": "error",
-    "no-sequences": "error",
     "no-shadow": "error",
     "no-throw-literal": "error",
     "no-unused-vars": ["error", { "args": "after-used", "vars": "all" }],
     "padded-blocks": ["error", "never"],
     "semi-spacing": ["error", {"before": false, "after": true}],
     "space-in-parens": ["error", "never"],
     "strict": ["error", "global"],
     "yoda": "error"
--- a/browser/components/newtab/.eslintrc.js
+++ b/browser/components/newtab/.eslintrc.js
@@ -166,17 +166,16 @@ module.exports = {
     "no-prototype-builtins": 2,
     "no-restricted-globals": 0,
     "no-restricted-imports": 0,
     "no-restricted-modules": 0,
     "no-restricted-properties": 0,
     "no-restricted-syntax": 0,
     "no-return-assign": [2, "except-parens"],
     "no-script-url": 2,
-    "no-sequences": 2,
     "no-shadow": 2,
     "no-spaced-func": 2,
     "no-sync": 0,
     "no-template-curly-in-string": 2,
     "no-ternary": 0,
     "no-throw-literal": 2,
     "no-undef-init": 2,
     "no-undefined": 0,
--- a/browser/components/payments/content/paymentDialogWrapper.js
+++ b/browser/components/payments/content/paymentDialogWrapper.js
@@ -269,17 +269,16 @@ var paymentDialogWrapper = {
   createPaymentAddress({
     country = "",
     addressLines = [],
     region = "",
     city = "",
     dependentLocality = "",
     postalCode = "",
     sortingCode = "",
-    languageCode = "",
     organization = "",
     recipient = "",
     phone = "",
   }) {
     const paymentAddress = Cc["@mozilla.org/dom/payments/payment-address;1"]
                            .createInstance(Ci.nsIPaymentAddress);
     const addressLine = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
     for (let line of addressLines) {
@@ -289,17 +288,16 @@ var paymentDialogWrapper = {
     }
     paymentAddress.init(country,
                         addressLine,
                         region,
                         city,
                         dependentLocality,
                         postalCode,
                         sortingCode,
-                        languageCode,
                         organization,
                         recipient,
                         phone);
     return paymentAddress;
   },
 
   createComponentInstance(componentInterface) {
     let componentName;
--- a/browser/components/payments/test/unit/test_response_creation.js
+++ b/browser/components/payments/test/unit/test_response_creation.js
@@ -85,17 +85,16 @@ add_task(async function test_createPayme
       "123 Sesame Street",
       "P.O. Box ABC",
     ],
     region: "ON",
     city: "Delhi",
     dependentLocality: "N/A",
     postalCode: "94041",
     sortingCode: "1234",
-    languageCode: "en-CA",
     organization: "Mozilla Corporation",
     recipient: "John Smith",
     phone: "+15195555555",
   };
   let actual = dialogGlobal.paymentDialogWrapper.createPaymentAddress(data);
   checkAddress(actual, data);
 });
 
--- a/browser/components/uitour/test/browser_UITour3.js
+++ b/browser/components/uitour/test/browser_UITour3.js
@@ -27,17 +27,17 @@ add_UITour_task(async function test_info
   is(title.textContent, "a title", "Popup should have correct title");
   is(desc.textContent, "some text", "Popup should have correct description text");
 
   let imageURL = getRootDirectory(gTestPath) + "image.png";
   imageURL = imageURL.replace("chrome://mochitests/content/", "https://example.org/");
   is(icon.src, imageURL, "Popup should have correct icon shown");
 
   is(buttons.hasChildNodes(), false, "Popup should have no buttons");
-}),
+});
 
 add_UITour_task(async function test_info_buttons_1() {
   let popup = document.getElementById("UITourTooltip");
   let title = document.getElementById("UITourTooltipTitle");
   let desc = document.getElementById("UITourTooltipDescription");
   let icon = document.getElementById("UITourTooltipIcon");
 
   await showInfoPromise("urlbar", "another title", "moar text", "./image.png", "makeButtons");
@@ -114,29 +114,29 @@ add_UITour_task(async function test_info
   EventUtils.synthesizeMouseAtCenter(buttons.children[3], {}, window);
   await promiseHidden;
 
   ok(true, "Popup should close automatically");
 
   let returnValue = await waitForCallbackResultPromise();
 
   is(returnValue.result, "button2", "Correct callback should have been called");
-}),
+});
 
 add_UITour_task(async function test_info_close_button() {
   let closeButton = document.getElementById("UITourTooltipClose");
 
   await showInfoPromise("urlbar", "Close me", "X marks the spot", null, null, "makeInfoOptions");
 
   EventUtils.synthesizeMouseAtCenter(closeButton, {}, window);
 
   let returnValue = await waitForCallbackResultPromise();
 
   is(returnValue.result, "closeButton", "Close button callback called");
-}),
+});
 
 add_UITour_task(async function test_info_target_callback() {
   let popup = document.getElementById("UITourTooltip");
 
   await showInfoPromise("appMenu", "I want to know when the target is clicked", "*click*", null, null, "makeInfoOptions");
 
   await gCUITestUtils.openMainMenu();
 
@@ -145,17 +145,17 @@ add_UITour_task(async function test_info
   is(returnValue.result, "target", "target callback called");
   is(returnValue.data.target, "appMenu", "target callback was from the appMenu");
   is(returnValue.data.type, "popupshown", "target callback was from the mousedown");
 
   // Cleanup.
   await hideInfoPromise();
 
   popup.removeAttribute("animate");
-}),
+});
 
 add_UITour_task(async function test_getConfiguration_selectedSearchEngine() {
   await new Promise((resolve) => {
     Services.search.init(async function(rv) {
       ok(Components.isSuccessCode(rv), "Search service initialized");
       let engine = Services.search.defaultEngine;
       let data = await getConfigurationPromise("selectedSearchEngine");
       is(data.searchEngineIdentifier, engine.identifier, "Correct engine identifier");
--- a/browser/locales/en-US/browser/preferences/preferences.ftl
+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
@@ -777,16 +777,21 @@ sitedata-clear =
 sitedata-settings =
     .label = Manage Data…
     .accesskey = M
 
 sitedata-cookies-exceptions =
     .label = Exceptions…
     .accesskey = E
 
+# This is a warning message shown next to a yellow warning icon when the Cookies and Site Data subsection
+# in Preferences has been disabled due to Content Blocking being disabled. It is displayed next to the
+# Cookies and Site Data section.
+sitedata-warning-your-settings-prevent-changes = Your settings in Content Blocking are preventing changes to Cookies and Site Data settings.
+
 ## Privacy Section - Address Bar
 
 addressbar-header = Address Bar
 
 addressbar-suggest = When using the address bar, suggest
 
 addressbar-locbar-history-option =
     .label = Browsing history
--- a/browser/modules/AsyncTabSwitcher.jsm
+++ b/browser/modules/AsyncTabSwitcher.jsm
@@ -127,17 +127,17 @@ class AsyncTabSwitcher {
     this.STATE_UNLOADING = 3;
 
     // re-entrancy guard:
     this._processing = false;
 
     // For telemetry, keeps track of what most recently cleared
     // the loadTimer, which can tell us something about the cause
     // of tab switch spinners.
-    this._loadTimerClearedBy = "none",
+    this._loadTimerClearedBy = "none";
 
     this._useDumpForLogging = false;
     this._logInit = false;
 
     this.window.addEventListener("MozAfterPaint", this);
     this.window.addEventListener("MozLayerTreeReady", this);
     this.window.addEventListener("MozLayerTreeCleared", this);
     this.window.addEventListener("TabRemotenessChange", this);
--- a/build/automation.py.in
+++ b/build/automation.py.in
@@ -516,17 +516,16 @@ class Automation(object):
       xrePath = self.DIST_BIN
     if certPath == None:
       certPath = self.CERTS_SRC_DIR
     if timeout == -1:
       timeout = self.DEFAULT_TIMEOUT
 
     # copy env so we don't munge the caller's environment
     env = dict(env);
-    env["NO_EM_RESTART"] = "1"
     tmpfd, processLog = tempfile.mkstemp(suffix='pidlog')
     os.close(tmpfd)
     env["MOZ_PROCESS_LOG"] = processLog
 
 
     cmd, args = self.buildCommandLine(app, debuggerInfo, profileDir, testURL, extraArgs)
     startTime = datetime.now()
 
--- a/devtools/.eslintrc.js
+++ b/devtools/.eslintrc.js
@@ -345,18 +345,16 @@ module.exports = {
     "no-reserved-keys": "off",
     // Don't restrict usage of specified node modules (not a node environment).
     "no-restricted-modules": "off",
     // Disallow use of assignment in return statement. It is preferable for a
     // single line of code to have only one easily predictable effect.
     "no-return-assign": "error",
     // Allow use of javascript: urls.
     "no-script-url": "off",
-    // Disallow use of comma operator.
-    "no-sequences": "error",
     // Warn about declaration of variables already declared in the outer scope.
     // This isn't an error because it sometimes is useful to use the same name
     // in a small helper function rather than having to come up with another
     // random name.
     // Still, making this a warning can help people avoid being confused.
     "no-shadow": "error",
     // Disallow space between function identifier and application.
     "no-spaced-func": "error",
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -36,18 +36,16 @@ const { BrowserLoader } =
 
 const {LocalizationHelper} = require("devtools/shared/l10n");
 const L10N = new LocalizationHelper("devtools/client/locales/toolbox.properties");
 
 loader.lazyRequireGetter(this, "getHighlighterUtils",
   "devtools/client/framework/toolbox-highlighter-utils", true);
 loader.lazyRequireGetter(this, "Selection",
   "devtools/client/framework/selection", true);
-loader.lazyRequireGetter(this, "InspectorFront",
-  "devtools/shared/fronts/inspector", true);
 loader.lazyRequireGetter(this, "flags",
   "devtools/shared/flags");
 loader.lazyRequireGetter(this, "KeyShortcuts",
   "devtools/client/shared/key-shortcuts");
 loader.lazyRequireGetter(this, "ZoomKeys",
   "devtools/client/shared/zoom-keys");
 loader.lazyRequireGetter(this, "settleAll",
   "devtools/shared/ThreadSafeDevToolsUtils", true);
@@ -2707,17 +2705,17 @@ Toolbox.prototype = {
 
   /**
    * Initialize the inspector/walker/selection/highlighter fronts.
    * Returns a promise that resolves when the fronts are initialized
    */
   initInspector: function() {
     if (!this._initInspector) {
       this._initInspector = (async function() {
-        this._inspector = InspectorFront(this._target.client, this._target.form);
+        this._inspector = this.target.getFront("inspector");
         const pref = "devtools.inspector.showAllAnonymousContent";
         const showAllAnonymousContent = Services.prefs.getBoolPref(pref);
         this._walker = await this._inspector.getWalker({ showAllAnonymousContent });
         this._selection = new Selection(this._walker);
         this._selection.on("new-node-front", this._onNewSelectedNodeFront);
 
         if (this.highlighterUtils.isRemoteHighlightable()) {
           this.walker.on("highlighter-ready", this._highlighterReady);
@@ -2795,17 +2793,16 @@ Toolbox.prototype = {
 
       const currentPanel = this.getCurrentPanel();
       if (currentPanel.stopPicker) {
         await currentPanel.stopPicker();
       } else {
         await this.highlighterUtils.stopPicker();
       }
 
-      await this._inspector.destroy();
       if (this._highlighter) {
         // Note that if the toolbox is closed, this will work fine, but will fail
         // in case the browser is closed and will trigger a noSuchActor message.
         // We ignore the promise that |_hideBoxModel| returns, since we should still
         // proceed with the rest of destruction if it fails.
         // FF42+ now does the cleanup from the actor.
         if (!this.highlighter.traits.autoHideOnDestroy) {
           this.highlighterUtils.unhighlight();
--- a/devtools/client/inspector/flexbox/flexbox.js
+++ b/devtools/client/inspector/flexbox/flexbox.js
@@ -322,17 +322,22 @@ class FlexboxInspector {
         // closing.
         return;
       }
     }
 
     // Clear the flexbox panel if there is no flex container for the current node
     // selection.
     if (!flexboxFront) {
-      this.store.dispatch(clearFlexbox());
+      try {
+        this.store.dispatch(clearFlexbox());
+      } catch (e) {
+        // This call might fail if called asynchrously after the toolbox is finished
+        // closing.
+      }
       return;
     }
 
     let containerNodeFront = flexboxFront.containerNodeFront;
 
     // If the FlexboxFront doesn't yet have access to the NodeFront for its container,
     // then get it from the walker. This happens when the walker hasn't seen this
     // particular DOM Node in the tree yet or when we are connected to an older server.
--- a/devtools/client/inspector/grids/grid-inspector.js
+++ b/devtools/client/inspector/grids/grid-inspector.js
@@ -243,19 +243,25 @@ class GridInspector {
       gridFronts = await this.layoutInspector.getGrids(this.walker.rootNode);
     } catch (e) {
       // This call might fail if called asynchrously after the toolbox is finished
       // closing.
       return;
     }
 
     if (!gridFronts.length) {
-      this.store.dispatch(updateGrids([]));
-      this.inspector.emit("grid-panel-updated");
-      return;
+      try {
+        this.store.dispatch(updateGrids([]));
+        this.inspector.emit("grid-panel-updated");
+        return;
+      } catch (e) {
+        // This call might fail if called asynchrously after the toolbox is finished
+        // closing.
+        return;
+      }
     }
 
     const currentUrl = this.inspector.target.url;
 
     // Log how many CSS Grid elements DevTools sees.
     if (currentUrl != this.inspector.previousURL) {
       this.telemetry.getHistogramById(CSS_GRID_COUNT_HISTOGRAM_ID).add(gridFronts.length);
       this.inspector.previousURL = currentUrl;
--- a/devtools/client/inspector/inspector.js
+++ b/devtools/client/inspector/inspector.js
@@ -2019,17 +2019,17 @@ Inspector.prototype = {
     // support the pickColorFromPage, or because the page isn't HTML.
     if (!this.eyeDropperButton) {
       return null;
     }
 
     this.telemetry.scalarSet(TELEMETRY_EYEDROPPER_OPENED, 1);
     this.eyeDropperButton.classList.add("checked");
     this.startEyeDropperListeners();
-    return this.inspector.pickColorFromPage(this.toolbox, {copyOnSelect: true})
+    return this.inspector.pickColorFromPage({copyOnSelect: true})
                          .catch(console.error);
   },
 
   /**
    * Hide the eyedropper.
    * @return {Promise} resolves when the eyedropper is hidden.
    */
   hideEyeDropper: function() {
--- a/devtools/client/menus.js
+++ b/devtools/client/menus.js
@@ -26,17 +26,16 @@
  * - checkbox:
  *   If true, the menuitem is prefixed by a checkbox and runtime code can
  *   toggle it.
  */
 
 const { Cu } = require("chrome");
 
 loader.lazyRequireGetter(this, "gDevToolsBrowser", "devtools/client/framework/devtools-browser", true);
-loader.lazyRequireGetter(this, "CommandUtils", "devtools/client/shared/developer-toolbar", true);
 loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
 loader.lazyRequireGetter(this, "ResponsiveUIManager", "devtools/client/responsive.html/manager", true);
 loader.lazyRequireGetter(this, "openDocLink", "devtools/client/shared/link", true);
 
 loader.lazyImporter(this, "BrowserToolboxProcess", "resource://devtools/client/framework/ToolboxProcess.jsm");
 loader.lazyImporter(this, "ScratchpadManager", "resource://devtools/client/scratchpad/scratchpad-manager.jsm");
 
 exports.menuitems = [
@@ -91,21 +90,22 @@ exports.menuitems = [
         trigger: "menu"
       });
     },
     keyId: "responsiveDesignMode",
     checkbox: true
   },
   { id: "menu_eyedropper",
     l10nKey: "eyedropper",
-    oncommand(event) {
+    async oncommand(event) {
       const window = event.target.ownerDocument.defaultView;
       const target = TargetFactory.forTab(window.gBrowser.selectedTab);
-
-      CommandUtils.executeOnTarget(target, "eyedropper --frommenu");
+      await target.makeRemote();
+      const inspectorFront = await target.getFront("inspector");
+      inspectorFront.pickColorFromPage({copyOnSelect: true, fromMenu: true});
     },
     checkbox: true
   },
   { id: "menu_scratchpad",
     l10nKey: "scratchpad",
     oncommand() {
       ScratchpadManager.openScratchpad();
     },
--- a/devtools/client/shared/widgets/tooltip/SwatchColorPickerTooltip.js
+++ b/devtools/client/shared/widgets/tooltip/SwatchColorPickerTooltip.js
@@ -169,17 +169,17 @@ class SwatchColorPickerTooltip extends S
     // cancelling picker(if it is already selected) on opening eye-dropper
     toolbox.highlighterUtils.cancelPicker();
 
     // pickColorFromPage will focus the content document. If the devtools are in a
     // separate window, the colorpicker tooltip will be closed before pickColorFromPage
     // resolves. Flip the flag early to avoid issues with onTooltipHidden().
     this.eyedropperOpen = true;
 
-    inspector.pickColorFromPage(toolbox, {copyOnSelect: false}).then(() => {
+    inspector.pickColorFromPage({copyOnSelect: false}).then(() => {
       // close the colorpicker tooltip so that only the eyedropper is open.
       this.hide();
 
       this.tooltip.emit("eyedropper-opened");
     }, console.error);
 
     inspector.once("color-picked", color => {
       toolbox.win.focus();
--- a/devtools/client/themes/markup.css
+++ b/devtools/client/themes/markup.css
@@ -228,31 +228,36 @@ ul.children + .tag-line::before {
 .child.collapsed > .tag-line ~ .tag-line {
   display: none;
 }
 
 .child.collapsed .close {
   display: inline;
 }
 
+.expandable.collapsed .markup-expand-badge {
+  cursor: pointer;
+  display: inline-block;
+  vertical-align: -3px;
+  padding: 2px;
+}
+
 .expandable.collapsed .markup-expand-badge::before {
   /* Display an ellipsis character in collapsed nodes that can be expanded. */
   content: "";
   background-color: var(--markup-badge-interactive-background-color);
   background-image: url(chrome://devtools/skin/images/more.svg);
   background-repeat: no-repeat;
   background-position: center;
   border: 1px solid var(--markup-badge-border-color);
   color: var(--markup-badge-color);
   fill: var(--markup-badge-interactive-color);
-  vertical-align: middle;
-  display: inline-block;
+  display: block;
   width: 12px;
   height: 8px;
-  margin: 0 2px;
   line-height: 3px;
   border-radius: 3px;
   -moz-context-properties: fill;
 }
 
 /* Hide HTML void elements (img, hr, br, …) closing tag when the element is not
  * expanded (it can be if it has pseudo-elements attached) */
 .child.collapsed > .tag-line .void-element .close {
@@ -398,32 +403,34 @@ ul.children + .tag-line::before {
 /* Applicable to the DOCTYPE */
 .doctype {
   font-style: italic;
 }
 
 /* Markup Badges */
 .markup-badge {
   display: inline-block;
+  /* 9px text is too blurry on low-resolution screens */
   font-size: 10px;
   font-weight: normal;
   line-height: 11px;
-  vertical-align: 1px;
+  vertical-align: 0.5px;
   border: 1px solid var(--markup-badge-border-color);
   border-radius: 3px;
   padding: 0px 2px;
   margin-inline-start: 5px;
   -moz-user-select: none;
   background-color: var(--markup-badge-background-color);
   color: var(--markup-badge-color);
 }
 
 @media (min-resolution: 1.1dppx) {
   .markup-badge {
     font-size: 9px;
+    vertical-align: 1px;
   }
 }
 
 /* Markup badges that are interactive/clickable */
 .markup-badge[data-custom],
 .markup-badge[data-display="flex"].interactive,
 .markup-badge[data-display="grid"],
 .markup-badge[data-display="inline-flex"],
--- a/devtools/client/themes/toolbox.css
+++ b/devtools/client/themes/toolbox.css
@@ -282,16 +282,20 @@
 }
 
 #command-button-responsive::before {
   background-image: var(--command-responsive-image);
   fill: var(--theme-toolbar-photon-icon-color);
   -moz-context-properties: fill;
 }
 
+#command-button-responsive.checked::before {
+  fill: currentColor;
+}
+
 #command-button-scratchpad::before {
   background-image: var(--command-scratchpad-image);
 }
 
 #command-button-pick::before {
   background-image: var(--command-pick-image);
 }
 
--- a/devtools/server/actors/inspector/inspector.js
+++ b/devtools/server/actors/inspector/inspector.js
@@ -80,17 +80,16 @@ exports.InspectorActor = protocol.ActorC
 
     this._onColorPicked = this._onColorPicked.bind(this);
     this._onColorPickCanceled = this._onColorPickCanceled.bind(this);
     this.destroyEyeDropper = this.destroyEyeDropper.bind(this);
   },
 
   destroy: function() {
     protocol.Actor.prototype.destroy.call(this);
-
     this.destroyEyeDropper();
 
     this._highlighterPromise = null;
     this._pageStylePromise = null;
     this._walkerPromise = null;
     this.walker = null;
     this.targetActor = null;
   },
--- a/devtools/shared/fronts/inspector.js
+++ b/devtools/shared/fronts/inspector.js
@@ -1,29 +1,32 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
+const Telemetry = require("devtools/client/shared/telemetry");
+const telemetry = new Telemetry();
+const TELEMETRY_EYEDROPPER_OPENED = "DEVTOOLS_EYEDROPPER_OPENED_COUNT";
+const TELEMETRY_EYEDROPPER_OPENED_MENU = "DEVTOOLS_MENU_EYEDROPPER_OPENED_COUNT";
+
 const {
   Front,
   FrontClassWithSpec,
   custom,
   preEvent,
   types
 } = require("devtools/shared/protocol.js");
 const {
   inspectorSpec,
   walkerSpec
 } = require("devtools/shared/specs/inspector");
 const defer = require("devtools/shared/defer");
 loader.lazyRequireGetter(this, "nodeConstants",
   "devtools/shared/dom-node-constants");
-loader.lazyRequireGetter(this, "CommandUtils",
-  "devtools/client/shared/developer-toolbar", true);
 
 /**
  * Client side of the DOM walker.
  */
 const WalkerFront = FrontClassWithSpec(walkerSpec, {
   // Set to true if cleanup should be requested after every mutation list.
   autoCleanup: true,
 
@@ -479,22 +482,21 @@ var InspectorFront = FrontClassWithSpec(
       return this.getWalker().then(() => {
         return pageStyle;
       });
     });
   }, {
     impl: "_getPageStyle"
   }),
 
-  pickColorFromPage: custom(async function(toolbox, options) {
-    if (toolbox) {
-      // If the eyedropper was already started using the gcli command, hide it so we don't
-      // end up with 2 instances of the eyedropper on the page.
-      CommandUtils.executeOnTarget(toolbox.target, "eyedropper --hide");
+  pickColorFromPage: custom(async function(options) {
+    await this._pickColorFromPage(options);
+    if (options && options.fromMenu) {
+      telemetry.getHistogramById(TELEMETRY_EYEDROPPER_OPENED_MENU).add(true);
+    } else {
+      telemetry.getHistogramById(TELEMETRY_EYEDROPPER_OPENED).add(true);
     }
-
-    await this._pickColorFromPage(options);
   }, {
     impl: "_pickColorFromPage"
   })
 });
 
 exports.InspectorFront = InspectorFront;
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -77,17 +77,16 @@
 #include "nsIContentSecurityPolicy.h"
 #include "nsIContentViewer.h"
 #include "nsIController.h"
 #include "nsICookieService.h"
 #include "nsIDocShellTreeItem.h"
 #include "nsIDocShellTreeOwner.h"
 #include "nsIDocument.h"
 #include "nsIDocumentLoaderFactory.h"
-#include "nsIDOMStorage.h"
 #include "nsIDOMWindow.h"
 #include "nsIEditingSession.h"
 #include "nsIExternalProtocolService.h"
 #include "nsIFormPOSTActionChannel.h"
 #include "nsIFrame.h"
 #include "nsIGlobalObject.h"
 #include "nsIHttpChannel.h"
 #include "nsIHttpChannelInternal.h"
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -511,11 +511,8 @@ countermap.script = 'gen-usecounters.py:
 countermap.inputs = ['UseCounters.conf']
 
 counterlist = GENERATED_FILES['UseCounterList.h']
 counterlist.script = 'gen-usecounters.py:use_counter_list'
 counterlist.inputs = ['UseCounters.conf']
 
 if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
     CXXFLAGS += ['-Wno-error=shadow']
-
-if CONFIG['CC_TYPE'] == 'clang-cl':
-    AllowCompilerWarnings()  # workaround for bug 1090497
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -4303,24 +4303,23 @@ nsDOMWindowUtils::RemoveManuallyManagedS
     return NS_ERROR_INVALID_ARG;
   }
 
   aElement->RemoveManuallyManagedStates(state);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-nsDOMWindowUtils::GetStorageUsage(nsIDOMStorage* aStorage, int64_t* aRetval)
+nsDOMWindowUtils::GetStorageUsage(Storage* aStorage, int64_t* aRetval)
 {
-  RefPtr<Storage> storage = static_cast<Storage*>(aStorage);
-  if (!storage) {
+  if (!aStorage) {
     return NS_ERROR_UNEXPECTED;
   }
 
-  *aRetval = storage->GetOriginQuotaUsage();
+  *aRetval = aStorage->GetOriginQuotaUsage();
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDOMWindowUtils::GetDirectionFromText(const nsAString& aString, int32_t* aRetval)
 {
   Directionality dir = ::GetDirectionFromText(aString.BeginReading(), aString.Length(), nullptr);
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -12636,16 +12636,21 @@ nsIDocument::ReportHasScrollLinkedEffect
 
 void
 nsIDocument::SetUserHasInteracted(bool aUserHasInteracted)
 {
   MOZ_LOG(gUserInteractionPRLog, LogLevel::Debug,
           ("Document %p has been interacted by user.", this));
   mUserHasInteracted = aUserHasInteracted;
 
+  nsCOMPtr<nsILoadInfo> loadInfo = mChannel ? mChannel->GetLoadInfo() : nullptr;
+  if (loadInfo) {
+    loadInfo->SetDocumentHasUserInteracted(aUserHasInteracted);
+  }
+
   if (aUserHasInteracted) {
     MaybeAllowStorageForOpener();
   }
 }
 
 void
 nsIDocument::NotifyUserGestureActivation()
 {
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
@@ -4790,25 +4790,25 @@ nsGlobalWindowInner::GetSessionStorage(E
     nsresult rv;
 
     nsCOMPtr<nsIDOMStorageManager> storageManager = do_QueryInterface(docShell, &rv);
     if (NS_FAILED(rv)) {
       aError.Throw(rv);
       return nullptr;
     }
 
-    nsCOMPtr<nsIDOMStorage> storage;
+    RefPtr<Storage> storage;
     aError = storageManager->CreateStorage(this, principal, documentURI,
                                            IsPrivateBrowsing(),
                                            getter_AddRefs(storage));
     if (aError.Failed()) {
       return nullptr;
     }
 
-    mSessionStorage = static_cast<Storage*>(storage.get());
+    mSessionStorage = storage;
     MOZ_ASSERT(mSessionStorage);
 
     MOZ_LOG(gDOMLeakPRLogInner, LogLevel::Debug,
             ("nsGlobalWindowInner %p tried to get a new sessionStorage %p", this, mSessionStorage.get()));
 
     if (!mSessionStorage) {
       aError.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
       return nullptr;
@@ -4851,25 +4851,25 @@ nsGlobalWindowInner::GetLocalStorage(Err
     nsString documentURI;
     if (mDoc) {
       aError = mDoc->GetDocumentURI(documentURI);
       if (NS_WARN_IF(aError.Failed())) {
         return nullptr;
       }
     }
 
-    nsCOMPtr<nsIDOMStorage> storage;
+    RefPtr<Storage> storage;
     aError = storageManager->CreateStorage(this, principal, documentURI,
                                            IsPrivateBrowsing(),
                                            getter_AddRefs(storage));
     if (aError.Failed()) {
       return nullptr;
     }
 
-    mLocalStorage = static_cast<Storage*>(storage.get());
+    mLocalStorage = storage;
     MOZ_ASSERT(mLocalStorage);
   }
 
   return mLocalStorage;
 }
 
 IDBFactory*
 nsGlobalWindowInner::GetIndexedDB(ErrorResult& aError)
@@ -5679,17 +5679,17 @@ nsGlobalWindowInner::ObserveStorageNotif
     return;
   }
 
   bool fireMozStorageChanged = false;
   nsAutoString eventType;
   eventType.AssignLiteral("storage");
 
   if (!NS_strcmp(aStorageType, u"sessionStorage")) {
-    nsCOMPtr<nsIDOMStorage> changingStorage = aEvent->GetStorageArea();
+    RefPtr<Storage> changingStorage = aEvent->GetStorageArea();
     MOZ_ASSERT(changingStorage);
 
     bool check = false;
 
     nsCOMPtr<nsIDOMStorageManager> storageManager = do_QueryInterface(GetDocShell());
     if (storageManager) {
       nsresult rv = storageManager->CheckStorage(principal, changingStorage,
                                                  &check);
--- a/dom/base/nsGlobalWindowOuter.cpp
+++ b/dom/base/nsGlobalWindowOuter.cpp
@@ -2041,20 +2041,20 @@ nsGlobalWindowOuter::PreloadLocalStorage
     do_GetService("@mozilla.org/dom/localStorage-manager;1", &rv);
   if (NS_FAILED(rv)) {
     return;
   }
 
   // private browsing windows do not persist local storage to disk so we should
   // only try to precache storage when we're not a private browsing window.
   if (principal->GetPrivateBrowsingId() == 0) {
-    nsCOMPtr<nsIDOMStorage> storage;
+    RefPtr<Storage> storage;
     rv = storageManager->PrecacheStorage(principal, getter_AddRefs(storage));
     if (NS_SUCCEEDED(rv)) {
-      mLocalStorage = static_cast<Storage*>(storage.get());
+      mLocalStorage = storage;
     }
   }
 }
 
 void
 nsGlobalWindowOuter::DispatchDOMWindowCreated()
 {
   if (!mDoc) {
--- a/dom/indexedDB/test/unit/test_create_objectStore.js
+++ b/dom/indexedDB/test/unit/test_create_objectStore.js
@@ -75,17 +75,17 @@ function* testSteps()
       }
     }
     is(found, true, "objectStoreNames contains name");
 
     is(objectStore.name, name, "Bad name");
     is(objectStore.keyPath, info.options && info.options.keyPath ?
                             info.options.keyPath : null,
        "Bad keyPath");
-    if (objectStore.indexNames.length, 0, "Bad indexNames");
+    is(objectStore.indexNames.length, 0, "Bad indexNames");
 
     ok(event.target.transaction, "event has a transaction");
     ok(event.target.transaction.db === db, "transaction has the right db");
     is(event.target.transaction.mode, "versionchange",
        "transaction has the correct mode");
     is(event.target.transaction.objectStoreNames.length, index + 1,
        "transaction has correct objectStoreNames list");
     found = false;
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -37,25 +37,25 @@ interface nsIQueryContentEventResult;
 interface nsIDOMWindow;
 interface nsIFile;
 interface nsIURI;
 interface nsIRunnable;
 interface nsITranslationNodeList;
 interface nsIJSRAIIHelper;
 interface nsIContentPermissionRequest;
 interface nsIObserver;
-interface nsIDOMStorage;
 
 webidl Animation;
 webidl DOMRect;
 webidl Element;
 webidl EventTarget;
 webidl Event;
 webidl Node;
 webidl NodeList;
+webidl Storage;
 
 [scriptable, uuid(4d6732ca-9da7-4176-b8a1-8dde15cd0bf9)]
 interface nsIDOMWindowUtils : nsISupports {
 
   /**
    * Image animation mode of the window. When this attribute's value
    * is changed, the implementation should set all images in the window
    * to the given value. That is, when set to kDontAnimMode, all images
@@ -1896,17 +1896,17 @@ interface nsIDOMWindowUtils : nsISupport
                                   in AString state);
 
   /**
    * Returns usage data for a given storage object.
    *
    * @param aStorage
    *    The storage object to get usage data for.
    */
-  int64_t getStorageUsage(in nsIDOMStorage aStorage);
+  int64_t getStorageUsage(in Storage aStorage);
 
   /**
    * Returns the directionality of a string using the first-strong character
    * algorithm defined in http://unicode.org/reports/tr9/#P2.
    *
    * @param aString the string to retrieve the direction for.
    * @return one of DIRECTION_LTR, DIRECTION_RTL or DIRECTION_NOT_SET depending
    *         on the first-strong character found in the string.
--- a/dom/interfaces/payments/nsIPaymentAddress.idl
+++ b/dom/interfaces/payments/nsIPaymentAddress.idl
@@ -12,29 +12,27 @@ interface nsIPaymentAddress : nsISupport
 {
   readonly attribute AString country;
   readonly attribute nsIArray addressLine;
   readonly attribute AString region;
   readonly attribute AString city;
   readonly attribute AString dependentLocality;
   readonly attribute AString postalCode;
   readonly attribute AString sortingCode;
-  readonly attribute AString languageCode;
   readonly attribute AString organization;
   readonly attribute AString recipient;
   readonly attribute AString phone;
 
   void init(in AString aCountry,
             in nsIArray aAddressLine,
             in AString aRegion,
             in AString aCity,
             in AString aDependentLocality,
             in AString aPostalCode,
             in AString aSortingCode,
-            in AString aLanguageCode,
             in AString aOrganization,
             in AString aRecipient,
             in AString aPhone);
 };
 
 %{C++
 #define NS_PAYMENT_ADDRESS_CID \
   { 0x49a02241, 0x7e48, 0x477a, { 0x93, 0x45, 0x9f, 0x24, 0x69, 0x25, 0xdc, 0xb3 } }
--- a/dom/interfaces/storage/moz.build
+++ b/dom/interfaces/storage/moz.build
@@ -3,14 +3,13 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 with Files("**"):
     BUG_COMPONENT = ("Core", "DOM")
 
 XPIDL_SOURCES += [
-    'nsIDOMStorage.idl',
     'nsIDOMStorageManager.idl',
     'nsIStorageActivityService.idl',
 ]
 
 XPIDL_MODULE = 'dom_storage'
deleted file mode 100644
--- a/dom/interfaces/storage/nsIDOMStorage.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "domstubs.idl"
-
-/**
- * Empty interface for client side storage. DOMStorage is now ported to WebIDL
- * but we still need an XPConnect interface for casting.
- */
-
-[scriptable, uuid(425a33f0-e0e9-45e7-a95f-9908bd6ae988)]
-interface nsIDOMStorage : nsISupports
-{
-};
--- a/dom/interfaces/storage/nsIDOMStorageManager.idl
+++ b/dom/interfaces/storage/nsIDOMStorageManager.idl
@@ -1,19 +1,20 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsISupports.idl"
 
-interface nsIDOMStorage;
 interface nsIPrincipal;
 interface mozIDOMWindow;
 
+webidl Storage;
+
 /**
  * General purpose interface that has two implementations, for localStorage
  * resp. sessionStorage with "@mozilla.org/dom/localStorage-manager;1" resp.
  * "@mozilla.org/dom/sessionStorage-manager;1" contract IDs.
  */
 [scriptable, uuid(a20c742e-3ed1-44fb-b897-4080a75b1662)]
 interface nsIDOMStorageManager : nsISupports
 {
@@ -23,73 +24,73 @@ interface nsIDOMStorageManager : nsISupp
    *
    * Because of how multi-e10s support was implemented in bug 1285898, the
    * StorageCache instance can no longer use a timer to keep itself alive.  So a
    * Storage instance is returned if precaching believes the principal may have
    * localStorage data.  (Previously the StorageCache would be brought into
    * existence and kept alive by the timer so that it could be returned if a
    * call to createStorage was made due to a request by the page.)
    */
-  nsIDOMStorage precacheStorage(in nsIPrincipal aPrincipal);
+  Storage precacheStorage(in nsIPrincipal aPrincipal);
 
   /**
    * Returns instance of DOM storage object for given principal.
    * A new object is always returned and it is ensured there is
    * a storage for the scope created.
    *
    * @param aWindow
    *    The parent window.
    * @param aPrincipal
    *    Principal to bound storage to.
    * @param aDocumentURI
    *    URL of the demanding document, used for DOM storage event only.
    * @param aPrivate
    *    Whether the demanding document is running in Private Browsing mode or not.
    */
-  nsIDOMStorage createStorage(in mozIDOMWindow aWindow,
-                              in nsIPrincipal aPrincipal,
-                              in DOMString aDocumentURI,
-                              [optional] in bool aPrivate);
+  Storage createStorage(in mozIDOMWindow aWindow,
+                        in nsIPrincipal aPrincipal,
+                        in DOMString aDocumentURI,
+                        [optional] in bool aPrivate);
   /**
    * Returns instance of DOM storage object for given principal.
    * If there is no storage managed for the scope, then null is returned and
    * no object is created.  Otherwise, an object (new) for the existing storage
    * scope is returned.
    *
    * @param aWindow
    *    The parent window.
    * @param aPrincipal
    *    Principal to bound storage to.
    * @param aPrivate
    *    Whether the demanding document is running in Private Browsing mode or not.
    */
-  nsIDOMStorage getStorage(in mozIDOMWindow aWindow,
-                           in nsIPrincipal aPrincipal,
-                           [optional] in bool aPrivate);
+  Storage getStorage(in mozIDOMWindow aWindow,
+                     in nsIPrincipal aPrincipal,
+                     [optional] in bool aPrivate);
 
   /**
    * Clones given storage into this storage manager.
    *
    * @param aStorageToCloneFrom
    *    The storage to copy all items from into this manager.  Manager will then
    *    return a new and independent object that contains snapshot of data from
    *    the moment this method was called.  Modification to this new object will
    *    not affect the original storage content we cloned from and vice versa.
    */
-  void cloneStorage(in nsIDOMStorage aStorageToCloneFrom);
+  void cloneStorage(in Storage aStorageToCloneFrom);
 
   /**
    * Returns true if the storage belongs to the given principal and is managed
    * (i.e. has been created and is cached) by this storage manager.
    *
    * @param aPrincipal
    *    Principal to check the storage against.
    * @param aStorage
    *    The storage object to examine.
    *
    * @result
    *    true when the storage object is bound with the principal and is managed
    *         by this storage manager.
    *    false otherwise
    */
   bool checkStorage(in nsIPrincipal aPrincipal,
-                    in nsIDOMStorage aStorage);
+                    in Storage aStorage);
 };
--- a/dom/media/mediasource/test/test_FrameSelection_mp4.html
+++ b/dom/media/mediasource/test/test_FrameSelection_mp4.html
@@ -34,16 +34,17 @@ runWithMSE(async (ms, v) => {
   // We have nothing to play, waiting will be fired.
   await waitUntilTime(v, 1.5);
   await fetchAndLoad(sb, "bipbop/bipbop_480_624kbps-video", ["init"], ".mp4");
   sb.timestampOffset = 1.601666; // End of the video track buffered - time of first video sample (0.095).
   sb.appendWindowEnd = 1.796677; // Only allow room for three extra video frames (we need 3 as this video has b-frames).
   await fetchAndLoad(sb, "bipbop/bipbop_480_624kbps-video", ["1"], ".m4s");
   ms.endOfStream();
   await Promise.all([once(ms, "sourceended"), once(v, "playing"), once(v, "ended")]);
-  if (v.width, 640, "has proper width");
-  if (v.height, 480, "has proper height");
+  // These tests are permafailing
+  // is(v.width, 640, "has proper width");
+  // is(v.height, 480, "has proper height");
   SimpleTest.finish();
 });
 </script>
 </pre>
 </body>
 </html>
--- a/dom/payments/BasicCardPayment.cpp
+++ b/dom/payments/BasicCardPayment.cpp
@@ -35,17 +35,16 @@ namespace dom {
 
 #define Country NS_LITERAL_STRING("country")
 #define AddressLine NS_LITERAL_STRING("addressLine")
 #define Region NS_LITERAL_STRING("region")
 #define City NS_LITERAL_STRING("city")
 #define DependentLocality NS_LITERAL_STRING("dependentLocality")
 #define PostalCode NS_LITERAL_STRING("postalCode")
 #define SortingCode NS_LITERAL_STRING("sortingCode")
-#define LanguageCode NS_LITERAL_STRING("languageCode")
 #define Organization NS_LITERAL_STRING("organization")
 #define Recipient NS_LITERAL_STRING("recipient")
 #define Phone NS_LITERAL_STRING("phone")
 
 #define PropertySpliter NS_LITERAL_STRING(";")
 #define KeyValueSpliter NS_LITERAL_STRING(":")
 #define AddressLineSpliter NS_LITERAL_STRING("%")
 
@@ -114,17 +113,16 @@ bool IsAddressKey(const nsAString& aKey)
 {
   return Country.Equals(aKey) ||
          AddressLine.Equals(aKey) ||
          Region.Equals(aKey) ||
          City.Equals(aKey) ||
          DependentLocality.Equals(aKey) ||
          PostalCode.Equals(aKey) ||
          SortingCode.Equals(aKey) ||
-         LanguageCode.Equals(aKey) ||
          Organization.Equals(aKey) ||
          Recipient.Equals(aKey) ||
          Phone.Equals(aKey);
 }
 
 } // end of namespace
 
 
@@ -259,17 +257,16 @@ BasicCardService::EncodeBasicCardData(co
     addressLineString += addressString + AddressLineSpliter;
   }
   EncodeBasicCardProperty(AddressLine ,addressLineString , aResult);
   EncodeAddressProperty(aBillingAddress, Region, aResult);
   EncodeAddressProperty(aBillingAddress, City, aResult);
   EncodeAddressProperty(aBillingAddress, DependentLocality, aResult);
   EncodeAddressProperty(aBillingAddress, PostalCode, aResult);
   EncodeAddressProperty(aBillingAddress, SortingCode, aResult);
-  EncodeAddressProperty(aBillingAddress, LanguageCode, aResult);
   EncodeAddressProperty(aBillingAddress, Organization, aResult);
   EncodeAddressProperty(aBillingAddress, Recipient, aResult);
   EncodeAddressProperty(aBillingAddress, Phone, aResult);
   return NS_OK;
 }
 
 nsresult
 BasicCardService::DecodeBasicCardData(const nsAString& aData,
@@ -280,17 +277,16 @@ BasicCardService::DecodeBasicCardData(co
   bool isBillingAddressPassed = false;
   nsTArray<nsString> addressLine;
   nsAutoString country;
   nsAutoString region;
   nsAutoString city;
   nsAutoString dependentLocality;
   nsAutoString postalCode;
   nsAutoString sortingCode;
-  nsAutoString languageCode;
   nsAutoString organization;
   nsAutoString recipient;
   nsAutoString phone;
 
   nsCharSeparatedTokenizer propertyTokenizer(aData, PropertySpliter.CharAt(0));
   while (propertyTokenizer.hasMoreTokens()) {
     nsDependentSubstring property = propertyTokenizer.nextToken();
     nsCharSeparatedTokenizer keyValueTokenizer(property, KeyValueSpliter.CharAt(0));
@@ -314,17 +310,16 @@ BasicCardService::DecodeBasicCardData(co
     DecodeBasicCardProperty(key, value, CardSecurityCode, aResponse);
 
     DecodeAddressProperty(key, value, Country, country);
     DecodeAddressProperty(key, value, Region, region);
     DecodeAddressProperty(key, value, City, city);
     DecodeAddressProperty(key, value, DependentLocality, dependentLocality);
     DecodeAddressProperty(key, value, PostalCode, postalCode);
     DecodeAddressProperty(key, value, SortingCode, sortingCode);
-    DecodeAddressProperty(key, value, LanguageCode, languageCode);
     DecodeAddressProperty(key, value, Organization, organization);
     DecodeAddressProperty(key, value, Recipient, recipient);
     DecodeAddressProperty(key, value, Phone, phone);
 
     if ((key).Equals(AddressLine)) {
       nsCharSeparatedTokenizer addressTokenizer(value, AddressLineSpliter.CharAt(0));
       while (addressTokenizer.hasMoreTokens()) {
         addressLine.AppendElement(addressTokenizer.nextToken());
@@ -336,17 +331,16 @@ BasicCardService::DecodeBasicCardData(co
     aResponse.mBillingAddress.Value() = new PaymentAddress(aWindow,
                                                            country,
                                                            addressLine,
                                                            region,
                                                            city,
                                                            dependentLocality,
                                                            postalCode,
                                                            sortingCode,
-                                                           languageCode,
                                                            organization,
                                                            recipient,
                                                            phone);
   }
   return NS_OK;
 }
 
 #ifdef PaymentBasicCardMacros
@@ -371,17 +365,16 @@ BasicCardService::DecodeBasicCardData(co
 #undef CardSecurityCode
 #undef Country
 #undef AddressLine
 #undef Region
 #undef City
 #undef DependentLocality
 #undef PostalCode
 #undef SortingCode
-#undef LanguageCode
 #undef Organization
 #undef Recipient
 #undef Phone
 #undef PropertySpliter
 #undef KeyValueSpliter
 #undef AddressLineSpliter
 #endif
 
--- a/dom/payments/PaymentAddress.cpp
+++ b/dom/payments/PaymentAddress.cpp
@@ -23,28 +23,26 @@ NS_INTERFACE_MAP_END
 PaymentAddress::PaymentAddress(nsPIDOMWindowInner* aWindow,
                                const nsAString& aCountry,
                                const nsTArray<nsString>& aAddressLine,
                                const nsAString& aRegion,
                                const nsAString& aCity,
                                const nsAString& aDependentLocality,
                                const nsAString& aPostalCode,
                                const nsAString& aSortingCode,
-                               const nsAString& aLanguageCode,
                                const nsAString& aOrganization,
                                const nsAString& aRecipient,
                                const nsAString& aPhone)
   : mCountry(aCountry)
   , mAddressLine(aAddressLine)
   , mRegion(aRegion)
   , mCity(aCity)
   , mDependentLocality(aDependentLocality)
   , mPostalCode(aPostalCode)
   , mSortingCode(aSortingCode)
-  , mLanguageCode(aLanguageCode)
   , mOrganization(aOrganization)
   , mRecipient(aRecipient)
   , mPhone(aPhone)
   , mOwner(aWindow)
 {
 }
 
 void
@@ -85,22 +83,16 @@ PaymentAddress::GetPostalCode(nsAString&
 
 void
 PaymentAddress::GetSortingCode(nsAString& aRetVal) const
 {
   aRetVal = mSortingCode;
 }
 
 void
-PaymentAddress::GetLanguageCode(nsAString& aRetVal) const
-{
-  aRetVal = mLanguageCode;
-}
-
-void
 PaymentAddress::GetOrganization(nsAString& aRetVal) const
 {
   aRetVal = mOrganization;
 }
 
 void
 PaymentAddress::GetRecipient(nsAString& aRetVal) const
 {
--- a/dom/payments/PaymentAddress.h
+++ b/dom/payments/PaymentAddress.h
@@ -23,17 +23,16 @@ public:
   PaymentAddress(nsPIDOMWindowInner* aWindow,
                  const nsAString& aCountry,
                  const nsTArray<nsString>& aAddressLine,
                  const nsAString& aRegion,
                  const nsAString& aCity,
                  const nsAString& aDependentLocality,
                  const nsAString& aPostalCode,
                  const nsAString& aSortingCode,
-                 const nsAString& aLanguageCode,
                  const nsAString& aOrganization,
                  const nsAString& aRecipient,
                  const nsAString& aPhone);
 
   nsPIDOMWindowInner* GetParentObject() const
   {
     return mOwner;
   }
@@ -51,35 +50,32 @@ public:
   void GetCity(nsAString& aRetVal) const;
 
   void GetDependentLocality(nsAString& aRetVal) const;
 
   void GetPostalCode(nsAString& aRetVal) const;
 
   void GetSortingCode(nsAString& aRetVal) const;
 
-  void GetLanguageCode(nsAString& aRetVal) const;
-
   void GetOrganization(nsAString& aRetVal) const;
 
   void GetRecipient(nsAString& aRetVal) const;
 
   void GetPhone(nsAString& aRetVal) const;
 
 private:
   ~PaymentAddress();
 
   nsString mCountry;
   nsTArray<nsString> mAddressLine;
   nsString mRegion;
   nsString mCity;
   nsString mDependentLocality;
   nsString mPostalCode;
   nsString mSortingCode;
-  nsString mLanguageCode;
   nsString mOrganization;
   nsString mRecipient;
   nsString mPhone;
 
   nsCOMPtr<nsPIDOMWindowInner> mOwner;
 };
 
 } // namespace dom
--- a/dom/payments/PaymentRequest.cpp
+++ b/dom/payments/PaymentRequest.cpp
@@ -968,29 +968,28 @@ PaymentRequest::GetShippingAddress() con
 nsresult
 PaymentRequest::UpdateShippingAddress(const nsAString& aCountry,
                                       const nsTArray<nsString>& aAddressLine,
                                       const nsAString& aRegion,
                                       const nsAString& aCity,
                                       const nsAString& aDependentLocality,
                                       const nsAString& aPostalCode,
                                       const nsAString& aSortingCode,
-                                      const nsAString& aLanguageCode,
                                       const nsAString& aOrganization,
                                       const nsAString& aRecipient,
                                       const nsAString& aPhone)
 {
   nsTArray<nsString> emptyArray;
   mShippingAddress = new PaymentAddress(GetOwner(), aCountry, emptyArray,
                                         aRegion, aCity, aDependentLocality,
-                                        aPostalCode, aSortingCode, aLanguageCode,
+                                        aPostalCode, aSortingCode,
                                         EmptyString(), EmptyString(), EmptyString());
   mFullShippingAddress = new PaymentAddress(GetOwner(), aCountry, aAddressLine,
                                             aRegion, aCity, aDependentLocality,
-                                            aPostalCode, aSortingCode, aLanguageCode,
+                                            aPostalCode, aSortingCode,
                                             aOrganization, aRecipient, aPhone);
   // Fire shippingaddresschange event
   return DispatchUpdateEvent(NS_LITERAL_STRING("shippingaddresschange"));
 }
 
 void
 PaymentRequest::SetShippingOption(const nsAString& aShippingOption)
 {
--- a/dom/payments/PaymentRequest.h
+++ b/dom/payments/PaymentRequest.h
@@ -123,17 +123,16 @@ public:
   // Update mShippingAddress and fire shippingaddresschange event
   nsresult UpdateShippingAddress(const nsAString& aCountry,
                                  const nsTArray<nsString>& aAddressLine,
                                  const nsAString& aRegion,
                                  const nsAString& aCity,
                                  const nsAString& aDependentLocality,
                                  const nsAString& aPostalCode,
                                  const nsAString& aSortingCode,
-                                 const nsAString& aLanguageCode,
                                  const nsAString& aOrganization,
                                  const nsAString& aRecipient,
                                  const nsAString& aPhone);
 
 
   void SetShippingOption(const nsAString& aShippingOption);
   void GetShippingOption(nsAString& aRetVal) const;
   nsresult UpdateShippingOption(const nsAString& aShippingOption);
--- a/dom/payments/PaymentRequestData.cpp
+++ b/dom/payments/PaymentRequestData.cpp
@@ -736,29 +736,27 @@ NS_IMPL_ISUPPORTS(PaymentAddress, nsIPay
 NS_IMETHODIMP
 PaymentAddress::Init(const nsAString& aCountry,
                      nsIArray* aAddressLine,
                      const nsAString& aRegion,
                      const nsAString& aCity,
                      const nsAString& aDependentLocality,
                      const nsAString& aPostalCode,
                      const nsAString& aSortingCode,
-                     const nsAString& aLanguageCode,
                      const nsAString& aOrganization,
                      const nsAString& aRecipient,
                      const nsAString& aPhone)
 {
   mCountry = aCountry;
   mAddressLine = aAddressLine;
   mRegion = aRegion;
   mCity = aCity;
   mDependentLocality = aDependentLocality;
   mPostalCode = aPostalCode;
   mSortingCode = aSortingCode;
-  mLanguageCode = aLanguageCode;
   mOrganization = aOrganization;
   mRecipient = aRecipient;
   mPhone = aPhone;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 PaymentAddress::GetCountry(nsAString& aCountry)
@@ -807,23 +805,16 @@ PaymentAddress::GetPostalCode(nsAString&
 NS_IMETHODIMP
 PaymentAddress::GetSortingCode(nsAString& aSortingCode)
 {
   aSortingCode = mSortingCode;
   return NS_OK;
 }
 
 NS_IMETHODIMP
-PaymentAddress::GetLanguageCode(nsAString& aLanguageCode)
-{
-  aLanguageCode = mLanguageCode;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
 PaymentAddress::GetOrganization(nsAString& aOrganization)
 {
   aOrganization = mOrganization;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 PaymentAddress::GetRecipient(nsAString& aRecipient)
--- a/dom/payments/PaymentRequestData.h
+++ b/dom/payments/PaymentRequestData.h
@@ -215,17 +215,16 @@ private:
 
   nsString mCountry;
   nsCOMPtr<nsIArray> mAddressLine;
   nsString mRegion;
   nsString mCity;
   nsString mDependentLocality;
   nsString mPostalCode;
   nsString mSortingCode;
-  nsString mLanguageCode;
   nsString mOrganization;
   nsString mRecipient;
   nsString mPhone;
 };
 
 } // end of namespace payment
 } // end of namespace dom
 } // end of namespace mozilla
--- a/dom/payments/PaymentRequestManager.cpp
+++ b/dom/payments/PaymentRequestManager.cpp
@@ -614,17 +614,16 @@ PaymentRequestManager::ChangeShippingAdd
 {
   return aRequest->UpdateShippingAddress(aAddress.country(),
                                          aAddress.addressLine(),
                                          aAddress.region(),
                                          aAddress.city(),
                                          aAddress.dependentLocality(),
                                          aAddress.postalCode(),
                                          aAddress.sortingCode(),
-                                         aAddress.languageCode(),
                                          aAddress.organization(),
                                          aAddress.recipient(),
                                          aAddress.phone());
 }
 
 nsresult
 PaymentRequestManager::ChangeShippingOption(PaymentRequest* aRequest,
                                             const nsAString& aOption)
--- a/dom/payments/ipc/PPaymentRequest.ipdl
+++ b/dom/payments/ipc/PPaymentRequest.ipdl
@@ -162,17 +162,16 @@ struct IPCPaymentAddress
 {
   nsString country;
   nsString[] addressLine;
   nsString region;
   nsString city;
   nsString dependentLocality;
   nsString postalCode;
   nsString sortingCode;
-  nsString languageCode;
   nsString organization;
   nsString recipient;
   nsString phone;
 };
 
 sync protocol PPaymentRequest
 {
   manager PBrowser;
--- a/dom/payments/ipc/PaymentRequestParent.cpp
+++ b/dom/payments/ipc/PaymentRequestParent.cpp
@@ -309,20 +309,16 @@ PaymentRequestParent::ChangeShippingAddr
   nsAutoString postalCode;
   rv = aAddress->GetPostalCode(postalCode);
   NS_ENSURE_SUCCESS(rv, rv);
 
   nsAutoString sortingCode;
   rv = aAddress->GetSortingCode(sortingCode);
   NS_ENSURE_SUCCESS(rv, rv);
 
-  nsAutoString languageCode;
-  rv = aAddress->GetLanguageCode(languageCode);
-  NS_ENSURE_SUCCESS(rv, rv);
-
   nsAutoString organization;
   rv = aAddress->GetOrganization(organization);
   NS_ENSURE_SUCCESS(rv, rv);
 
   nsAutoString recipient;
   rv = aAddress->GetRecipient(recipient);
   NS_ENSURE_SUCCESS(rv, rv);
 
@@ -340,17 +336,17 @@ PaymentRequestParent::ChangeShippingAddr
     nsAutoString address;
     rv = iaddress->GetData(address);
     NS_ENSURE_SUCCESS(rv, rv);
     addressLine.AppendElement(address);
   }
 
   IPCPaymentAddress ipcAddress(country, addressLine, region, city,
                                dependentLocality, postalCode, sortingCode,
-                               languageCode, organization, recipient, phone);
+                               organization, recipient, phone);
 
   nsAutoString requestId(aRequestId);
   if (!SendChangeShippingAddress(requestId, ipcAddress)) {
     return NS_ERROR_FAILURE;
   }
   return NS_OK;
 }
 
--- a/dom/payments/test/BasiccardChromeScript.js
+++ b/dom/payments/test/BasiccardChromeScript.js
@@ -19,17 +19,16 @@ address.data = "Easton Ave";
 addressLine.appendElement(address);
 billingAddress.init("USA",              // country
                      addressLine,        // address line
                      "CA",               // region
                      "San Bruno",        // city
                      "",                 // dependent locality
                      "94066",            // postal code
                      "123456",           // sorting code
-                     "en",               // language code
                      "",                 // organization
                      "Bill A. Pacheco",  // recipient
                      "+14344413879"); // phone
 
 const basiccardResponseData = Cc["@mozilla.org/dom/payments/basiccard-response-data;1"].
                                  createInstance(Ci.nsIBasicCardResponseData);
 
 const showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
--- a/dom/payments/test/RequestShippingChromeScript.js
+++ b/dom/payments/test/RequestShippingChromeScript.js
@@ -19,17 +19,16 @@ address.data = "Easton Ave";
 addressLine.appendElement(address);
 shippingAddress.init("",  // country
                      addressLine, // address line
                      "",  // region
                      "",  // city
                      "",  // dependent locality
                      "",  // postal code
                      "",  // sorting code
-                     "",  // language code
                      "",  // organization
                      "",  // recipient
                      ""); // phone
 
 const NormalUIService = {
   shippingOptionChanged: false,
   showPayment: function(requestId) {
     paymentSrv.changeShippingAddress(requestId, shippingAddress);
--- a/dom/payments/test/ShowPaymentChromeScript.js
+++ b/dom/payments/test/ShowPaymentChromeScript.js
@@ -25,17 +25,16 @@ address.data = "Easton Ave";
 addressLine.appendElement(address);
 shippingAddress.init("USA",              // country
                      addressLine,        // address line
                      "CA",               // region
                      "San Bruno",        // city
                      "Test locality",    // dependent locality
                      "94066",            // postal code
                      "123456",           // sorting code
-                     "en",               // language code
                      "Testing Org",      // organization
                      "Bill A. Pacheco",  // recipient
                      "+1-434-441-3879"); // phone
 
 function acceptShow(requestId) {
   const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
                           createInstance(Ci.nsIGeneralResponseData);
   responseData.initData({ paymentToken: "6880281f-0df3-4b8e-916f-66575e2457c1",});
--- a/dom/payments/test/UpdateErrorsChromeScript.js
+++ b/dom/payments/test/UpdateErrorsChromeScript.js
@@ -22,17 +22,16 @@ address.data = "Easton Ave";
 addressLine.appendElement(address);
 shippingAddress.init("USA",              // country
                      addressLine,        // address line
                      "CA",               // region
                      "San Bruno",        // city
                      "Test locality",    // dependent locality
                      "94066",            // postal code
                      "123456",           // sorting code
-                     "en",               // language code
                      "Testing Org",      // organization
                      "Bill A. Pacheco",  // recipient
                      "+1-434-441-3879"); // phone
 
 function acceptShow(requestId) {
   const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
                           createInstance(Ci.nsIGeneralResponseData);
   responseData.initData({ paymentToken: "6880281f-0df3-4b8e-916f-66575e2457c1",});
@@ -98,20 +97,16 @@ function checkAddressErrors(errors) {
   if (errors.city != "city error") {
     emitTestFail("Expect shippingAddressErrors.city as 'city error', but got" +
                   errors.city);
   }
   if (errors.dependentLocality != "dependentLocality error") {
     emitTestFail("Expect shippingAddressErrors.dependentLocality as 'dependentLocality error', but got" +
                   errors.dependentLocality);
   }
-  if (errors.languageCode != "languageCode error") {
-    emitTestFail("Expect shippingAddressErrors.languageCode as 'languageCode error', but got" +
-                  errors.languageCode);
-  }
   if (errors.organization != "organization error") {
     emitTestFail("Expect shippingAddressErrors.organization as 'organization error', but got" +
                   errors.organization);
   }
   if (errors.phone != "phone error") {
     emitTestFail("Expect shippingAddressErrors.phone as 'phone error', but got" +
                   errors.phone);
   }
--- a/dom/payments/test/test_basiccard.html
+++ b/dom/payments/test/test_basiccard.html
@@ -219,17 +219,16 @@ https://bugzilla.mozilla.org/show_bug.cg
         is(billingAddress.country, "USA", "country should be 'USA'.");
         is(billingAddress.addressLine.length, 1, "addressLine.length should be 1.");
         is(billingAddress.addressLine[0], "Easton Ave", "addressLine[0] should be 'Easton Ave'.");
         is(billingAddress.region, "CA", "region should be 'CA'.");
         is(billingAddress.city, "San Bruno", "city should be 'San Bruno'.");
         is(billingAddress.dependentLocality, "", "dependentLocality should be empty.");
         is(billingAddress.postalCode, "94066", "postalCode should be '94066'.");
         is(billingAddress.sortingCode, "123456", "sortingCode should be '123456'.");
-        is(billingAddress.languageCode, "en", "languageCode should be 'en'.");
         is(billingAddress.organization, "", "organization should be empty." );
         is(billingAddress.recipient, "Bill A. Pacheco", "recipient should be 'Bill A. Pacheco'.");
         is(billingAddress.phone, "+14344413879", "phone should be '+14344413879'.");
         response.complete("success").then(() =>{
           resolve();
         }).catch(e => {
           ok(false, "Unexpected error: " + e.name);
           resolve();
--- a/dom/payments/test/test_update_errors.html
+++ b/dom/payments/test/test_update_errors.html
@@ -26,17 +26,16 @@ https://bugzilla.mozilla.org/show_bug.cg
   gScript.addMessageListener("test-fail", testFailHandler);
   gScript.addMessageListener("test-pass", testPassHandler);
 
   const addressErrors = {
     addressLine: "addressLine error",
     city: "city error",
     country: "country error",
     dependentLocality: "dependentLocality error",
-    languageCode: "languageCode error",
     organization: "organization error",
     phone: "phone error",
     postalCode: "postalCode error",
     recipient: "recipient error",
     region: "region error",
     regionCode: "regionCode error",
     sortingCode: "sortingCode error",
   };
--- a/dom/smil/nsSMILParserUtils.cpp
+++ b/dom/smil/nsSMILParserUtils.cpp
@@ -1,15 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsSMILParserUtils.h"
+#include "mozilla/TextUtils.h"
 #include "nsSMILKeySpline.h"
 #include "nsISMILAttr.h"
 #include "nsSMILValue.h"
 #include "nsSMILTimeValue.h"
 #include "nsSMILTimeValueSpecParams.h"
 #include "nsSMILTypes.h"
 #include "nsSMILRepeatCount.h"
 #include "nsContentUtils.h"
@@ -59,32 +60,32 @@ ParseColon(RangedPtr<const char16_t>& aI
 /*
  * Exactly two digits in the range 00 - 59 are expected.
  */
 bool
 ParseSecondsOrMinutes(RangedPtr<const char16_t>& aIter,
                       const RangedPtr<const char16_t>& aEnd,
                       uint32_t& aValue)
 {
-  if (aIter == aEnd || !SVGContentUtils::IsDigit(*aIter)) {
+  if (aIter == aEnd || !mozilla::IsAsciiDigit(*aIter)) {
     return false;
   }
 
   RangedPtr<const char16_t> iter(aIter);
 
-  if (++iter == aEnd || !SVGContentUtils::IsDigit(*iter)) {
+  if (++iter == aEnd || !mozilla::IsAsciiDigit(*iter)) {
      return false;
   }
 
-  uint32_t value = 10 * SVGContentUtils::DecimalDigitValue(*aIter) +
-                   SVGContentUtils::DecimalDigitValue(*iter);
+  uint32_t value = 10 * mozilla::AsciiAlphanumericToNumber(*aIter) +
+                   mozilla::AsciiAlphanumericToNumber(*iter);
   if (value > 59) {
     return false;
   }
-  if (++iter != aEnd && SVGContentUtils::IsDigit(*iter)) {
+  if (++iter != aEnd && mozilla::IsAsciiDigit(*iter)) {
     return false;
   }
 
   aValue = value;
   aIter = iter;
   return true;
 }
 
@@ -671,14 +672,14 @@ nsSMILParserUtils::CheckForNegativeNumbe
   while (iter != end && nsContentUtils::IsHTMLWhitespace(*iter)) {
     ++iter;
   }
 
   // Check for dash
   if (iter != end && *iter == '-') {
     ++iter;
     // Check for numeric character
-    if (iter != end && SVGContentUtils::IsDigit(*iter)) {
+    if (iter != end && mozilla::IsAsciiDigit(*iter)) {
       absValLocation = iter - start;
     }
   }
   return absValLocation;
 }
--- a/dom/storage/LocalStorageManager.cpp
+++ b/dom/storage/LocalStorageManager.cpp
@@ -207,17 +207,17 @@ LocalStorageManager::DropCache(LocalStor
 }
 
 nsresult
 LocalStorageManager::GetStorageInternal(CreateMode aCreateMode,
                                         mozIDOMWindow* aWindow,
                                         nsIPrincipal* aPrincipal,
                                         const nsAString& aDocumentURI,
                                         bool aPrivate,
-                                        nsIDOMStorage** aRetval)
+                                        Storage** aRetval)
 {
   nsAutoCString originAttrSuffix;
   nsAutoCString originKey;
 
   nsresult rv = GenerateOriginKey(aPrincipal, originAttrSuffix, originKey);
   if (NS_FAILED(rv)) {
     return NS_ERROR_NOT_AVAILABLE;
   }
@@ -282,81 +282,80 @@ LocalStorageManager::GetStorageInternal(
 
     cache->SetActor(actor);
 #endif
   }
 
   if (aRetval) {
     nsCOMPtr<nsPIDOMWindowInner> inner = nsPIDOMWindowInner::From(aWindow);
 
-    nsCOMPtr<nsIDOMStorage> storage = new LocalStorage(
+    RefPtr<Storage> storage = new LocalStorage(
       inner, this, cache, aDocumentURI, aPrincipal, aPrivate);
     storage.forget(aRetval);
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 LocalStorageManager::PrecacheStorage(nsIPrincipal* aPrincipal,
-                                     nsIDOMStorage** aRetval)
+                                     Storage** aRetval)
 {
   return GetStorageInternal(CreateMode::CreateIfShouldPreload, nullptr,
                             aPrincipal, EmptyString(), false, aRetval);
 }
 
 NS_IMETHODIMP
 LocalStorageManager::CreateStorage(mozIDOMWindow* aWindow,
                                    nsIPrincipal* aPrincipal,
                                    const nsAString& aDocumentURI,
                                    bool aPrivate,
-                                   nsIDOMStorage** aRetval)
+                                   Storage** aRetval)
 {
   return GetStorageInternal(CreateMode::CreateAlways, aWindow, aPrincipal,
                             aDocumentURI, aPrivate, aRetval);
 }
 
 NS_IMETHODIMP
 LocalStorageManager::GetStorage(mozIDOMWindow* aWindow,
                                 nsIPrincipal* aPrincipal,
                                 bool aPrivate,
-                                nsIDOMStorage** aRetval)
+                                Storage** aRetval)
 {
   return GetStorageInternal(CreateMode::UseIfExistsNeverCreate, aWindow,
                             aPrincipal, EmptyString(), aPrivate, aRetval);
 }
 
 NS_IMETHODIMP
-LocalStorageManager::CloneStorage(nsIDOMStorage* aStorage)
+LocalStorageManager::CloneStorage(Storage* aStorage)
 {
   // Cloning is supported only for sessionStorage
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
 LocalStorageManager::CheckStorage(nsIPrincipal* aPrincipal,
-                                  nsIDOMStorage* aStorage,
+                                  Storage* aStorage,
                                   bool* aRetval)
 {
-  nsresult rv;
+  if (!aStorage || aStorage->Type() != Storage::eLocalStorage) {
+    return NS_ERROR_UNEXPECTED;
+  }
 
   RefPtr<LocalStorage> storage = static_cast<LocalStorage*>(aStorage);
-  if (!storage) {
-    return NS_ERROR_UNEXPECTED;
-  }
 
   *aRetval = false;
 
   if (!aPrincipal) {
     return NS_ERROR_NOT_AVAILABLE;
   }
 
   nsAutoCString suffix;
   nsAutoCString origin;
-  rv = GenerateOriginKey(aPrincipal, suffix, origin);
+  nsresult rv = GenerateOriginKey(aPrincipal, suffix, origin);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return rv;
   }
 
   LocalStorageCache* cache = GetCache(suffix, origin);
   if (cache != storage->GetCache()) {
     return NS_OK;
   }
--- a/dom/storage/LocalStorageManager.h
+++ b/dom/storage/LocalStorageManager.h
@@ -99,17 +99,17 @@ private:
   };
 
   // Helper for creation of DOM storage objects
   nsresult GetStorageInternal(CreateMode aCreate,
                               mozIDOMWindow* aWindow,
                               nsIPrincipal* aPrincipal,
                               const nsAString& aDocumentURI,
                               bool aPrivate,
-                              nsIDOMStorage** aRetval);
+                              Storage** aRetval);
 
   // Suffix->origin->cache map
   typedef nsTHashtable<LocalStorageCacheHashKey> CacheOriginHashtable;
   nsClassHashtable<nsCStringHashKey, CacheOriginHashtable> mCaches;
 
   // If mLowDiskSpace is true it indicates a low device storage situation and
   // so no localStorage writes are allowed. sessionStorage writes are still
   // allowed.
--- a/dom/storage/SessionStorageManager.cpp
+++ b/dom/storage/SessionStorageManager.cpp
@@ -32,28 +32,28 @@ SessionStorageManager::~SessionStorageMa
   StorageObserver* observer = StorageObserver::Self();
   if (observer) {
     observer->RemoveSink(this);
   }
 }
 
 NS_IMETHODIMP
 SessionStorageManager::PrecacheStorage(nsIPrincipal* aPrincipal,
-                                       nsIDOMStorage** aRetval)
+                                       Storage** aRetval)
 {
   // Nothing to preload.
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SessionStorageManager::CreateStorage(mozIDOMWindow* aWindow,
                                      nsIPrincipal* aPrincipal,
                                      const nsAString& aDocumentURI,
                                      bool aPrivate,
-                                     nsIDOMStorage** aRetval)
+                                     Storage** aRetval)
 {
   nsAutoCString originKey;
   nsAutoCString originAttributes;
   nsresult rv = GenerateOriginKey(aPrincipal, originAttributes, originKey);
   if (NS_FAILED(rv)) {
     return NS_ERROR_NOT_AVAILABLE;
   }
 
@@ -77,17 +77,17 @@ SessionStorageManager::CreateStorage(moz
   storage.forget(aRetval);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SessionStorageManager::GetStorage(mozIDOMWindow* aWindow,
                                   nsIPrincipal* aPrincipal,
                                   bool aPrivate,
-                                  nsIDOMStorage** aRetval)
+                                  Storage** aRetval)
 {
   *aRetval = nullptr;
 
   nsAutoCString originKey;
   nsAutoCString originAttributes;
   nsresult rv = GenerateOriginKey(aPrincipal, originAttributes, originKey);
   if (NS_FAILED(rv)) {
     return rv;
@@ -108,30 +108,29 @@ SessionStorageManager::GetStorage(mozIDO
   RefPtr<SessionStorage> storage =
     new SessionStorage(inner, aPrincipal, cache, this, EmptyString(), aPrivate);
 
   storage.forget(aRetval);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-SessionStorageManager::CloneStorage(nsIDOMStorage* aStorage)
+SessionStorageManager::CloneStorage(Storage* aStorage)
 {
   if (NS_WARN_IF(!aStorage)) {
     return NS_ERROR_UNEXPECTED;
   }
 
-  RefPtr<Storage> storage = static_cast<Storage*>(aStorage);
-  if (storage->Type() != Storage::eSessionStorage) {
+  if (aStorage->Type() != Storage::eSessionStorage) {
     return NS_ERROR_UNEXPECTED;
   }
 
   nsAutoCString originKey;
   nsAutoCString originAttributes;
-  nsresult rv = GenerateOriginKey(storage->Principal(), originAttributes,
+  nsresult rv = GenerateOriginKey(aStorage->Principal(), originAttributes,
                                   originKey);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   OriginKeyHashTable* table;
   if (!mOATable.Get(originAttributes, &table)) {
     table = new OriginKeyHashTable();
@@ -148,17 +147,17 @@ SessionStorageManager::CloneStorage(nsID
   MOZ_ASSERT(cache);
 
   table->Put(originKey, cache);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SessionStorageManager::CheckStorage(nsIPrincipal* aPrincipal,
-                                    nsIDOMStorage* aStorage,
+                                    Storage* aStorage,
                                     bool* aRetval)
 {
   if (NS_WARN_IF(!aStorage)) {
     return NS_ERROR_UNEXPECTED;
   }
 
   if (!aPrincipal) {
     return NS_ERROR_NOT_AVAILABLE;
@@ -178,28 +177,27 @@ SessionStorageManager::CheckStorage(nsIP
     return NS_OK;
   }
 
   RefPtr<SessionStorageCache> cache;
   if (!table->Get(originKey, getter_AddRefs(cache))) {
     return NS_OK;
   }
 
-  RefPtr<Storage> storage = static_cast<Storage*>(aStorage);
-  if (storage->Type() != Storage::eSessionStorage) {
+  if (aStorage->Type() != Storage::eSessionStorage) {
     return NS_OK;
   }
 
   RefPtr<SessionStorage> sessionStorage =
     static_cast<SessionStorage*>(aStorage);
   if (sessionStorage->Cache() != cache) {
     return NS_OK;
   }
 
-  if (!StorageUtils::PrincipalsEqual(storage->Principal(), aPrincipal)) {
+  if (!StorageUtils::PrincipalsEqual(aStorage->Principal(), aPrincipal)) {
     return NS_OK;
   }
 
   *aRetval = true;
   return NS_OK;
 }
 
 void
--- a/dom/storage/Storage.cpp
+++ b/dom/storage/Storage.cpp
@@ -18,18 +18,17 @@ static const char kStorageEnabled[] = "d
 
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Storage, mWindow, mPrincipal)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(Storage)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(Storage)
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Storage)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStorage)
-  NS_INTERFACE_MAP_ENTRY(nsIDOMStorage)
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 Storage::Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal)
   : mWindow(aWindow)
   , mPrincipal(aPrincipal)
   , mIsSessionOnly(false)
 {
   MOZ_ASSERT(aPrincipal);
--- a/dom/storage/Storage.h
+++ b/dom/storage/Storage.h
@@ -5,35 +5,33 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_dom_Storage_h
 #define mozilla_dom_Storage_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/ErrorResult.h"
 #include "mozilla/Maybe.h"
-#include "nsIDOMStorage.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsWeakReference.h"
 #include "nsWrapperCache.h"
 #include "nsISupports.h"
 
 class nsIPrincipal;
 class nsPIDOMWindowInner;
 
 namespace mozilla {
 namespace dom {
 
-class Storage : public nsIDOMStorage
+class Storage : public nsISupports
               , public nsWrapperCache
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Storage,
-                                                         nsIDOMStorage)
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Storage)
 
   Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal);
 
   static bool StoragePrefIsEnabled();
 
   enum StorageType {
     eSessionStorage,
     eLocalStorage,
--- a/dom/svg/SVGContentUtils.cpp
+++ b/dom/svg/SVGContentUtils.cpp
@@ -11,16 +11,17 @@
 // Keep others in (case-insensitive) order:
 #include "gfx2DGlue.h"
 #include "gfxMatrix.h"
 #include "gfxPlatform.h"
 #include "mozilla/gfx/2D.h"
 #include "mozilla/dom/SVGSVGElement.h"
 #include "mozilla/RefPtr.h"
 #include "mozilla/SVGContextPaint.h"
+#include "mozilla/TextUtils.h"
 #include "nsComputedDOMStyle.h"
 #include "nsFontMetrics.h"
 #include "nsIFrame.h"
 #include "nsIScriptError.h"
 #include "nsLayoutUtils.h"
 #include "nsMathUtils.h"
 #include "SVGAnimationElement.h"
 #include "SVGAnimatedPreserveAspectRatio.h"
@@ -646,46 +647,46 @@ ParseNumber(RangedPtr<const char16_t>& a
   }
 
   // Absolute value of the integer part of the mantissa.
   double intPart = 0.0;
 
   bool gotDot = *aIter == '.';
 
   if (!gotDot) {
-    if (!SVGContentUtils::IsDigit(*aIter)) {
+    if (!mozilla::IsAsciiDigit(*aIter)) {
       return false;
     }
     do {
-      intPart = 10.0 * intPart + SVGContentUtils::DecimalDigitValue(*aIter);
+      intPart = 10.0 * intPart + mozilla::AsciiAlphanumericToNumber(*aIter);
       ++aIter;
-    } while (aIter != aEnd && SVGContentUtils::IsDigit(*aIter));
+    } while (aIter != aEnd && mozilla::IsAsciiDigit(*aIter));
 
     if (aIter != aEnd) {
       gotDot = *aIter == '.';
     }
   }
 
   // Fractional part of the mantissa.
   double fracPart = 0.0;
 
   if (gotDot) {
     ++aIter;
-    if (aIter == aEnd || !SVGContentUtils::IsDigit(*aIter)) {
+    if (aIter == aEnd || !mozilla::IsAsciiDigit(*aIter)) {
       return false;
     }
 
     // Power of ten by which we need to divide the fraction
     double divisor = 1.0;
 
     do {
-      fracPart = 10.0 * fracPart + SVGContentUtils::DecimalDigitValue(*aIter);
+      fracPart = 10.0 * fracPart + mozilla::AsciiAlphanumericToNumber(*aIter);
       divisor *= 10.0;
       ++aIter;
-    } while (aIter != aEnd && SVGContentUtils::IsDigit(*aIter));
+    } while (aIter != aEnd && mozilla::IsAsciiDigit(*aIter));
 
     fracPart /= divisor;
   }
 
   bool gotE = false;
   int32_t exponent = 0;
   int32_t expSign;
 
@@ -694,29 +695,29 @@ ParseNumber(RangedPtr<const char16_t>& a
     RangedPtr<const char16_t> expIter(aIter);
 
     ++expIter;
     if (expIter != aEnd) {
       expSign = *expIter == '-' ? -1 : 1;
       if (*expIter == '-' || *expIter == '+') {
         ++expIter;
       }
-      if (expIter != aEnd && SVGContentUtils::IsDigit(*expIter)) {
+      if (expIter != aEnd && mozilla::IsAsciiDigit(*expIter)) {
         // At this point we're sure this is an exponent
         // and not the start of a unit such as em or ex.
         gotE = true;
       }
     }
 
     if (gotE) {
       aIter = expIter;
       do {
-        exponent = 10.0 * exponent + SVGContentUtils::DecimalDigitValue(*aIter);
+        exponent = 10.0 * exponent + mozilla::AsciiAlphanumericToNumber(*aIter);
         ++aIter;
-      } while (aIter != aEnd && SVGContentUtils::IsDigit(*aIter));
+      } while (aIter != aEnd && mozilla::IsAsciiDigit(*aIter));
     }
   }
 
   // Assemble the number
   aValue = sign * (intPart + fracPart);
   if (gotE) {
     aValue *= pow(10.0, expSign * exponent);
   }
@@ -793,28 +794,28 @@ SVGContentUtils::ParseInteger(RangedPtr<
 {
   RangedPtr<const char16_t> iter(aIter);
 
   int32_t sign;
   if (!ParseOptionalSign(iter, aEnd, sign)) {
     return false;
   }
 
-  if (!IsDigit(*iter)) {
+  if (!mozilla::IsAsciiDigit(*iter)) {
     return false;
   }
 
   int64_t value = 0;
 
   do {
     if (value <= std::numeric_limits<int32_t>::max()) {
-      value = 10 * value + DecimalDigitValue(*iter);
+      value = 10 * value + mozilla::AsciiAlphanumericToNumber(*iter);
     }
     ++iter;
-  } while (iter != aEnd && IsDigit(*iter));
+  } while (iter != aEnd && mozilla::IsAsciiDigit(*iter));
 
   aIter = iter;
   aValue = int32_t(clamped(sign * value,
                            int64_t(std::numeric_limits<int32_t>::min()),
                            int64_t(std::numeric_limits<int32_t>::max())));
   return true;
 }
 
--- a/dom/svg/SVGContentUtils.h
+++ b/dom/svg/SVGContentUtils.h
@@ -258,33 +258,16 @@ public:
 
   static mozilla::RangedPtr<const char16_t>
   GetStartRangedPtr(const nsAString& aString);
 
   static mozilla::RangedPtr<const char16_t>
   GetEndRangedPtr(const nsAString& aString);
 
   /**
-   * True if 'aCh' is a decimal digit.
-   */
-  static inline bool IsDigit(char16_t aCh)
-  {
-    return aCh >= '0' && aCh <= '9';
-  }
-
- /**
-  * Assuming that 'aCh' is a decimal digit, return its numeric value.
-  */
-  static inline uint32_t DecimalDigitValue(char16_t aCh)
-  {
-    MOZ_ASSERT(IsDigit(aCh), "Digit expected");
-    return aCh - '0';
-  }
-
-  /**
    * Parses the sign (+ or -) of a number and moves aIter to the next
    * character if a sign is found.
    * @param aSignMultiplier [outparam] -1 if the sign is negative otherwise 1
    * @return false if we hit the end of the string (i.e. if aIter is initially
    *         at aEnd, or if we reach aEnd right after the sign character).
    */
   static inline bool
   ParseOptionalSign(mozilla::RangedPtr<const char16_t>& aIter,
--- a/dom/webidl/PaymentAddress.webidl
+++ b/dom/webidl/PaymentAddress.webidl
@@ -17,13 +17,12 @@ interface PaymentAddress {
   // readonly attribute FrozenArray<DOMString> addressLine;
   [Frozen, Cached, Pure]
   readonly attribute sequence<DOMString>    addressLine;
   readonly attribute DOMString              region;
   readonly attribute DOMString              city;
   readonly attribute DOMString              dependentLocality;
   readonly attribute DOMString              postalCode;
   readonly attribute DOMString              sortingCode;
-  readonly attribute DOMString              languageCode;
   readonly attribute DOMString              organization;
   readonly attribute DOMString              recipient;
   readonly attribute DOMString              phone;
 };
--- a/dom/webidl/PaymentRequest.webidl
+++ b/dom/webidl/PaymentRequest.webidl
@@ -54,17 +54,16 @@ dictionary PaymentDetailsInit : PaymentD
   required PaymentItem total;
 };
 
 dictionary AddressErrors {
   DOMString addressLine;
   DOMString city;
   DOMString country;
   DOMString dependentLocality;
-  DOMString languageCode;
   DOMString organization;
   DOMString phone;
   DOMString postalCode;
   DOMString recipient;
   DOMString region;
   DOMString regionCode;
   DOMString sortingCode;
 };
--- a/ipc/glue/BackgroundUtils.cpp
+++ b/ipc/glue/BackgroundUtils.cpp
@@ -450,17 +450,18 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoa
       ipcClientInfo,
       ipcReservedClientInfo,
       ipcInitialClientInfo,
       ipcController,
       aLoadInfo->CorsUnsafeHeaders(),
       aLoadInfo->GetForcePreflight(),
       aLoadInfo->GetIsPreflight(),
       aLoadInfo->GetLoadTriggeredFromExternal(),
-      aLoadInfo->GetServiceWorkerTaintingSynthesized()
+      aLoadInfo->GetServiceWorkerTaintingSynthesized(),
+      aLoadInfo->GetDocumentHasUserInteracted()
       );
 
   return NS_OK;
 }
 
 nsresult
 LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
                        nsILoadInfo** outLoadInfo)
@@ -611,57 +612,56 @@ LoadInfoArgsToLoadInfo(const OptionalLoa
                           redirectChainIncludingInternalRedirects,
                           redirectChain,
                           std::move(ancestorPrincipals),
                           loadInfoArgs.ancestorOuterWindowIDs(),
                           loadInfoArgs.corsUnsafeHeaders(),
                           loadInfoArgs.forcePreflight(),
                           loadInfoArgs.isPreflight(),
                           loadInfoArgs.loadTriggeredFromExternal(),
-                          loadInfoArgs.serviceWorkerTaintingSynthesized()
+                          loadInfoArgs.serviceWorkerTaintingSynthesized(),
+                          loadInfoArgs.documentHasUserInteracted()
                           );
 
    loadInfo.forget(outLoadInfo);
    return NS_OK;
 }
 
 void
 LoadInfoToParentLoadInfoForwarder(nsILoadInfo* aLoadInfo,
                                   ParentLoadInfoForwarderArgs* aForwarderArgsOut)
 {
   if (!aLoadInfo) {
     *aForwarderArgsOut = ParentLoadInfoForwarderArgs(false, void_t(),
                                                      nsILoadInfo::TAINTING_BASIC,
-                                                     false,
-                                                     false,
-                                                     false);
+                                                     false, // serviceWorkerTaintingSynthesized
+                                                     false, // isTracker
+                                                     false, // isTrackerBlocked
+                                                     false  // documentHasUserInteracted
+                                                    );
     return;
   }
 
   OptionalIPCServiceWorkerDescriptor ipcController = void_t();
   Maybe<ServiceWorkerDescriptor> controller(aLoadInfo->GetController());
   if (controller.isSome()) {
     ipcController = controller.ref().ToIPC();
   }
 
   uint32_t tainting = nsILoadInfo::TAINTING_BASIC;
   Unused << aLoadInfo->GetTainting(&tainting);
 
-  bool isTracker;
-  MOZ_ALWAYS_SUCCEEDS(aLoadInfo->GetIsTracker(&isTracker));
-  bool isTrackerBlocked;
-  MOZ_ALWAYS_SUCCEEDS(aLoadInfo->GetIsTrackerBlocked(&isTrackerBlocked));
-
   *aForwarderArgsOut = ParentLoadInfoForwarderArgs(
     aLoadInfo->GetAllowInsecureRedirectToDataURI(),
     ipcController,
     tainting,
     aLoadInfo->GetServiceWorkerTaintingSynthesized(),
-    isTracker,
-    isTrackerBlocked
+    aLoadInfo->GetIsTracker(),
+    aLoadInfo->GetIsTrackerBlocked(),
+    aLoadInfo->GetDocumentHasUserInteracted()
   );
 }
 
 nsresult
 MergeParentLoadInfoForwarder(ParentLoadInfoForwarderArgs const& aForwarderArgs,
                              nsILoadInfo* aLoadInfo)
 {
   if (!aLoadInfo) {
@@ -685,16 +685,17 @@ MergeParentLoadInfoForwarder(ParentLoadI
     aLoadInfo->SynthesizeServiceWorkerTainting(
       static_cast<LoadTainting>(aForwarderArgs.tainting()));
   } else {
     aLoadInfo->MaybeIncreaseTainting(aForwarderArgs.tainting());
   }
 
   MOZ_ALWAYS_SUCCEEDS(aLoadInfo->SetIsTracker(aForwarderArgs.isTracker()));
   MOZ_ALWAYS_SUCCEEDS(aLoadInfo->SetIsTrackerBlocked(aForwarderArgs.isTrackerBlocked()));
+  MOZ_ALWAYS_SUCCEEDS(aLoadInfo->SetDocumentHasUserInteracted(aForwarderArgs.documentHasUserInteracted()));
 
   return NS_OK;
 }
 
 void
 LoadInfoToChildLoadInfoForwarder(nsILoadInfo* aLoadInfo,
                                  ChildLoadInfoForwarderArgs* aForwarderArgsOut)
 {
--- a/js/src/builtin/MapObject.cpp
+++ b/js/src/builtin/MapObject.cpp
@@ -579,18 +579,17 @@ WriteBarrierPostImpl(ObjectT* obj, const
         return true;
 
     NurseryKeysVector* keys = GetNurseryKeys(obj);
     if (!keys) {
         keys = AllocNurseryKeys(obj);
         if (!keys)
             return false;
 
-        JSRuntime* rt = key->runtimeFromMainThread();
-        rt->gc.storeBuffer().putGeneric(OrderedHashTableRef<ObjectT>(obj));
+        key->storeBuffer()->putGeneric(OrderedHashTableRef<ObjectT>(obj));
     }
 
     if (!keys->append(key))
         return false;
 
     return true;
 }
 
--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -10553,19 +10553,21 @@ CodeGenerator::link(JSContext* cx, Compi
     MOZ_ASSERT_IF(snapshots_.listSize(), recovers_.size());
     if (recovers_.size())
         ionScript->copyRecovers(&recovers_);
     if (graph.numConstants()) {
         const Value* vp = graph.constantPool();
         ionScript->copyConstants(vp);
         for (size_t i = 0; i < graph.numConstants(); i++) {
             const Value& v = vp[i];
-            if ((v.isObject() || v.isString()) && IsInsideNursery(v.toGCThing())) {
-                cx->runtime()->gc.storeBuffer().putWholeCell(script);
-                break;
+            if (v.isGCThing()) {
+                if (gc::StoreBuffer* sb = v.toGCThing()->storeBuffer()) {
+                    sb->putWholeCell(script);
+                    break;
+                }
             }
         }
     }
 
     // Attach any generated script counts to the script.
     if (IonScriptCounts* counts = extractScriptCounts())
         script->addIonCounts(counts);
 
--- a/js/src/shell/ModuleLoader.js
+++ b/js/src/shell/ModuleLoader.js
@@ -1,14 +1,14 @@
 /* -*- Mode: javascript; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/* global getModuleLoadPath setModuleResolveHook parseModule instantiateModule evaluateModule os */
+/* global getModuleLoadPath setModuleLoadHook setModuleResolveHook parseModule instantiateModule evaluateModule os */
 
 // A basic synchronous module loader for testing the shell.
 {
 // Save standard built-ins before scripts can modify them.
 const ArrayPrototypeJoin = Array.prototype.join;
 const MapPrototypeGet = Map.prototype.get;
 const MapPrototypeHas = Map.prototype.has;
 const MapPrototypeSet = Map.prototype.set;
@@ -170,15 +170,16 @@ const ReflectLoader = new class {
     }
 
     ["import"](name, referrer) {
         let path = this.resolve(name, null);
         return this.loadAndExecute(path);
     }
 };
 
+setModuleLoadHook((path) => ReflectLoader.importRoot(path));
+
 setModuleResolveHook((module, requestName) => {
     let path = ReflectLoader.resolve(requestName, module);
     return ReflectLoader.loadAndParse(path);
 });
 
-Reflect.Loader = ReflectLoader;
 }
--- a/js/src/shell/js.cpp
+++ b/js/src/shell/js.cpp
@@ -182,17 +182,18 @@ enum JSShellExitCode {
     EXITCODE_FILE_NOT_FOUND     = 4,
     EXITCODE_OUT_OF_MEMORY      = 5,
     EXITCODE_TIMEOUT            = 6
 };
 
 // Define use of application-specific slots on the shell's global object.
 enum GlobalAppSlot
 {
-    GlobalAppSlotModuleResolveHook,
+    GlobalAppSlotModuleLoadHook,           // Shell-specific; load a module graph
+    GlobalAppSlotModuleResolveHook,        // HostResolveImportedModule
     GlobalAppSlotCount
 };
 static_assert(GlobalAppSlotCount <= JSCLASS_GLOBAL_APPLICATION_SLOTS,
               "Too many applications slots defined for shell global");
 
 /*
  * Note: This limit should match the stack limit set by the browser in
  *       js/xpconnect/src/XPCJSContext.cpp
@@ -916,82 +917,57 @@ InitModuleLoader(JSContext* cx)
     options.werrorOption = true;
     options.strictOption = true;
 
     RootedValue rv(cx);
     return Evaluate(cx, options, src.get(), srcLen, &rv);
 }
 
 static bool
-GetLoaderObject(JSContext* cx, MutableHandleObject resultOut)
-{
-    // Look up the |Reflect.Loader| object that has been defined by the module
-    // loader.
-
-    RootedObject object(cx, cx->global());
-    RootedValue value(cx);
-    if (!JS_GetProperty(cx, object, "Reflect", &value) || !value.isObject())
-        return false;
-
-    object = &value.toObject();
-    if (!JS_GetProperty(cx, object, "Loader", &value) || !value.isObject())
-        return false;
-
-    resultOut.set(&value.toObject());
-    return true;
-}
-
-static bool
-GetImportRootMethod(JSContext* cx, HandleObject loader, MutableHandleFunction resultOut)
-{
-    // Look up the module loader's |importRoot| method.
-
-    RootedValue value(cx);
-    if (!JS_GetProperty(cx, loader, "importRoot", &value) || !value.isObject())
-        return false;
-
-    RootedObject object(cx, &value.toObject());
-    if (!object->is<JSFunction>())
-        return false;
-
-    resultOut.set(&object->as<JSFunction>());
+GetModuleImportHook(JSContext* cx, MutableHandleFunction resultOut)
+{
+    Handle<GlobalObject*> global = cx->global();
+    RootedValue hookValue(cx, global->getReservedSlot(GlobalAppSlotModuleLoadHook));
+    if (hookValue.isUndefined()) {
+        JS_ReportErrorASCII(cx, "Module load hook not set");
+        return false;
+    }
+
+    if (!hookValue.isObject() || !hookValue.toObject().is<JSFunction>()) {
+        JS_ReportErrorASCII(cx, "Module load hook is not a function");
+        return false;
+    }
+
+    resultOut.set(&hookValue.toObject().as<JSFunction>());
     return true;
 }
 
 static MOZ_MUST_USE bool
 RunModule(JSContext* cx, const char* filename, FILE* file, bool compileOnly)
 {
-    // Execute a module by calling Reflect.Loader.importRoot on the resolved
-    // filename.
-
-    RootedObject loaderObj(cx);
-    if (!GetLoaderObject(cx, &loaderObj)) {
-        JS_ReportErrorASCII(cx, "Failed to get Reflect.Loader");
-        return false;
-    }
+    // Execute a module by calling the module loader's import hook on the
+    // resolved filename.
 
     RootedFunction importFun(cx);
-    if (!GetImportRootMethod(cx, loaderObj, &importFun)) {
-        JS_ReportErrorASCII(cx, "Failed to get Reflect.Loader.importRoot method");
-        return false;
-    }
+    if (!GetModuleImportHook(cx, &importFun))
+        return false;
 
     RootedString path(cx, JS_NewStringCopyZ(cx, filename));
     if (!path)
         return false;
 
     path = ResolvePath(cx, path, RootRelative);
     if (!path)
         return false;
 
     JS::AutoValueArray<1> args(cx);
     args[0].setString(path);
 
     RootedValue value(cx);
-    return JS_CallFunction(cx, loaderObj, importFun, args, &value);
+    return JS_CallFunction(cx, nullptr, importFun, args, &value);
 }
 
 static bool
 EnqueueJob(JSContext* cx, unsigned argc, Value* vp)
 {
     CallArgs args = CallArgsFromVp(argc, vp);
 
     if (!IsFunctionObject(args.get(0))) {
@@ -4481,16 +4457,39 @@ EvaluateModule(JSContext* cx, unsigned a
         return false;
     }
 
     args.rval().setUndefined();
     return ModuleObject::Evaluate(cx, module);
 }
 
 static bool
+SetModuleLoadHook(JSContext* cx, unsigned argc, Value* vp)
+{
+    CallArgs args = CallArgsFromVp(argc, vp);
+    if (args.length() != 1) {
+        JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
+                                  "setModuleLoadHook", "0", "s");
+        return false;
+    }
+
+    if (!args[0].isObject() || !args[0].toObject().is<JSFunction>()) {
+        const char* typeName = InformalValueTypeName(args[0]);
+        JS_ReportErrorASCII(cx, "expected hook function, got %s", typeName);
+        return false;
+    }
+
+    Handle<GlobalObject*> global = cx->global();
+    global->setReservedSlot(GlobalAppSlotModuleLoadHook, args[0]);
+
+    args.rval().setUndefined();
+    return true;
+}
+
+static bool
 SetModuleResolveHook(JSContext* cx, unsigned argc, Value* vp)
 {
     CallArgs args = CallArgsFromVp(argc, vp);
     if (args.length() != 1) {
         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED,
                                   "setModuleResolveHook", "0", "s");
         return false;
     }
@@ -7447,16 +7446,22 @@ static const JSFunctionSpecWithHelp shel
     JS_FN_HELP("instantiateModule", InstantiateModule, 1, 0,
 "instantiateModule(moduleScript)",
 "  Instantiate a module script graph."),
 
     JS_FN_HELP("evaluateModule", EvaluateModule, 1, 0,
 "evaluateModule(moduleScript)",
 "  Evaluate a previously instantiated module script graph."),
 
+    JS_FN_HELP("setModuleLoadHook", SetModuleLoadHook, 1, 0,
+"setModuleLoadHook(function(path))",
+"  Set the shell specific module load hook to |function|.\n"
+"  This hook is used to load a module graph.  It should be implemented by the\n"
+"  module loader."),
+
     JS_FN_HELP("setModuleResolveHook", SetModuleResolveHook, 1, 0,
 "setModuleResolveHook(function(module, specifier) {})",
 "  Set the HostResolveImportedModule hook to |function|.\n"
 "  This hook is used to look up a previously loaded module object.  It should\n"
 "  be implemented by the module loader."),
 
     JS_FN_HELP("getModuleLoadPath", GetModuleLoadPath, 0, 0,
 "getModuleLoadPath()",
--- a/js/src/vm/NativeObject-inl.h
+++ b/js/src/vm/NativeObject-inl.h
@@ -129,22 +129,21 @@ NativeObject::markDenseElementsNotPacked
     MarkObjectGroupFlags(cx, this, OBJECT_FLAG_NON_PACKED);
 }
 
 inline void
 NativeObject::elementsRangeWriteBarrierPost(uint32_t start, uint32_t count)
 {
     for (size_t i = 0; i < count; i++) {
         const Value& v = elements_[start + i];
-        if ((v.isObject() || v.isString()) && IsInsideNursery(v.toGCThing())) {
-            JSRuntime* rt = runtimeFromMainThread();
-            rt->gc.storeBuffer().putSlot(this, HeapSlot::Element,
-                                         unshiftedIndex(start + i),
-                                         count - i);
-            return;
+        if (v.isGCThing()) {
+            if (gc::StoreBuffer* sb = v.toGCThing()->storeBuffer()) {
+                sb->putSlot(this, HeapSlot::Element, unshiftedIndex(start + i), count - i);
+                return;
+            }
         }
     }
 }
 
 inline void
 NativeObject::copyDenseElements(uint32_t dstStart, const Value* src, uint32_t count)
 {
     MOZ_ASSERT(dstStart + count <= getDenseCapacity());
--- a/js/src/vm/Shape-inl.h
+++ b/js/src/vm/Shape-inl.h
@@ -137,36 +137,36 @@ GetterSetterWriteBarrierPost(AccessorSha
     // If the shape contains any nursery pointers then add it to a vector on the
     // zone that we fixup on minor GC. Prevent this vector growing too large
     // since we don't tolerate OOM here.
 
     static const size_t MaxShapeVectorLength = 5000;
 
     MOZ_ASSERT(shape);
 
-    if (!(shape->hasGetterObject() && IsInsideNursery(shape->getterObject())) &&
-        !(shape->hasSetterObject() && IsInsideNursery(shape->setterObject())))
-    {
+    gc::StoreBuffer* sb = nullptr;
+    if (shape->hasGetterObject())
+        sb = shape->getterObject()->storeBuffer();
+    if (!sb && shape->hasSetterObject())
+        sb = shape->setterObject()->storeBuffer();
+    if (!sb)
         return;
-    }
 
     auto& nurseryShapes = shape->zone()->nurseryShapes();
 
     {
         AutoEnterOOMUnsafeRegion oomUnsafe;
         if (!nurseryShapes.append(shape))
             oomUnsafe.crash("GetterSetterWriteBarrierPost");
     }
 
-    auto& storeBuffer = shape->runtimeFromMainThread()->gc.storeBuffer();
-    if (nurseryShapes.length() == 1) {
-        storeBuffer.putGeneric(NurseryShapesRef(shape->zone()));
-    } else if (nurseryShapes.length() == MaxShapeVectorLength) {
-        storeBuffer.setAboutToOverflow(JS::gcreason::FULL_SHAPE_BUFFER);
-    }
+    if (nurseryShapes.length() == 1)
+        sb->putGeneric(NurseryShapesRef(shape->zone()));
+    else if (nurseryShapes.length() == MaxShapeVectorLength)
+        sb->setAboutToOverflow(JS::gcreason::FULL_SHAPE_BUFFER);
 }
 
 inline
 AccessorShape::AccessorShape(const StackShape& other, uint32_t nfixed)
   : Shape(other, nfixed),
     rawGetter(other.rawGetter),
     rawSetter(other.rawSetter)
 {
--- a/js/src/vm/TypeInference.cpp
+++ b/js/src/vm/TypeInference.cpp
@@ -710,19 +710,21 @@ class TypeSetRef : public BufferableRef
         MOZ_ASSERT(trc->runtime()->gc.minorGCCount() == minorGCNumberAtCreation);
         types->trace(zone, trc);
     }
 };
 
 void
 ConstraintTypeSet::postWriteBarrier(JSContext* cx, Type type)
 {
-    if (type.isSingletonUnchecked() && IsInsideNursery(type.singletonNoBarrier())) {
-        cx->runtime()->gc.storeBuffer().putGeneric(TypeSetRef(cx->zone(), this));
-        cx->runtime()->gc.storeBuffer().setShouldCancelIonCompilations();
+    if (type.isSingletonUnchecked()) {
+        if (gc::StoreBuffer* sb = type.singletonNoBarrier()->storeBuffer()) {
+            sb->putGeneric(TypeSetRef(cx->zone(), this));
+            sb->setShouldCancelIonCompilations();
+        }
     }
 }
 
 void
 ConstraintTypeSet::addType(const AutoSweepBase& sweep, JSContext* cx, Type type)
 {
     checkMagic();
 
--- a/layout/xul/nsXULPopupManager.cpp
+++ b/layout/xul/nsXULPopupManager.cpp
@@ -930,16 +930,17 @@ nsXULPopupManager::ShowPopupCallback(nsI
   // listener will handle closing the tooltip also.
   nsIContent* oldmenu = nullptr;
   if (mPopups) {
     oldmenu = mPopups->Content();
   }
   item->SetParent(mPopups);
   mPopups = item;
   SetCaptureState(oldmenu);
+  NS_ENSURE_TRUE_VOID(weakFrame.IsAlive());
 
   item->UpdateFollowAnchor();
 
   if (aSelectFirstItem) {
     nsMenuFrame* next = GetNextMenuItem(aPopupFrame, nullptr, true, false);
     aPopupFrame->SetCurrentMenuItem(next);
   }
 
--- a/netwerk/base/LoadInfo.cpp
+++ b/netwerk/base/LoadInfo.cpp
@@ -84,16 +84,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
   , mIsDocshellReload(false)
   , mSendCSPViolationEvents(true)
   , mForcePreflight(false)
   , mIsPreflight(false)
   , mLoadTriggeredFromExternal(false)
   , mServiceWorkerTaintingSynthesized(false)
   , mIsTracker(false)
   , mIsTrackerBlocked(false)
+  , mDocumentHasUserInteracted(false)
 {
   MOZ_ASSERT(mLoadingPrincipal);
   MOZ_ASSERT(mTriggeringPrincipal);
 
 #ifdef DEBUG
   // TYPE_DOCUMENT loads initiated by javascript tests will go through
   // nsIOService and use the wrong constructor.  Don't enforce the
   // !TYPE_DOCUMENT check in those cases
@@ -162,16 +163,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
           innerWindow->GetTopLevelStorageAreaPrincipal();
       }
     }
 
     mInnerWindowID = aLoadingContext->OwnerDoc()->InnerWindowID();
     mAncestorPrincipals = aLoadingContext->OwnerDoc()->AncestorPrincipals();
     mAncestorOuterWindowIDs = aLoadingContext->OwnerDoc()->AncestorOuterWindowIDs();
     MOZ_DIAGNOSTIC_ASSERT(mAncestorPrincipals.Length() == mAncestorOuterWindowIDs.Length());
+    mDocumentHasUserInteracted = aLoadingContext->OwnerDoc()->UserHasInteracted();
 
     // When the element being loaded is a frame, we choose the frame's window
     // for the window ID and the frame element's window as the parent
     // window. This is the behavior that Chrome exposes to add-ons.
     // NB: If the frameLoaderOwner doesn't have a frame loader, then the load
     // must be coming from an object (such as a plugin) that's loaded into it
     // instead of a document being loaded. In that case, treat this object like
     // any other non-document-loading element.
@@ -321,16 +323,17 @@ LoadInfo::LoadInfo(nsPIDOMWindowOuter* a
   , mIsDocshellReload(false)
   , mSendCSPViolationEvents(true)
   , mForcePreflight(false)
   , mIsPreflight(false)
   , mLoadTriggeredFromExternal(false)
   , mServiceWorkerTaintingSynthesized(false)
   , mIsTracker(false)
   , mIsTrackerBlocked(false)
+  , mDocumentHasUserInteracted(false)
 {
   // Top-level loads are never third-party
   // Grab the information we can out of the window.
   MOZ_ASSERT(aOuterWindow);
   MOZ_ASSERT(mTriggeringPrincipal);
 
   // if the load is sandboxed, we can not also inherit the principal
   if (mSecurityFlags & nsILoadInfo::SEC_SANDBOXED) {
@@ -420,16 +423,17 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
   , mCorsUnsafeHeaders(rhs.mCorsUnsafeHeaders)
   , mForcePreflight(rhs.mForcePreflight)
   , mIsPreflight(rhs.mIsPreflight)
   , mLoadTriggeredFromExternal(rhs.mLoadTriggeredFromExternal)
   // mServiceWorkerTaintingSynthesized must be handled specially during redirect
   , mServiceWorkerTaintingSynthesized(false)
   , mIsTracker(rhs.mIsTracker)
   , mIsTrackerBlocked(rhs.mIsTrackerBlocked)
+  , mDocumentHasUserInteracted(rhs.mDocumentHasUserInteracted)
 {
 }
 
 LoadInfo::LoadInfo(nsIPrincipal* aLoadingPrincipal,
                    nsIPrincipal* aTriggeringPrincipal,
                    nsIPrincipal* aPrincipalToInherit,
                    nsIPrincipal* aSandboxedLoadingPrincipal,
                    nsIPrincipal* aTopLevelPrincipal,
@@ -465,17 +469,18 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
                    RedirectHistoryArray& aRedirectChainIncludingInternalRedirects,
                    RedirectHistoryArray& aRedirectChain,
                    nsTArray<nsCOMPtr<nsIPrincipal>>&& aAncestorPrincipals,
                    const nsTArray<uint64_t>& aAncestorOuterWindowIDs,
                    const nsTArray<nsCString>& aCorsUnsafeHeaders,
                    bool aForcePreflight,
                    bool aIsPreflight,
                    bool aLoadTriggeredFromExternal,
-                   bool aServiceWorkerTaintingSynthesized)
+                   bool aServiceWorkerTaintingSynthesized,
+                   bool aDocumentHasUserInteracted)
   : mLoadingPrincipal(aLoadingPrincipal)
   , mTriggeringPrincipal(aTriggeringPrincipal)
   , mPrincipalToInherit(aPrincipalToInherit)
   , mTopLevelPrincipal(aTopLevelPrincipal)
   , mTopLevelStorageAreaPrincipal(aTopLevelStorageAreaPrincipal)
   , mResultPrincipalURI(aResultPrincipalURI)
   , mClientInfo(aClientInfo)
   , mReservedClientInfo(aReservedClientInfo)
@@ -509,16 +514,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
   , mAncestorOuterWindowIDs(aAncestorOuterWindowIDs)
   , mCorsUnsafeHeaders(aCorsUnsafeHeaders)
   , mForcePreflight(aForcePreflight)
   , mIsPreflight(aIsPreflight)
   , mLoadTriggeredFromExternal(aLoadTriggeredFromExternal)
   , mServiceWorkerTaintingSynthesized(aServiceWorkerTaintingSynthesized)
   , mIsTracker(false)
   , mIsTrackerBlocked(false)
+  , mDocumentHasUserInteracted(aDocumentHasUserInteracted)
 {
   // Only top level TYPE_DOCUMENT loads can have a null loadingPrincipal
   MOZ_ASSERT(mLoadingPrincipal || aContentPolicyType == nsIContentPolicy::TYPE_DOCUMENT);
   MOZ_ASSERT(mTriggeringPrincipal);
 
   mRedirectChainIncludingInternalRedirects.SwapElements(
     aRedirectChainIncludingInternalRedirects);
 
@@ -1362,16 +1368,31 @@ LoadInfo::GetIsTrackerBlocked(bool *aIsT
 NS_IMETHODIMP
 LoadInfo::SetIsTrackerBlocked(bool aIsTrackerBlocked)
 {
   mIsTrackerBlocked = aIsTrackerBlocked;
   return NS_OK;
 }
 
 NS_IMETHODIMP
+LoadInfo::GetDocumentHasUserInteracted(bool *aDocumentHasUserInteracted)
+{
+  MOZ_ASSERT(aDocumentHasUserInteracted);
+  *aDocumentHasUserInteracted = mDocumentHasUserInteracted;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+LoadInfo::SetDocumentHasUserInteracted(bool aDocumentHasUserInteracted)
+{
+  mDocumentHasUserInteracted = aDocumentHasUserInteracted;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
 LoadInfo::GetIsTopLevelLoad(bool *aResult)
 {
   *aResult = mFrameOuterWindowID ? mFrameOuterWindowID == mOuterWindowID
                                  : mParentOuterWindowID == mOuterWindowID;
   return NS_OK;
 }
 
 NS_IMETHODIMP
--- a/netwerk/base/LoadInfo.h
+++ b/netwerk/base/LoadInfo.h
@@ -130,17 +130,18 @@ private:
            RedirectHistoryArray& aRedirectChainIncludingInternalRedirects,
            RedirectHistoryArray& aRedirectChain,
            nsTArray<nsCOMPtr<nsIPrincipal>>&& aAncestorPrincipals,
            const nsTArray<uint64_t>& aAncestorOuterWindowIDs,
            const nsTArray<nsCString>& aUnsafeHeaders,
            bool aForcePreflight,
            bool aIsPreflight,
            bool aLoadTriggeredFromExternal,
-           bool aServiceWorkerTaintingSynthesized);
+           bool aServiceWorkerTaintingSynthesized,
+           bool aDocumentHasUserInteracted);
   LoadInfo(const LoadInfo& rhs);
 
   NS_IMETHOD GetRedirects(JSContext* aCx, JS::MutableHandle<JS::Value> aRedirects,
                           const RedirectHistoryArray& aArra);
 
   friend nsresult
   mozilla::ipc::LoadInfoArgsToLoadInfo(
     const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
@@ -206,15 +207,16 @@ private:
   nsTArray<nsCString>              mCorsUnsafeHeaders;
   bool                             mForcePreflight;
   bool                             mIsPreflight;
   bool                             mLoadTriggeredFromExternal;
   bool                             mServiceWorkerTaintingSynthesized;
 
   bool                             mIsTracker;
   bool                             mIsTrackerBlocked;
+  bool                             mDocumentHasUserInteracted;
 };
 
 } // namespace net
 } // namespace mozilla
 
 #endif // mozilla_LoadInfo_h
 
--- a/netwerk/base/nsILoadInfo.idl
+++ b/netwerk/base/nsILoadInfo.idl
@@ -1053,9 +1053,14 @@ interface nsILoadInfo : nsISupports
   void SynthesizeServiceWorkerTainting(in LoadTainting aTainting);
 
   /**
     * These flags are used for FastBlock statistics to see if a resource is a
     * tracker and whether it was blocked by the FastBlock mechanism or not.
     */
   [infallible] attribute boolean isTracker;
   [infallible] attribute boolean isTrackerBlocked;
+
+  /**
+    * The top-level document has been user-interacted.
+    */
+  [infallible] attribute boolean documentHasUserInteracted;
 };
--- a/netwerk/ipc/NeckoChannelParams.ipdlh
+++ b/netwerk/ipc/NeckoChannelParams.ipdlh
@@ -101,16 +101,17 @@ struct LoadInfoArgs
    */
   OptionalIPCServiceWorkerDescriptor controller;
 
   nsCString[]                 corsUnsafeHeaders;
   bool                        forcePreflight;
   bool                        isPreflight;
   bool                        loadTriggeredFromExternal;
   bool                        serviceWorkerTaintingSynthesized;
+  bool                        documentHasUserInteracted;
 };
 
 /**
  * Not every channel necessarily has a loadInfo attached.
  */
 union OptionalLoadInfoArgs
 {
   void_t;
@@ -141,16 +142,17 @@ struct ParentLoadInfoForwarderArgs
 
   // We must also note that the tainting value was explicitly set
   // by the service worker.
   bool serviceWorkerTaintingSynthesized;
 
   // Tracker information, currently used by FastBlock
   bool isTracker;
   bool isTrackerBlocked;
+  bool documentHasUserInteracted;
 
   // IMPORTANT: when you add new properites here you must also update
   // LoadInfoToParentLoadInfoForwarder and MergeParentLoadInfoForwarder
   // in BackgroundUtils.cpp/.h!
 };
 
 /**
  * This structure is used to carry selected properties of a LoadInfo
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -710,20 +710,22 @@ nsHttpChannel::CheckFastBlocked()
     if (NS_FAILED(GetNavigationStartTimeStamp(&timestamp)) || !timestamp) {
         LOG(("FastBlock passed (no timestamp) [this=%p]\n", this));
 
         return false;
     }
 
     if (!StaticPrefs::browser_contentblocking_enabled() ||
         !sIsFastBlockEnabled ||
-        IsContentPolicyTypeWhitelistedForFastBlock(mLoadInfo)) {
+        IsContentPolicyTypeWhitelistedForFastBlock(mLoadInfo)) ||
+        // If the user has interacted with the document, we disable fastblock.
+        (mLoadInfo && mLoadInfo->GetDocumentHasUserInteracted())) {
 
         LOG(("FastBlock passed (invalid) [this=%p]\n", this));
-
+        
         return false;
     }
 
     TimeDuration duration = TimeStamp::NowLoRes() - timestamp;
     bool isFastBlocking = duration.ToMilliseconds() >= sFastBlockTimeout;
 
     if (isFastBlocking && mLoadInfo) {
         MOZ_ALWAYS_SUCCEEDS(mLoadInfo->SetIsTrackerBlocked(true));
--- a/security/.eslintrc.js
+++ b/security/.eslintrc.js
@@ -41,19 +41,16 @@ module.exports = {
     "no-fallthrough": "error",
 
     // No reassigning native JS objects or read only globals.
     "no-global-assign": "error",
 
     // Disallow use of assignment in return statement.
     "no-return-assign": ["error", "always"],
 
-    // Disallow use of the comma operator.
-    "no-sequences": "error",
-
     // Disallow template literal placeholder syntax in regular strings.
     "no-template-curly-in-string": "error",
 
     // Disallow use of this/super before calling super() in constructors.
     "no-this-before-super": "error",
 
     // Disallow throwing literals (eg. |throw "error"| instead of
     // |throw new Error("error")|)
--- a/security/nss/TAG-INFO
+++ b/security/nss/TAG-INFO
@@ -1,1 +1,1 @@
-NSS_3_39_BETA2
+NSS_3_39_RTM
--- a/security/nss/coreconf/coreconf.dep
+++ b/security/nss/coreconf/coreconf.dep
@@ -5,8 +5,9 @@
 
 /*
  * A dummy header file that is a dependency for all the object files.
  * Used to force a full recompilation of NSS in Mozilla's Tinderbox
  * depend builds.  See comments in rules.mk.
  */
 
 #error "Do not include this header file."
+
--- a/security/nss/lib/nss/nss.h
+++ b/security/nss/lib/nss/nss.h
@@ -17,22 +17,22 @@
 
 /*
  * NSS's major version, minor version, patch level, build number, and whether
  * this is a beta release.
  *
  * The format of the version string should be
  *     "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
  */
-#define NSS_VERSION "3.39" _NSS_CUSTOMIZED " Beta"
+#define NSS_VERSION "3.39" _NSS_CUSTOMIZED
 #define NSS_VMAJOR 3
 #define NSS_VMINOR 39
 #define NSS_VPATCH 0
 #define NSS_VBUILD 0
-#define NSS_BETA PR_TRUE
+#define NSS_BETA PR_FALSE
 
 #ifndef RC_INVOKED
 
 #include "seccomon.h"
 
 typedef struct NSSInitParametersStr NSSInitParameters;
 
 /*
--- a/security/nss/lib/softoken/softkver.h
+++ b/security/nss/lib/softoken/softkver.h
@@ -12,16 +12,16 @@
 
 /*
  * Softoken's major version, minor version, patch level, build number,
  * and whether this is a beta release.
  *
  * The format of the version string should be
  *     "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
  */
-#define SOFTOKEN_VERSION "3.39" SOFTOKEN_ECC_STRING " Beta"
+#define SOFTOKEN_VERSION "3.39" SOFTOKEN_ECC_STRING
 #define SOFTOKEN_VMAJOR 3
 #define SOFTOKEN_VMINOR 39
 #define SOFTOKEN_VPATCH 0
 #define SOFTOKEN_VBUILD 0
-#define SOFTOKEN_BETA PR_TRUE
+#define SOFTOKEN_BETA PR_FALSE
 
 #endif /* _SOFTKVER_H_ */
--- a/security/nss/lib/util/nssutil.h
+++ b/security/nss/lib/util/nssutil.h
@@ -14,22 +14,22 @@
 
 /*
  * NSS utilities's major version, minor version, patch level, build number,
  * and whether this is a beta release.
  *
  * The format of the version string should be
  *     "<major version>.<minor version>[.<patch level>[.<build number>]][ <Beta>]"
  */
-#define NSSUTIL_VERSION "3.39 Beta"
+#define NSSUTIL_VERSION "3.39"
 #define NSSUTIL_VMAJOR 3
 #define NSSUTIL_VMINOR 39
 #define NSSUTIL_VPATCH 0
 #define NSSUTIL_VBUILD 0
-#define NSSUTIL_BETA PR_TRUE
+#define NSSUTIL_BETA PR_FALSE
 
 SEC_BEGIN_PROTOS
 
 /*
  * Returns a const string of the UTIL library version.
  */
 extern const char *NSSUTIL_GetVersion(void);
 
--- a/services/sync/tests/unit/test_syncengine.js
+++ b/services/sync/tests/unit/test_syncengine.js
@@ -253,17 +253,17 @@ add_task(async function test_wipeServer(
     "/1.1/foo/storage/steam": steamCollection.handler(),
   });
   await SyncTestingInfrastructure(steamServer);
   do_test_pending();
 
   try {
     // Some data to reset.
     await engine.setLastSync(123.45);
-    engine.toFetch = guidSetOfSize(3),
+    engine.toFetch = guidSetOfSize(3);
 
     _("Wipe server data and reset client.");
     await engine.wipeServer();
     Assert.equal(steamCollection.payload, undefined);
     Assert.equal(await engine.getLastSync(), 0);
     Assert.equal(engine.toFetch.size, 0);
 
   } finally {
--- a/taskcluster/docker/periodic-updates/.eslintrc.js
+++ b/taskcluster/docker/periodic-updates/.eslintrc.js
@@ -46,19 +46,16 @@ module.exports = {
     "no-fallthrough": "error",
 
     // No reassigning native JS objects or read only globals.
     "no-global-assign": "error",
 
     // Disallow use of assignment in return statement.
     "no-return-assign": ["error", "always"],
 
-    // Disallow use of the comma operator.
-    "no-sequences": "error",
-
     // Disallow template literal placeholder syntax in regular strings.
     "no-template-curly-in-string": "error",
 
     // Disallow use of this/super before calling super() in constructors.
     "no-this-before-super": "error",
 
     // Disallow throwing literals (eg. |throw "error"| instead of
     // |throw new Error("error")|)
--- a/taskcluster/taskgraph/transforms/job/mozharness_test.py
+++ b/taskcluster/taskgraph/transforms/job/mozharness_test.py
@@ -201,19 +201,19 @@ def mozharness_test_on_generic_worker(co
             'path': 'build/blobber_upload_dir',
             'type': 'directory'
         })
 
     upstream_task = '<build-signing>' if mozharness['requires-signed-builds'] else '<build>'
     installer_url = get_artifact_url(upstream_task, mozharness['build-artifact-name'])
 
     taskdesc['scopes'].extend(
-        ['generic-worker:os-group:{}/{}'.format(
-            job['worker-type'],
-            group
+        ['generic-worker:os-group:{}/{}'.format(
+            job['worker-type'],
+            group
         ) for group in test['os-groups']])
 
     worker['os-groups'] = test['os-groups']
 
     if test['reboot']:
         raise Exception('reboot: {} not supported on generic-worker'.format(test['reboot']))
 
     worker['max-run-time'] = test['max-run-time']
@@ -228,17 +228,16 @@ def mozharness_test_on_generic_worker(co
     if is_macosx:
         env.update({
             'IDLEIZER_DISABLE_SHUTDOWN': 'true',
             'LANG': 'en_US.UTF-8',
             'LC_ALL': 'en_US.UTF-8',
             'MOZ_HIDE_RESULTS_TABLE': '1',
             'MOZ_NODE_PATH': '/usr/local/bin/node',
             'MOZ_NO_REMOTE': '1',
-            'NO_EM_RESTART': '1',
             'NO_FAIL_ON_TEST_ERRORS': '1',
             'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
             'SHELL': '/bin/bash',
             'XPCOM_DEBUG_BREAK': 'warn',
             'XPC_FLAGS': '0x0',
             'XPC_SERVICE_NAME': '0',
         })
 
@@ -344,17 +343,16 @@ def mozharness_test_on_native_engine(con
     env.update({
         'GECKO_HEAD_REPOSITORY': config.params['head_repository'],
         'GECKO_HEAD_REV': config.params['head_rev'],
         'MOZHARNESS_CONFIG': ' '.join(mozharness['config']),
         'MOZHARNESS_SCRIPT': mozharness['script'],
         'MOZHARNESS_URL': {'task-reference': mozharness_url},
         'MOZILLA_BUILD_URL': {'task-reference': installer_url},
         "MOZ_NO_REMOTE": '1',
-        "NO_EM_RESTART": '1',
         "XPCOM_DEBUG_BREAK": 'warn',
         "NO_FAIL_ON_TEST_ERRORS": '1',
         "MOZ_HIDE_RESULTS_TABLE": '1',
         "MOZ_NODE_PATH": "/usr/local/bin/node",
         'MOZ_AUTOMATION': '1',
     })
     # talos tests don't need Xvfb
     if is_talos:
@@ -424,17 +422,16 @@ def mozharness_test_on_script_engine_aut
     worker['env'] = env = {
         'GECKO_HEAD_REPOSITORY': config.params['head_repository'],
         'GECKO_HEAD_REV': config.params['head_rev'],
         'MOZHARNESS_CONFIG': ' '.join(mozharness['config']),
         'MOZHARNESS_SCRIPT': mozharness['script'],
         'MOZHARNESS_URL': {'task-reference': mozharness_url},
         'MOZILLA_BUILD_URL': {'task-reference': installer_url},
         "MOZ_NO_REMOTE": '1',
-        "NO_EM_RESTART": '1',
         "XPCOM_DEBUG_BREAK": 'warn',
         "NO_FAIL_ON_TEST_ERRORS": '1',
         "MOZ_HIDE_RESULTS_TABLE": '1',
         "MOZ_NODE_PATH": "/usr/local/bin/node",
         'MOZ_AUTOMATION': '1',
         'WORKSPACE': '/builds/worker/workspace',
         'TASKCLUSTER_WORKER_TYPE': job['worker-type'],
 
--- a/testing/mach_commands.py
+++ b/testing/mach_commands.py
@@ -69,17 +69,17 @@ class TestConfig(object):
             ('test.format', 'string', format_desc, 'mach', {'choices': format_choices}),
             ('test.level', 'string', level_desc, 'info', {'choices': level_choices}),
         ]
 
 
 def get_test_parser():
     from mozlog.commandline import add_logging_group
     parser = argparse.ArgumentParser()
-    parser.add_argument('what', default=None, nargs='*', help=TEST_HELP)
+    parser.add_argument('what', default=None, nargs='+', help=TEST_HELP)
     parser.add_argument('extra_args', default=None, nargs=argparse.REMAINDER,
                         help="Extra arguments to pass to the underlying test command(s). "
                              "If an underlying command doesn't recognize the argument, it "
                              "will fail.")
     add_logging_group(parser)
     return parser
 
 
--- a/testing/marionette/client/marionette_driver/marionette.py
+++ b/testing/marionette/client/marionette_driver/marionette.py
@@ -1884,16 +1884,29 @@ class Marionette(object):
 
         This is the equivalent of calling `document.cookie` and
         parsing the result.
 
         :returns: A list of cookies for the current domain.
         """
         return self._send_message("WebDriver:GetCookies")
 
+    def save_screenshot(self, fh, element=None, highlights=None,
+                        full=True, scroll=True):
+        """Takes a screenhot of a web element or the current frame and
+        saves it in the filehandle.
+
+        It is a wrapper around screenshot()
+        :param fh: The filehandle to save the screenshot at.
+
+        The rest of the parameters are defined like in screenshot()
+        """
+        data = self.screenshot(element, highlights, "binary", full, scroll)
+        fh.write(data)
+
     def screenshot(self, element=None, highlights=None, format="base64",
                    full=True, scroll=True):
         """Takes a screenshot of a web element or the current frame.
 
         The screen capture is returned as a lossless PNG image encoded
         as a base 64 string by default. If the `element` argument is defined the
         capture area will be limited to the bounding box of that
         element.  Otherwise, the capture area will be the bounding box
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -1297,17 +1297,17 @@ GeckoDriver.prototype.getIdForBrowser = 
   }
 
   let winId = browser.outerWindowID;
   if (winId) {
     this._browserIds.set(permKey, winId);
     return winId;
   }
   return null;
-},
+};
 
 /**
  * Get the current window's handle. On desktop this typically corresponds
  * to the currently selected tab.
  *
  * Return an opaque server-assigned identifier to this window that
  * uniquely identifies it within this Marionette instance.  This can
  * be used to switch to this window at a later point.
--- a/testing/marionette/harness/marionette_harness/tests/unit/test_screenshot.py
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_screenshot.py
@@ -3,16 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from __future__ import absolute_import
 
 import base64
 import hashlib
 import imghdr
 import struct
+import tempfile
 import urllib
 
 from marionette_driver import By
 from marionette_driver.errors import NoSuchElementException, NoSuchWindowException
 from marionette_harness import (
     MarionetteTestCase,
     skip,
     skip_if_mobile,
@@ -390,16 +391,25 @@ class TestScreenCaptureContent(WindowMan
 
         # Highlighting a sub element
         paragraph = self.marionette.find_element(By.ID, "green")
         screenshot_highlight_paragraph = self.marionette.screenshot(element=element,
                                                                     highlights=[paragraph])
         self.assertNotEqual(screenshot_element, screenshot_highlight_paragraph)
         self.assertNotEqual(screenshot_highlight, screenshot_highlight_paragraph)
 
+    def test_save_screenshot(self):
+        expected = self.marionette.screenshot(format="binary")
+        with tempfile.TemporaryFile('w+b') as fh:
+            self.marionette.save_screenshot(fh)
+            fh.flush()
+            fh.seek(0)
+            content = fh.read()
+            self.assertEqual(expected, content)
+
     def test_scroll_default(self):
         self.marionette.navigate(long)
         before = self.page_y_offset
         el = self.marionette.find_element(By.TAG_NAME, "p")
         self.marionette.screenshot(element=el, format="hash")
         self.assertNotEqual(before, self.page_y_offset)
 
     def test_scroll(self):
--- a/testing/mozbase/mozrunner/mozrunner/base/browser.py
+++ b/testing/mozbase/mozrunner/mozrunner/base/browser.py
@@ -21,18 +21,16 @@ class GeckoRuntimeRunner(BaseRunner):
         self.show_crash_reporter = runner_args.pop('show_crash_reporter', False)
         BaseRunner.__init__(self, **runner_args)
 
         self.binary = binary
         self.cmdargs = cmdargs or []
 
         # allows you to run an instance of Firefox separately from any other instances
         self.env['MOZ_NO_REMOTE'] = '1'
-        # keeps Firefox attached to the terminal window after it starts
-        self.env['NO_EM_RESTART'] = '1'
 
         # Disable crash reporting dialogs that interfere with debugging
         self.env['GNOME_DISABLE_CRASH_DIALOG'] = '1'
         self.env['XRE_NO_WINDOWS_CRASH_DIALOG'] = '1'
 
         # set the library path if needed on linux
         if sys.platform == 'linux2' and self.binary.endswith('-bin'):
             dirname = os.path.dirname(self.binary)
--- a/testing/mozbase/mozrunner/mozrunner/base/device.py
+++ b/testing/mozbase/mozrunner/mozrunner/base/device.py
@@ -24,18 +24,17 @@ class DeviceRunner(BaseRunner):
     """
     env = {'MOZ_CRASHREPORTER': '1',
            'MOZ_CRASHREPORTER_NO_REPORT': '1',
            'MOZ_CRASHREPORTER_SHUTDOWN': '1',
            'MOZ_HIDE_RESULTS_TABLE': '1',
            'MOZ_LOG': 'signaling:3,mtransport:4,DataChannel:4,jsep:4,MediaPipelineFactory:4',
            'R_LOG_LEVEL': '6',
            'R_LOG_DESTINATION': 'stderr',
-           'R_LOG_VERBOSE': '1',
-           'NO_EM_RESTART': '1', }
+           'R_LOG_VERBOSE': '1', }
 
     def __init__(self, device_class, device_args=None, **kwargs):
         process_log = tempfile.NamedTemporaryFile(suffix='pidlog')
         # the env will be passed to the device, it is not a *real* env
         self._device_env = dict(DeviceRunner.env)
         self._device_env['MOZ_PROCESS_LOG'] = process_log.name
         # be sure we do not pass env to the parent class ctor
         env = kwargs.pop('env', None)
--- a/testing/mozbase/rust/mozrunner/src/runner.rs
+++ b/testing/mozbase/rust/mozrunner/src/runner.rs
@@ -175,17 +175,16 @@ pub struct FirefoxRunner {
     stdout: Option<Stdio>,
     stderr: Option<Stdio>,
 }
 
 impl FirefoxRunner {
     pub fn new(binary: &Path, profile: Profile) -> FirefoxRunner {
         let mut envs: HashMap<OsString, OsString> = HashMap::new();
         envs.insert("MOZ_NO_REMOTE".into(), "1".into());
-        envs.insert("NO_EM_RESTART".into(), "1".into());
 
         FirefoxRunner {
             binary: binary.to_path_buf(),
             envs: envs,
             profile: profile,
             args: vec![],
             stdout: None,
             stderr: None,
--- a/testing/talos/talos/unittests/test_talosconfig_browser_config.json
+++ b/testing/talos/talos/unittests/test_talosconfig_browser_config.json
@@ -1,1 +1,1 @@
-{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.disabledForTesting': True, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False,  'browser.link.open_newwindow': 2, 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'env': {'NO_EM_RESTART': '1'}, 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
+{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.disabledForTesting': True, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False,  'browser.link.open_newwindow': 2, 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html.ini
@@ -0,0 +1,4 @@
+[2d.text.measure.actualBoundingBox.html]
+  [Testing actualBoundingBox]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html.ini
@@ -0,0 +1,4 @@
+[2d.text.measure.advances.html]
+  [Testing width advances]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html.ini
@@ -0,0 +1,4 @@
+[2d.text.measure.baselines.html]
+  [Testing baselines]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html.ini
@@ -0,0 +1,4 @@
+[2d.text.measure.emHeights.html]
+  [Testing emHeights]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html.ini
@@ -0,0 +1,4 @@
+[2d.text.measure.fontBoundingBox.html]
+  [Testing fontBoundingBox]
+    expected: FAIL
+
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -10598,16 +10598,130 @@
     ]
    ],
    "css/selectors/hover-002-manual.html": [
     [
      "/css/selectors/hover-002-manual.html",
      {}
     ]
    ],
+   "css/selectors/old-tests/css3-modsel-159.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-159.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-16.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-16.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-161.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-161.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-17.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-17.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-177a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-177a.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-18.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-18.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-18a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-18a.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-18b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-18b.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-18c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-18c.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-19.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-19.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-19b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-19b.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-20.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-20.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-21.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-21.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-61.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-61.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-62.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-62.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-63.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-63.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-64.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-64.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-65.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-65.xml",
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-66.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-66.xml",
+     {}
+    ]
+   ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-block-page-break-inside-avoid-1.html": [
     [
      "/css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-block-page-break-inside-avoid-1.html",
      {}
     ]
    ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/css21/pagination/moz-css21-block-page-break-inside-avoid-10.html": [
     [
@@ -11498,16 +11612,22 @@
     ]
    ],
    "fullscreen/rendering/fullscreen-pseudo-class-manual.html": [
     [
      "/fullscreen/rendering/fullscreen-pseudo-class-manual.html",
      {}
     ]
    ],
+   "fullscreen/rendering/fullscreen-root-block-size-manual.html": [
+    [
+     "/fullscreen/rendering/fullscreen-root-block-size-manual.html",
+     {}
+    ]
+   ],
    "fullscreen/rendering/ua-style-iframe-manual.html": [
     [
      "/fullscreen/rendering/ua-style-iframe-manual.html",
      {}
     ]
    ],
    "gamepad/events-manual.html": [
     [
@@ -53098,16 +53218,28 @@
       [
        "/css/CSS2/reference/inline-svg-margin-padding-border-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css/CSS2/linebox/anonymous-inline-inherit-001.html": [
+    [
+     "/css/CSS2/linebox/anonymous-inline-inherit-001.html",
+     [
+      [
+       "/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/CSS2/linebox/border-padding-bleed-001.xht": [
     [
      "/css/CSS2/linebox/border-padding-bleed-001.xht",
      [
       [
        "/css/CSS2/linebox/border-padding-bleed-001-ref.xht",
        "=="
       ]
@@ -165374,16 +165506,28 @@
       [
        "/css/selectors/focus-within-shadow-001-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css/selectors/historical-xmlid.xht": [
+    [
+     "/css/selectors/historical-xmlid.xht",
+     [
+      [
+       "/css/reference/ref-filled-green-100px-square.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/selectors/invalidation/sheet-going-away-002.html": [
     [
      "/css/selectors/invalidation/sheet-going-away-002.html",
      [
       [
        "/css/selectors/invalidation/sheet-going-away-002-ref.html",
        "=="
       ]
@@ -165398,16 +165542,1288 @@
       [
        "/css/selectors/of-type-selectors-ref.xhtml",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css/selectors/old-tests/css3-modsel-101.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-101.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-101b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-101b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-102.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-102.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-103.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-103.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-103b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-103b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-105.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-105.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-105b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-105b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-106.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-106.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-106b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-106b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-108.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-108.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-108b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-108b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-109.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-109.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-109b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-109b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-110.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-110.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-110b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-110b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-112.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-112.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-112b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-112b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-115.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-115.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-115b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-115b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-116.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-116.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-116b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-116b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-117.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-117.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-117b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-117b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-122.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-122.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-address-p-p-p-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-125.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-125.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-125b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-125b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-126.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-126.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-126b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-126b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-127.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-127.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-127b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-127b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-128.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-128.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-128b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-128b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-129.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-129.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-129b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-129b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-134.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-134.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-134b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-134b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-135.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-135.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-135b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-135b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-136.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-136.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-136b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-136b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-141.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-141.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-141b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-141b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-142.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-142.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-142b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-142b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-143.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-143.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-143b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-143b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-148.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-148.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-149.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-149.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background-offset.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-149b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-149b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background-offset.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-14b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-14b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-151.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-151.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background-offset.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-152.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-152.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background-offset.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-154.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-154.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-155.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-155.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-155a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-155a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-155b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-155b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-155c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-155c.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-155d.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-155d.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-156.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-156.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-156b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-156b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-156c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-156c.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-157.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-157.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-158.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-158.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-15b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-15b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-160.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-160.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-168.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-168.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-test-has-passed-desc.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-168a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-168a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-test-has-passed-desc.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-169.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-169.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-test-has-passed-desc.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-169a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-169a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-test-has-passed-desc.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-170.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-170.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-170a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-170a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-170b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-170b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-170c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-170c.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-170d.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-170d.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-172a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-172a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/seven-green-divs.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-172b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-172b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/seven-green-divs.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-173a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-173a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/seven-green-divs.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-173b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-173b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/seven-green-divs.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-175a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-175a.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-175b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-175b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-175c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-175c.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-176.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-176.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-177b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-177b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-178.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-178.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-179.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-179.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-green-color.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184a.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184a.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184b.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184c.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184c.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184d.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184d.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184e.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184e.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-184f.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-184f.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-184-ref.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-48.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-48.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-address-p-p-p-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-49.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-49.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-address-p-p-p-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-54.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-54.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-paragraph-lime-characters.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-55.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-55.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-paragraph-lime-characters.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-56.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-56.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-paragraph-lime-characters.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-59.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-59.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-paragraph-lime-characters.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-60.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-60.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/three-paragraph-lime-characters.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-7b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-7b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/this-line-lime-background.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-83.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-83.xml",
+     [
+      [
+       "/css/selectors/old-tests/css3-modsel-83-ref.xml",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-87.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-87.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/bq-u-u-u-green.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-87b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-87b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/bq-u-u-u-green.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-90.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-90.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/bq-u-u-u-green.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-90b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-90b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/bq-u-u-u-green.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-99.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-99.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-99b.xml": [
+    [
+     "/css/selectors/old-tests/css3-modsel-99b.xml",
+     [
+      [
+       "/css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/selectors/root-siblings.htm": [
     [
      "/css/selectors/root-siblings.htm",
      [
       [
        "/css/CSS2/reference/ref-this-text-should-be-green.xht",
        "=="
       ]
@@ -183518,94 +184934,118 @@
       [
        "/html/rendering/non-replaced-elements/tables/table-width-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html",
-       "=="
-      ]
-     ],
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html",
-     [
-      [
-       "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html",
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
    "html/rendering/non-replaced-elements/the-hr-element-0/align.html": [
     [
@@ -229229,16 +230669,21 @@
      {}
     ]
    ],
    "css/CSS2/i18n/visuren/support/samenot.png": [
     [
      {}
     ]
    ],
+   "css/CSS2/linebox/anonymous-inline-inherit-001-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/CSS2/linebox/border-padding-bleed-001-ref.xht": [
     [
      {}
     ]
    ],
    "css/CSS2/linebox/empty-inline-002-ref.xht": [
     [
      {}
@@ -268099,41 +269544,21 @@
      {}
     ]
    ],
    "css/requirements.txt": [
     [
      {}
     ]
    ],
-   "css/selectors/CHANGES": [
-    [
-     {}
-    ]
-   ],
    "css/selectors/META.yml": [
     [
      {}
     ]
    ],
-   "css/selectors/Makefile": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/README": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/TODO": [
-    [
-     {}
-    ]
-   ],
    "css/selectors/any-link-dynamic-001-ref.html": [
     [
      {}
     ]
    ],
    "css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [
     [
      {}
@@ -268149,1601 +269574,16 @@
      {}
     ]
    ],
    "css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml": [
     [
      {}
     ]
    ],
-   "css/selectors/css3-modsel-1.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-10.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-100.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-100b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-101.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-101b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-102.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-102b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-103.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-103b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-104.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-104b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-105.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-105b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-106.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-106b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-107.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-107b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-108.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-108b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-109.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-109b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-11.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-110.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-110b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-111.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-111b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-112.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-112b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-113.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-113b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-114.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-114b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-115.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-115b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-116.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-116b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-117.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-117b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-118.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-119.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-12.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-120.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-121.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-122.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-123.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-123b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-124.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-124b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-125.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-125b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-126.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-126b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-127.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-127b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-128.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-128b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-129.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-129b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-13.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-130.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-130b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-131.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-131b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-132.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-132b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-133.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-133b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-134.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-134b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-135.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-135b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-136.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-136b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-137.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-137b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-138.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-138b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-139.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-139b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-14.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-140.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-140b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-141.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-141b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-142.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-142b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-143.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-143b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-144.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-145a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-145b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-146a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-146b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-147a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-147b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-148.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-149.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-149b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-14b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-14c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-14d.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-14e.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-15.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-150.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-151.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-152.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-153.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-154.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-155.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-155a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-155b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-155c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-155d.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-156.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-156b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-156c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-157.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-158.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-159.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-15b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-15c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-16.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-160.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-161.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-162.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-163.xml-disabled-contains-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-164.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-165.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-166.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-166a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-167.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-167a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-168.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-168a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-169.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-169a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-17.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-170.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-170a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-170b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-170c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-170d.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-171.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-172a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-172b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-173a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-173b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-174a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-174b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-175a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-175b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-175c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-176.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-177a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-177b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-178.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-179.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-179a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-18.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-180a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-181.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-182.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-183.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184d.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184e.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-184f.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-18a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-18b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-18c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-19.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-19a.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-19b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-2.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-20.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-21.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-21b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-21c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-22.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-23.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-24.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-25.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-27.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-27a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-27b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-28.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-28b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-28c.pl-draft": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-29.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-29b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-3.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-30.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-31.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-32.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-33.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-34.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-35.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-36.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-37.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-38.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-39.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-39a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-39b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-39c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-3a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-4.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-40.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-41.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-41a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-42.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-42a.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-43.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-43b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-44.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-44b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-44c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-44d.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-45.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-45b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-45c.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-46.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-46b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-47.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-48.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-49.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-5.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-50.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-51.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-52.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-53.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-54.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-55.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-56.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-57.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-57b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-58.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-59.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-6.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-60.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-61.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-62.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-63.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-64.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-65.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-66.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-66b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-67.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-68.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-69.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-7.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-70.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-72.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-72b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-73.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-73b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-74.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-74b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-75.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-75b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-76.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-76b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-77.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-77b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-78.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-78b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-79.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-7b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-8.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-80.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-81.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-81b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-82.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-82b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-83.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-84.xml-disabled-contains-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-84b.xml-disabled-contains-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-85.xml-disabled-contains-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-86.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-87.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-87b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-88.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-88b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-89.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-9.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-90.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-90b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-91.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-92.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-93.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-94.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-94b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-95.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-96.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-96b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-97.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-97b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-98.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-98b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-99.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-99b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d1.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d1b.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d2.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d3.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d4.xml": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5a.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5b.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5c.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5d.xml-removed": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/css3-modsel-d5e.xml-removed": [
-    [
-     {}
-    ]
-   ],
    "css/selectors/focus-within-001-ref.html": [
     [
      {}
     ]
    ],
    "css/selectors/focus-within-006-ref.html": [
     [
      {}
@@ -269754,36 +269594,16 @@
      {}
     ]
    ],
    "css/selectors/focus-within-shadow-001-ref.html": [
     [
      {}
     ]
    ],
-   "css/selectors/generate.pl": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/htaccess": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/html-full.css": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/html-shell.css": [
-    [
-     {}
-    ]
-   ],
    "css/selectors/i18n/META.yml": [
     [
      {}
     ]
    ],
    "css/selectors/i18n/README": [
     [
      {}
@@ -269794,16 +269614,106 @@
      {}
     ]
    ],
    "css/selectors/of-type-selectors-ref.xhtml": [
     [
      {}
     ]
    ],
+   "css/selectors/old-tests/css3-modsel-184-ref.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/css3-modsel-83-ref.xml": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/bq-u-u-u-green.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-g-u-g-g-u.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u-u.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-g-u-g-u.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-g-u-u-g-g.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-u-g-g-u-u-g.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/lime-bg-paras-u-g-u-g-g.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/seven-green-divs.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-address-p-p-p-lime-background.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-line-green-background.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-line-green-color.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-line-lime-background-offset.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-line-lime-background.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/this-test-has-passed-desc.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/three-p-lime-background-except-middle.xht": [
+    [
+     {}
+    ]
+   ],
+   "css/selectors/old-tests/reference/three-paragraph-lime-characters.xht": [
+    [
+     {}
+    ]
+   ],
    "css/selectors/resources/blue15x15.png": [
     [
      {}
     ]
    ],
    "css/selectors/selector-placeholder-shown-type-change-001-ref.html": [
     [
      {}
@@ -269859,56 +269769,16 @@
      {}
     ]
    ],
    "css/selectors/selectors-namespace-001-ref.xml": [
     [
      {}
     ]
    ],
-   "css/selectors/tng.css": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/utils/generators.pm": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/utils/helpers.pm": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/utils/parser.pm": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/xhtml-full.css": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/xhtml-shell.css": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/xml-full.css": [
-    [
-     {}
-    ]
-   ],
-   "css/selectors/xml-shell.css": [
-    [
-     {}
-    ]
-   ],
    "css/support/1x1-green.png": [
     [
      {}
     ]
    ],
    "css/support/1x1-lime.png": [
     [
      {}
@@ -274904,16 +274774,21 @@
      {}
     ]
    ],
    "docs/_writing-tests/general-guidelines.md": [
     [
      {}
     ]
    ],
+   "docs/_writing-tests/h2tests.md": [
+    [
+     {}
+    ]
+   ],
    "docs/_writing-tests/idlharness.md": [
     [
      {}
     ]
    ],
    "docs/_writing-tests/index.md": [
     [
      {}
@@ -285769,67 +285644,87 @@
      {}
     ]
    ],
    "html/rendering/non-replaced-elements/tables/table-width-ref.html": [
     [
      {}
     ]
    ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css": [
     [
      {}
     ]
    ],
    "html/rendering/non-replaced-elements/the-hr-element-0/align-ref.html": [
     [
      {}
     ]
@@ -311039,17 +310934,22 @@
      {}
     ]
    ],
    "webdriver/tests/support/asserts.py": [
     [
      {}
     ]
    ],
-   "webdriver/tests/support/fixtures.py": [
+   "webdriver/tests/support/defaults.py": [
+    [
+     {}
+    ]
+   ],
+   "webdriver/tests/support/helpers.py": [
     [
      {}
     ]
    ],
    "webdriver/tests/support/http_request.py": [
     [
      {}
     ]
@@ -316170,16 +316070,46 @@
     ]
    ],
    "2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.unaffected.html": [
     [
      "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.unaffected.html",
      {}
     ]
    ],
+   "2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html": [
+    [
+     "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html",
+     {}
+    ]
+   ],
+   "2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html": [
+    [
+     "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html",
+     {}
+    ]
+   ],
+   "2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html": [
+    [
+     "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html",
+     {}
+    ]
+   ],
+   "2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html": [
+    [
+     "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html",
+     {}
+    ]
+   ],
+   "2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html": [
+    [
+     "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html",
+     {}
+    ]
+   ],
    "2dcontext/drawing-text-to-the-canvas/2d.text.measure.width.basic.html": [
     [
      "/2dcontext/drawing-text-to-the-canvas/2d.text.measure.width.basic.html",
      {}
     ]
    ],
    "2dcontext/drawing-text-to-the-canvas/2d.text.measure.width.empty.html": [
     [
@@ -325080,19 +325010,19 @@
     ]
    ],
    "compat/idlharness.window.js": [
     [
      "/compat/idlharness.window.html",
      {}
     ]
    ],
-   "compat/webkit-pseudo-element.html": [
-    [
-     "/compat/webkit-pseudo-element.html",
+   "compat/webkit-appearance.html": [
+    [
+     "/compat/webkit-appearance.html",
      {}
     ]
    ],
    "compat/webkit-text-fill-color-currentColor.html": [
     [
      "/compat/webkit-text-fill-color-currentColor.html",
      {}
     ]
@@ -339638,16 +339568,22 @@
     ]
    ],
    "css/selectors/user-invalid.html": [
     [
      "/css/selectors/user-invalid.html",
      {}
     ]
    ],
+   "css/selectors/webkit-pseudo-element.html": [
+    [
+     "/css/selectors/webkit-pseudo-element.html",
+     {}
+    ]
+   ],
    "custom-elements/CustomElementRegistry.html": [
     [
      "/custom-elements/CustomElementRegistry.html",
      {}
     ]
    ],
    "custom-elements/Document-createElement-svg.svg": [
     [
@@ -351516,16 +351452,34 @@
     ]
    ],
    "fetch/api/basic/error-after-response.html": [
     [
      "/fetch/api/basic/error-after-response.html",
      {}
     ]
    ],
+   "fetch/api/basic/header-value-null-byte.any.js": [
+    [
+     "/fetch/api/basic/header-value-null-byte.any.html",
+     {}
+    ],
+    [
+     "/fetch/api/basic/header-value-null-byte.any.serviceworker.html",
+     {}
+    ],
+    [
+     "/fetch/api/basic/header-value-null-byte.any.sharedworker.html",
+     {}
+    ],
+    [
+     "/fetch/api/basic/header-value-null-byte.any.worker.html",
+     {}
+    ]
+   ],
    "fetch/api/basic/integrity.sub.any.js": [
     [
      "/fetch/api/basic/integrity.sub.any.html",
      {}
     ],
     [
      "/fetch/api/basic/integrity.sub.any.sharedworker.html",
      {}
@@ -356536,91 +356490,103 @@
     ]
    ],
    "html/rendering/non-replaced-elements/tables/table-vspace-hspace.html": [
     [
      "/html/rendering/non-replaced-elements/tables/table-vspace-hspace.html",
      {}
     ]
    ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html",
-     {}
-    ]
-   ],
-   "html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html": [
-    [
-     "/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html",
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html": [
+    [
+     "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html",
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html": [
+    [