merge mozilla-inbound to mozilla-central. r=merge a=merge
authorSebastian Hengst <archaeopteryx@coole-files.de>
Fri, 22 Sep 2017 11:29:49 +0200
changeset 382389 ad2acefd8ad209e1d25dc3458c75dedc51049839
parent 382340 5a63d8457a2a69a2ad54a50765bff412580df2a4 (current diff)
parent 382388 10cfc563ec9dc126f4667d1d6952fbd2a703ab9a (diff)
child 382390 8b9bbaf899940f4ec673e1e00c5c44db3023a8c7
push id32555
push userarchaeopteryx@coole-files.de
push dateFri, 22 Sep 2017 09:43:20 +0000
treeherdermozilla-central@82b2ae0b03ca [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone58.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 mozilla-inbound to mozilla-central. r=merge a=merge MozReview-Commit-ID: FKzfDK7mwcx
testing/web-platform/meta/content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html.ini
testing/web-platform/meta/content-security-policy/blink-contrib/object-src-applet-archive.sub.html.ini
testing/web-platform/meta/content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html.ini
testing/web-platform/meta/content-security-policy/blink-contrib/object-src-applet-code.sub.html.ini
testing/web-platform/meta/css-font-display/font-display.html.ini
testing/web-platform/meta/css/CSS2/selectors/attribute-value-selector-002.xht.ini
testing/web-platform/meta/css/css-logical-properties-1/logicalprops-quirklength.html.ini
testing/web-platform/meta/css/css-ui-3/caret-color-020.html.ini
testing/web-platform/meta/css/css-ui-3/text-overflow-006.html.ini
testing/web-platform/meta/css/css-values-3/vh_not_refreshing_on_chrome.html.ini
testing/web-platform/meta/generic-sensor/idlharness.html.ini
testing/web-platform/meta/html/semantics/scripting-1/the-script-element/script-languages-01.html.ini
testing/web-platform/meta/html/semantics/scripting-1/the-script-element/script-languages-02.html.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/001.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/002.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/003.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/004.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/005.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/content/006.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/001.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/004.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005.xhtml.ini
testing/web-platform/meta/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006.xhtml.ini
testing/web-platform/meta/payment-request/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html.ini
testing/web-platform/meta/payment-request/payment-allowed-by-feature-policy-attribute.https.sub.html.ini
testing/web-platform/meta/payment-request/payment-allowed-by-feature-policy.https.sub.html.ini
testing/web-platform/meta/payment-request/payment-default-feature-policy.https.sub.html.ini
testing/web-platform/meta/payment-request/payment-disabled-by-feature-policy.https.sub.html.ini
testing/web-platform/meta/payment-request/payment-request-update-event-constructor.http.html.ini
testing/web-platform/meta/payment-request/payment-request-update-event-constructor.https.html.ini
testing/web-platform/meta/payment-request/payment-request-update-event-updatewith-method.https.html.ini
testing/web-platform/meta/performance-timeline/idlharness.html.ini
testing/web-platform/meta/resource-timing/idlharness.html.ini
testing/web-platform/meta/websockets/constructor/011.html.ini
testing/web-platform/tests/auxclick/OWNERS
testing/web-platform/tests/clipboard/OWNERS
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-archive.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-archive.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-code.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/object-src-applet-code.sub.html.sub.headers
testing/web-platform/tests/css-font-display/font-display-ref.html
testing/web-platform/tests/css-font-display/font-display.html
testing/web-platform/tests/css-font-display/resources/slow-ahem-loading.py
testing/web-platform/tests/css/css-grid-1/grid-items/support/100x50-green.png
testing/web-platform/tests/css/css-grid-1/grid-items/support/50x100-green.png
testing/web-platform/tests/css/css-logical-properties-1/OWNERS
testing/web-platform/tests/css/css-logical-properties-1/logicalprops-block-size-vlr.html
testing/web-platform/tests/css/css-logical-properties-1/logicalprops-block-size.html
testing/web-platform/tests/css/css-logical-properties-1/logicalprops-inline-size-vlr.html
testing/web-platform/tests/css/css-logical-properties-1/logicalprops-inline-size.html
testing/web-platform/tests/css/css-logical-properties-1/logicalprops-quirklength.html
testing/web-platform/tests/css/css-logical-properties-1/resources/style-check.js
testing/web-platform/tests/css/css-logical-props-1/cascading-001-ref.html
testing/web-platform/tests/css/css-logical-props-1/cascading-001.html
testing/web-platform/tests/cssom-view/ttwf-scrollintoview.html
testing/web-platform/tests/generic-sensor/idlharness.html
testing/web-platform/tests/hr-time/window-worker-time-origin.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-language-type.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-languages-01.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-languages-02.html
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/001.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/002.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/003.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/004.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/005.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content/006.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/001.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/004.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005.xhtml
testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006.xhtml
testing/web-platform/tests/input-events/input-events-typing-data-manual.html
testing/web-platform/tests/microdata/conformance-requirements/.gitkeep
testing/web-platform/tests/microdata/converting-html-to-other-formats/.gitkeep
testing/web-platform/tests/microdata/converting-html-to-other-formats/json/.gitkeep
testing/web-platform/tests/microdata/dependencies/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/associating-names-with-items/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/items/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/microdata-and-other-namespaces/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/names-the-itemprop-attribute/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/names-the-itemprop-attribute/original-id.json
testing/web-platform/tests/microdata/encoding-microdata/the-microdata-model/.gitkeep
testing/web-platform/tests/microdata/encoding-microdata/values/.gitkeep
testing/web-platform/tests/microdata/iana/.gitkeep
testing/web-platform/tests/microdata/introduction/.gitkeep
testing/web-platform/tests/microdata/introduction/global-identifiers-for-items/.gitkeep
testing/web-platform/tests/microdata/introduction/overview/.gitkeep
testing/web-platform/tests/microdata/introduction/selecting-names-when-defining-vocabularies/.gitkeep
testing/web-platform/tests/microdata/introduction/the-basic-syntax/.gitkeep
testing/web-platform/tests/microdata/introduction/typed-items/.gitkeep
testing/web-platform/tests/microdata/introduction/using-the-microdata-dom-api/.gitkeep
testing/web-platform/tests/microdata/terminology/.gitkeep
testing/web-platform/tests/payment-request/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html
testing/web-platform/tests/payment-request/payment-allowed-by-feature-policy-attribute.https.sub.html
testing/web-platform/tests/payment-request/payment-allowed-by-feature-policy.https.sub.html
testing/web-platform/tests/payment-request/payment-allowed-by-feature-policy.https.sub.html.headers
testing/web-platform/tests/payment-request/payment-default-feature-policy.https.sub.html
testing/web-platform/tests/payment-request/payment-disabled-by-feature-policy.https.sub.html
testing/web-platform/tests/payment-request/payment-disabled-by-feature-policy.https.sub.html.headers
testing/web-platform/tests/payment-request/payment-request-update-event-constructor.http.html
testing/web-platform/tests/payment-request/payment-request-update-event-constructor.https.html
testing/web-platform/tests/payment-request/payment-request-update-event-updatewith-method.https.html
testing/web-platform/tests/service-workers/service-worker/resources/registration-tests.js
--- a/browser/base/content/sanitize.js
+++ b/browser/base/content/sanitize.js
@@ -14,16 +14,24 @@ XPCOMUtils.defineLazyModuleGetters(this,
   FormHistory: "resource://gre/modules/FormHistory.jsm",
   Downloads: "resource://gre/modules/Downloads.jsm",
   DownloadsCommon: "resource:///modules/DownloadsCommon.jsm",
   TelemetryStopwatch: "resource://gre/modules/TelemetryStopwatch.jsm",
   console: "resource://gre/modules/Console.jsm",
   setTimeout: "resource://gre/modules/Timer.jsm",
 });
 
+
+XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager",
+                                   "@mozilla.org/serviceworkers/manager;1",
+                                   "nsIServiceWorkerManager");
+XPCOMUtils.defineLazyServiceGetter(this, "quotaManagerService",
+                                   "@mozilla.org/dom/quota-manager-service;1",
+                                   "nsIQuotaManagerService");
+
 var {classes: Cc, interfaces: Ci} = Components;
 
 /**
  * A number of iterations after which to yield time back
  * to the system.
  */
 const YIELD_PERIOD = 10;
 
@@ -275,19 +283,51 @@ Sanitizer.prototype = {
         if (seenException) {
           throw seenException;
         }
       },
     },
 
     offlineApps: {
       async clear(range) {
+        // AppCache
         Components.utils.import("resource:///modules/offlineAppCache.jsm");
         // This doesn't wait for the cleanup to be complete.
         OfflineAppCacheHelper.clear();
+
+        // LocalStorage
+        Services.obs.notifyObservers(null, "extension:purge-localStorage");
+
+        // ServiceWorkers
+        let serviceWorkers = serviceWorkerManager.getAllRegistrations();
+        for (let i = 0; i < serviceWorkers.length; i++) {
+          let sw = serviceWorkers.queryElementAt(i, Ci.nsIServiceWorkerRegistrationInfo);
+          let host = sw.principal.URI.host;
+          serviceWorkerManager.removeAndPropagate(host);
+        }
+
+        // QuotaManager
+        let promises = [];
+        await new Promise(resolve => {
+          quotaManagerService.getUsage(request => {
+            for (let item of request.result) {
+              let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
+              let uri = principal.URI;
+              if (uri.scheme == "http" || uri.scheme == "https" || uri.scheme == "file") {
+                promises.push(new Promise(r => {
+                  let req = quotaManagerService.clearStoragesForPrincipal(principal, null, true);
+                  req.callback = () => { r(); };
+                }));
+              }
+            }
+            resolve();
+          });
+        });
+
+        return Promise.all(promises);
       }
     },
 
     history: {
       async clear(range) {
         let seenException;
         let refObj = {};
         TelemetryStopwatch.start("FX_SANITIZE_HISTORY", refObj);
--- a/browser/components/extensions/ext-browsingData.js
+++ b/browser/components/extensions/ext-browsingData.js
@@ -12,16 +12,19 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "Services",
                                   "resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "setTimeout",
                                   "resource://gre/modules/Timer.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager",
                                    "@mozilla.org/serviceworkers/manager;1",
                                    "nsIServiceWorkerManager");
+XPCOMUtils.defineLazyServiceGetter(this, "quotaManagerService",
+                                   "@mozilla.org/dom/quota-manager-service;1",
+                                   "nsIQuotaManagerService");
 
 /**
 * A number of iterations after which to yield time back
 * to the system.
 */
 const YIELD_PERIOD = 10;
 
 const PREF_DOMAIN = "privacy.cpd.";
@@ -75,16 +78,39 @@ const clearDownloads = options => {
 const clearFormData = options => {
   return sanitizer.items.formdata.clear(makeRange(options));
 };
 
 const clearHistory = options => {
   return sanitizer.items.history.clear(makeRange(options));
 };
 
+const clearIndexedDB = async function(options) {
+  let promises = [];
+
+  await new Promise(resolve => {
+    quotaManagerService.getUsage(request => {
+      for (let item of request.result) {
+        let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
+        let uri = principal.URI;
+        if (uri.scheme == "http" || uri.scheme == "https" || uri.scheme == "file") {
+          promises.push(new Promise(r => {
+            let req = quotaManagerService.clearStoragesForPrincipal(principal, null, true);
+            req.callback = () => { r(); };
+          }));
+        }
+      }
+
+      resolve();
+    });
+  });
+
+  return Promise.all(promises);
+};
+
 const clearLocalStorage = async function(options) {
   Services.obs.notifyObservers(null, "extension:purge-localStorage");
 };
 
 const clearPasswords = async function(options) {
   let loginManager = Services.logins;
   let yieldCounter = 0;
 
@@ -148,16 +174,19 @@ const doRemoval = (options, dataToRemove
           removalPromises.push(clearDownloads(options));
           break;
         case "formData":
           removalPromises.push(clearFormData(options));
           break;
         case "history":
           removalPromises.push(clearHistory(options));
           break;
+        case "indexedDB":
+          removalPromises.push(clearIndexedDB(options));
+          break;
         case "localStorage":
           removalPromises.push(clearLocalStorage(options));
           break;
         case "passwords":
           removalPromises.push(clearPasswords(options));
           break;
         case "pluginData":
           removalPromises.push(clearPluginData(options));
@@ -224,16 +253,19 @@ this.browsingData = class extends Extens
           return doRemoval(options, {downloads: true});
         },
         removeFormData(options) {
           return doRemoval(options, {formData: true});
         },
         removeHistory(options) {
           return doRemoval(options, {history: true});
         },
+        removeIndexedDB(options) {
+          return doRemoval(options, {indexedDB: true});
+        },
         removeLocalStorage(options) {
           return doRemoval(options, {localStorage: true});
         },
         removePasswords(options) {
           return doRemoval(options, {passwords: true});
         },
         removePluginData(options) {
           return doRemoval(options, {pluginData: true});
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -17,16 +17,17 @@ support-files =
   file_iframe_document.sjs
   file_bypass_cache.sjs
   file_language_fr_en.html
   file_language_ja.html
   file_language_tlh.html
   file_dummy.html
   file_title.html
   file_inspectedwindow_reload_target.sjs
+  file_indexedDB.html
   file_serviceWorker.html
   locale/chrome.manifest
   webNav_createdTarget.html
   webNav_createdTargetSource.html
   webNav_createdTargetSource_subframe.html
   serviceWorker.js
   searchSuggestionEngine.xml
   searchSuggestionEngine.sjs
@@ -45,16 +46,17 @@ skip-if = debug && (os == 'linux' && bit
 [browser_ext_browserAction_popup_preload.js]
 skip-if = (os == 'win' && !debug) # bug 1352668
 [browser_ext_browserAction_popup_resize.js]
 [browser_ext_browserAction_simple.js]
 [browser_ext_browserAction_telemetry.js]
 [browser_ext_browserAction_theme_icons.js]
 [browser_ext_browsingData_formData.js]
 [browser_ext_browsingData_history.js]
+[browser_ext_browsingData_indexedDB.js]
 [browser_ext_browsingData_localStorage.js]
 [browser_ext_browsingData_pluginData.js]
 [browser_ext_browsingData_serviceWorkers.js]
 [browser_ext_chrome_settings_overrides_home.js]
 [browser_ext_commands_execute_browser_action.js]
 [browser_ext_commands_execute_page_action.js]
 [browser_ext_commands_execute_sidebar_action.js]
 [browser_ext_commands_getAll.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_browsingData_indexedDB.js
@@ -0,0 +1,81 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+/* eslint-disable mozilla/no-arbitrary-setTimeout */
+"use strict";
+
+add_task(async function testIndexedDB() {
+  function background() {
+    const PAGE = "/browser/browser/components/extensions/test/browser/file_indexedDB.html";
+
+    browser.test.onMessage.addListener(async (msg) => {
+      await browser.browsingData.remove({}, {indexedDB: true});
+      browser.test.sendMessage("indexedDBRemoved");
+    });
+
+    // Create two tabs.
+    browser.tabs.create({url: `http://mochi.test:8888${PAGE}`});
+    browser.tabs.create({url: `http://example.com${PAGE}`});
+  }
+
+  function contentScript() {
+    window.addEventListener("message", msg => { // eslint-disable-line mozilla/balanced-listeners
+      browser.test.sendMessage("indexedDBCreated");
+    }, true);
+  }
+
+  let extension = ExtensionTestUtils.loadExtension({
+    background,
+    manifest: {
+      permissions: ["browsingData", "tabs"],
+      "content_scripts": [{
+        "matches": [
+          "http://mochi.test/*/file_indexedDB.html",
+          "http://example.com/*/file_indexedDB.html",
+        ],
+        "js": ["script.js"],
+        "run_at": "document_start",
+      }],
+    },
+    files: {
+      "script.js": contentScript,
+    },
+  });
+
+  let win = await BrowserTestUtils.openNewBrowserWindow();
+  await focusWindow(win);
+
+  await extension.startup();
+  await extension.awaitMessage("indexedDBCreated");
+  await extension.awaitMessage("indexedDBCreated");
+
+  let qms = SpecialPowers.Cc["@mozilla.org/dom/quota-manager-service;1"]
+             .getService(Ci.nsIQuotaManagerService);
+
+  function getOrigins() {
+    return new Promise(resolve => {
+      let origins = [];
+      qms.getUsage(request => {
+        for (let i = 0; i < request.result.length; ++i) {
+          if (request.result[i].origin.startsWith("http://mochi.test") ||
+              request.result[i].origin.startsWith("http://example.com")) {
+            origins.push(request.result[i].origin);
+          }
+        }
+        resolve(origins);
+      });
+    });
+  }
+
+  let origins = await getOrigins();
+  is(origins.length, 2, "IndexedDB databases have been populated.");
+
+  extension.sendMessage();
+
+  await extension.awaitMessage("indexedDBRemoved");
+
+  origins = await getOrigins();
+  is(origins.length, 0, "IndexedDB data has been removed.");
+
+  await extension.unload();
+  await BrowserTestUtils.closeWindow(win);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/file_indexedDB.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <script>
+"use strict";
+
+const objectStoreName = "Objects";
+
+let test = {key: 0, value: "test"};
+
+let request = indexedDB.open("WebExtensionTest", 1);
+request.onupgradeneeded = event => {
+  let db = event.target.result;
+  let objectStore = db.createObjectStore(objectStoreName,
+                                         {autoIncrement: 0});
+  request = objectStore.add(test.value, test.key);
+  request.onsuccess = event => {
+    db.close();
+    window.postMessage("indexedDBCreated", "*");
+  };
+};
+    </script>
+  </head>
+  <body>
+    This is a test page.
+  </body>
+<html>
--- a/browser/components/extensions/test/xpcshell/test_ext_browsingData.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_browsingData.js
@@ -36,31 +36,8 @@ add_task(async function testInvalidArgum
     },
   };
 
   let extension = ExtensionTestUtils.loadExtension(extensionData);
   await extension.startup();
   await extension.awaitFinish("invalidArguments");
   await extension.unload();
 });
-
-add_task(async function testUnimplementedDataType() {
-  function background() {
-    browser.browsingData.remove({}, {indexedDB: true});
-    browser.test.sendMessage("finished");
-  }
-
-  let {messages} = await promiseConsoleOutput(async function() {
-    let extension = ExtensionTestUtils.loadExtension({
-      background: background,
-      manifest: {
-        permissions: ["browsingData"],
-      },
-    });
-
-    await extension.startup();
-    await extension.awaitMessage("finished");
-    await extension.unload();
-  });
-
-  let warningObserved = messages.find(line => /Firefox does not support dataTypes: indexedDB/.test(line));
-  ok(warningObserved, "Warning issued when calling remove with an unimplemented dataType.");
-});
--- a/browser/components/preferences/SiteDataManager.jsm
+++ b/browser/components/preferences/SiteDataManager.jsm
@@ -4,16 +4,19 @@ const { classes: Cc, interfaces: Ci, uti
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "OfflineAppCacheHelper",
                                   "resource:///modules/offlineAppCache.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
                                   "resource://gre/modules/ContextualIdentityService.jsm");
+XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager",
+                                   "@mozilla.org/serviceworkers/manager;1",
+                                   "nsIServiceWorkerManager");
 
 this.EXPORTED_SYMBOLS = [
   "SiteDataManager"
 ];
 
 this.SiteDataManager = {
 
   _qms: Services.qms,
@@ -212,25 +215,39 @@ this.SiteDataManager = {
           }
           Services.cookies.remove(
             cookie.host, cookie.name, cookie.path, false, cookie.originAttributes);
         }
       }
     }
   },
 
+  _removeServiceWorkers(site) {
+    let serviceWorkers = serviceWorkerManager.getAllRegistrations();
+    for (let i = 0; i < serviceWorkers.length; i++) {
+      let sw = serviceWorkers.queryElementAt(i, Ci.nsIServiceWorkerRegistrationInfo);
+      for (let principal of site.principals) {
+        if (sw.principal.equals(principal)) {
+          serviceWorkerManager.removeAndPropagate(sw.principal.URI.host);
+          break;
+        }
+      }
+    }
+  },
+
   remove(hosts) {
     let promises = [];
     let unknownHost = "";
     for (let host of hosts) {
       let site = this._sites.get(host);
       if (site) {
         this._removePermission(site);
         this._removeAppCache(site);
         this._removeCookie(site);
+        this._removeServiceWorkers(site);
         promises.push(this._removeQuotaUsage(site));
       } else {
         unknownHost = host;
         break;
       }
     }
     if (promises.length > 0) {
       Promise.all(promises).then(() => this.updateSites());
@@ -239,16 +256,25 @@ this.SiteDataManager = {
       throw `SiteDataManager: removing unknown site of ${unknownHost}`;
     }
   },
 
   async removeAll() {
     Services.cache2.clear();
     Services.cookies.removeAll();
     OfflineAppCacheHelper.clear();
+
+    // Iterate through the service workers and remove them.
+    let serviceWorkers = serviceWorkerManager.getAllRegistrations();
+    for (let i = 0; i < serviceWorkers.length; i++) {
+      let sw = serviceWorkers.queryElementAt(i, Ci.nsIServiceWorkerRegistrationInfo);
+      let host = sw.principal.URI.host;
+      serviceWorkerManager.removeAndPropagate(host);
+    }
+
     // Refresh sites using quota usage again.
     // This is for the case:
     //   1. User goes to the about:preferences Site Data section.
     //   2. With the about:preferences opened, user visits another website.
     //   3. The website saves to quota usage, like indexedDB.
     //   4. User goes back to the Site Data section and commands to clear all site data.
     // For this case, we should refresh the site list so not to miss the website in the step 3.
     // We don't do "Clear All" on the quota manager like the cookie, appcache, http cache above
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -1642,11 +1642,18 @@ var gPrivacyPane = {
   _initA11yString() {
     let a11yLearnMoreLink =
       Services.urlFormatter.formatURLPref("accessibility.support.url");
     document.getElementById("a11yLearnMoreLink")
       .setAttribute("href", a11yLearnMoreLink);
   },
 
   updateA11yPrefs(checked) {
-    Services.prefs.setIntPref("accessibility.force_disabled", checked ? 1 : 0);
+    let buttonIndex = confirmRestartPrompt(checked, 0, true, false);
+    if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) {
+      Services.prefs.setIntPref("accessibility.force_disabled", checked ? 1 : 0);
+      Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
+    }
+
+    // Revert the checkbox in case we didn't quit
+    document.getElementById("a11yPrivacyCheckbox").checked = !checked;
   }
 };
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -697,21 +697,27 @@ def compiler(language, host_or_target, c
                     'Please reorder your $PATH.',
                     quote(os.path.dirname(found_compiler)),
                     quote(os.path.dirname(full_path)))
 
         info = check_compiler(wrapper + [compiler] + flags, language,
                               host_or_target)
 
         # Check that the additional flags we got are enough to not require any
-        # more flags.
-        if info.flags:
-            flags += info.flags
-            info = check_compiler(wrapper + [compiler] + flags, language,
-                                  host_or_target)
+        # more flags. If we get an exception, just ignore it; it's liable to be
+        # invalid command-line flags, which means the compiler we're checking
+        # doesn't support those command-line flags and will fail one or more of
+        # the checks below.
+        try:
+            if info.flags:
+                flags += info.flags
+                info = check_compiler(wrapper + [compiler] + flags, language,
+                                      host_or_target)
+        except FatalCheckError:
+            pass
 
         if not info.target_cpu or info.target_cpu != host_or_target.cpu:
             raise FatalCheckError(
                 '%s %s compiler target CPU (%s) does not match --%s CPU (%s)'
                 % (host_or_target_str.capitalize(), language,
                    info.target_cpu or 'unknown', host_or_target_str,
                    host_or_target.raw_cpu))
 
@@ -727,46 +733,46 @@ def compiler(language, host_or_target, c
                                           host_or_target.endianness):
             raise FatalCheckError(
                 '%s %s compiler target endianness (%s) does not match --%s '
                 'endianness (%s)'
                 % (host_or_target_str.capitalize(), language,
                    info.target_endianness or 'unknown', host_or_target_str,
                    host_or_target.endianness))
 
-        if info.flags:
-            raise FatalCheckError(
-                'Unknown compiler or compiler not supported.')
-
         # Compiler version checks
         # ===================================================
         # Check the compiler version here instead of in `compiler_version` so
         # that the `checking` message doesn't pretend the compiler can be used
         # to then bail out one line later.
         if info.type == 'gcc' and info.version < '4.9.0':
             raise FatalCheckError(
                 'Only GCC 4.9 or newer is supported (found version %s).'
                 % info.version)
 
         # If you want to bump the version check here search for
-        # __cpp_static_assert above, and see the associated comment.
+        # cxx_alignof above, and see the associated comment.
         if info.type == 'clang' and not info.version:
             raise FatalCheckError(
                 'Only clang/llvm 3.6 or newer is supported.')
 
         if info.type == 'msvc':
             if info.version < '19.00.24213':
                 raise FatalCheckError(
                     'This version (%s) of the MSVC compiler is not '
                     'supported.\n'
                     'You must install Visual C++ 2015 Update 3 or newer in '
                     'order to build.\n'
                     'See https://developer.mozilla.org/en/'
                     'Windows_Build_Prerequisites' % info.version)
 
+        if info.flags:
+            raise FatalCheckError(
+                'Unknown compiler or compiler not supported.')
+
         return namespace(
             wrapper=wrapper,
             compiler=compiler,
             flags=flags,
             type=info.type,
             version=info.version,
             language=language,
         )
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -1604,17 +1604,17 @@ nsDocShell::LoadURI(nsIURI* aURI,
                       loadReplace,
                       referrer,
                       referrerPolicy,
                       triggeringPrincipal,
                       principalToInherit,
                       flags,
                       target,
                       nullptr,      // No type hint
-                      NullString(), // No forced download
+                      VoidString(), // No forced download
                       postStream,
                       headersStream,
                       loadType,
                       nullptr, // No SHEntry
                       aFirstParty,
                       srcdoc,
                       sourceDocShell,
                       baseURI,
@@ -5483,18 +5483,18 @@ nsDocShell::LoadErrorPage(nsIURI* aURI, 
   nsCOMPtr<nsIURI> errorPageURI;
   nsresult rv = NS_NewURI(getter_AddRefs(errorPageURI), errorPageUrl);
   NS_ENSURE_SUCCESS(rv, rv);
 
   return InternalLoad(errorPageURI, nullptr, Nothing(), false, nullptr,
                       mozilla::net::RP_Unset,
                       nsContentUtils::GetSystemPrincipal(), nullptr,
                       INTERNAL_LOAD_FLAGS_NONE, EmptyString(),
-                      nullptr, NullString(), nullptr, nullptr, LOAD_ERROR_PAGE,
-                      nullptr, true, NullString(), this, nullptr, false,
+                      nullptr, VoidString(), nullptr, nullptr, LOAD_ERROR_PAGE,
+                      nullptr, true, VoidString(), this, nullptr, false,
                       nullptr, nullptr);
 }
 
 NS_IMETHODIMP
 nsDocShell::Reload(uint32_t aReloadFlags)
 {
   if (!IsNavigationAllowed()) {
     return NS_OK; // JS may not handle returning of an error code
@@ -5584,17 +5584,17 @@ nsDocShell::Reload(uint32_t aReloadFlags
                       loadReplace,
                       referrerURI,
                       referrerPolicy,
                       triggeringPrincipal,
                       triggeringPrincipal,
                       flags,
                       EmptyString(),   // No window target
                       NS_LossyConvertUTF16toASCII(contentTypeHint).get(),
-                      NullString(),    // No forced download
+                      VoidString(),    // No forced download
                       nullptr,         // No post data
                       nullptr,         // No headers data
                       loadType,        // Load type
                       nullptr,         // No SHEntry
                       true,
                       srcdoc,          // srcdoc argument for iframe
                       this,            // For reloads we are the source
                       baseURI,
@@ -9752,17 +9752,17 @@ public:
     return mDocShell->InternalLoad(mURI, mOriginalURI, mResultPrincipalURI,
                                    mLoadReplace,
                                    mReferrer,
                                    mReferrerPolicy,
                                    mTriggeringPrincipal, mPrincipalToInherit,
                                    mFlags, EmptyString(),
                                    mTypeHint.IsVoid() ? nullptr
                                                       : mTypeHint.get(),
-                                   NullString(), mPostData, mHeadersData,
+                                   VoidString(), mPostData, mHeadersData,
                                    mLoadType, mSHEntry, mFirstParty,
                                    mSrcdoc, mSourceDocShell, mBaseURI,
                                    mCheckForPrerender, nullptr, nullptr);
   }
 
 private:
   nsCString mTypeHint;
   nsString mSrcdoc;
@@ -10221,17 +10221,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
                                         aLoadReplace,
                                         aReferrer,
                                         aReferrerPolicy,
                                         aTriggeringPrincipal,
                                         principalToInherit,
                                         aFlags,
                                         EmptyString(),   // No window target
                                         aTypeHint,
-                                        NullString(),    // No forced download
+                                        VoidString(),    // No forced download
                                         aPostData,
                                         aHeadersData,
                                         aLoadType,
                                         aSHEntry,
                                         aFirstParty,
                                         aSrcdoc,
                                         aSourceDocShell,
                                         aBaseURI,
@@ -10832,17 +10832,17 @@ nsDocShell::InternalLoad(nsIURI* aURI,
       aSHEntry->SyncPresentationState();
     }
   }
 
   nsAutoString srcdoc;
   if (aFlags & INTERNAL_LOAD_FLAGS_IS_SRCDOC) {
     srcdoc = aSrcdoc;
   } else {
-    srcdoc = NullString();
+    srcdoc = VoidString();
   }
 
   bool isTopLevelDoc = mItemType == typeContent &&
                        (isTargetTopLevelDocShell ||
                         GetIsMozBrowser());
 
   OriginAttributes attrs = GetOriginAttributes();
   attrs.SetFirstPartyDomain(isTopLevelDoc, aURI);
@@ -12855,17 +12855,17 @@ nsDocShell::LoadHistoryEntry(nsISHEntry*
   bool isSrcdoc;
   nsCOMPtr<nsIURI> baseURI;
   aEntry->GetIsSrcdocEntry(&isSrcdoc);
   if (isSrcdoc) {
     aEntry->GetSrcdocData(srcdoc);
     aEntry->GetBaseURI(getter_AddRefs(baseURI));
     flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
   } else {
-    srcdoc = NullString();
+    srcdoc = VoidString();
   }
 
   if (!triggeringPrincipal) {
     triggeringPrincipal = nsContentUtils::GetSystemPrincipal();
   }
 
   // Passing nullptr as aSourceDocShell gives the same behaviour as before
   // aSourceDocShell was introduced. According to spec we should be passing
@@ -12879,17 +12879,17 @@ nsDocShell::LoadHistoryEntry(nsISHEntry*
                     loadReplace,
                     referrerURI,
                     referrerPolicy,
                     triggeringPrincipal,
                     principalToInherit,
                     flags,
                     EmptyString(),      // No window target
                     contentType.get(),  // Type hint
-                    NullString(),       // No forced file download
+                    VoidString(),       // No forced file download
                     postData,           // Post data stream
                     nullptr,            // No headers stream
                     aLoadType,          // Load type
                     aEntry,             // SHEntry
                     true,
                     srcdoc,
                     nullptr,            // Source docshell, see comment above
                     baseURI,
@@ -14449,17 +14449,17 @@ nsDocShell::OnLinkClickSync(nsIContent* 
                              target,                    // Window target
                              NS_LossyConvertUTF16toASCII(typeHint).get(),
                              aFileName,                 // Download as file
                              aPostDataStream,           // Post data stream
                              aHeadersDataStream,        // Headers stream
                              LOAD_LINK,                 // Load type
                              nullptr,                   // No SHEntry
                              true,                      // first party site
-                             NullString(),              // No srcdoc
+                             VoidString(),              // No srcdoc
                              this,                      // We are the source
                              nullptr,                   // baseURI not needed
                              true,                      // Check for prerendered doc
                              aDocShell,                 // DocShell out-param
                              aRequest);                 // Request out-param
   if (NS_SUCCEEDED(rv)) {
     DispatchPings(this, aContent, aURI, referer, refererPolicy);
   }
--- a/docshell/shistory/nsSHEntry.cpp
+++ b/docshell/shistory/nsSHEntry.cpp
@@ -471,17 +471,17 @@ nsSHEntry::Create(nsIURI* aURI, const ns
   // By default we save LayoutHistoryState
   mShared->mSaveLayoutState = true;
   mShared->mLayoutHistoryState = aLayoutHistoryState;
 
   // By default the page is not expired
   mShared->mExpired = false;
 
   mIsSrcdocEntry = false;
-  mSrcdocData = NullString();
+  mSrcdocData = VoidString();
 
   mLoadedInThisProcess = true;
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsSHEntry::Clone(nsISHEntry** aResult)
--- a/dom/base/CustomElementRegistry.cpp
+++ b/dom/base/CustomElementRegistry.cpp
@@ -588,16 +588,19 @@ CustomElementRegistry::Define(const nsAS
 
   AutoJSAPI jsapi;
   if (NS_WARN_IF(!jsapi.Init(mWindow))) {
     aRv.Throw(NS_ERROR_FAILURE);
     return;
   }
 
   JSContext *cx = jsapi.cx();
+  // Note: No calls that might run JS or trigger CC before this point, or
+  // there's a (vanishingly small) chance of our constructor being nulled
+  // before we access it.
   JS::Rooted<JSObject*> constructor(cx, aFunctionConstructor.CallableOrNull());
 
   /**
    * 1. If IsConstructor(constructor) is false, then throw a TypeError and abort
    *    these steps.
    */
   // For now, all wrappers are constructable if they are callable. So we need to
   // unwrap constructor to check it is really constructable.
@@ -873,17 +876,17 @@ CustomElementRegistry::Get(JSContext* aC
   nsCOMPtr<nsIAtom> nameAtom(NS_Atomize(aName));
   CustomElementDefinition* data = mCustomDefinitions.Get(nameAtom);
 
   if (!data) {
     aRetVal.setUndefined();
     return;
   }
 
-  aRetVal.setObjectOrNull(data->mConstructor->CallableOrNull());
+  aRetVal.setObject(*data->mConstructor->Callback(aCx));
 }
 
 already_AddRefed<Promise>
 CustomElementRegistry::WhenDefined(const nsAString& aName, ErrorResult& aRv)
 {
   nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(mWindow);
   RefPtr<Promise> promise = Promise::Create(global, aRv);
 
@@ -965,19 +968,19 @@ CustomElementRegistry::Upgrade(Element* 
         int32_t namespaceID = name->NamespaceID();
         nsAutoString attrValue, namespaceURI;
         info.mValue->ToString(attrValue);
         nsContentUtils::NameSpaceManager()->GetNameSpaceURI(namespaceID,
                                                             namespaceURI);
 
         LifecycleCallbackArgs args = {
           nsDependentAtomString(attrName),
-          NullString(),
-          (attrValue.IsEmpty() ? NullString() : attrValue),
-          (namespaceURI.IsEmpty() ? NullString() : namespaceURI)
+          VoidString(),
+          (attrValue.IsEmpty() ? VoidString() : attrValue),
+          (namespaceURI.IsEmpty() ? VoidString() : namespaceURI)
         };
         EnqueueLifecycleCallback(nsIDocument::eAttributeChanged, aElement,
                                  &args, aDefinition);
       }
     }
   }
 
   // Step 4.
--- a/dom/base/DOMImplementation.cpp
+++ b/dom/base/DOMImplementation.cpp
@@ -65,17 +65,17 @@ DOMImplementation::CreateDocumentType(co
   if (!name) {
     aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
     return nullptr;
   }
 
   // Indicate that there is no internal subset (not just an empty one)
   RefPtr<DocumentType> docType =
     NS_NewDOMDocumentType(mOwner->NodeInfoManager(), name, aPublicId,
-                          aSystemId, NullString(), aRv);
+                          aSystemId, VoidString(), aRv);
   return docType.forget();
 }
 
 NS_IMETHODIMP
 DOMImplementation::CreateDocumentType(const nsAString& aQualifiedName,
                                       const nsAString& aPublicId,
                                       const nsAString& aSystemId,
                                       nsIDOMDocumentType** aReturn)
@@ -183,17 +183,17 @@ DOMImplementation::CreateHTMLDocument(co
 
   nsCOMPtr<nsIDOMDocumentType> doctype;
   // Indicate that there is no internal subset (not just an empty one)
   nsresult rv = NS_NewDOMDocumentType(getter_AddRefs(doctype),
                                       mOwner->NodeInfoManager(),
                                       nsGkAtoms::html, // aName
                                       EmptyString(), // aPublicId
                                       EmptyString(), // aSystemId
-                                      NullString()); // aInternalSubset
+                                      VoidString()); // aInternalSubset
   NS_ENSURE_SUCCESS(rv, rv);
 
 
   nsCOMPtr<nsIGlobalObject> scriptHandlingObject =
     do_QueryReferent(mScriptObject);
 
   NS_ENSURE_STATE(!mScriptObject || scriptHandlingObject);
 
@@ -244,18 +244,17 @@ DOMImplementation::CreateHTMLDocument(co
 }
 
 already_AddRefed<nsIDocument>
 DOMImplementation::CreateHTMLDocument(const Optional<nsAString>& aTitle,
                                       ErrorResult& aRv)
 {
   nsCOMPtr<nsIDocument> document;
   nsCOMPtr<nsIDOMDocument> domDocument;
-  aRv = CreateHTMLDocument(aTitle.WasPassed() ? aTitle.Value()
-                                              : NullString(),
+  aRv = CreateHTMLDocument(aTitle.WasPassed() ? aTitle.Value() : VoidString(),
                            getter_AddRefs(document),
                            getter_AddRefs(domDocument));
   return document.forget();
 }
 
 NS_IMETHODIMP
 DOMImplementation::CreateHTMLDocument(const nsAString& aTitle,
                                       nsIDOMDocument** aReturn)
--- a/dom/base/DOMIntersectionObserver.cpp
+++ b/dom/base/DOMIntersectionObserver.cpp
@@ -303,17 +303,21 @@ DOMIntersectionObserver::Update(nsIDocum
           if (rootScrollFrame) {
             rootFrame = rootScrollFrame;
           } else {
             break;
           }
         }
         root = rootFrame->GetContent()->AsElement();
         nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame);
-        rootRect = scrollFrame->GetScrollPortRect();
+        // If we end up with a null root frame for some reason, we'll proceed
+        // with an empty root intersection rect.
+        if (scrollFrame) {
+          rootRect = scrollFrame->GetScrollPortRect();
+        }
       }
     }
   }
 
   nsMargin rootMargin;
   NS_FOR_CSS_SIDES(side) {
     nscoord basis = side == eSideTop || side == eSideBottom ?
       rootRect.Height() : rootRect.Width();
--- a/dom/base/Element.cpp
+++ b/dom/base/Element.cpp
@@ -2637,19 +2637,19 @@ Element::SetAttrAndNotify(int32_t aNames
         }
         nsCOMPtr<nsIAtom> newValueAtom = valueForAfterSetAttr.GetAsAtom();
         nsAutoString ns;
         nsContentUtils::NameSpaceManager()->GetNameSpaceURI(aNamespaceID, ns);
 
         LifecycleCallbackArgs args = {
           nsDependentAtomString(aName),
           aModType == nsIDOMMutationEvent::ADDITION ?
-            NullString() : nsDependentAtomString(oldValueAtom),
+            VoidString() : nsDependentAtomString(oldValueAtom),
           nsDependentAtomString(newValueAtom),
-          (ns.IsEmpty() ? NullString() : ns)
+          (ns.IsEmpty() ? VoidString() : ns)
         };
 
         nsContentUtils::EnqueueLifecycleCallback(
           OwnerDoc(), nsIDocument::eAttributeChanged, this, &args, definition);
       }
     }
   }
 
@@ -2933,18 +2933,18 @@ Element::UnsetAttr(int32_t aNameSpaceID,
                                                                 aName)) {
         nsAutoString ns;
         nsContentUtils::NameSpaceManager()->GetNameSpaceURI(aNameSpaceID, ns);
 
         nsCOMPtr<nsIAtom> oldValueAtom = oldValue.GetAsAtom();
         LifecycleCallbackArgs args = {
           nsDependentAtomString(aName),
           nsDependentAtomString(oldValueAtom),
-          NullString(),
-          (ns.IsEmpty() ? NullString() : ns)
+          VoidString(),
+          (ns.IsEmpty() ? VoidString() : ns)
         };
 
         nsContentUtils::EnqueueLifecycleCallback(
           OwnerDoc(), nsIDocument::eAttributeChanged, this, &args, definition);
       }
     }
   }
 
--- a/dom/base/nsDOMMutationObserver.h
+++ b/dom/base/nsDOMMutationObserver.h
@@ -34,17 +34,17 @@ class nsDOMMutationRecord final : public
                                   public nsWrapperCache
 {
   virtual ~nsDOMMutationRecord() {}
 
 public:
   typedef nsTArray<RefPtr<mozilla::dom::Animation>> AnimationArray;
 
   nsDOMMutationRecord(nsIAtom* aType, nsISupports* aOwner)
-  : mType(aType), mAttrNamespace(NullString()), mPrevValue(NullString()), mOwner(aOwner)
+  : mType(aType), mAttrNamespace(VoidString()), mPrevValue(VoidString()), mOwner(aOwner)
   {
   }
 
   nsISupports* GetParentObject() const
   {
     return mOwner;
   }
 
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -3579,17 +3579,17 @@ nsresult
 nsIDocument::GetSrcdocData(nsAString &aSrcdocData)
 {
   if (mIsSrcdocDocument) {
     nsCOMPtr<nsIInputStreamChannel> inStrmChan = do_QueryInterface(mChannel);
     if (inStrmChan) {
       return inStrmChan->GetSrcdocData(aSrcdocData);
     }
   }
-  aSrcdocData = NullString();
+  aSrcdocData = VoidString();
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDocument::GetActiveElement(nsIDOMElement **aElement)
 {
   nsCOMPtr<nsIDOMElement> el(do_QueryInterface(nsIDocument::GetActiveElement()));
   el.forget(aElement);
@@ -6544,16 +6544,19 @@ nsDocument::RegisterElement(JSContext* a
     // Only convert NAME to lowercase in HTML documents.
     nsAutoString lcName;
     IsHTMLDocument() ? nsContentUtils::ASCIIToLower(aOptions.mExtends, lcName)
                      : lcName.Assign(aOptions.mExtends);
 
     options.mExtends.Construct(lcName);
   }
 
+  // Note: No calls that might run JS or trigger CC after this, or there's a
+  // (vanishingly small) risk of our constructor being nulled before Define()
+  // can access it.
   RefPtr<Function> functionConstructor =
     new Function(aCx, wrappedConstructor, sgo);
 
   registry->Define(lcType, *functionConstructor, options, rv);
 
   aRetval.set(wrappedConstructor);
 }
 
@@ -9788,17 +9791,17 @@ nsDocument::PreloadPictureImageSource(co
 {
   // Nested pictures are not valid syntax, so while we'll eventually load them,
   // it's not worth tracking sources mixed between nesting levels to preload
   // them effectively.
   if (mPreloadPictureDepth == 1 && mPreloadPictureFoundSource.IsVoid()) {
     // <picture> selects the first matching source, so if this returns a URI we
     // needn't consider new sources until a new <picture> is encountered.
     bool found =
-      HTMLImageElement::SelectSourceForTagWithAttrs(this, true, NullString(),
+      HTMLImageElement::SelectSourceForTagWithAttrs(this, true, VoidString(),
                                                     aSrcsetAttr, aSizesAttr,
                                                     aTypeAttr, aMediaAttr,
                                                     mPreloadPictureFoundSource);
     if (found && mPreloadPictureFoundSource.IsVoid()) {
       // Found an empty source, which counts
       mPreloadPictureFoundSource.SetIsVoid(false);
     }
   }
@@ -9817,17 +9820,17 @@ nsDocument::ResolvePreloadImage(nsIURI *
     // We're in a <picture> element and found a URI from a source previous to
     // this image, use it.
     sourceURL = mPreloadPictureFoundSource;
     isImgSet = true;
   } else {
     // Otherwise try to use this <img> as a source
     HTMLImageElement::SelectSourceForTagWithAttrs(this, false, aSrcAttr,
                                                   aSrcsetAttr, aSizesAttr,
-                                                  NullString(), NullString(),
+                                                  VoidString(), VoidString(),
                                                   sourceURL);
     isImgSet = !aSrcsetAttr.IsEmpty();
   }
 
   // Empty sources are not loaded by <img> (i.e. not resolved to the baseURI)
   if (sourceURL.IsEmpty()) {
     return nullptr;
   }
@@ -10915,21 +10918,22 @@ nsIDocument::ObsoleteSheet(const nsAStri
 }
 
 class UnblockParsingPromiseHandler final : public PromiseNativeHandler
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS(UnblockParsingPromiseHandler)
 
-  explicit UnblockParsingPromiseHandler(nsIDocument* aDocument, Promise* aPromise)
+  explicit UnblockParsingPromiseHandler(nsIDocument* aDocument, Promise* aPromise,
+                                        const BlockParsingOptions& aOptions)
     : mPromise(aPromise)
   {
     nsCOMPtr<nsIParser> parser = aDocument->CreatorParserOrNull();
-    if (parser) {
+    if (parser && (aOptions.mBlockScriptCreated || !parser->IsScriptCreated())) {
       parser->BlockParser();
       mParser = do_GetWeakReference(parser);
       mDocument = aDocument;
     }
   }
 
   void
   ResolvedCallback(JSContext* aCx, JS::Handle<JS::Value> aValue) override
@@ -10982,24 +10986,25 @@ NS_IMPL_CYCLE_COLLECTION(UnblockParsingP
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(UnblockParsingPromiseHandler)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(UnblockParsingPromiseHandler)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(UnblockParsingPromiseHandler)
 
 already_AddRefed<Promise>
-nsIDocument::BlockParsing(Promise& aPromise, ErrorResult& aRv)
+nsIDocument::BlockParsing(Promise& aPromise, const BlockParsingOptions& aOptions, ErrorResult& aRv)
 {
   RefPtr<Promise> resultPromise = Promise::Create(aPromise.GetParentObject(), aRv);
   if (aRv.Failed()) {
     return nullptr;
   }
 
-  RefPtr<PromiseNativeHandler> promiseHandler = new UnblockParsingPromiseHandler(this, resultPromise);
+  RefPtr<PromiseNativeHandler> promiseHandler = new UnblockParsingPromiseHandler(this, resultPromise,
+                                                                                 aOptions);
   aPromise.AppendNativeHandler(promiseHandler);
 
   return resultPromise.forget();
 }
 
 already_AddRefed<nsIURI>
 nsIDocument::GetMozDocumentURIIfNotForErrorPages()
 {
@@ -12794,17 +12799,17 @@ nsIDocument::Constructor(const GlobalObj
   if (!uri) {
     rv.Throw(NS_ERROR_OUT_OF_MEMORY);
     return nullptr;
   }
 
   nsCOMPtr<nsIDOMDocument> document;
   nsresult res =
     NS_NewDOMDocument(getter_AddRefs(document),
-                      NullString(),
+                      VoidString(),
                       EmptyString(),
                       nullptr,
                       uri,
                       uri,
                       prin->GetPrincipal(),
                       true,
                       global,
                       DocumentFlavorPlain,
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -2947,16 +2947,17 @@ public:
     return mStyleSheetChangeEventsEnabled;
   }
 
   void ObsoleteSheet(nsIURI *aSheetURI, mozilla::ErrorResult& rv);
 
   void ObsoleteSheet(const nsAString& aSheetURI, mozilla::ErrorResult& rv);
 
   already_AddRefed<mozilla::dom::Promise> BlockParsing(mozilla::dom::Promise& aPromise,
+                                                       const mozilla::dom::BlockParsingOptions& aOptions,
                                                        mozilla::ErrorResult& aRv);
 
   already_AddRefed<nsIURI> GetMozDocumentURIIfNotForErrorPages();
 
   // ParentNode
   nsIHTMLCollection* Children();
   uint32_t ChildElementCount();
 
--- a/dom/bindings/BindingUtils.h
+++ b/dom/bindings/BindingUtils.h
@@ -1913,47 +1913,47 @@ GetOrCreateDOMReflectorNoWrap(JSContext*
                               JS::MutableHandle<JS::Value> rval)
 {
   return
     GetOrCreateDOMReflectorNoWrapHelper<T>::GetOrCreate(cx, value, rval);
 }
 
 template <class T>
 inline JSObject*
-GetCallbackFromCallbackObject(T* aObj)
+GetCallbackFromCallbackObject(JSContext* aCx, T* aObj)
 {
-  return aObj->CallbackOrNull();
+  return aObj->Callback(aCx);
 }
 
 // Helper for getting the callback JSObject* of a smart ptr around a
 // CallbackObject or a reference to a CallbackObject or something like
 // that.
 template <class T, bool isSmartPtr=IsSmartPtr<T>::value>
 struct GetCallbackFromCallbackObjectHelper
 {
-  static inline JSObject* Get(const T& aObj)
+  static inline JSObject* Get(JSContext* aCx, const T& aObj)
   {
-    return GetCallbackFromCallbackObject(aObj.get());
+    return GetCallbackFromCallbackObject(aCx, aObj.get());
   }
 };
 
 template <class T>
 struct GetCallbackFromCallbackObjectHelper<T, false>
 {
-  static inline JSObject* Get(T& aObj)
+  static inline JSObject* Get(JSContext* aCx, T& aObj)
   {
-    return GetCallbackFromCallbackObject(&aObj);
+    return GetCallbackFromCallbackObject(aCx, &aObj);
   }
 };
 
 template<class T>
 inline JSObject*
-GetCallbackFromCallbackObject(T& aObj)
+GetCallbackFromCallbackObject(JSContext* aCx, T& aObj)
 {
-  return GetCallbackFromCallbackObjectHelper<T>::Get(aObj);
+  return GetCallbackFromCallbackObjectHelper<T>::Get(aCx, aObj);
 }
 
 static inline bool
 AtomizeAndPinJSString(JSContext* cx, jsid& id, const char* chars)
 {
   if (JSString *str = ::JS_AtomizeAndPinString(cx, chars)) {
     id = INTERNED_STRING_TO_JSID(cx, str);
     return true;
--- a/dom/bindings/CallbackObject.cpp
+++ b/dom/bindings/CallbackObject.cpp
@@ -110,16 +110,28 @@ CallbackObject::FinishSlowJSInitIfMoreTh
       mIncumbentJSGlobal = mIncumbentGlobal->GetGlobalJSObject();
     }
   } else {
     // We can just forget all our stuff.
     ClearJSReferences();
   }
 }
 
+JSObject*
+CallbackObject::Callback(JSContext* aCx)
+{
+  JSObject* callback = CallbackOrNull();
+  if (!callback) {
+    callback = JS_NewDeadWrapper(aCx);
+  }
+
+  MOZ_DIAGNOSTIC_ASSERT(callback);
+  return callback;
+}
+
 CallbackObject::CallSetup::CallSetup(CallbackObject* aCallback,
                                      ErrorResult& aRv,
                                      const char* aExecutionReason,
                                      ExceptionHandling aExceptionHandling,
                                      JSCompartment* aCompartment,
                                      bool aIsJSImplementedWebIDL)
   : mCx(nullptr)
   , mCompartment(aCompartment)
--- a/dom/bindings/CallbackObject.h
+++ b/dom/bindings/CallbackObject.h
@@ -88,16 +88,20 @@ public:
   // argument can safely rely on the callback being non-null so long as it
   // doesn't trigger any scripts before it accesses it.
   JS::Handle<JSObject*> CallbackOrNull() const
   {
     mCallback.exposeToActiveJS();
     return CallbackPreserveColor();
   }
 
+  // Like CallbackOrNull(), but will return a new dead proxy object in the
+  // caller's compartment if the callback is null.
+  JSObject* Callback(JSContext* aCx);
+
   JSObject* GetCreationStack() const
   {
     return mCreationStack;
   }
 
   void MarkForCC()
   {
     mCallback.exposeToActiveJS();
@@ -589,22 +593,27 @@ public:
 
   // But nullptr can't use the above template, because it doesn't know which S
   // to select.  So we need a special overload for nullptr.
   void operator=(decltype(nullptr) arg)
   {
     this->get().operator=(arg);
   }
 
-  // Codegen relies on being able to do CallbackOrNull() on us.
+  // Codegen relies on being able to do CallbackOrNull() and Callback() on us.
   JS::Handle<JSObject*> CallbackOrNull() const
   {
     return this->get()->CallbackOrNull();
   }
 
+  JSObject* Callback(JSContext* aCx) const
+  {
+    return this->get()->Callback(aCx);
+  }
+
   ~RootedCallback()
   {
     // Ensure that our callback starts holding on to its own JS objects as
     // needed.  We really do need to check that things are initialized even when
     // T is OwningNonNull, because we might be running before the OwningNonNull
     // ever got assigned to!
     if (IsInitialized(this->get())) {
       this->get()->FinishSlowJSInitIfMoreThanOneOwner(mCx);
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -6907,17 +6907,17 @@ def getWrapTemplateForType(type, descrip
                 CGGeneric(setNull()),
                 CGGeneric(conversion)).define()
         return conversion, False
 
     if type.isCallback() or type.isCallbackInterface():
         # Callbacks can store null if we nuked the compartments their
         # objects lived in.
         wrapCode = setObjectOrNull(
-            "GetCallbackFromCallbackObject(%(result)s)",
+            "GetCallbackFromCallbackObject(cx, %(result)s)",
             wrapAsType=type)
         if type.nullable():
             wrapCode = (
                 "if (%(result)s) {\n" +
                 indent(wrapCode) +
                 "} else {\n" +
                 indent(setNull()) +
                 "}\n")
--- a/dom/bindings/ToJSValue.h
+++ b/dom/bindings/ToJSValue.h
@@ -127,17 +127,17 @@ ToJSValue(JSContext* aCx,
 MOZ_MUST_USE inline bool
 ToJSValue(JSContext* aCx,
           CallbackObject& aArgument,
           JS::MutableHandle<JS::Value> aValue)
 {
   // Make sure we're called in a compartment
   MOZ_ASSERT(JS::CurrentGlobalOrNull(aCx));
 
-  aValue.setObjectOrNull(aArgument.CallbackOrNull());
+  aValue.setObjectOrNull(aArgument.Callback(aCx));
 
   return MaybeWrapValue(aCx, aValue);
 }
 
 // Accept objects that inherit from nsWrapperCache (e.g. most
 // DOM objects).
 template <class T>
 MOZ_MUST_USE
--- a/dom/console/Console.cpp
+++ b/dom/console/Console.cpp
@@ -1839,17 +1839,17 @@ Console::ProcessArguments(JSContext* aCx
           JS::Rooted<JSString*> jsString(aCx, JS::ToString(aCx, v));
           if (NS_WARN_IF(!jsString)) {
             return false;
           }
 
           int32_t diff = aSequence.Length() - aStyles.Length();
           if (diff > 0) {
             for (int32_t i = 0; i < diff; i++) {
-              if (NS_WARN_IF(!aStyles.AppendElement(NullString(), fallible))) {
+              if (NS_WARN_IF(!aStyles.AppendElement(VoidString(), fallible))) {
                 return false;
               }
             }
           }
 
           nsAutoJSString string;
           if (NS_WARN_IF(!string.init(aCx, jsString))) {
             return false;
--- a/dom/events/DOMEventTargetHelper.cpp
+++ b/dom/events/DOMEventTargetHelper.cpp
@@ -319,17 +319,17 @@ DOMEventTargetHelper::SetEventHandler(ns
 
 void
 DOMEventTargetHelper::GetEventHandler(nsIAtom* aType,
                                       JSContext* aCx,
                                       JS::Value* aValue)
 {
   EventHandlerNonNull* handler = GetEventHandler(aType, EmptyString());
   if (handler) {
-    *aValue = JS::ObjectOrNullValue(handler->CallableOrNull());
+    *aValue = JS::ObjectValue(*handler->Callback(aCx));
   } else {
     *aValue = JS::NullValue();
   }
 }
 
 nsresult
 DOMEventTargetHelper::GetEventTargetParent(EventChainPreVisitor& aVisitor)
 {
--- a/dom/events/test/test_bug574663.html
+++ b/dom/events/test/test_bug574663.html
@@ -100,22 +100,30 @@ function runTest() {
   var win = open('bug574663.html', '_blank', 'width=300,height=300');
   let winUtils = SpecialPowers.getDOMWindowUtils(win);
 
   let waitUntilPainted = function(callback) {
     // Until the first non-blank paint, the parent will set the opacity of our
     // browser to 0 using the 'blank' attribute.
     // Until the blank attribute is removed, we can't send scroll events.
     SimpleTest.waitForFocus(function() {
-      SpecialPowers.loadChromeScript(_ => {
+      let chromeScript = SpecialPowers.loadChromeScript(_ => {
         Components.utils.import("resource://gre/modules/Services.jsm");
-        Services.wm.getMostRecentWindow("navigator:browser")
-                .gBrowser.selectedBrowser.removeAttribute("blank");
+        let win = Services.wm.getMostRecentWindow("navigator:browser");
+        win.requestAnimationFrame(() => {
+          win.gBrowser.selectedBrowser.removeAttribute("blank");
+          win.requestAnimationFrame(() => {
+            sendAsyncMessage("blank-attribute-removed");
+          });
+        });
       });
-      waitForPaint(win, winUtils, callback);
+      chromeScript.promiseOneMessage("blank-attribute-removed").then(() => {
+        chromeScript.destroy();
+        waitForPaint(win, winUtils, callback);
+      });
     }, win);
   };
 
   waitUntilPainted(function () {
     var scrollbox = win.document.getElementById("scrollbox");
     let outstandingTests = [
       [false, false],
       [false, true],
--- a/dom/events/test/window_wheel_default_action.html
+++ b/dom/events/test/window_wheel_default_action.html
@@ -47,22 +47,30 @@
 </div>
 <pre id="test">
 <script type="application/javascript">
 
 // Until the first non-blank paint, the parent will set the opacity of our
 // browser to 0 using the 'blank' attribute.
 // Until the blank attribute is removed, we can't send scroll events.
 SimpleTest.waitForFocus(function() {
-  SpecialPowers.loadChromeScript(_ => {
+  let chromeScript = SpecialPowers.loadChromeScript(_ => {
     Components.utils.import("resource://gre/modules/Services.jsm");
-    Services.wm.getMostRecentWindow("navigator:browser")
-            .gBrowser.selectedBrowser.removeAttribute("blank");
+    let win = Services.wm.getMostRecentWindow("navigator:browser");
+    win.requestAnimationFrame(() => {
+      win.gBrowser.selectedBrowser.removeAttribute("blank");
+      win.requestAnimationFrame(() => {
+        sendAsyncMessage("blank-attribute-removed");
+      });
+    });
   });
-  runTests();
+  chromeScript.promiseOneMessage("blank-attribute-removed").then(() => {
+    chromeScript.destroy();
+    runTests();
+  });
 }, window);
 
 SimpleTest.requestFlakyTimeout("untriaged");
 
 var winUtils = SpecialPowers.getDOMWindowUtils(window);
 // grab refresh driver
 winUtils.advanceTimeAndRefresh(100);
 
--- a/dom/file/ipc/PendingIPCBlobChild.cpp
+++ b/dom/file/ipc/PendingIPCBlobChild.cpp
@@ -38,17 +38,17 @@ PendingIPCBlobChild::SetPendingInfoAndDe
 
 already_AddRefed<BlobImpl>
 PendingIPCBlobChild::SetPendingInfoAndDeleteActor(const nsString& aContentType,
                                                   uint64_t aLength)
 {
   RefPtr<BlobImpl> blobImpl;
   blobImpl.swap(mBlobImpl);
 
-  blobImpl->SetLazyData(NullString(), aContentType, aLength, INT64_MAX);
+  blobImpl->SetLazyData(VoidString(), aContentType, aLength, INT64_MAX);
 
   PendingIPCBlobData data(nsString(aContentType), aLength, void_t());
   Unused << Send__delete__(this, data);
 
   return blobImpl.forget();
 }
 
 } // namespace dom
--- a/dom/file/ipc/PendingIPCBlobParent.cpp
+++ b/dom/file/ipc/PendingIPCBlobParent.cpp
@@ -39,17 +39,17 @@ PendingIPCBlobParent::Create(PBackground
 PendingIPCBlobParent::PendingIPCBlobParent(BlobImpl* aBlobImpl)
   : mBlobImpl(aBlobImpl)
 {}
 
 IPCResult
 PendingIPCBlobParent::Recv__delete__(const PendingIPCBlobData& aData)
 {
   if (aData.file().type() == PendingIPCFileUnion::Tvoid_t) {
-    mBlobImpl->SetLazyData(NullString(), aData.type(), aData.size(), INT64_MAX);
+    mBlobImpl->SetLazyData(VoidString(), aData.type(), aData.size(), INT64_MAX);
   } else {
     const PendingIPCFileData& fileData =
       aData.file().get_PendingIPCFileData();
     mBlobImpl->SetLazyData(fileData.name(), aData.type(), aData.size(),
                            fileData.lastModified());
   }
 
   return IPC_OK();
--- a/dom/html/HTMLFormElement.cpp
+++ b/dom/html/HTMLFormElement.cpp
@@ -797,17 +797,17 @@ HTMLFormElement::SubmitSubmission(HTMLFo
 
     nsCOMPtr<nsIInputStream> postDataStream;
     rv = aFormSubmission->GetEncodedSubmission(actionURI,
                                                getter_AddRefs(postDataStream));
     NS_ENSURE_SUBMIT_SUCCESS(rv);
 
     rv = linkHandler->OnLinkClickSync(this, actionURI,
                                       target.get(),
-                                      NullString(),
+                                      VoidString(),
                                       postDataStream, nullptr, false,
                                       getter_AddRefs(docShell),
                                       getter_AddRefs(mSubmittingRequest));
     NS_ENSURE_SUBMIT_SUCCESS(rv);
   }
 
   // Even if the submit succeeds, it's possible for there to be no docshell
   // or request; for example, if it's to a named anchor within the same page
--- a/dom/html/HTMLImageElement.cpp
+++ b/dom/html/HTMLImageElement.cpp
@@ -348,17 +348,17 @@ HTMLImageElement::AfterSetAttr(int32_t a
     // initaiated by a user interaction.
     mUseUrgentStartForChannel = EventStateManager::IsHandlingUserInput();
 
     // SetAttr handles setting src since it needs to catch img.src =
     // img.src, so we only need to handle the unset case
     if (InResponsiveMode()) {
       if (mResponsiveSelector &&
           mResponsiveSelector->Content() == this) {
-        mResponsiveSelector->SetDefaultSource(NullString());
+        mResponsiveSelector->SetDefaultSource(VoidString());
       }
       QueueImageLoadTask(true);
     } else {
       // Bug 1076583 - We still behave synchronously in the non-responsive case
       CancelImageRequests(aNotify);
     }
   } else if (aName == nsGkAtoms::srcset &&
              aNameSpaceID == kNameSpaceID_None) {
--- a/dom/html/test/forms/mochitest.ini
+++ b/dom/html/test/forms/mochitest.ini
@@ -73,16 +73,17 @@ skip-if = os == "android"
 [test_input_sanitization.html]
 [test_input_textarea_set_value_no_scroll.html]
 [test_input_time_key_events.html]
 skip-if = os == "android"
 [test_input_time_sec_millisec_field.html]
 skip-if = os == "android"
 [test_input_types_pref.html]
 [test_input_typing_sanitization.html]
+skip-if = os == "android" && debug # bug 1397615
 [test_input_untrusted_key_events.html]
 [test_input_url.html]
 [test_interactive_content_in_label.html]
 [test_label_control_attribute.html]
 [test_label_input_controls.html]
 [test_max_attribute.html]
 [test_maxlength_attribute.html]
 [test_minlength_attribute.html]
--- a/dom/indexedDB/ActorsParent.cpp
+++ b/dom/indexedDB/ActorsParent.cpp
@@ -17373,17 +17373,17 @@ FileManager::InitDirectory(nsIFile* aDir
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
 
     if (hasElements) {
       nsCOMPtr<mozIStorageConnection> connection;
       rv = CreateStorageConnection(aDatabaseFile,
                                    aDirectory,
-                                   NullString(),
+                                   VoidString(),
                                    aPersistenceType,
                                    aGroup,
                                    aOrigin,
                                    aTelemetryId,
                                    getter_AddRefs(connection));
       if (NS_WARN_IF(NS_FAILED(rv))) {
         return rv;
       }
--- a/dom/indexedDB/IDBFileHandle.h
+++ b/dom/indexedDB/IDBFileHandle.h
@@ -198,17 +198,17 @@ public:
 
   already_AddRefed<IDBFileRequest>
   GetMetadata(const IDBFileMetadataParameters& aParameters, ErrorResult& aRv);
 
   already_AddRefed<IDBFileRequest>
   ReadAsArrayBuffer(uint64_t aSize, ErrorResult& aRv)
   {
     AssertIsOnOwningThread();
-    return Read(aSize, false, NullString(), aRv);
+    return Read(aSize, false, VoidString(), aRv);
   }
 
   already_AddRefed<IDBFileRequest>
   ReadAsText(uint64_t aSize, const nsAString& aEncoding, ErrorResult& aRv)
   {
     AssertIsOnOwningThread();
     return Read(aSize, true, aEncoding, aRv);
   }
--- a/dom/indexedDB/IDBObjectStore.cpp
+++ b/dom/indexedDB/IDBObjectStore.cpp
@@ -920,17 +920,17 @@ public:
 
       parent = do_QueryObject(globalScope);
     }
 
     MOZ_ASSERT(parent);
 
     if (aData.tag == SCTAG_DOM_BLOB) {
       aFile.mBlob->Impl()->SetLazyData(
-        NullString(), aData.type, aData.size, INT64_MAX);
+        VoidString(), aData.type, aData.size, INT64_MAX);
       MOZ_ASSERT(!aFile.mBlob->IsFile());
 
       // ActorsParent sends here a kind of half blob and half file wrapped into
       // a DOM File object. DOM File and DOM Blob are a WebIDL wrapper around a
       // BlobImpl object. SetLazyData() has just changed the BlobImpl to be a
       // Blob (see the previous assert), but 'aFile.mBlob' still has the WebIDL
       // DOM File wrapping.
       // Before exposing it to content, we must recreate a DOM Blob object.
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -763,17 +763,17 @@ private:
    * generated by the chrome process.
    */
   uint32_t mMsaaID;
 #endif
 
   AppInfo mAppInfo;
 
   bool mIsForBrowser;
-  nsString mRemoteType = NullString();
+  nsString mRemoteType = VoidString();
   bool mIsAlive;
   nsString mProcessName;
 
   static ContentChild* sSingleton;
 
   class ShutdownCanary;
   static StaticAutoPtr<ShutdownCanary> sShutdownCanary;
 
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -4691,17 +4691,17 @@ ContentParent::RecvCreateWindow(PBrowser
   const uint64_t nextTabParentId = ++sNextTabParentId;
   sNextTabParents.Put(nextTabParentId, newTab);
 
   nsCOMPtr<nsITabParent> newRemoteTab;
   mozilla::ipc::IPCResult ipcResult =
     CommonCreateWindow(aThisTab, /* aSetOpener = */ true, aChromeFlags,
                        aCalledFromJS, aPositionSpecified, aSizeSpecified,
                        nullptr, aFeatures, aBaseURI, aFullZoom,
-                       nextTabParentId, NullString(), rv,
+                       nextTabParentId, VoidString(), rv,
                        newRemoteTab, &cwi.windowOpened(),
                        aTriggeringPrincipal);
   if (!ipcResult) {
     return ipcResult;
   }
 
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return IPC_OK();
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -1594,18 +1594,18 @@ TabChild::MaybeDispatchCoalescedMouseMov
   if (!mCoalesceMouseMoveEvents || mCoalescedMouseData.IsEmpty()) {
     return;
   }
   const WidgetMouseEvent* event = mCoalescedMouseData.GetCoalescedEvent();
   MOZ_ASSERT(event);
   // Dispatch the coalesced mousemove event. Using RecvRealMouseButtonEvent to
   // bypass the coalesce handling in RecvRealMouseMoveEvent.
   RecvRealMouseButtonEvent(*event,
-                           mCoalescedWheelData.GetScrollableLayerGuid(),
-                           mCoalescedWheelData.GetInputBlockId());
+                           mCoalescedMouseData.GetScrollableLayerGuid(),
+                           mCoalescedMouseData.GetInputBlockId());
   if (mCoalescedMouseEventFlusher) {
     mCoalescedMouseData.Reset();
     mCoalescedMouseEventFlusher->RemoveObserver();
   }
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvRealMouseMoveEvent(const WidgetMouseEvent& aEvent,
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -421,17 +421,17 @@ public:
       mgr->GetWindowListener(mWindowID);
 
     if (!windowListener) {
       nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
       auto* globalWindow = nsGlobalWindow::GetInnerWindowWithId(mWindowID);
       if (globalWindow) {
         RefPtr<GetUserMediaRequest> req =
           new GetUserMediaRequest(globalWindow->AsInner(),
-                                  NullString(), NullString());
+                                  VoidString(), VoidString());
         obs->NotifyObservers(req, "recording-device-stopped", nullptr);
       }
       return;
     }
 
     MOZ_ASSERT(windowListener == this,
                "There should only be one window listener per window ID");
 
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -486,17 +486,17 @@ NS_IMETHODIMP nsPluginInstanceOwner::Get
   // bypass ContentPolicy checks which should still be enforced.
   nsCOMPtr<nsIPrincipal> triggeringPrincipal;
   if (!aDoCheckLoadURIChecks) {
     mozilla::OriginAttributes attrs =
       BasePrincipal::Cast(content->NodePrincipal())->OriginAttributesRef();
     triggeringPrincipal = BasePrincipal::CreateCodebasePrincipal(uri, attrs);
   }
 
-  rv = lh->OnLinkClick(content, uri, unitarget.get(), NullString(),
+  rv = lh->OnLinkClick(content, uri, unitarget.get(), VoidString(),
                        aPostStream, headersDataStream, true, triggeringPrincipal);
 
   return rv;
 }
 
 NS_IMETHODIMP nsPluginInstanceOwner::GetDocument(nsIDocument* *aDocument)
 {
   nsCOMPtr<nsIContent> content = do_QueryReferent(mContent);
--- a/dom/plugins/ipc/PluginMessageUtils.h
+++ b/dom/plugins/ipc/PluginMessageUtils.h
@@ -302,17 +302,17 @@ inline bool IsDrawingModelDirect(int16_t
 }
 
 // in NPAPI, char* == nullptr is sometimes meaningful.  the following is
 // helper code for dealing with nullable nsCString's
 inline nsCString
 NullableString(const char* aString)
 {
     if (!aString) {
-        return NullCString();
+        return VoidCString();
     }
     return nsCString(aString);
 }
 
 inline const char*
 NullableStringGet(const nsCString& str)
 {
   if (str.IsVoid())
--- a/dom/presentation/PresentationRequest.cpp
+++ b/dom/presentation/PresentationRequest.cpp
@@ -135,17 +135,17 @@ PresentationRequest::WrapObject(JSContex
                                 JS::Handle<JSObject*> aGivenProto)
 {
   return PresentationRequestBinding::Wrap(aCx, this, aGivenProto);
 }
 
 already_AddRefed<Promise>
 PresentationRequest::Start(ErrorResult& aRv)
 {
-  return StartWithDevice(NullString(), aRv);
+  return StartWithDevice(VoidString(), aRv);
 }
 
 already_AddRefed<Promise>
 PresentationRequest::StartWithDevice(const nsAString& aDeviceId,
                                      ErrorResult& aRv)
 {
   nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetOwner());
   if (NS_WARN_IF(!global)) {
--- a/dom/quota/ActorsParent.cpp
+++ b/dom/quota/ActorsParent.cpp
@@ -5838,17 +5838,17 @@ QuotaManager::ShutdownTimerCallback(nsIT
   auto quotaManager = static_cast<QuotaManager*>(aClosure);
   MOZ_ASSERT(quotaManager);
 
   NS_WARNING("Some storage operations are taking longer than expected "
              "during shutdown and will be aborted!");
 
   // Abort all operations.
   for (RefPtr<Client>& client : quotaManager->mClients) {
-    client->AbortOperations(NullCString());
+    client->AbortOperations(VoidCString());
   }
 }
 
 auto
 QuotaManager::GetDirectoryLockTable(PersistenceType aPersistenceType)
   -> DirectoryLockTable&
 {
   switch (aPersistenceType) {
--- a/dom/storage/LocalStorage.cpp
+++ b/dom/storage/LocalStorage.cpp
@@ -149,17 +149,17 @@ LocalStorage::RemoveItem(const nsAString
 
   nsAutoString old;
   aRv = mCache->RemoveItem(this, aKey, old);
   if (aRv.Failed()) {
     return;
   }
 
   if (!aRv.ErrorCodeIs(NS_SUCCESS_DOM_NO_OPERATION)) {
-    BroadcastChangeNotification(aKey, old, NullString());
+    BroadcastChangeNotification(aKey, old, VoidString());
   }
 }
 
 void
 LocalStorage::Clear(nsIPrincipal& aSubjectPrincipal, ErrorResult& aRv)
 {
   if (!CanUseStorage(aSubjectPrincipal)) {
     aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
@@ -167,17 +167,17 @@ LocalStorage::Clear(nsIPrincipal& aSubje
   }
 
   aRv = mCache->Clear(this);
   if (NS_WARN_IF(aRv.Failed())) {
     return;
   }
 
   if (!aRv.ErrorCodeIs(NS_SUCCESS_DOM_NO_OPERATION)) {
-    BroadcastChangeNotification(NullString(), NullString(), NullString());
+    BroadcastChangeNotification(VoidString(), VoidString(), VoidString());
   }
 }
 
 void
 LocalStorage::BroadcastChangeNotification(const nsAString& aKey,
                                           const nsAString& aOldValue,
                                           const nsAString& aNewValue)
 {
--- a/dom/storage/SessionStorage.cpp
+++ b/dom/storage/SessionStorage.cpp
@@ -150,30 +150,30 @@ SessionStorage::RemoveItem(const nsAStri
   nsString oldValue;
   nsresult rv = mCache->RemoveItem(DATASET, aKey, oldValue);
   MOZ_ASSERT(NS_SUCCEEDED(rv));
 
   if (rv == NS_SUCCESS_DOM_NO_OPERATION) {
     return;
   }
 
-  BroadcastChangeNotification(aKey, oldValue, NullString());
+  BroadcastChangeNotification(aKey, oldValue, VoidString());
 }
 
 void
 SessionStorage::Clear(nsIPrincipal& aSubjectPrincipal,
                       ErrorResult& aRv)
 {
   uint32_t length = GetLength(aSubjectPrincipal, aRv);
   if (!length) {
     return;
   }
 
   mCache->Clear(DATASET);
-  BroadcastChangeNotification(NullString(), NullString(), NullString());
+  BroadcastChangeNotification(VoidString(), VoidString(), VoidString());
 }
 
 void
 SessionStorage::BroadcastChangeNotification(const nsAString& aKey,
                                             const nsAString& aOldValue,
                                             const nsAString& aNewValue)
 {
   NotifyChange(this, Principal(), aKey, aOldValue, aNewValue, u"sessionStorage",
--- a/dom/webidl/Document.webidl
+++ b/dom/webidl/Document.webidl
@@ -380,23 +380,32 @@ partial interface Document {
   [ChromeOnly] readonly attribute nsIDocShell? docShell;
 
   [ChromeOnly] readonly attribute DOMString contentLanguage;
 
   [ChromeOnly] readonly attribute nsILoadGroup? documentLoadGroup;
 
   // Blocks the initial document parser until the given promise is settled.
   [ChromeOnly, Throws]
-  Promise<any> blockParsing(Promise<any> promise);
+  Promise<any> blockParsing(Promise<any> promise,
+                            optional BlockParsingOptions options);
 
   // like documentURI, except that for error pages, it returns the URI we were
   // trying to load when we hit an error, rather than the error page's own URI.
   [ChromeOnly] readonly attribute URI? mozDocumentURIIfNotForErrorPages;
 };
 
+dictionary BlockParsingOptions {
+  /**
+   * If true, blocks script-created parsers (created via document.open()) in
+   * addition to network-created parsers.
+   */
+  boolean blockScriptCreated = true;
+};
+
 // Extension to give chrome JS the ability to determine when a document was
 // created to satisfy an iframe with srcdoc attribute.
 partial interface Document {
   [ChromeOnly] readonly attribute boolean isSrcdocDocument;
 };
 
 
 // Extension to give chrome JS the ability to get the underlying
--- a/dom/workers/RuntimeService.cpp
+++ b/dom/workers/RuntimeService.cpp
@@ -2416,17 +2416,17 @@ RuntimeService::CreateSharedWorkerFromLo
   // WorkerPrivate already exists and its secure context state doesn't match
   // what we want for the new SharedWorker.
   bool shouldAttachToWorkerPrivate = true;
   bool created = false;
   ErrorResult rv;
   if (!workerPrivate) {
     workerPrivate =
       WorkerPrivate::Constructor(aCx, aScriptURL, false,
-                                 WorkerTypeShared, aName, NullCString(),
+                                 WorkerTypeShared, aName, VoidCString(),
                                  aLoadInfo, rv);
     NS_ENSURE_TRUE(workerPrivate, rv.StealNSResult());
 
     created = true;
   } else {
     // Check whether the secure context state matches.  The current compartment
     // of aCx is the compartment of the SharedWorker constructor that was
     // invoked, which is the compartment of the document that will be hooked up
--- a/dom/workers/ServiceWorkerPrivate.cpp
+++ b/dom/workers/ServiceWorkerPrivate.cpp
@@ -1873,17 +1873,17 @@ ServiceWorkerPrivate::SpawnWorkerIfNeede
   AutoJSAPI jsapi;
   jsapi.Init();
   ErrorResult error;
   NS_ConvertUTF8toUTF16 scriptSpec(mInfo->ScriptSpec());
 
   mWorkerPrivate = WorkerPrivate::Constructor(jsapi.cx(),
                                               scriptSpec,
                                               false, WorkerTypeService,
-                                              NullString(),
+                                              VoidString(),
                                               mInfo->Scope(),
                                               &info, error);
   if (NS_WARN_IF(error.Failed())) {
     return error.StealNSResult();
   }
 
   RenewKeepAliveToken(aWhy);
 
--- a/dom/workers/ServiceWorkerRegistrar.cpp
+++ b/dom/workers/ServiceWorkerRegistrar.cpp
@@ -1056,16 +1056,44 @@ ServiceWorkerRegistrar::ProfileStopped()
                                          getter_AddRefs(mProfileDir));
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return;
     }
   }
 
   PBackgroundChild* child = BackgroundChild::GetForCurrentThread();
   if (!child) {
+    // Mutations to the ServiceWorkerRegistrar happen on the PBackground thread,
+    // issued by the ServiceWorkerManagerService, so the appropriate place to
+    // trigger shutdown is on that thread.
+    //
+    // However, it's quite possible that the PBackground thread was not brought
+    // into existence for xpcshell tests.  We don't cause it to be created
+    // ourselves for any reason, for example.
+    //
+    // In this scenario, we know that:
+    // - We will receive exactly one call to ourself from BlockShutdown() and
+    //   BlockShutdown() will be called (at most) once.
+    // - The only way our Shutdown() method gets called is via
+    //   BackgroundParentImpl::RecvShutdownServiceWorkerRegistrar() being
+    //   invoked, which only happens if we get to that send below here that we
+    //   can't get to.
+    // - All Shutdown() does is set mShuttingDown=true (essential for
+    //   invariants) and invoke MaybeScheduleShutdownCompleted().
+    // - Since there is no PBackground thread, mRunnableCounter must be 0
+    //   because only ScheduleSaveData() increments it and it only runs on the
+    //   background thread, so it cannot have run.  And so we would expect
+    //   MaybeScheduleShutdownCompleted() to schedule an invocation of
+    //   ShutdownCompleted on the main thread.
+    //
+    // So it's appropriate for us to set mShuttingDown=true (as Shutdown would
+    // do) and directly invoke ShutdownCompleted() (as Shutdown would indirectly
+    // do via MaybeScheduleShutdownCompleted).
+    mShuttingDown = true;
+    ShutdownCompleted();
     return;
   }
 
   child->SendShutdownServiceWorkerRegistrar();
 }
 
 // Async shutdown blocker methods
 
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -4641,17 +4641,17 @@ already_AddRefed<WorkerPrivate>
 WorkerPrivate::Constructor(const GlobalObject& aGlobal,
                            const nsAString& aScriptURL,
                            bool aIsChromeWorker, WorkerType aWorkerType,
                            const nsAString& aWorkerName,
                            WorkerLoadInfo* aLoadInfo, ErrorResult& aRv)
 {
   JSContext* cx = aGlobal.Context();
   return Constructor(cx, aScriptURL, aIsChromeWorker, aWorkerType,
-                     aWorkerName, NullCString(), aLoadInfo, aRv);
+                     aWorkerName, VoidCString(), aLoadInfo, aRv);
 }
 
 // static
 already_AddRefed<WorkerPrivate>
 WorkerPrivate::Constructor(JSContext* aCx,
                            const nsAString& aScriptURL,
                            bool aIsChromeWorker, WorkerType aWorkerType,
                            const nsAString& aWorkerName,
--- a/dom/xhr/XMLHttpRequestMainThread.cpp
+++ b/dom/xhr/XMLHttpRequestMainThread.cpp
@@ -1525,17 +1525,17 @@ XMLHttpRequestMainThread::Open(const nsA
 }
 
 // This case is hit when the async parameter is outright omitted, which
 // should set it to true (and the username and password to null).
 void
 XMLHttpRequestMainThread::Open(const nsACString& aMethod, const nsAString& aUrl,
                                ErrorResult& aRv)
 {
-  Open(aMethod, aUrl, true, NullString(), NullString(), aRv);
+  Open(aMethod, aUrl, true, VoidString(), VoidString(), aRv);
 }
 
 // This case is hit when the async parameter is specified, even if the
 // JS value was "undefined" (which due to legacy reasons should be
 // treated as true, which is how it will already be passed in here).
 void
 XMLHttpRequestMainThread::Open(const nsACString& aMethod,
                                const nsAString& aUrl,
--- a/dom/xhr/XMLHttpRequestWorker.cpp
+++ b/dom/xhr/XMLHttpRequestWorker.cpp
@@ -1424,18 +1424,18 @@ OpenRunnable::MainThreadRunInternal()
     NS_ENSURE_SUCCESS(rv, rv);
   }
 
   MOZ_ASSERT(!mProxy->mInOpen);
   mProxy->mInOpen = true;
 
   ErrorResult rv2;
   mProxy->mXHR->Open(mMethod, mURL, true,
-                     mUser.WasPassed() ? mUser.Value() : NullString(),
-                     mPassword.WasPassed() ? mPassword.Value() : NullString(),
+                     mUser.WasPassed() ? mUser.Value() : VoidString(),
+                     mPassword.WasPassed() ? mPassword.Value() : VoidString(),
                      rv2);
 
   MOZ_ASSERT(mProxy->mInOpen);
   mProxy->mInOpen = false;
 
   if (rv2.Failed()) {
     return rv2.StealNSResult();
   }
@@ -2041,17 +2041,17 @@ XMLHttpRequestWorker::Send(JSContext* aC
   if (!mProxy) {
     aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
     return;
   }
 
   RefPtr<SendRunnable> sendRunnable;
 
   if (aData.IsNull()) {
-    sendRunnable = new SendRunnable(mWorkerPrivate, mProxy, NullString());
+    sendRunnable = new SendRunnable(mWorkerPrivate, mProxy, VoidString());
     // Nothing to clone.
   }
 
   else if (aData.Value().IsDocument()) {
     MOZ_CRASH("Documents are not exposed to workers.");
   }
 
   else if (aData.Value().IsBlob()) {
--- a/dom/xslt/xslt/txMozillaXMLOutput.cpp
+++ b/dom/xslt/xslt/txMozillaXMLOutput.cpp
@@ -899,17 +899,17 @@ txMozillaXMLOutput::createResultDocument
             }
 
             // Indicate that there is no internal subset (not just an empty one)
             rv = NS_NewDOMDocumentType(getter_AddRefs(documentType),
                                        mNodeInfoManager,
                                        doctypeName,
                                        mOutputFormat.mPublicId,
                                        mOutputFormat.mSystemId,
-                                       NullString());
+                                       VoidString());
             NS_ENSURE_SUCCESS(rv, rv);
 
             nsCOMPtr<nsIContent> docType = do_QueryInterface(documentType);
             rv = mDocument->AppendChildTo(docType, true);
             NS_ENSURE_SUCCESS(rv, rv);
         }
     }
 
--- a/dom/xul/templates/nsXULTemplateBuilder.cpp
+++ b/dom/xul/templates/nsXULTemplateBuilder.cpp
@@ -482,17 +482,17 @@ nsXULTemplateBuilder::CreateContents(nsI
 }
 
 NS_IMETHODIMP
 nsXULTemplateBuilder::HasGeneratedContent(nsIRDFResource* aResource,
                                           nsIAtom* aTag,
                                           bool* aGenerated)
 {
     ErrorResult rv;
-    const nsAString& tag = aTag ? nsDependentAtomString(aTag) : NullString();
+    const nsAString& tag = aTag ? nsDependentAtomString(aTag) : VoidString();
     *aGenerated = HasGeneratedContent(aResource, tag, rv);
     return rv.StealNSResult();
 }
 
 void
 nsXULTemplateBuilder::AddResult(nsIXULTemplateResult* aResult,
                                 nsINode& aQueryNode,
                                 ErrorResult& aError)
--- a/editor/libeditor/HTMLEditUtils.cpp
+++ b/editor/libeditor/HTMLEditUtils.cpp
@@ -567,17 +567,17 @@ HTMLEditUtils::SupportsAlignAttr(nsINode
   (GROUP_FONTSTYLE | GROUP_PHRASE | GROUP_SPECIAL | GROUP_FORMCONTROL | \
    GROUP_LEAF)
 
 #define GROUP_FLOW_ELEMENT (GROUP_INLINE_ELEMENT | GROUP_BLOCK)
 
 struct ElementInfo final
 {
 #ifdef DEBUG
-  eHTMLTags mTag;
+  nsHTMLTag mTag;
 #endif
   uint32_t mGroup;
   uint32_t mCanContainGroups;
   bool mIsContainer;
   bool mCanContainSelf;
 };
 
 #ifdef DEBUG
@@ -782,17 +782,17 @@ HTMLEditUtils::CanContain(int32_t aParen
       NS_ASSERTION(kElements[i - 1].mTag == i,
                    "You need to update kElements (missing tags).");
     }
   }
 #endif
 
   // Special-case button.
   if (aParent == eHTMLTag_button) {
-    static const eHTMLTags kButtonExcludeKids[] = {
+    static const nsHTMLTag kButtonExcludeKids[] = {
       eHTMLTag_a,
       eHTMLTag_fieldset,
       eHTMLTag_form,
       eHTMLTag_iframe,
       eHTMLTag_input,
       eHTMLTag_select,
       eHTMLTag_textarea
     };
--- a/gfx/angle/src/tests/preprocessor_tests/input_test.cpp
+++ b/gfx/angle/src/tests/preprocessor_tests/input_test.cpp
@@ -16,17 +16,17 @@ TEST_F(InitTest, ZeroCount)
 {
     EXPECT_TRUE(mPreprocessor.init(0, NULL, NULL));
 
     pp::Token token;
     mPreprocessor.lex(&token);
     EXPECT_EQ(pp::Token::LAST, token.type);
 }
 
-TEST_F(InitTest, NullString)
+TEST_F(InitTest, VoidString)
 {
     EXPECT_FALSE(mPreprocessor.init(1, NULL, NULL));
 }
 
 TEST(InputTest, DefaultConstructor)
 {
     pp::Input input;
     EXPECT_EQ(0u, input.count());
--- a/gfx/layers/ImageContainer.cpp
+++ b/gfx/layers/ImageContainer.cpp
@@ -131,16 +131,26 @@ ImageContainer::GetImageClient()
 {
   RecursiveMutexAutoLock mon(mRecursiveMutex);
   EnsureImageClient();
   RefPtr<ImageClient> imageClient = mImageClient;
   return imageClient.forget();
 }
 
 void
+ImageContainer::DropImageClient()
+{
+  RecursiveMutexAutoLock mon(mRecursiveMutex);
+  if (mImageClient) {
+    mImageClient->ClearCachedResources();
+    mImageClient = nullptr;
+  }
+}
+
+void
 ImageContainer::EnsureImageClient()
 {
   // If we're not forcing a new ImageClient, then we can skip this if we don't have an existing
   // ImageClient, or if the existing one belongs to an IPC actor that is still open.
   if (!mIsAsync) {
     return;
   }
   if (mImageClient && mImageClient->GetForwarder()->GetLayersIPCActor()->IPCOpen()) {
--- a/gfx/layers/ImageContainer.h
+++ b/gfx/layers/ImageContainer.h
@@ -613,16 +613,18 @@ public:
    */
   already_AddRefed<ImageClient> GetImageClient();
 
   /**
    * Main thread only.
    */
   static ProducerID AllocateProducerID();
 
+  void DropImageClient();
+
 private:
   typedef mozilla::RecursiveMutex RecursiveMutex;
 
   // Private destructor, to discourage deletion outside of Release():
   ~ImageContainer();
 
   void SetCurrentImageInternal(const nsTArray<NonOwningImage>& aImages);
 
--- a/gfx/layers/ipc/ImageBridgeChild.cpp
+++ b/gfx/layers/ipc/ImageBridgeChild.cpp
@@ -721,17 +721,34 @@ MessageLoop * ImageBridgeChild::GetMessa
 {
   return sImageBridgeChildThread ? sImageBridgeChildThread->message_loop() : nullptr;
 }
 
 /* static */ void
 ImageBridgeChild::IdentifyCompositorTextureHost(const TextureFactoryIdentifier& aIdentifier)
 {
   if (RefPtr<ImageBridgeChild> child = GetSingleton()) {
-    child->IdentifyTextureHost(aIdentifier);
+    child->UpdateTextureFactoryIdentifier(aIdentifier);
+  }
+}
+
+void
+ImageBridgeChild::UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aIdentifier)
+{
+  bool disablingWebRender = GetCompositorBackendType() == LayersBackend::LAYERS_WR &&
+                            aIdentifier.mParentBackend != LayersBackend::LAYERS_WR;
+  IdentifyTextureHost(aIdentifier);
+  if (disablingWebRender) {
+    // ImageHost is incompatible between WebRender enabled and WebRender disabled.
+    // Then drop all ImageContainers' ImageClients during disabling WebRender.
+    MutexAutoLock lock(mContainerMapLock);
+    for (auto iter = mImageContainers.Iter(); !iter.Done(); iter.Next()) {
+      ImageContainer* container = iter.Data();
+      container->DropImageClient();
+    }
   }
 }
 
 RefPtr<ImageClient>
 ImageBridgeChild::CreateImageClient(CompositableType aType,
                                     ImageContainer* aImageContainer)
 {
   if (InImageBridgeChildThread()) {
--- a/gfx/layers/ipc/ImageBridgeChild.h
+++ b/gfx/layers/ipc/ImageBridgeChild.h
@@ -245,16 +245,18 @@ private:
   void FlushAllImagesSync(
     SynchronousTask* aTask,
     ImageClient* aClient,
     ImageContainer* aContainer);
 
   void ProxyAllocShmemNow(SynchronousTask* aTask, AllocShmemParams* aParams);
   void ProxyDeallocShmemNow(SynchronousTask* aTask, Shmem* aShmem, bool* aResult);
 
+  void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aIdentifier);
+
 public:
   // CompositableForwarder
 
   virtual void Connect(CompositableClient* aCompositable,
                        ImageContainer* aImageContainer) override;
 
   virtual bool UsesImageBridge() const override { return true; }
 
--- a/image/SurfaceCache.cpp
+++ b/image/SurfaceCache.cpp
@@ -274,28 +274,17 @@ public:
 
   already_AddRefed<CachedSurface> Remove(NotNull<CachedSurface*> aSurface)
   {
     MOZ_ASSERT(mSurfaces.GetWeak(aSurface->GetSurfaceKey()),
         "Should not be removing a surface we don't have");
 
     RefPtr<CachedSurface> surface;
     mSurfaces.Remove(aSurface->GetSurfaceKey(), getter_AddRefs(surface));
-
-    if (IsEmpty() && mFactor2Mode) {
-      // The last surface for this cache was removed. This can happen if the
-      // surface was stored in a volatile buffer and got purged, or the surface
-      // expired from the cache. If the cache itself lingers for some reason
-      // (e.g. in the process of performing a lookup, the cache itself is
-      // locked), then we need to reset the factor of 2 state because it
-      // requires at least one surface present to get the native size
-      // information from the image.
-      mFactor2Mode = mFactor2Pruned = false;
-    }
-
+    AfterMaybeRemove();
     return surface.forget();
   }
 
   already_AddRefed<CachedSurface> Lookup(const SurfaceKey& aSurfaceKey,
                                          bool aForAccess)
   {
     RefPtr<CachedSurface> surface;
     mSurfaces.Get(aSurfaceKey, getter_AddRefs(surface));
@@ -532,28 +521,36 @@ public:
 
     // We have no surfaces that are not factor of 2 sized, so we can stop
     // pruning henceforth, because we avoid the insertion of new surfaces that
     // don't match our sizing set (unless the caller won't accept a
     // substitution.)
     if (!hasNotFactorSize) {
       mFactor2Pruned = true;
     }
+
+    // We should never leave factor of 2 mode due to pruning in of itself, but
+    // if we discarded surfaces due to the volatile buffers getting released,
+    // it is possible.
+    AfterMaybeRemove();
   }
 
   IntSize SuggestedSize(const IntSize& aSize) const
   {
     // When not in factor of 2 mode, we can always decode at the given size.
     if (!mFactor2Mode) {
       return aSize;
     }
 
     // We cannot enter factor of 2 mode unless we have a minimum number of
     // surfaces, and we should have left it if the cache was emptied.
-    MOZ_ASSERT(!IsEmpty());
+    if (MOZ_UNLIKELY(IsEmpty())) {
+      MOZ_ASSERT_UNREACHABLE("Should not be empty and in factor of 2 mode!");
+      return aSize;
+    }
 
     // This bit of awkwardness gets the largest native size of the image.
     auto iter = ConstIter();
     NotNull<CachedSurface*> firstSurface = WrapNotNull(iter.UserData());
     Image* image = static_cast<Image*>(firstSurface->GetImageKey());
     IntSize factorSize;
     if (NS_FAILED(image->GetWidth(&factorSize.width)) ||
         NS_FAILED(image->GetHeight(&factorSize.height)) ||
@@ -639,27 +636,43 @@ public:
 
       const IntSize& size = surface->GetSurfaceKey().Size();
       bool factor2Size = false;
       if (mFactor2Mode) {
         factor2Size = (size == SuggestedSize(size));
       }
       report.Add(surface, factor2Size);
     }
+
+    AfterMaybeRemove();
   }
 
   SurfaceTable::Iterator ConstIter() const
   {
     return mSurfaces.ConstIter();
   }
 
   void SetLocked(bool aLocked) { mLocked = aLocked; }
   bool IsLocked() const { return mLocked; }
 
 private:
+  void AfterMaybeRemove()
+  {
+    if (IsEmpty() && mFactor2Mode) {
+      // The last surface for this cache was removed. This can happen if the
+      // surface was stored in a volatile buffer and got purged, or the surface
+      // expired from the cache. If the cache itself lingers for some reason
+      // (e.g. in the process of performing a lookup, the cache itself is
+      // locked), then we need to reset the factor of 2 state because it
+      // requires at least one surface present to get the native size
+      // information from the image.
+      mFactor2Mode = mFactor2Pruned = false;
+    }
+  }
+
   SurfaceTable      mSurfaces;
 
   bool              mLocked;
 
   // True in "factor of 2" mode.
   bool              mFactor2Mode;
 
   // True if all non-factor of 2 surfaces have been removed from the cache. Note
@@ -811,23 +824,17 @@ public:
     // If we failed during StartTracking, we can skip this step.
     if (aStopTracking) {
       StopTracking(aSurface, /* aIsTracked */ true, aAutoLock);
     }
 
     // Individual surfaces must be freed outside the lock.
     mCachedSurfacesDiscard.AppendElement(cache->Remove(aSurface));
 
-    // Remove the per-image cache if it's unneeded now. Keep it if the image is
-    // locked, since the per-image cache is where we store that state. Note that
-    // we don't push it into mImageCachesDiscard because all of its surfaces
-    // have been removed, so it is safe to free while holding the lock.
-    if (cache->IsEmpty() && !cache->IsLocked()) {
-      mImageCaches.Remove(imageKey);
-    }
+    MaybeRemoveEmptyCache(imageKey, cache);
   }
 
   bool StartTracking(NotNull<CachedSurface*> aSurface,
                      const StaticMutexAutoLock& aAutoLock)
   {
     CostEntry costEntry = aSurface->GetCostEntry();
     MOZ_ASSERT(costEntry.GetCost() <= mAvailableCost,
                "Cost too large and the caller didn't catch it");
@@ -1088,16 +1095,18 @@ public:
       return;  // No cached surfaces for this image, so nothing to do.
     }
 
     cache->Prune([this, &aAutoLock](NotNull<CachedSurface*> aSurface) -> void {
       StopTracking(aSurface, /* aIsTracked */ true, aAutoLock);
       // Individual surfaces must be freed outside the lock.
       mCachedSurfacesDiscard.AppendElement(aSurface);
     });
+
+    MaybeRemoveEmptyCache(aImageKey, cache);
   }
 
   void DiscardAll(const StaticMutexAutoLock& aAutoLock)
   {
     // Remove in order of cost because mCosts is an array and the other data
     // structures are all hash tables. Note that locked surfaces are not
     // removed, since they aren't present in mCosts.
     while (!mCosts.IsEmpty()) {
@@ -1194,26 +1203,40 @@ public:
 
     // Report all surfaces in the per-image cache.
     cache->CollectSizeOfSurfaces(aCounters, aMallocSizeOf,
       [this, &aAutoLock](NotNull<CachedSurface*> aSurface) -> void {
       StopTracking(aSurface, /* aIsTracked */ true, aAutoLock);
       // Individual surfaces must be freed outside the lock.
       mCachedSurfacesDiscard.AppendElement(aSurface);
     });
+
+    MaybeRemoveEmptyCache(aImageKey, cache);
   }
 
 private:
   already_AddRefed<ImageSurfaceCache> GetImageCache(const ImageKey aImageKey)
   {
     RefPtr<ImageSurfaceCache> imageCache;
     mImageCaches.Get(aImageKey, getter_AddRefs(imageCache));
     return imageCache.forget();
   }
 
+  void MaybeRemoveEmptyCache(const ImageKey aImageKey,
+                             ImageSurfaceCache* aCache)
+  {
+    // Remove the per-image cache if it's unneeded now. Keep it if the image is
+    // locked, since the per-image cache is where we store that state. Note that
+    // we don't push it into mImageCachesDiscard because all of its surfaces
+    // have been removed, so it is safe to free while holding the lock.
+    if (aCache->IsEmpty() && !aCache->IsLocked()) {
+      mImageCaches.Remove(aImageKey);
+    }
+  }
+
   // This is similar to CanHold() except that it takes into account the costs of
   // locked surfaces. It's used internally in Insert(), but it's not exposed
   // publicly because we permit multithreaded access to the surface cache, which
   // means that the result would be meaningless: another thread could insert a
   // surface or lock an image at any time.
   bool CanHoldAfterDiscarding(const Cost aCost) const
   {
     return aCost <= mMaxCost - mLockedCost;
--- a/ipc/glue/MessageChannel.cpp
+++ b/ipc/glue/MessageChannel.cpp
@@ -12,16 +12,17 @@
 #include "mozilla/dom/ScriptSettings.h"
 #include "mozilla/ipc/ProtocolUtils.h"
 #include "mozilla/Logging.h"
 #include "mozilla/Move.h"
 #include "mozilla/Sprintf.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/TimeStamp.h"
 #include "nsAppRunner.h"
+#include "mozilla/UniquePtr.h"
 #include "nsAutoPtr.h"
 #include "nsDebug.h"
 #include "nsISupportsImpl.h"
 #include "nsContentUtils.h"
 #include <math.h>
 
 #ifdef MOZ_TASK_TRACER
 #include "GeckoTaskTracer.h"
@@ -411,17 +412,17 @@ public:
         return mTransaction;
     }
 
     void ReceivedReply(IPC::Message&& aMessage) {
         MOZ_RELEASE_ASSERT(aMessage.seqno() == mSeqno);
         MOZ_RELEASE_ASSERT(aMessage.transaction_id() == mTransaction);
         MOZ_RELEASE_ASSERT(!mReply);
         IPC_LOG("Reply received on worker thread: seqno=%d", mSeqno);
-        mReply = new IPC::Message(Move(aMessage));
+        mReply = MakeUnique<IPC::Message>(Move(aMessage));
         MOZ_RELEASE_ASSERT(IsComplete());
     }
 
     void HandleReply(IPC::Message&& aMessage) {
         AutoEnterTransaction *cur = mChan->mTransactionStack;
         MOZ_RELEASE_ASSERT(cur == this);
         while (cur) {
             MOZ_RELEASE_ASSERT(cur->mActive);
@@ -450,17 +451,17 @@ public:
         return !mNext;
     }
 
     bool IsError() {
         MOZ_RELEASE_ASSERT(mReply);
         return mReply->is_reply_error();
     }
 
-    nsAutoPtr<IPC::Message> GetReply() {
+    UniquePtr<IPC::Message> GetReply() {
         return Move(mReply);
     }
 
 private:
     MessageChannel *mChan;
 
     // Active is true if this transaction is on the mChan->mTransactionStack
     // stack. Generally we're not on the stack if the transaction was canceled
@@ -475,17 +476,17 @@ private:
     int mNestedLevel;
     int32_t mSeqno;
     int32_t mTransaction;
 
     // Next item in mChan->mTransactionStack.
     AutoEnterTransaction *mNext;
 
     // Pointer the a reply received for this message, if one was received.
-    nsAutoPtr<IPC::Message> mReply;
+    UniquePtr<IPC::Message> mReply;
 };
 
 class PromiseReporter final : public nsIMemoryReporter
 {
     ~PromiseReporter() {}
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
 
@@ -839,32 +840,32 @@ MessageChannel::CommonThreadOpenInit(Mes
 
     mLink = new ThreadLink(this, aTargetChan);
     mSide = aSide;
 }
 
 bool
 MessageChannel::Echo(Message* aMsg)
 {
-    nsAutoPtr<Message> msg(aMsg);
+    UniquePtr<Message> msg(aMsg);
     AssertWorkerThread();
     mMonitor->AssertNotCurrentThreadOwns();
     if (MSG_ROUTING_NONE == msg->routing_id()) {
         ReportMessageRouteError("MessageChannel::Echo");
         return false;
     }
 
     MonitorAutoLock lock(*mMonitor);
 
     if (!Connected()) {
-        ReportConnectionError("MessageChannel", msg);
+        ReportConnectionError("MessageChannel", msg.get());
         return false;
     }
 
-    mLink->EchoMessage(msg.forget());
+    mLink->EchoMessage(msg.release());
     return true;
 }
 
 bool
 MessageChannel::Send(Message* aMsg)
 {
     if (aMsg->size() >= kMinTelemetryMessageSize) {
         Telemetry::Accumulate(Telemetry::IPC_MESSAGE_SIZE2, aMsg->size());
@@ -882,31 +883,30 @@ MessageChannel::Send(Message* aMsg)
         }
     }
 
     MOZ_RELEASE_ASSERT(!aMsg->is_sync());
     MOZ_RELEASE_ASSERT(aMsg->nested_level() != IPC::Message::NESTED_INSIDE_SYNC);
 
     CxxStackFrame frame(*this, OUT_MESSAGE, aMsg);
 
-    nsAutoPtr<Message> msg(aMsg);
+    UniquePtr<Message> msg(aMsg);
     AssertWorkerThread();
     mMonitor->AssertNotCurrentThreadOwns();
     if (MSG_ROUTING_NONE == msg->routing_id()) {
         ReportMessageRouteError("MessageChannel::Send");
         return false;
     }
 
     MonitorAutoLock lock(*mMonitor);
     if (!Connected()) {
-        ReportConnectionError("MessageChannel", msg);
+        ReportConnectionError("MessageChannel", msg.get());
         return false;
     }
-
-    SendMessageToLink(msg.forget());
+    SendMessageToLink(msg.release());
     return true;
 }
 
 void
 MessageChannel::SendMessageToLink(Message* aMsg)
 {
     if (mIsPostponingSends) {
         UniquePtr<Message> msg(aMsg);
@@ -1348,31 +1348,31 @@ MessageChannel::ProcessPendingRequests(A
 bool
 MessageChannel::Send(Message* aMsg, Message* aReply)
 {
     mozilla::TimeStamp start = TimeStamp::Now();
     if (aMsg->size() >= kMinTelemetryMessageSize) {
         Telemetry::Accumulate(Telemetry::IPC_MESSAGE_SIZE2, aMsg->size());
     }
 
-    nsAutoPtr<Message> msg(aMsg);
+    UniquePtr<Message> msg(aMsg);
 
     // Sanity checks.
     AssertWorkerThread();
     mMonitor->AssertNotCurrentThreadOwns();
 
 #ifdef OS_WIN
     SyncStackFrame frame(this, false);
     NeuteredWindowRegion neuteredRgn(mFlags & REQUIRE_DEFERRED_MESSAGE_PROTECTION);
 #endif
 #ifdef MOZ_TASK_TRACER
     AutoScopedLabel autolabel("sync message %s", aMsg->name());
 #endif
 
-    CxxStackFrame f(*this, OUT_MESSAGE, msg);
+    CxxStackFrame f(*this, OUT_MESSAGE, msg.get());
 
     MonitorAutoLock lock(*mMonitor);
 
     if (mTimedOutMessageSeqno) {
         // Don't bother sending another sync message if a previous one timed out
         // and we haven't received a reply for it. Once the original timed-out
         // message receives a reply, we'll be able to send more sync messages
         // again.
@@ -1422,17 +1422,17 @@ MessageChannel::Send(Message* aMsg, Mess
                "nested sync message sends must be of increasing nested level");
     IPC_ASSERT(DispatchingSyncMessageNestedLevel() != IPC::Message::NESTED_INSIDE_CPOW,
                "not allowed to send messages while dispatching urgent messages");
 
     IPC_ASSERT(DispatchingAsyncMessageNestedLevel() != IPC::Message::NESTED_INSIDE_CPOW,
                "not allowed to send messages while dispatching urgent messages");
 
     if (!Connected()) {
-        ReportConnectionError("MessageChannel::SendAndWait", msg);
+        ReportConnectionError("MessageChannel::SendAndWait", msg.get());
         mLastSendError = SyncSendError::NotConnectedBeforeSend;
         return false;
     }
 
     msg->set_seqno(NextSeqno());
 
     int32_t seqno = msg->seqno();
     int nestedLevel = msg->nested_level();
@@ -1451,17 +1451,17 @@ MessageChannel::Send(Message* aMsg, Mess
     bool handleWindowsMessages = mListener->HandleWindowsMessages(*aMsg);
     AutoEnterTransaction transact(this, seqno, transaction, nestedLevel);
 
     IPC_LOG("Send seqno=%d, xid=%d", seqno, transaction);
 
     // msg will be destroyed soon, but name() is not owned by msg.
     const char* msgName = msg->name();
 
-    SendMessageToLink(msg.forget());
+    SendMessageToLink(msg.release());
 
     while (true) {
         MOZ_RELEASE_ASSERT(!transact.IsCanceled());
         ProcessPendingRequests(transact);
         if (transact.IsComplete()) {
             break;
         }
         if (!Connected()) {
@@ -1529,17 +1529,17 @@ MessageChannel::Send(Message* aMsg, Mess
         mLastSendError = SyncSendError::ReplyError;
         return false;
     }
 
     uint32_t latencyMs = round((TimeStamp::Now() - start).ToMilliseconds());
     IPC_LOG("Got reply: seqno=%d, xid=%d, msgName=%s, latency=%ums",
             seqno, transaction, msgName, latencyMs);
 
-    nsAutoPtr<Message> reply = transact.GetReply();
+    UniquePtr<Message> reply = transact.GetReply();
 
     MOZ_RELEASE_ASSERT(reply);
     MOZ_RELEASE_ASSERT(reply->is_reply(), "expected reply");
     MOZ_RELEASE_ASSERT(!reply->is_reply_error());
     MOZ_RELEASE_ASSERT(reply->seqno() == seqno);
     MOZ_RELEASE_ASSERT(reply->type() == replyType, "wrong reply type");
     MOZ_RELEASE_ASSERT(reply->is_sync());
 
@@ -1555,50 +1555,50 @@ MessageChannel::Send(Message* aMsg, Mess
                             nsDependentCString(msgName), latencyMs);
     }
     return true;
 }
 
 bool
 MessageChannel::Call(Message* aMsg, Message* aReply)
 {
-    nsAutoPtr<Message> msg(aMsg);
+    UniquePtr<Message> msg(aMsg);
     AssertWorkerThread();
     mMonitor->AssertNotCurrentThreadOwns();
 
 #ifdef OS_WIN
     SyncStackFrame frame(this, true);
 #endif
 #ifdef MOZ_TASK_TRACER
     AutoScopedLabel autolabel("sync message %s", aMsg->name());
 #endif
 
     // This must come before MonitorAutoLock, as its destructor acquires the
     // monitor lock.
-    CxxStackFrame cxxframe(*this, OUT_MESSAGE, msg);
+    CxxStackFrame cxxframe(*this, OUT_MESSAGE, msg.get());
 
     MonitorAutoLock lock(*mMonitor);
     if (!Connected()) {
-        ReportConnectionError("MessageChannel::Call", msg);
+        ReportConnectionError("MessageChannel::Call", msg.get());
         return false;
     }
 
     // Sanity checks.
     IPC_ASSERT(!AwaitingSyncReply(),
                "cannot issue Interrupt call while blocked on sync request");
     IPC_ASSERT(!DispatchingSyncMessage(),
                "violation of sync handler invariant");
     IPC_ASSERT(msg->is_interrupt(), "can only Call() Interrupt messages here");
     IPC_ASSERT(!mIsPostponingSends, "not postponing sends");
 
     msg->set_seqno(NextSeqno());
     msg->set_interrupt_remote_stack_depth_guess(mRemoteStackDepthGuess);
     msg->set_interrupt_local_stack_depth(1 + InterruptStackDepth());
     mInterruptStack.push(MessageInfo(*msg));
-    mLink->SendMessage(msg.forget());
+    mLink->SendMessage(msg.release());
 
     while (true) {
         // if a handler invoked by *Dispatch*() spun a nested event
         // loop, and the connection was broken during that loop, we
         // might have already processed the OnError event. if so,
         // trying another loop iteration will be futile because
         // channel state will have been cleared
         if (!Connected()) {
--- a/ipc/mscom/ActivationContext.cpp
+++ b/ipc/mscom/ActivationContext.cpp
@@ -88,27 +88,91 @@ ActivationContext::Release()
   mActCtx = INVALID_HANDLE_VALUE;
 }
 
 ActivationContext::~ActivationContext()
 {
   Release();
 }
 
+#if defined(MOZILLA_INTERNAL_API)
+
 /* static */ Result<uintptr_t,HRESULT>
 ActivationContext::GetCurrent()
 {
   HANDLE actCtx;
   if (!::GetCurrentActCtx(&actCtx)) {
     return Result<uintptr_t,HRESULT>(HRESULT_FROM_WIN32(::GetLastError()));
   }
 
   return reinterpret_cast<uintptr_t>(actCtx);
 }
 
+/* static */ HRESULT
+ActivationContext::GetCurrentManifestPath(nsAString& aOutManifestPath)
+{
+  aOutManifestPath.Truncate();
+
+  SIZE_T bytesNeeded;
+  BOOL ok = ::QueryActCtxW(QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX, nullptr,
+                           nullptr, ActivationContextDetailedInformation,
+                           nullptr, 0, &bytesNeeded);
+  if (!ok) {
+    DWORD err = ::GetLastError();
+    if (err != ERROR_INSUFFICIENT_BUFFER) {
+      return HRESULT_FROM_WIN32(err);
+    }
+  }
+
+  auto ctxBuf = MakeUnique<BYTE[]>(bytesNeeded);
+
+  ok = ::QueryActCtxW(QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX, nullptr, nullptr,
+                      ActivationContextDetailedInformation, ctxBuf.get(),
+                      bytesNeeded, nullptr);
+  if (!ok) {
+    return HRESULT_FROM_WIN32(::GetLastError());
+  }
+
+  auto ctxInfo =
+    reinterpret_cast<ACTIVATION_CONTEXT_DETAILED_INFORMATION*>(ctxBuf.get());
+
+  // assemblyIndex is 1-based, and we want the last index, so we can just copy
+  // ctxInfo->ulAssemblyCount directly.
+  DWORD assemblyIndex = ctxInfo->ulAssemblyCount;
+  ok = ::QueryActCtxW(QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX, nullptr,
+                      &assemblyIndex,
+                      AssemblyDetailedInformationInActivationContext, nullptr,
+                      0, &bytesNeeded);
+  if (!ok) {
+    DWORD err = ::GetLastError();
+    if (err != ERROR_INSUFFICIENT_BUFFER) {
+      return HRESULT_FROM_WIN32(err);
+    }
+  }
+
+  auto assemblyBuf = MakeUnique<BYTE[]>(bytesNeeded);
+
+  ok = ::QueryActCtxW(QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX, nullptr,
+                      &assemblyIndex,
+                      AssemblyDetailedInformationInActivationContext,
+                      assemblyBuf.get(), bytesNeeded, &bytesNeeded);
+  if (!ok) {
+    return HRESULT_FROM_WIN32(::GetLastError());
+  }
+
+  auto assemblyInfo =
+    reinterpret_cast<ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION*>(assemblyBuf.get());
+  aOutManifestPath = nsDependentString(assemblyInfo->lpAssemblyManifestPath,
+                                       (assemblyInfo->ulManifestPathLength + 1) / sizeof(wchar_t));
+
+  return S_OK;
+}
+
+#endif // defined(MOZILLA_INTERNAL_API)
+
 ActivationContextRegion::ActivationContextRegion(const ActivationContext& aActCtx)
   : mActCtx(aActCtx)
   , mActCookie(0)
 {
   Activate();
 }
 
 ActivationContextRegion::ActivationContextRegion(ActivationContext&& aActCtx)
--- a/ipc/mscom/ActivationContext.h
+++ b/ipc/mscom/ActivationContext.h
@@ -6,16 +6,20 @@
 
 #ifndef mozilla_mscom_ActivationContext_h
 #define mozilla_mscom_ActivationContext_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/Move.h"
 #include "mozilla/Result.h"
 
+#if defined(MOZILLA_INTERNAL_API)
+#include "nsString.h"
+#endif // defined(MOZILLA_INTERNAL_API)
+
 #include <windows.h>
 
 namespace mozilla {
 namespace mscom {
 
 class ActivationContext final
 {
 public:
@@ -30,17 +34,20 @@ public:
 
   ~ActivationContext();
 
   explicit operator bool() const
   {
     return mActCtx != INVALID_HANDLE_VALUE;
   }
 
+#if defined(MOZILLA_INTERNAL_API)
   static Result<uintptr_t,HRESULT> GetCurrent();
+  static HRESULT GetCurrentManifestPath(nsAString& aOutManifestPath);
+#endif // defined(MOZILLA_INTERNAL_API)
 
 private:
   void Init(ACTCTX& aActCtx);
   void AddRef();
   void Release();
 
 private:
   HANDLE mActCtx;
--- a/ipc/mscom/ProxyStream.cpp
+++ b/ipc/mscom/ProxyStream.cpp
@@ -78,37 +78,40 @@ ProxyStream::ProxyStream(REFIID aIID, co
                                        NS_LITERAL_CSTRING("!mStream"));
 #endif // defined(MOZ_CRASHREPORTER)
     return;
   }
 
 #if defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
   const uint32_t expectedStreamLen = GetOBJREFSize(WrapNotNull(mStream));
   nsAutoCString strActCtx;
+  nsAutoString manifestPath;
 #endif // defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
 
   HRESULT unmarshalResult = S_OK;
 
   // We need to convert to an interface here otherwise we mess up const
   // correctness with IPDL. We'll request an IUnknown and then QI the
   // actual interface later.
 
 #if defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
-  auto marshalFn = [this, &strActCtx, &unmarshalResult, &aIID]() -> void
+  auto marshalFn = [this, &strActCtx, &manifestPath, &unmarshalResult, &aIID]() -> void
 #else
   auto marshalFn = [this, &unmarshalResult, &aIID]() -> void
 #endif // defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
   {
 #if defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
     auto curActCtx = ActivationContext::GetCurrent();
     if (curActCtx.isOk()) {
       strActCtx.AppendPrintf("0x%p", curActCtx.unwrap());
     } else {
       strActCtx.AppendPrintf("HRESULT 0x%08X", curActCtx.unwrapErr());
     }
+
+    ActivationContext::GetCurrentManifestPath(manifestPath);
 #endif // defined(ACCESSIBILITY) && defined(MOZ_CRASHREPORTER)
 
     unmarshalResult =
       ::CoUnmarshalInterface(mStream, aIID, getter_AddRefs(mUnmarshaledProxy));
     MOZ_ASSERT(SUCCEEDED(unmarshalResult));
   };
 
   if (XRE_IsParentProcess()) {
@@ -132,16 +135,18 @@ ProxyStream::ProxyStream(REFIID aIID, co
       CrashReporter::AnnotateCrashReport(kCrashReportKey,
                                          NS_LITERAL_CSTRING("!mUnmarshaledProxy"));
     }
 
 #if defined(ACCESSIBILITY)
     AnnotateClassRegistration(CLSID_AccessibleHandler);
     CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("UnmarshalActCtx"),
                                        strActCtx);
+    CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("UnmarshalActCtxManifestPath"),
+                                       NS_ConvertUTF16toUTF8(manifestPath));
     CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("A11yHandlerRegistered"),
                                        a11y::IsHandlerRegistered() ?
                                        NS_LITERAL_CSTRING("true") :
                                        NS_LITERAL_CSTRING("false"));
 
     nsAutoCString strExpectedStreamLen;
     strExpectedStreamLen.AppendInt(expectedStreamLen);
     CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("ExpectedStreamLen"),
@@ -280,23 +285,38 @@ ProxyStream::ProxyStream(REFIID aIID, IU
   int streamSize = 0;
   DWORD mshlFlags = mPreserveStream ? MSHLFLAGS_TABLESTRONG : MSHLFLAGS_NORMAL;
 
   HRESULT createStreamResult = S_OK;
   HRESULT marshalResult = S_OK;
   HRESULT statResult = S_OK;
   HRESULT getHGlobalResult = S_OK;
 
-  auto marshalFn = [&]() -> void
+#if defined(MOZ_CRASHREPORTER)
+  nsAutoString manifestPath;
+
+  auto marshalFn = [this, &aIID, aObject, mshlFlags, &stream, &streamSize,
+                    &hglobal, &createStreamResult, &marshalResult, &statResult,
+                    &getHGlobalResult, &manifestPath]() -> void
+#else
+  auto marshalFn = [this, &aIID, aObject, mshlFlags, &stream, &streamSize,
+                    &hglobal, &createStreamResult, &marshalResult, &statResult,
+                    &getHGlobalResult]() -> void
+#endif // defined(MOZ_CRASHREPORTER)
   {
-    createStreamResult = ::CreateStreamOnHGlobal(nullptr, TRUE, getter_AddRefs(stream));
+    createStreamResult = ::CreateStreamOnHGlobal(nullptr, TRUE,
+                                                 getter_AddRefs(stream));
     if (FAILED(createStreamResult)) {
       return;
     }
 
+#if defined(MOZ_CRASHREPORTER)
+    ActivationContext::GetCurrentManifestPath(manifestPath);
+#endif // defined(MOZ_CRASHREPORTER)
+
     marshalResult = ::CoMarshalInterface(stream, aIID, aObject, MSHCTX_LOCAL,
                                          nullptr, mshlFlags);
     MOZ_DIAGNOSTIC_ASSERT(marshalResult != E_INVALIDARG);
     if (FAILED(marshalResult)) {
       return;
     }
 
     STATSTG statstg;
@@ -328,16 +348,18 @@ ProxyStream::ProxyStream(REFIID aIID, IU
         hrAsStr);
   }
 
   if (FAILED(marshalResult)) {
     AnnotateInterfaceRegistration(aIID);
     nsPrintfCString hrAsStr("0x%08X", marshalResult);
     CrashReporter::AnnotateCrashReport(
         NS_LITERAL_CSTRING("CoMarshalInterfaceFailure"), hrAsStr);
+    CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("MarshalActCtxManifestPath"),
+                                       NS_ConvertUTF16toUTF8(manifestPath));
   }
 
   if (FAILED(statResult)) {
     nsPrintfCString hrAsStr("0x%08X", statResult);
     CrashReporter::AnnotateCrashReport(
         NS_LITERAL_CSTRING("StatFailure"),
         hrAsStr);
   }
--- a/js/src/jit/BaselineJIT.cpp
+++ b/js/src/jit/BaselineJIT.cpp
@@ -664,22 +664,26 @@ BaselineICEntry*
 BaselineScript::maybeICEntryFromPCOffset(uint32_t pcOffset)
 {
     // Multiple IC entries can have the same PC offset, but this method only looks for
     // those which have isForOp() set.
     size_t mid;
     if (!ComputeBinarySearchMid(this, pcOffset, &mid))
         return nullptr;
 
+    MOZ_ASSERT(mid < numICEntries());
+
     // Found an IC entry with a matching PC offset.  Search backward, and then
     // forward from this IC entry, looking for one with the same PC offset which
     // has isForOp() set.
-    for (size_t i = mid; i < numICEntries() && icEntry(i).pcOffset() == pcOffset; i--) {
+    for (size_t i = mid; icEntry(i).pcOffset() == pcOffset; i--) {
         if (icEntry(i).isForOp())
             return &icEntry(i);
+        if (i == 0)
+            break;
     }
     for (size_t i = mid+1; i < numICEntries() && icEntry(i).pcOffset() == pcOffset; i++) {
         if (icEntry(i).isForOp())
             return &icEntry(i);
     }
     return nullptr;
 }
 
@@ -723,20 +727,23 @@ BaselineScript::icEntryFromPCOffset(uint
 
 BaselineICEntry&
 BaselineScript::callVMEntryFromPCOffset(uint32_t pcOffset)
 {
     // Like icEntryFromPCOffset, but only looks for the fake ICEntries
     // inserted by VM calls.
     size_t mid;
     MOZ_ALWAYS_TRUE(ComputeBinarySearchMid(this, pcOffset, &mid));
+    MOZ_ASSERT(mid < numICEntries());
 
-    for (size_t i = mid; i < numICEntries() && icEntry(i).pcOffset() == pcOffset; i--) {
+    for (size_t i = mid; icEntry(i).pcOffset() == pcOffset; i--) {
         if (icEntry(i).kind() == ICEntry::Kind_CallVM)
             return icEntry(i);
+        if (i == 0)
+            break;
     }
     for (size_t i = mid+1; i < numICEntries() && icEntry(i).pcOffset() == pcOffset; i++) {
         if (icEntry(i).kind() == ICEntry::Kind_CallVM)
             return icEntry(i);
     }
     MOZ_CRASH("Invalid PC offset for callVM entry.");
 }
 
--- a/js/src/jit/IonControlFlow.cpp
+++ b/js/src/jit/IonControlFlow.cpp
@@ -1614,34 +1614,38 @@ ControlFlowGenerator::processBreak(JSOp 
     MOZ_ASSERT(SN_TYPE(sn) == SRC_BREAK ||
                SN_TYPE(sn) == SRC_BREAK2LABEL);
 
     // Find the break target.
     jsbytecode* target = pc + GetJumpOffset(pc);
     DebugOnly<bool> found = false;
 
     if (SN_TYPE(sn) == SRC_BREAK2LABEL) {
-        for (size_t i = labels_.length() - 1; i < labels_.length(); i--) {
+        for (size_t i = labels_.length() - 1; ; i--) {
             CFGState& cfg = cfgStack_[labels_[i].cfgEntry];
             MOZ_ASSERT(cfg.state == CFGState::LABEL);
             if (cfg.stopAt == target) {
                 cfg.label.breaks = new(alloc()) DeferredEdge(current, cfg.label.breaks);
                 found = true;
                 break;
             }
+            if (i == 0)
+                break;
         }
     } else {
-        for (size_t i = loops_.length() - 1; i < loops_.length(); i--) {
+        for (size_t i = loops_.length() - 1; ; i--) {
             CFGState& cfg = cfgStack_[loops_[i].cfgEntry];
             MOZ_ASSERT(cfg.isLoop());
             if (cfg.loop.exitpc == target) {
                 cfg.loop.breaks = new(alloc()) DeferredEdge(current, cfg.loop.breaks);
                 found = true;
                 break;
             }
+            if (i == 0)
+                break;
         }
     }
 
     current->setStopPc(pc);
 
     MOZ_ASSERT(found);
 
     current = nullptr;
@@ -1660,24 +1664,26 @@ EffectiveContinue(jsbytecode* pc)
 ControlFlowGenerator::ControlStatus
 ControlFlowGenerator::processContinue(JSOp op)
 {
     MOZ_ASSERT(op == JSOP_GOTO);
 
     // Find the target loop.
     CFGState* found = nullptr;
     jsbytecode* target = pc + GetJumpOffset(pc);
-    for (size_t i = loops_.length() - 1; i < loops_.length(); i--) {
+    for (size_t i = loops_.length() - 1; ; i--) {
         // +1 to skip JSOP_JUMPTARGET.
         if (loops_[i].continuepc == target + 1 ||
             EffectiveContinue(loops_[i].continuepc) == target)
         {
             found = &cfgStack_[loops_[i].cfgEntry];
             break;
         }
+        if (i == 0)
+            break;
     }
 
     // There must always be a valid target loop structure. If not, there's
     // probably an off-by-something error in which pc we track.
     MOZ_ASSERT(found);
     CFGState& state = *found;
 
     state.loop.continues = new(alloc()) DeferredEdge(current, state.loop.continues);
@@ -1693,21 +1699,23 @@ ControlFlowGenerator::processContinue(JS
 ControlFlowGenerator::ControlStatus
 ControlFlowGenerator::processSwitchBreak(JSOp op)
 {
     MOZ_ASSERT(op == JSOP_GOTO);
 
     // Find the target switch.
     CFGState* found = nullptr;
     jsbytecode* target = pc + GetJumpOffset(pc);
-    for (size_t i = switches_.length() - 1; i < switches_.length(); i--) {
+    for (size_t i = switches_.length() - 1; ; i--) {
         if (switches_[i].continuepc == target) {
             found = &cfgStack_[switches_[i].cfgEntry];
             break;
         }
+        if (i == 0)
+            break;
     }
 
     // There must always be a valid target loop structure. If not, there's
     // probably an off-by-something error in which pc we track.
     MOZ_ASSERT(found);
     CFGState& state = *found;
 
     DeferredEdge** breaks = nullptr;
--- a/js/xpconnect/loader/URLPreloader.h
+++ b/js/xpconnect/loader/URLPreloader.h
@@ -219,17 +219,17 @@ private:
     };
 
     // Represents an entry in the URI cache.
     struct URLEntry final : public CacheKey
                           , public LinkedListElement<URLEntry>
     {
         MOZ_IMPLICIT URLEntry(const CacheKey& key)
             : CacheKey(key)
-            , mData(NullCString())
+            , mData(VoidCString())
         {}
 
         explicit URLEntry(nsIFile* file)
           : CacheKey(file)
         {}
 
         // For use with nsTArray::Sort.
         //
--- a/js/xpconnect/loader/mozJSSubScriptLoader.cpp
+++ b/js/xpconnect/loader/mozJSSubScriptLoader.cpp
@@ -41,17 +41,17 @@ using namespace mozilla;
 using namespace mozilla::dom;
 
 class MOZ_STACK_CLASS LoadSubScriptOptions : public OptionsBase {
 public:
     explicit LoadSubScriptOptions(JSContext* cx = xpc_GetSafeJSContext(),
                                   JSObject* options = nullptr)
         : OptionsBase(cx, options)
         , target(cx)
-        , charset(NullString())
+        , charset(VoidString())
         , ignoreCache(false)
         , async(false)
         , wantReturnValue(false)
     { }
 
     virtual bool Parse() {
       return ParseObject("target", &target) &&
              ParseString("charset", charset) &&
--- a/js/xpconnect/src/XPCJSMemoryReporter.h
+++ b/js/xpconnect/src/XPCJSMemoryReporter.h
@@ -3,31 +3,31 @@
 /* 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/. */
 
 #ifndef XPCJSMemoryReporter_h
 #define XPCJSMemoryReporter_h
 
 class nsISupports;
-class nsIMemoryReporterCallback;
+class nsIHandleReportCallback;
 
 namespace xpc {
 
 // The key is the window ID.
 typedef nsDataHashtable<nsUint64HashKey, nsCString> WindowPaths;
 
 // This is very nearly an instance of nsIMemoryReporter, but it's not,
 // because it's invoked by nsWindowMemoryReporter in order to get |windowPaths|
 // in CollectReports.
 class JSReporter
 {
 public:
     static void CollectReports(WindowPaths* windowPaths,
                                WindowPaths* topWindowPaths,
-                               nsIMemoryReporterCallback* handleReport,
+                               nsIHandleReportCallback* handleReport,
                                nsISupports* data,
                                bool anonymize);
 };
 
 } // namespace xpc
 
 #endif
--- a/js/xpconnect/src/xpcpublic.h
+++ b/js/xpconnect/src/xpcpublic.h
@@ -25,17 +25,17 @@
 #include "nsMathUtils.h"
 #include "nsStringBuffer.h"
 #include "mozilla/dom/BindingDeclarations.h"
 #include "mozilla/Preferences.h"
 
 class nsGlobalWindow;
 class nsIPrincipal;
 class nsScriptNameSpaceManager;
-class nsIMemoryReporterCallback;
+class nsIHandleReportCallback;
 
 namespace mozilla {
 namespace dom {
 class Exception;
 }
 }
 
 typedef void (* xpcGCCallback)(JSGCStatus status);
@@ -426,17 +426,17 @@ private:
 
 // This reports all the stats in |rtStats| that belong in the "explicit" tree,
 // (which isn't all of them).
 // @see ZoneStatsExtras
 // @see CompartmentStatsExtras
 void
 ReportJSRuntimeExplicitTreeStats(const JS::RuntimeStats& rtStats,
                                  const nsACString& rtPath,
-                                 nsIMemoryReporterCallback* handleReport,
+                                 nsIHandleReportCallback* handleReport,
                                  nsISupports* data,
                                  bool anonymize,
                                  size_t* rtTotal = nullptr);
 
 /**
  * Throws an exception on cx and returns false.
  */
 bool
--- a/js/xpconnect/tests/unit/test_nuke_sandbox_event_listeners.js
+++ b/js/xpconnect/tests/unit/test_nuke_sandbox_event_listeners.js
@@ -24,27 +24,34 @@ add_task(async function() {
                        .getInterface(Ci.nsIDocShell);
 
   docShell.createAboutBlankContentViewer(principal);
 
   let window = webnav.document.defaultView;
   let sandbox = Cu.Sandbox(window, {sandboxPrototype: window});
 
   function sandboxContent() {
+    window.onload = function SandboxOnLoad() {};
+
     window.addEventListener("FromTest", () => {
       window.dispatchEvent(new CustomEvent("FromSandbox"));
     }, true);
   }
 
   Cu.evalInSandbox(`(${sandboxContent})()`, sandbox);
 
 
   let fromTestPromise = promiseEvent(window, "FromTest");
   let fromSandboxPromise = promiseEvent(window, "FromSandbox");
 
+  equal(typeof window.onload, "function",
+        "window.onload should contain sandbox event listener");
+  equal(window.onload.name, "SandboxOnLoad",
+        "window.onload have the correct function name");
+
   do_print("Dispatch FromTest event");
   window.dispatchEvent(new window.CustomEvent("FromTest"));
 
   await fromTestPromise;
   do_print("Got event from test");
 
   await fromSandboxPromise;
   do_print("Got response from sandbox");
@@ -65,16 +72,18 @@ add_task(async function() {
   do_print("Got event from test");
 
 
   // Force cycle collection, which should cause our callback reference
   // to be dropped, and dredge up potential issues there.
   Cu.forceGC();
   Cu.forceCC();
 
+  ok(Cu.isDeadWrapper(window.onload),
+     "window.onload should contain a dead wrapper after sandbox is nuked");
 
   do_print("Dispatch FromTest event");
   fromTestPromise = promiseEvent(window, "FromTest");
   window.dispatchEvent(new window.CustomEvent("FromTest"));
   await fromTestPromise;
   do_print("Got event from test");
 
   let listeners = Services.els.getListenerInfoFor(window);
--- a/layout/style/test/mochitest.ini
+++ b/layout/style/test/mochitest.ini
@@ -318,16 +318,17 @@ support-files = ../../reftests/fonts/mar
 [test_units_frequency.html]
 [test_units_length.html]
 [test_units_time.html]
 [test_value_cloning.html]
 skip-if = toolkit == 'android' # bug 775227 for android
 [test_value_computation.html]
 skip-if = toolkit == 'android'
 [test_value_storage.html]
+skip-if = toolkit == 'android' && debug # bug 1397615
 [test_variable_serialization_computed.html]
 [test_variable_serialization_specified.html]
 [test_variables.html]
 support-files = support/external-variable-url.css
 [test_variables_order.html]
 support-files = support/external-variable-url.css
 [test_video_object_fit.html]
 [test_viewport_scrollbar_causing_reflow.html]
--- a/mfbt/CheckedInt.h
+++ b/mfbt/CheckedInt.h
@@ -9,16 +9,33 @@
 #ifndef mozilla_CheckedInt_h
 #define mozilla_CheckedInt_h
 
 #include <stdint.h>
 #include "mozilla/Assertions.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/IntegerTypeTraits.h"
 
+// Probe for builtin math overflow support.  Disabled for 32-bit builds for now
+// since "gcc -m32" claims to support these but its implementation is buggy.
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82274
+#if defined(HAVE_64BIT_BUILD)
+#if defined(__has_builtin)
+#define MOZ_HAS_BUILTIN_OP_OVERFLOW (__has_builtin(__builtin_add_overflow))
+#elif defined(__GNUC__)
+// (clang also defines __GNUC__ but it supports __has_builtin since at least
+//  v3.1 (released in 2012) so it won't get here.)
+#define MOZ_HAS_BUILTIN_OP_OVERFLOW (__GNUC__ >= 5)
+#else
+#define MOZ_HAS_BUILTIN_OP_OVERFLOW (0)
+#endif
+#else
+#define MOZ_HAS_BUILTIN_OP_OVERFLOW (0)
+#endif
+
 namespace mozilla {
 
 template<typename T> class CheckedInt;
 
 namespace detail {
 
 /*
  * Step 1: manually record supported types
@@ -250,44 +267,54 @@ IsInRange(U aX)
 {
   return IsInRangeImpl<T, U>::run(aX);
 }
 
 template<typename T>
 inline bool
 IsAddValid(T aX, T aY)
 {
+#if MOZ_HAS_BUILTIN_OP_OVERFLOW
+  T dummy;
+  return !__builtin_add_overflow(aX, aY, &dummy);
+#else
   // Addition is valid if the sign of aX+aY is equal to either that of aX or
   // that of aY. Since the value of aX+aY is undefined if we have a signed
   // type, we compute it using the unsigned type of the same size.  Beware!
   // These bitwise operations can return a larger integer type, if T was a
   // small type like int8_t, so we explicitly cast to T.
 
   typename MakeUnsigned<T>::Type ux = aX;
   typename MakeUnsigned<T>::Type uy = aY;
   typename MakeUnsigned<T>::Type result = ux + uy;
   return IsSigned<T>::value
          ? HasSignBit(BinaryComplement(T((result ^ aX) & (result ^ aY))))
          : BinaryComplement(aX) >= aY;
+#endif
 }
 
 template<typename T>
 inline bool
 IsSubValid(T aX, T aY)
 {
+#if MOZ_HAS_BUILTIN_OP_OVERFLOW
+  T dummy;
+  return !__builtin_sub_overflow(aX, aY, &dummy);
+#else
   // Subtraction is valid if either aX and aY have same sign, or aX-aY and aX
   // have same sign. Since the value of aX-aY is undefined if we have a signed
   // type, we compute it using the unsigned type of the same size.
   typename MakeUnsigned<T>::Type ux = aX;
   typename MakeUnsigned<T>::Type uy = aY;
   typename MakeUnsigned<T>::Type result = ux - uy;
 
   return IsSigned<T>::value
          ? HasSignBit(BinaryComplement(T((result ^ aX) & (aX ^ aY))))
          : aX >= aY;
+#endif
 }
 
 template<typename T,
          bool IsTSigned = IsSigned<T>::value,
          bool TwiceBiggerTypeIsSupported =
            IsSupported<typename TwiceBiggerType<T>::Type>::value>
 struct IsMulValidImpl {};
 
@@ -334,17 +361,22 @@ struct IsMulValidImpl<T, false, false>
     return aY == 0 ||  aX <= MaxValue<T>::value / aY;
   }
 };
 
 template<typename T>
 inline bool
 IsMulValid(T aX, T aY)
 {
+#if MOZ_HAS_BUILTIN_OP_OVERFLOW
+  T dummy;
+  return !__builtin_mul_overflow(aX, aY, &dummy);
+#else
   return IsMulValidImpl<T>::run(aX, aY);
+#endif
 }
 
 template<typename T>
 inline bool
 IsDivValid(T aX, T aY)
 {
   // Keep in mind that in the signed case, min/-1 is invalid because
   // abs(min)>max.
@@ -682,22 +714,40 @@ private:
   {                                                                           \
     if (!detail::Is##NAME##Valid(aLhs.mValue, aRhs.mValue)) {                 \
       return CheckedInt<T>(0, false);                                         \
     }                                                                         \
     return CheckedInt<T>(aLhs.mValue OP aRhs.mValue,                          \
                          aLhs.mIsValid && aRhs.mIsValid);                     \
   }
 
+#if MOZ_HAS_BUILTIN_OP_OVERFLOW
+#define MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR2(NAME, OP, FUN)                  \
+  template<typename T>                                                        \
+  inline CheckedInt<T>                                                        \
+  operator OP(const CheckedInt<T>& aLhs, const CheckedInt<T>& aRhs)           \
+  {                                                                           \
+    T result;                                                                 \
+    if (FUN(aLhs.mValue, aRhs.mValue, &result)) {                             \
+      return CheckedInt<T>(0, false);                                         \
+    }                                                                         \
+    return CheckedInt<T>(result, aLhs.mIsValid && aRhs.mIsValid);             \
+  }
+MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR2(Add, +, __builtin_add_overflow)
+MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR2(Sub, -, __builtin_sub_overflow)
+MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR2(Mul, *, __builtin_mul_overflow)
+#undef MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR2
+#else
 MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR(Add, +)
 MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR(Sub, -)
 MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR(Mul, *)
+#endif
+
 MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR(Div, /)
 MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR(Mod, %)
-
 #undef MOZ_CHECKEDINT_BASIC_BINARY_OPERATOR
 
 // Implement castToCheckedInt<T>(x), making sure that
 //  - it allows x to be either a CheckedInt<T> or any integer type
 //    that can be casted to T
 //  - if x is already a CheckedInt<T>, we just return a reference to it,
 //    instead of copying it (optimization)
 
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoService.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoService.java
@@ -66,20 +66,32 @@ public class GeckoService extends Servic
             default:
                 throw new UnsupportedOperationException(event);
             }
         }
     }
 
     private static final EventListener EVENT_LISTENER = new EventListener();
 
+    private static RuntimeException bug1401737Diag;
+
     public static void register() {
         if (DEBUG) {
             Log.d(LOGTAG, "Registered listener");
         }
+
+        // Diagnose bug 1401737. register() is unexpectedly getting called a second time.
+        // We know the stack for the second call, but we want to collect stack for the first call.
+        if (bug1401737Diag == null) {
+            bug1401737Diag = new IllegalStateException("Bug 1401737 diagnostic crash");
+        } else {
+            Log.e(LOGTAG, "register() is called a second time", new Exception());
+            throw bug1401737Diag;
+        }
+
         EventDispatcher.getInstance().registerGeckoThreadListener(EVENT_LISTENER,
                 "Gecko:ScheduleRun");
     }
 
     public static void unregister() {
         if (DEBUG) {
             Log.d(LOGTAG, "Unregistered listener");
         }
--- a/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
@@ -213,16 +213,20 @@ public class CustomTabsActivity extends 
             return IntentUtil.getAnimationPackageName(new SafeIntent(getIntent()));
         } else {
             return super.getPackageName();
         }
     }
 
     @Override
     public void finish() {
+        if (mGeckoView != null) {
+            mGeckoView.loadUri("about:blank");
+        }
+
         super.finish();
 
         final SafeIntent intent = new SafeIntent(getIntent());
         // When 3rd party app launch this Activity, it could also specify custom exit-animation.
         if (IntentUtil.hasExitAnimation(intent)) {
             usingCustomAnimation = true;
             overridePendingTransition(IntentUtil.getEnterAnimationRes(intent),
                     IntentUtil.getExitAnimationRes(intent));
--- a/parser/html/nsHtml5TreeOperation.cpp
+++ b/parser/html/nsHtml5TreeOperation.cpp
@@ -679,17 +679,17 @@ nsHtml5TreeOperation::AppendDoctypeToDoc
   // Adapted from nsXMLContentSink
   // Create a new doctype node
   nsCOMPtr<nsIDOMDocumentType> docType;
   NS_NewDOMDocumentType(getter_AddRefs(docType),
                         aBuilder->GetNodeInfoManager(),
                         aName,
                         aPublicId,
                         aSystemId,
-                        NullString());
+                        VoidString());
   NS_ASSERTION(docType, "Doctype creation failed.");
   nsCOMPtr<nsIContent> asContent = do_QueryInterface(docType);
   return AppendToDocument(asContent, aBuilder);
 }
 
 nsIContent*
 nsHtml5TreeOperation::GetDocumentFragmentForTemplate(nsIContent* aNode)
 {
--- a/parser/htmlparser/nsElementTable.cpp
+++ b/parser/htmlparser/nsElementTable.cpp
@@ -1,31 +1,79 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=2 sw=2 et tw=78: */
+/* -*- 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 "nsIAtom.h"
 #include "nsElementTable.h"
 
-/***************************************************************************** 
-  Now it's time to list all the html elements all with their capabilities...
-******************************************************************************/
+static const int kNone= 0x0;
+
+static const int kHTMLContent   = 0x0001; //  HEAD, (FRAMESET | BODY)
+static const int kHeadContent   = 0x0002; //  Elements that *must* be in the head.
+static const int kHeadMisc      = 0x0004; //  Elements that *can* be in the head.
+
+static const int kSpecial       = 0x0008; //  A,    IMG,  APPLET, OBJECT, FONT, BASEFONT, BR, SCRIPT, 
+                                          //  MAP,  Q,    SUB,    SUP,    SPAN, BDO,      IFRAME
+
+static const int kFormControl   = 0x0010; //  INPUT SELECT  TEXTAREA  LABEL BUTTON
+static const int kPreformatted  = 0x0020; //  PRE
+static const int kPreExclusion  = 0x0040; //  IMG,  OBJECT, APPLET, BIG,  SMALL,  SUB,  SUP,  FONT, BASEFONT
+static const int kFontStyle     = 0x0080; //  TT, I, B, U, S, STRIKE, BIG, SMALL
+static const int kPhrase        = 0x0100; //  EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM
+static const int kHeading       = 0x0200; //  H1..H6
+static const int kBlockMisc     = 0x0400; //  OBJECT, SCRIPT
+static const int kBlock         = 0x0800; //  ADDRESS, BLOCKQUOTE, CENTER, DIV, DL, FIELDSET, FORM, 
+                                          //  ISINDEX, HR, NOSCRIPT, NOFRAMES, P, TABLE
+static const int kList          = 0x1000; //  UL, OL, DIR, MENU
+static const int kPCDATA        = 0x2000; //  plain text and entities...
+static const int kSelf          = 0x4000; //  whatever THIS tag is...
+static const int kExtensions    = 0x8000; //  BGSOUND, WBR, NOBR
+static const int kTable         = 0x10000;//  TR,TD,THEAD,TBODY,TFOOT,CAPTION,TH
+static const int kDLChild       = 0x20000;//  DL, DT
+static const int kCDATA         = 0x40000;//  just plain text...
 
-// The Element Table (sung to the tune of Modern Major General)
+static const int kInlineEntity  = (kPCDATA|kFontStyle|kPhrase|kSpecial|kFormControl|kExtensions);  //  #PCDATA, %fontstyle, %phrase, %special, %formctrl
+static const int kBlockEntity   = (kHeading|kList|kPreformatted|kBlock); //  %heading, %list, %preformatted, %block
+static const int kFlowEntity    = (kBlockEntity|kInlineEntity); //  %blockentity, %inlineentity
+static const int kAllTags       = 0xffffff;
+
+// Is aTest a member of aBitset?
+static bool
+TestBits(int32_t aBitset, int32_t aTest)
+{
+  if (aTest) {
+    int32_t result = aBitset & aTest;
+    return result == aTest;
+  }
+  return false;
+}
+
+struct HTMLElement
+{
+  bool IsMemberOf(int32_t aBitset) const
+  {
+    return TestBits(aBitset, mParentBits);
+  }
+
+#ifdef DEBUG
+  nsHTMLTag mTagID;
+#endif
+  int mParentBits;  // defines groups that can contain this element
+  bool mLeaf;
+};
 
 #ifdef DEBUG
 #define ELEM(tag, parent, leaf) { eHTMLTag_##tag, parent, leaf },
 #else
 #define ELEM(tag, parent, leaf) { parent, leaf },
 #endif
 
-const nsHTMLElement gHTMLElements[] = {
+static const HTMLElement gHTMLElements[] = {
   ELEM(unknown,     kNone,                       true)
   ELEM(a,           kSpecial,                    false)
   ELEM(abbr,        kPhrase,                     false)
   ELEM(acronym,     kPhrase,                     false)
   ELEM(address,     kBlock,                      false)
   ELEM(applet,      kSpecial,                    false)
   ELEM(area,        kNone,                       true)
   ELEM(article,     kBlock,                      false)
@@ -167,37 +215,36 @@ const nsHTMLElement gHTMLElements[] = {
   ELEM(doctypeDecl, kFlowEntity,                 false)
   ELEM(markupDecl,  kFlowEntity,                 false)
   ELEM(instruction, kFlowEntity,                 false)
   ELEM(userdefined, (kFlowEntity|kHeadMisc),     false)
 };
 
 #undef ELEM
 
-/*********************************************************************************************/
-
-bool nsHTMLElement::IsMemberOf(int32_t aSet) const
-{
-  return TestBits(aSet, mParentBits);
-}
-
-bool nsHTMLElement::IsContainer(eHTMLTags aId)
+bool
+nsHTMLElement::IsContainer(nsHTMLTag aId)
 {
   return !gHTMLElements[aId].mLeaf;
 }
 
-bool nsHTMLElement::IsBlock(eHTMLTags aId)
+bool
+nsHTMLElement::IsBlock(nsHTMLTag aId)
 {
   return gHTMLElements[aId].IsMemberOf(kBlock)       ||
          gHTMLElements[aId].IsMemberOf(kBlockEntity) ||
          gHTMLElements[aId].IsMemberOf(kHeading)     ||
          gHTMLElements[aId].IsMemberOf(kPreformatted)||
          gHTMLElements[aId].IsMemberOf(kList);
 }
 
 #ifdef DEBUG
-void CheckElementTable()
+void
+CheckElementTable()
 {
-  for (eHTMLTags t = eHTMLTag_unknown; t <= eHTMLTag_userdefined; t = eHTMLTags(t + 1)) {
-    NS_ASSERTION(gHTMLElements[t].mTagID == t, "gHTMLElements entries does match tag list.");
+  for (nsHTMLTag t = eHTMLTag_unknown;
+       t <= eHTMLTag_userdefined;
+       t = nsHTMLTag(t + 1)) {
+    MOZ_ASSERT(gHTMLElements[t].mTagID == t,
+               "gHTMLElements entries does match tag list.");
   }
 }
 #endif
--- a/parser/htmlparser/nsElementTable.h
+++ b/parser/htmlparser/nsElementTable.h
@@ -1,95 +1,22 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* -*- 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/. */
 
-
-/**
- * MODULE NOTES:
- * @update  gess 4/1/98
- * 
- */
-
-
-
-#ifndef _NSELEMENTABLE
-#define _NSELEMENTABLE
+#ifndef nsElementTable_h
+#define nsElementTable_h
 
 #include "nsHTMLTags.h"
-#include "nsIDTD.h"
-
-//*********************************************************************************************
-// The following ints define the standard groups of HTML elements...
-//*********************************************************************************************
-
-static const int kNone= 0x0;
-
-static const int kHTMLContent   = 0x0001; //  HEAD, (FRAMESET | BODY)
-static const int kHeadContent   = 0x0002; //  Elements that *must* be in the head.
-static const int kHeadMisc      = 0x0004; //  Elements that *can* be in the head.
-
-static const int kSpecial       = 0x0008; //  A,    IMG,  APPLET, OBJECT, FONT, BASEFONT, BR, SCRIPT, 
-                                          //  MAP,  Q,    SUB,    SUP,    SPAN, BDO,      IFRAME
-
-static const int kFormControl   = 0x0010; //  INPUT SELECT  TEXTAREA  LABEL BUTTON
-static const int kPreformatted  = 0x0020; //  PRE
-static const int kPreExclusion  = 0x0040; //  IMG,  OBJECT, APPLET, BIG,  SMALL,  SUB,  SUP,  FONT, BASEFONT
-static const int kFontStyle     = 0x0080; //  TT, I, B, U, S, STRIKE, BIG, SMALL
-static const int kPhrase        = 0x0100; //  EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM
-static const int kHeading       = 0x0200; //  H1..H6
-static const int kBlockMisc     = 0x0400; //  OBJECT, SCRIPT
-static const int kBlock         = 0x0800; //  ADDRESS, BLOCKQUOTE, CENTER, DIV, DL, FIELDSET, FORM, 
-                                          //  ISINDEX, HR, NOSCRIPT, NOFRAMES, P, TABLE
-static const int kList          = 0x1000; //  UL, OL, DIR, MENU
-static const int kPCDATA        = 0x2000; //  plain text and entities...
-static const int kSelf          = 0x4000; //  whatever THIS tag is...
-static const int kExtensions    = 0x8000; //  BGSOUND, WBR, NOBR
-static const int kTable         = 0x10000;//  TR,TD,THEAD,TBODY,TFOOT,CAPTION,TH
-static const int kDLChild       = 0x20000;//  DL, DT
-static const int kCDATA         = 0x40000;//  just plain text...
-
-static const int kInlineEntity  = (kPCDATA|kFontStyle|kPhrase|kSpecial|kFormControl|kExtensions);  //  #PCDATA, %fontstyle, %phrase, %special, %formctrl
-static const int kBlockEntity   = (kHeading|kList|kPreformatted|kBlock); //  %heading, %list, %preformatted, %block
-static const int kFlowEntity    = (kBlockEntity|kInlineEntity); //  %blockentity, %inlineentity
-static const int kAllTags       = 0xffffff;
-
-
-//*********************************************************************************************
-// The following ints define the standard groups of HTML elements...
-//*********************************************************************************************
 
 #ifdef DEBUG
-extern void CheckElementTable();
+void CheckElementTable();
 #endif
 
-
-/**
- * We're asking the question: is aTest a member of bitset. 
- *
- * @param 
- * @return TRUE or FALSE
- */
-inline bool TestBits(int aBitset,int aTest) {
-  if(aTest) {
-    int32_t result=(aBitset & aTest);
-    return bool(result==aTest);
-  }
-  return false;
-}
-
-struct nsHTMLElement {
-  bool            IsMemberOf(int32_t aType) const;
-
-#ifdef DEBUG
-  eHTMLTags       mTagID;
-#endif
-  int             mParentBits;        //defines groups that can contain this element
-  bool            mLeaf;
-
-  static  bool    IsContainer(eHTMLTags aTag);
-  static  bool    IsBlock(eHTMLTags aTag);
+struct nsHTMLElement
+{
+  static bool IsContainer(nsHTMLTag aTag);
+  static bool IsBlock(nsHTMLTag aTag);
 };
 
-extern const nsHTMLElement gHTMLElements[];
-
-#endif
+#endif // nsElementTable_h
--- a/parser/htmlparser/nsHTMLTags.h
+++ b/parser/htmlparser/nsHTMLTags.h
@@ -79,11 +79,9 @@ private:
   static nsIAtom* sTagAtomTable[eHTMLTag_userdefined - 1];
   static const char16_t* const sTagUnicodeTable[];
 
   static int32_t gTableRefCount;
   static PLHashTable* gTagTable;
   static PLHashTable* gTagAtomTable;
 };
 
-#define eHTMLTags nsHTMLTag
-
 #endif /* nsHTMLTags_h___ */
--- a/testing/web-platform/meta/FileAPI/idlharness.worker.js.ini
+++ b/testing/web-platform/meta/FileAPI/idlharness.worker.js.ini
@@ -17,8 +17,9 @@
   [ArrayBuffer interface: existence and properties of interface object]
     expected: FAIL
 
   [EventTarget interface: existence and properties of interface object]
     expected: FAIL
 
   [Event interface: existence and properties of interface object]
     expected: FAIL
+
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -302,16 +302,1048 @@
     ]
    ],
    "console/console-count-logging-manual.html": [
     [
      "/console/console-count-logging-manual.html",
      {}
     ]
    ],
+   "core-aam/alert-manual.html": [
+    [
+     "/core-aam/alert-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/alertdialog-manual.html": [
+    [
+     "/core-aam/alertdialog-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/application-manual.html": [
+    [
+     "/core-aam/application-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-atomic_false-manual.html": [
+    [
+     "/core-aam/aria-atomic_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-atomic_true-manual.html": [
+    [
+     "/core-aam/aria-atomic_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-autocomplete_both_new-manual.html": [
+    [
+     "/core-aam/aria-autocomplete_both_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-autocomplete_inline_new-manual.html": [
+    [
+     "/core-aam/aria-autocomplete_inline_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-autocomplete_list_new-manual.html": [
+    [
+     "/core-aam/aria-autocomplete_list_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-busy_false-manual.html": [
+    [
+     "/core-aam/aria-busy_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-busy_true-manual.html": [
+    [
+     "/core-aam/aria-busy_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-checked_false_on_checkbox-manual.html": [
+    [
+     "/core-aam/aria-checked_false_on_checkbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-checked_false_on_menuitemradio-manual.html": [
+    [
+     "/core-aam/aria-checked_false_on_menuitemradio-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-checked_mixed-manual.html": [
+    [
+     "/core-aam/aria-checked_mixed-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-checked_true_on_checkbox-manual.html": [
+    [
+     "/core-aam/aria-checked_true_on_checkbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-checked_true_on_menuitemradio-manual.html": [
+    [
+     "/core-aam/aria-checked_true_on_menuitemradio-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-colcount_new-manual.html": [
+    [
+     "/core-aam/aria-colcount_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-colindex_new-manual.html": [
+    [
+     "/core-aam/aria-colindex_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-colspan_new-manual.html": [
+    [
+     "/core-aam/aria-colspan_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-controls-manual.html": [
+    [
+     "/core-aam/aria-controls-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-current_with_non-false_allowed_value_new-manual.html": [
+    [
+     "/core-aam/aria-current_with_non-false_allowed_value_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-current_with_unrecognized_value_new-manual.html": [
+    [
+     "/core-aam/aria-current_with_unrecognized_value_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-describedby-manual.html": [
+    [
+     "/core-aam/aria-describedby-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-details_new-manual.html": [
+    [
+     "/core-aam/aria-details_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-disabled_false-manual.html": [
+    [
+     "/core-aam/aria-disabled_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-disabled_true-manual.html": [
+    [
+     "/core-aam/aria-disabled_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_copy-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_copy-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_execute-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_execute-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_link-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_link-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_move-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_move-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_none-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_none-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-dropeffect_popup-manual.html": [
+    [
+     "/core-aam/aria-dropeffect_popup-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-errormessage-manual.html": [
+    [
+     "/core-aam/aria-errormessage-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-expanded_false-manual.html": [
+    [
+     "/core-aam/aria-expanded_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-expanded_true-manual.html": [
+    [
+     "/core-aam/aria-expanded_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-flowto-manual.html": [
+    [
+     "/core-aam/aria-flowto-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-grabbed_false-manual.html": [
+    [
+     "/core-aam/aria-grabbed_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-grabbed_true-manual.html": [
+    [
+     "/core-aam/aria-grabbed_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_dialog_new-manual.html": [
+    [
+     "/core-aam/aria-haspopup_dialog_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_false-manual.html": [
+    [
+     "/core-aam/aria-haspopup_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_listbox_new-manual.html": [
+    [
+     "/core-aam/aria-haspopup_listbox_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_menu_new-manual.html": [
+    [
+     "/core-aam/aria-haspopup_menu_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_tree_new-manual.html": [
+    [
+     "/core-aam/aria-haspopup_tree_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-haspopup_true-manual.html": [
+    [
+     "/core-aam/aria-haspopup_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-hidden_true-manual.html": [
+    [
+     "/core-aam/aria-hidden_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-invalid_false-manual.html": [
+    [
+     "/core-aam/aria-invalid_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-invalid_grammar-manual.html": [
+    [
+     "/core-aam/aria-invalid_grammar-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-invalid_spelling-manual.html": [
+    [
+     "/core-aam/aria-invalid_spelling-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-invalid_true-manual.html": [
+    [
+     "/core-aam/aria-invalid_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-invalid_with_unrecognized_value-manual.html": [
+    [
+     "/core-aam/aria-invalid_with_unrecognized_value-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-keyshortcuts_new-manual.html": [
+    [
+     "/core-aam/aria-keyshortcuts_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-label-manual.html": [
+    [
+     "/core-aam/aria-label-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-labelledby-manual.html": [
+    [
+     "/core-aam/aria-labelledby-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-level_on_heading_new-manual.html": [
+    [
+     "/core-aam/aria-level_on_heading_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-level_on_non-heading-manual.html": [
+    [
+     "/core-aam/aria-level_on_non-heading-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-live_assertive-manual.html": [
+    [
+     "/core-aam/aria-live_assertive-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-live_off-manual.html": [
+    [
+     "/core-aam/aria-live_off-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-live_polite-manual.html": [
+    [
+     "/core-aam/aria-live_polite-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-modal_false_new-manual.html": [
+    [
+     "/core-aam/aria-modal_false_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-modal_true_new-manual.html": [
+    [
+     "/core-aam/aria-modal_true_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-multiline_false-manual.html": [
+    [
+     "/core-aam/aria-multiline_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-multiline_true-manual.html": [
+    [
+     "/core-aam/aria-multiline_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-multiselectable_false-manual.html": [
+    [
+     "/core-aam/aria-multiselectable_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-multiselectable_true-manual.html": [
+    [
+     "/core-aam/aria-multiselectable_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-orientation_horizontal-manual.html": [
+    [
+     "/core-aam/aria-orientation_horizontal-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-orientation_undefined_new-manual.html": [
+    [
+     "/core-aam/aria-orientation_undefined_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-orientation_vertical-manual.html": [
+    [
+     "/core-aam/aria-orientation_vertical-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-owns_may_need_manual_verification-manual.html": [
+    [
+     "/core-aam/aria-owns_may_need_manual_verification-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-placeholder_new-manual.html": [
+    [
+     "/core-aam/aria-placeholder_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-posinset-manual.html": [
+    [
+     "/core-aam/aria-posinset-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-pressed_false-manual.html": [
+    [
+     "/core-aam/aria-pressed_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-pressed_mixed-manual.html": [
+    [
+     "/core-aam/aria-pressed_mixed-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-pressed_true-manual.html": [
+    [
+     "/core-aam/aria-pressed_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-readonly_false-manual.html": [
+    [
+     "/core-aam/aria-readonly_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-readonly_is_unspecified_on_gridcell_new-manual.html": [
+    [
+     "/core-aam/aria-readonly_is_unspecified_on_gridcell_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-readonly_true_on_checkbox-manual.html": [
+    [
+     "/core-aam/aria-readonly_true_on_checkbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-readonly_true_on_radiogroup-manual.html": [
+    [
+     "/core-aam/aria-readonly_true_on_radiogroup-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-readonly_true_on_textbox-manual.html": [
+    [
+     "/core-aam/aria-readonly_true_on_textbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-relevant-manual.html": [
+    [
+     "/core-aam/aria-relevant-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-required_true-manual.html": [
+    [
+     "/core-aam/aria-required_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-roledescription_is_empty_or_whitespace_characters_new-manual.html": [
+    [
+     "/core-aam/aria-roledescription_is_empty_or_whitespace_characters_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-roledescription_new-manual.html": [
+    [
+     "/core-aam/aria-roledescription_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-rowcount_new-manual.html": [
+    [
+     "/core-aam/aria-rowcount_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-rowindex_new-manual.html": [
+    [
+     "/core-aam/aria-rowindex_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-rowspan_new-manual.html": [
+    [
+     "/core-aam/aria-rowspan_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-selected_false-manual.html": [
+    [
+     "/core-aam/aria-selected_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-selected_true-manual.html": [
+    [
+     "/core-aam/aria-selected_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-setsize_-1-manual.html": [
+    [
+     "/core-aam/aria-setsize_-1-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-setsize_3-manual.html": [
+    [
+     "/core-aam/aria-setsize_3-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-sort_ascending-manual.html": [
+    [
+     "/core-aam/aria-sort_ascending-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-sort_descending-manual.html": [
+    [
+     "/core-aam/aria-sort_descending-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-sort_none-manual.html": [
+    [
+     "/core-aam/aria-sort_none-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-sort_other-manual.html": [
+    [
+     "/core-aam/aria-sort_other-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-valuemax-manual.html": [
+    [
+     "/core-aam/aria-valuemax-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-valuemin-manual.html": [
+    [
+     "/core-aam/aria-valuemin-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-valuenow-manual.html": [
+    [
+     "/core-aam/aria-valuenow-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/aria-valuetext-manual.html": [
+    [
+     "/core-aam/aria-valuetext-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/article-manual.html": [
+    [
+     "/core-aam/article-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/banner_new-manual.html": [
+    [
+     "/core-aam/banner_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/button_with_aria-haspopup_dialog_new-manual.html": [
+    [
+     "/core-aam/button_with_aria-haspopup_dialog_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/button_with_aria-haspopup_true_new-manual.html": [
+    [
+     "/core-aam/button_with_aria-haspopup_true_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/button_with_default_values_for_aria-pressed_and_aria-haspopup-manual.html": [
+    [
+     "/core-aam/button_with_default_values_for_aria-pressed_and_aria-haspopup-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/button_with_defined_value_for_aria-pressed-manual.html": [
+    [
+     "/core-aam/button_with_defined_value_for_aria-pressed-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/cell_new-manual.html": [
+    [
+     "/core-aam/cell_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/checkbox-manual.html": [
+    [
+     "/core-aam/checkbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/columnheader-manual.html": [
+    [
+     "/core-aam/columnheader-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/combobox-manual.html": [
+    [
+     "/core-aam/combobox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/complementary_new-manual.html": [
+    [
+     "/core-aam/complementary_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/contentinfo_new-manual.html": [
+    [
+     "/core-aam/contentinfo_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/definition-manual.html": [
+    [
+     "/core-aam/definition-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/dialog-manual.html": [
+    [
+     "/core-aam/dialog-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/directory-manual.html": [
+    [
+     "/core-aam/directory-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/document-manual.html": [
+    [
+     "/core-aam/document-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/feed_new-manual.html": [
+    [
+     "/core-aam/feed_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/figure_new-manual.html": [
+    [
+     "/core-aam/figure_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/form_new-manual.html": [
+    [
+     "/core-aam/form_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/grid-manual.html": [
+    [
+     "/core-aam/grid-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/gridcell-manual.html": [
+    [
+     "/core-aam/gridcell-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/group-manual.html": [
+    [
+     "/core-aam/group-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/heading-manual.html": [
+    [
+     "/core-aam/heading-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/img-manual.html": [
+    [
+     "/core-aam/img-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/link-manual.html": [
+    [
+     "/core-aam/link-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/list-manual.html": [
+    [
+     "/core-aam/list-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/listbox_not_owned_by_or_child_of_combobox-manual.html": [
+    [
+     "/core-aam/listbox_not_owned_by_or_child_of_combobox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/listbox_owned_by_or_child_of_combobox-manual.html": [
+    [
+     "/core-aam/listbox_owned_by_or_child_of_combobox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/listitem-manual.html": [
+    [
+     "/core-aam/listitem-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/log-manual.html": [
+    [
+     "/core-aam/log-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/main_new-manual.html": [
+    [
+     "/core-aam/main_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/marquee-manual.html": [
+    [
+     "/core-aam/marquee-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/math-manual.html": [
+    [
+     "/core-aam/math-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menu-manual.html": [
+    [
+     "/core-aam/menu-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menubar-manual.html": [
+    [
+     "/core-aam/menubar-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menuitem_not_owned_by_or_child_of_group-manual.html": [
+    [
+     "/core-aam/menuitem_not_owned_by_or_child_of_group-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menuitem_owned_by_or_child_of_group-manual.html": [
+    [
+     "/core-aam/menuitem_owned_by_or_child_of_group-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menuitemcheckbox-manual.html": [
+    [
+     "/core-aam/menuitemcheckbox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/menuitemradio-manual.html": [
+    [
+     "/core-aam/menuitemradio-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/navigation_new-manual.html": [
+    [
+     "/core-aam/navigation_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/none_new-manual.html": [
+    [
+     "/core-aam/none_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/note-manual.html": [
+    [
+     "/core-aam/note-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/option_inside_combobox-manual.html": [
+    [
+     "/core-aam/option_inside_combobox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/option_not_inside_combobox-manual.html": [
+    [
+     "/core-aam/option_not_inside_combobox-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/presentation-manual.html": [
+    [
+     "/core-aam/presentation-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/progressbar-manual.html": [
+    [
+     "/core-aam/progressbar-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/radio-manual.html": [
+    [
+     "/core-aam/radio-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/radiogroup-manual.html": [
+    [
+     "/core-aam/radiogroup-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/region_with_an_accessible_name_new-manual.html": [
+    [
+     "/core-aam/region_with_an_accessible_name_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/region_without_an_accessible_name_new-manual.html": [
+    [
+     "/core-aam/region_without_an_accessible_name_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/row_inside_treegrid-manual.html": [
+    [
+     "/core-aam/row_inside_treegrid-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/row_not_inside_treegrid-manual.html": [
+    [
+     "/core-aam/row_not_inside_treegrid-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/rowgroup-manual.html": [
+    [
+     "/core-aam/rowgroup-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/rowheader-manual.html": [
+    [
+     "/core-aam/rowheader-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/scrollbar-manual.html": [
+    [
+     "/core-aam/scrollbar-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/search_new-manual.html": [
+    [
+     "/core-aam/search_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/searchbox_new-manual.html": [
+    [
+     "/core-aam/searchbox_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/separator_focusable_new-manual.html": [
+    [
+     "/core-aam/separator_focusable_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/separator_non-focusable-manual.html": [
+    [
+     "/core-aam/separator_non-focusable-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/slider-manual.html": [
+    [
+     "/core-aam/slider-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/spinbutton-manual.html": [
+    [
+     "/core-aam/spinbutton-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/status-manual.html": [
+    [
+     "/core-aam/status-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/switch_new-manual.html": [
+    [
+     "/core-aam/switch_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/tab-manual.html": [
+    [
+     "/core-aam/tab-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/table_new-manual.html": [
+    [
+     "/core-aam/table_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/tablist-manual.html": [
+    [
+     "/core-aam/tablist-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/tabpanel-manual.html": [
+    [
+     "/core-aam/tabpanel-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/term_new-manual.html": [
+    [
+     "/core-aam/term_new-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/textbox_when_aria-multiline_is_false-manual.html": [
+    [
+     "/core-aam/textbox_when_aria-multiline_is_false-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/textbox_when_aria-multiline_is_true-manual.html": [
+    [
+     "/core-aam/textbox_when_aria-multiline_is_true-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/timer-manual.html": [
+    [
+     "/core-aam/timer-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/toolbar-manual.html": [
+    [
+     "/core-aam/toolbar-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/tooltip-manual.html": [
+    [
+     "/core-aam/tooltip-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/tree-manual.html": [
+    [
+     "/core-aam/tree-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/treegrid-manual.html": [
+    [
+     "/core-aam/treegrid-manual.html",
+     {}
+    ]
+   ],
+   "core-aam/treeitem-manual.html": [
+    [
+     "/core-aam/treeitem-manual.html",
+     {}
+    ]
+   ],
    "css/CSS2/backgrounds/background-012.xht": [
     [
      "/css/CSS2/backgrounds/background-012.xht",
      {}
     ]
    ],
    "css/CSS2/backgrounds/background-019.xht": [
     [
@@ -10274,16 +11306,22 @@
     ]
    ],
    "css/vendor-imports/mozilla/mozilla-central-reftests/multicol3/moz-multicol3-column-balancing-break-inside-avoid-1.html": [
     [
      "/css/vendor-imports/mozilla/mozilla-central-reftests/multicol3/moz-multicol3-column-balancing-break-inside-avoid-1.html",
      {}
     ]
    ],
+   "cssom-view/scrollBoundaryBehavior-manual.html": [
+    [
+     "/cssom-view/scrollBoundaryBehavior-manual.html",
+     {}
+    ]
+   ],
    "dpub-aam/doc-abstract-manual.html": [
     [
      "/dpub-aam/doc-abstract-manual.html",
      {}
     ]
    ],
    "dpub-aam/doc-acknowledgments-manual.html": [
     [
@@ -11960,19 +12998,31 @@
     ]
    ],
    "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html": [
     [
      "/html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html",
      {}
     ]
    ],
-   "input-events/input-events-typing-data-manual.html": [
-    [
-     "/input-events/input-events-typing-data-manual.html",
+   "input-events/input-events-cut-paste-manual.html": [
+    [
+     "/input-events/input-events-cut-paste-manual.html",
+     {}
+    ]
+   ],
+   "input-events/input-events-get-target-ranges-manual.html": [
+    [
+     "/input-events/input-events-get-target-ranges-manual.html",
+     {}
+    ]
+   ],
+   "input-events/input-events-typing-manual.html": [
+    [
+     "/input-events/input-events-typing-manual.html",
      {}
     ]
    ],
    "magnetometer/Magnetometer_onerror-manual.https.html": [
     [
      "/magnetometer/Magnetometer_onerror-manual.https.html",
      {}
     ]
@@ -12368,16 +13418,34 @@
     ]
    ],
    "page-visibility/test_tab_state_change-manual.html": [
     [
      "/page-visibility/test_tab_state_change-manual.html",
      {}
     ]
    ],
+   "payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html": [
+    [
+     "/payment-request/PaymentRequestUpdateEvent/updateWith-duplicate-shipping-options-manual.https.html",
+     {}
+    ]
+   ],
+   "payment-request/algorithms-manual.https.html": [
+    [
+     "/payment-request/algorithms-manual.https.html",
+     {}
+    ]
+   ],
+   "payment-request/change-shipping-option-manual.https.html": [
+    [
+     "/payment-request/change-shipping-option-manual.https.html",
+     {}
+    ]
+   ],
    "payment-request/payment-response/complete-method-manual.https.html": [
     [
      "/payment-request/payment-response/complete-method-manual.https.html",
      {}
     ]
    ],
    "payment-request/payment-response/methodName-attribute-manual.https.html": [
     [
@@ -12416,22 +13484,34 @@
     ]
    ],
    "payment-request/payment-response/shippingOption-attribute-manual.https.html": [
     [
      "/payment-request/payment-response/shippingOption-attribute-manual.https.html",
      {}
     ]
    ],
+   "payment-request/shipping-address-changed-manual.https.html": [
+    [
+     "/payment-request/shipping-address-changed-manual.https.html",
+     {}
+    ]
+   ],
    "payment-request/updateWith-method-pmi-handling-manual.https.html": [
     [
      "/payment-request/updateWith-method-pmi-handling-manual.https.html",
      {}
     ]
    ],
+   "payment-request/user-abort-algorithm-manual.https.html": [
+    [
+     "/payment-request/user-abort-algorithm-manual.https.html",
+     {}
+    ]
+   ],
    "pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html": [
     [
      "/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html",
      {}
     ]
    ],
    "pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html": [
     [
@@ -16376,16 +17456,22 @@
     ]
    ],
    "vibration/simple-scalar-manual.html": [
     [
      "/vibration/simple-scalar-manual.html",
      {}
     ]
    ],
+   "viewport/viewport-attribute-event-handlers-manual.html": [
+    [
+     "/viewport/viewport-attribute-event-handlers-manual.html",
+     {}
+    ]
+   ],
    "viewport/viewport-dimensions-custom-scrollbars-manual.html": [
     [
      "/viewport/viewport-dimensions-custom-scrollbars-manual.html",
      {}
     ]
    ],
    "viewport/viewport-dimensions-scrollbars-manual.html": [
     [
@@ -18670,22 +19756,22 @@
       [
        "/css-backgrounds/background-clip-color-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
-   "css-font-display/font-display.html": [
-    [
-     "/css-font-display/font-display.html",
-     [
-      [
-       "/css-font-display/font-display-ref.html",
+   "css-fonts/font-display/font-display.html": [
+    [
+     "/css-fonts/font-display/font-display.html",
+     [
+      [
+       "/css-fonts/font-display/font-display-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
    "css-fonts/matching/fixed-stretch-style-over-weight.html": [
     [
@@ -19330,16 +20416,64 @@
       [
        "/css-paint-api/parse-input-arguments-018-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css-paint-api/parse-input-arguments-019.html": [
+    [
+     "/css-paint-api/parse-input-arguments-019.html",
+     [
+      [
+       "/css-paint-api/parse-input-arguments-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css-paint-api/parse-input-arguments-020.html": [
+    [
+     "/css-paint-api/parse-input-arguments-020.html",
+     [
+      [
+       "/css-paint-api/parse-input-arguments-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css-paint-api/parse-input-arguments-021.html": [
+    [
+     "/css-paint-api/parse-input-arguments-021.html",
+     [
+      [
+       "/css-paint-api/parse-input-arguments-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css-paint-api/parse-input-arguments-022.html": [
+    [
+     "/css-paint-api/parse-input-arguments-022.html",
+     [
+      [
+       "/css-paint-api/parse-input-arguments-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css-paint-api/registered-properties-in-custom-paint.html": [
     [
      "/css-paint-api/registered-properties-in-custom-paint.html",
      [
       [
        "/css-paint-api/parse-input-arguments-ref.html",
        "=="
       ]
@@ -111190,22 +112324,22 @@
       [
        "/css/css-images-3/gradients-with-border-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
-   "css/css-logical-props-1/cascading-001.html": [
-    [
-     "/css/css-logical-props-1/cascading-001.html",
-     [
-      [
-       "/css/css-logical-props-1/cascading-001-ref.html",
+   "css/css-logical-1/cascading-001.html": [
+    [
+     "/css/css-logical-1/cascading-001.html",
+     [
+      [
+       "/css/css-logical-1/cascading-001-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
    "css/css-masking-1/clip-path-svg-content/clip-path-clip-nested-twice.svg": [
     [
@@ -126746,16 +127880,352 @@
       [
        "/css/css-text-3/text-transform/reference/text-transform-upperlower-104-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css/css-text-3/white-space/pre-wrap-001.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-001.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-002.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-002.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-003.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-003.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-004.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-004.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-005.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-005.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-006.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-006.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-007.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-007.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-008.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-008.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-009.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-009.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-010.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-010.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-011.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-011.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-012.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-012.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-013.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-013.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/pre-wrap-014.html": [
+    [
+     "/css/css-text-3/white-space/pre-wrap-014.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-001.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-001.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-002.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-002.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-003.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-003.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-004.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-004.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-005.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-005.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-006.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-006.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-007.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-007.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-008.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-008.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-009.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-009.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-010.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-010.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-011.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-011.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-012.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-012.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-013.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-013.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/textarea-pre-wrap-014.html": [
+    [
+     "/css/css-text-3/white-space/textarea-pre-wrap-014.html",
+     [
+      [
+       "/css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-text-3/white-space/white-space-collapsing-discard-001.xht": [
     [
      "/css/css-text-3/white-space/white-space-collapsing-discard-001.xht",
      [
       [
        "/css/css-text-3/white-space/reference/white-space-collapsing-discard-001-ref.xht",
        "=="
       ]
@@ -177659,16 +179129,21 @@
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-allow-lists.py": [
     [
      {}
     ]
    ],
+   "XMLHttpRequest/resources/access-control-allow-with-body.py": [
+    [
+     {}
+    ]
+   ],
    "XMLHttpRequest/resources/access-control-auth-basic.py": [
     [
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py": [
     [
      {}
@@ -177679,16 +179154,21 @@
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-basic-allow.py": [
     [
      {}
     ]
    ],
+   "XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py": [
+    [
+     {}
+    ]
+   ],
    "XMLHttpRequest/resources/access-control-basic-denied.py": [
     [
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-basic-options-not-supported.py": [
     [
      {}
@@ -177709,36 +179189,66 @@
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-basic-put-allow.py": [
     [
      {}
     ]
    ],
+   "XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py": [
+    [
+     {}
+    ]
+   ],
+   "XMLHttpRequest/resources/access-control-cookie.py": [
+    [
+     {}
+    ]
+   ],
    "XMLHttpRequest/resources/access-control-origin-header.py": [
     [
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-preflight-denied.py": [
     [
      {}
     ]
    ],
    "XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py": [
     [
      {}
     ]
    ],
+   "XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py": [
+    [
+     {}
+    ]
+   ],
+   "XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py": [
+    [
+     {}
+    ]
+   ],
    "XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py": [
     [
      {}
     ]
    ],
+   "XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py": [
+    [
+     {}
+    ]
+   ],
+   "XMLHttpRequest/resources/access-control-sandboxed-iframe.html": [
+    [
+     {}
+    ]
+   ],
    "XMLHttpRequest/resources/auth1/auth.py": [
     [
      {}
     ]
    ],
    "XMLHttpRequest/resources/auth2/auth.py": [
     [
      {}
@@ -180569,31 +182079,36 @@
      {}
     ]
    ],
    "assumptions/tools/build.sh": [
     [
      {}
     ]
    ],
-   "auxclick/OWNERS": [
-    [
-     {}
-    ]
-   ],
    "background-fetch/OWNERS": [
     [
      {}
     ]
    ],
    "background-fetch/interfaces.idl": [
     [
      {}
     ]
    ],
+   "background-fetch/resources/sw.js": [
+    [
+     {}
+    ]
+   ],
+   "background-fetch/resources/utils.js": [
+    [
+     {}
+    ]
+   ],
    "battery-status/OWNERS": [
     [
      {}
     ]
    ],
    "battery-status/support-iframe.html": [
     [
      {}
@@ -180659,17 +182174,17 @@
      {}
     ]
    ],
    "clear-site-data/support/test_utils.sub.js": [
     [
      {}
     ]
    ],
-   "clipboard/OWNERS": [
+   "clipboard-apis/OWNERS": [
     [
      {}
     ]
    ],
    "common/OWNERS": [
     [
      {}
     ]
@@ -203499,36 +205014,16 @@
      {}
     ]
    ],
    "content-security-policy/blink-contrib/object-in-svg-foreignobject.sub.html.sub.headers": [
     [
      {}
     ]
    ],
-   "content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html.sub.headers": [
-    [
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-archive.sub.html.sub.headers": [
-    [
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html.sub.headers": [
-    [
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-code.sub.html.sub.headers": [
-    [
-     {}
-    ]
-   ],
    "content-security-policy/blink-contrib/object-src-no-url-allowed.sub.html.sub.headers": [
     [
      {}
     ]
    ],
    "content-security-policy/blink-contrib/object-src-no-url-blocked.sub.html.sub.headers": [
     [
      {}
@@ -204614,16 +206109,26 @@
      {}
     ]
    ],
    "cookies/secure/set-from-http.sub.html.headers": [
     [
      {}
     ]
    ],
+   "core-aam/OWNERS": [
+    [
+     {}
+    ]
+   ],
+   "core-aam/README.md": [
+    [
+     {}
+    ]
+   ],
    "cors/OWNERS": [
     [
      {}
     ]
    ],
    "cors/README.md": [
     [
      {}
@@ -204694,22 +206199,22 @@
      {}
     ]
    ],
    "css-backgrounds/background-clip-color-repaint-ref.html": [
     [
      {}
     ]
    ],
-   "css-font-display/font-display-ref.html": [
-    [
-     {}
-    ]
-   ],
-   "css-font-display/resources/slow-ahem-loading.py": [
+   "css-fonts/font-display/font-display-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css-fonts/font-display/resources/slow-ahem-loading.py": [
     [
      {}
     ]
    ],
    "css-fonts/matching/OWNERS": [
     [
      {}
     ]
@@ -237234,32 +238739,32 @@
      {}
     ]
    ],
    "css/css-grid-1/grid-items/support/100x100-green.png": [
     [
      {}
     ]
    ],
-   "css/css-grid-1/grid-items/support/100x50-green.png": [
-    [
-     {}
-    ]
-   ],
    "css/css-grid-1/grid-items/support/200x200-green.png": [
     [
      {}
     ]
    ],
+   "css/css-grid-1/grid-items/support/25x50-green.png": [
+    [
+     {}
+    ]
+   ],
    "css/css-grid-1/grid-items/support/500x500-green.png": [
     [
      {}
     ]
    ],
-   "css/css-grid-1/grid-items/support/50x100-green.png": [
+   "css/css-grid-1/grid-items/support/50x25-green.png": [
     [
      {}
     ]
    ],
    "css/css-grid-1/grid-items/support/50x50-green.png": [
     [
      {}
     ]
@@ -237339,16 +238844,21 @@
      {}
     ]
    ],
    "css/css-grid-1/support/check-layout-th.js": [
     [
      {}
     ]
    ],
+   "css/css-grid-1/support/style-change.js": [
+    [
+     {}
+    ]
+   ],
    "css/css-grid-1/test-plan/index.html": [
     [
      {}
     ]
    ],
    "css/css-images-3/OWNERS": [
     [
      {}
@@ -237589,27 +239099,27 @@
      {}
     ]
    ],
    "css/css-lists-3/OWNERS": [
     [
      {}
     ]
    ],
-   "css/css-logical-properties-1/OWNERS": [
-    [
-     {}
-    ]
-   ],
-   "css/css-logical-properties-1/resources/style-check.js": [
-    [
-     {}
-    ]
-   ],
-   "css/css-logical-props-1/cascading-001-ref.html": [
+   "css/css-logical-1/OWNERS": [
+    [
+     {}
+    ]
+   ],
+   "css/css-logical-1/cascading-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-logical-1/resources/style-check.js": [
     [
      {}
     ]
    ],
    "css/css-masking-1/OWNERS": [
     [
      {}
     ]
@@ -240994,16 +242504,21 @@
      {}
     ]
    ],
    "css/css-tables-3/support/base.css": [
     [
      {}
     ]
    ],
+   "css/css-tables-3/support/check-layout-th.js": [
+    [
+     {}
+    ]
+   ],
    "css/css-tables-3/visibility-collapse-colspan-003-ref.html": [
     [
      {}
     ]
    ],
    "css/css-tables-3/visibility-collapse-rowspan-005-ref.html": [
     [
      {}
@@ -244199,16 +245714,26 @@
      {}
     ]
    ],
    "css/css-text-3/text-transform/text-transform-lowercase-002-ref.xht": [
     [
      {}
     ]
    ],
+   "css/css-text-3/white-space/reference/pre-wrap-001-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-text-3/white-space/reference/textarea-pre-wrap-001-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-text-3/white-space/reference/white-space-collapsing-discard-001-ref.xht": [
     [
      {}
     ]
    ],
    "css/css-text-3/white-space/reference/white-space-collapsing-preserve-breaks-001-ref.xht": [
     [
      {}
@@ -284389,16 +285914,21 @@
      {}
     ]
    ],
    "cssom/support/test-tr.png": [
     [
      {}
     ]
    ],
+   "cssom/support/xmlss-pi.xhtml": [
+    [
+     {}
+    ]
+   ],
    "custom-elements/OWNERS": [
     [
      {}
     ]
    ],
    "custom-elements/reactions/resources/reactions.js": [
     [
      {}
@@ -286779,21 +288309,36 @@
      {}
     ]
    ],
    "ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-3.xhtml": [
     [
      {}
     ]
    ],
+   "feature-policy/OWNERS": [
+    [
+     {}
+    ]
+   ],
    "feature-policy/README.md": [
     [
      {}
     ]
    ],
+   "feature-policy/payment-allowed-by-feature-policy.https.sub.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "feature-policy/payment-disabled-by-feature-policy.https.sub.html.headers": [
+    [
+     {}
+    ]
+   ],
    "feature-policy/resources/feature-policy-payment.html": [
     [
      {}
     ]
    ],
    "feature-policy/resources/feature-policy-usb.html": [
     [
      {}
@@ -298904,16 +300449,21 @@
      {}
     ]
    ],
    "interfaces/clipboard.idl": [
     [
      {}
     ]
    ],
+   "interfaces/cssom-view.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/cssom.idl": [
     [
      {}
     ]
    ],
    "interfaces/dedicated-workers.idl": [
     [
      {}
@@ -298939,16 +300489,26 @@
      {}
     ]
    ],
    "interfaces/mediacapture-main.idl": [
     [
      {}
     ]
    ],
+   "interfaces/payment-handler.idl": [
+    [
+     {}
+    ]
+   ],
+   "interfaces/payment-request.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/remoteplayback.idl": [
     [
      {}
     ]
    ],
    "interfaces/touchevents.idl": [
     [
      {}
@@ -299019,16 +300579,21 @@
      {}
     ]
    ],
    "js/builtins/Promise-incumbent-global-subsubframe.sub.html": [
     [
      {}
     ]
    ],
+   "longtask-timing/OWNERS": [
+    [
+     {}
+    ]
+   ],
    "longtask-timing/resources/makelongtask.js": [
     [
      {}
     ]
    ],
    "longtask-timing/resources/raflongtask.js": [
     [
      {}
@@ -299674,121 +301239,16 @@
      {}
     ]
    ],
    "mediasession/README.md": [
     [
      {}
     ]
    ],
-   "microdata/conformance-requirements/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/converting-html-to-other-formats/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/converting-html-to-other-formats/json/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/dependencies/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/associating-names-with-items/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/items/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/microdata-and-other-namespaces/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/names-the-itemprop-attribute/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/names-the-itemprop-attribute/original-id.json": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/the-microdata-model/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/encoding-microdata/values/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/iana/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/global-identifiers-for-items/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/overview/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/selecting-names-when-defining-vocabularies/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/the-basic-syntax/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/typed-items/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/introduction/using-the-microdata-dom-api/.gitkeep": [
-    [
-     {}
-    ]
-   ],
-   "microdata/terminology/.gitkeep": [
-    [
-     {}
-    ]
-   ],
    "mixed-content/OWNERS": [
     [
      {}
     ]
    ],
    "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html.headers": [
     [
      {}
@@ -301714,16 +303174,36 @@
      {}
     ]
    ],
    "page-visibility/unload-1.html": [
     [
      {}
     ]
    ],
+   "paint-timing/OWNERS": [
+    [
+     {}
+    ]
+   ],
+   "paint-timing/resources/circle.svg": [
+    [
+     {}
+    ]
+   ],
+   "paint-timing/resources/circles.png": [
+    [
+     {}
+    ]
+   ],
+   "payment-handler/OWNERS": [
+    [
+     {}
+    ]
+   ],
    "payment-method-basic-card/OWNERS": [
     [
      {}
     ]
    ],
    "payment-method-id/OWNERS": [
     [
      {}
@@ -301744,36 +303224,36 @@
      {}
     ]
    ],
    "payment-request/allowpaymentrequest/echo-PaymentRequest.html": [
     [
      {}
     ]
    ],
-   "payment-request/payment-allowed-by-feature-policy.https.sub.html.headers": [
-    [
-     {}
-    ]
-   ],
-   "payment-request/payment-disabled-by-feature-policy.https.sub.html.headers": [
-    [
-     {}
-    ]
-   ],
    "payment-request/payment-request-response-id.html": [
     [
      {}
     ]
    ],
    "payment-request/payment-response/helpers.js": [
     [
      {}
     ]
    ],
+   "payment-request/resources/page1.html": [
+    [
+     {}
+    ]
+   ],
+   "payment-request/resources/page2.html": [
+    [
+     {}
+    ]
+   ],
    "performance-timeline/OWNERS": [
     [
      {}
     ]
    ],
    "performance-timeline/performanceobservers.js": [
     [
      {}
@@ -306199,21 +307679,16 @@
      {}
     ]
    ],
    "service-workers/service-worker/resources/registration-tests-security-error.js": [
     [
      {}
     ]
    ],
-   "service-workers/service-worker/resources/registration-tests.js": [
-    [
-     {}
-    ]
-   ],
    "service-workers/service-worker/resources/registration-worker.js": [
     [
      {}
     ]
    ],
    "service-workers/service-worker/resources/reject-install-worker.js": [
     [
      {}
@@ -306589,16 +308064,21 @@
      {}
     ]
    ],
    "streams/piping/transform-streams.js": [
     [
      {}
     ]
    ],
+   "streams/readable-byte-streams/brand-checks.js": [
+    [
+     {}
+    ]
+   ],
    "streams/readable-byte-streams/general.js": [
     [
      {}
     ]
    ],
    "streams/readable-byte-streams/properties.js": [
     [
      {}
@@ -327304,22 +328784,40 @@
     ]
    ],
    "XMLHttpRequest/access-control-basic-allow.htm": [
     [
      "/XMLHttpRequest/access-control-basic-allow.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm": [
+    [
+     "/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm": [
+    [
+     "/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-basic-denied.htm": [
     [
      "/XMLHttpRequest/access-control-basic-denied.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-basic-get-fail-non-simple.htm": [
+    [
+     "/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm": [
     [
      "/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm",
      {}
     ]
    ],
    "XMLHttpRequest/access-control-basic-post-success-no-content-type.htm": [
     [
@@ -327340,52 +328838,160 @@
     ]
    ],
    "XMLHttpRequest/access-control-preflight-async-header-denied.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-async-header-denied.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-preflight-async-method-denied.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-async-method-denied.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-preflight-async-not-supported.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-async-not-supported.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-preflight-credential-async.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-credential-async.htm",
      {}
     ]
    ],
    "XMLHttpRequest/access-control-preflight-credential-sync.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-credential-sync.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-preflight-headers-async.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-headers-async.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-preflight-headers-sync.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-headers-sync.htm",
      {}
     ]
    ],
    "XMLHttpRequest/access-control-preflight-request-header-lowercase.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-request-header-lowercase.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-preflight-request-header-sorted.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-request-header-sorted.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-preflight-request-headers-origin.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-request-headers-origin.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm": [
     [
      "/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm",
      {}
     ]
    ],
+   "XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-preflight-sync-header-denied.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-sync-header-denied.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-preflight-sync-method-denied.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-sync-method-denied.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-preflight-sync-not-supported.htm": [
+    [
+     "/XMLHttpRequest/access-control-preflight-sync-not-supported.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-recursive-failed-request.htm": [
+    [
+     "/XMLHttpRequest/access-control-recursive-failed-request.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-response-with-body-sync.htm": [
+    [
+     "/XMLHttpRequest/access-control-response-with-body-sync.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-response-with-body.htm": [
+    [
+     "/XMLHttpRequest/access-control-response-with-body.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-response-with-exposed-headers.htm": [
+    [
+     "/XMLHttpRequest/access-control-response-with-exposed-headers.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm": [
+    [
+     "/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-sandboxed-iframe-allow.htm": [
+    [
+     "/XMLHttpRequest/access-control-sandboxed-iframe-allow.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm": [
+    [
+     "/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm",
+     {}
+    ]
+   ],
+   "XMLHttpRequest/access-control-sandboxed-iframe-denied.htm": [
+    [
+     "/XMLHttpRequest/access-control-sandboxed-iframe-denied.htm",
+     {}
+    ]
+   ],
    "XMLHttpRequest/allow-lists-starting-with-comma.htm": [
     [
      "/XMLHttpRequest/allow-lists-starting-with-comma.htm",
      {}
     ]
    ],
    "XMLHttpRequest/anonymous-mode-unsupported.htm": [
     [
@@ -328684,16 +330290,34 @@
     ]
    ],
    "audio-output/setSinkId.https.html": [
     [
      "/audio-output/setSinkId.https.html",
      {}
     ]
    ],
+   "background-fetch/content-security-policy.https.window.js": [
+    [
+     "/background-fetch/content-security-policy.https.window.html",
+     {}
+    ]
+   ],
+   "background-fetch/credentials-in-url.https.window.js": [
+    [
+     "/background-fetch/credentials-in-url.https.window.html",
+     {}
+    ]
+   ],
+   "background-fetch/dangling-markup.https.window.js": [
+    [
+     "/background-fetch/dangling-markup.https.window.html",
+     {}
+    ]
+   ],
    "background-fetch/interfaces-worker.https.html": [
     [
      "/background-fetch/interfaces-worker.https.html",
      {}
     ]
    ],
    "background-fetch/interfaces.html": [
     [
@@ -328702,16 +330326,28 @@
     ]
    ],
    "background-fetch/interfaces.worker.js": [
     [
      "/background-fetch/interfaces.worker.html",
      {}
     ]
    ],
+   "background-fetch/mixed-content-and-allowed-schemes.https.window.js": [
+    [
+     "/background-fetch/mixed-content-and-allowed-schemes.https.window.html",
+     {}
+    ]
+   ],
+   "background-fetch/port-blocking.https.window.js": [
+    [
+     "/background-fetch/port-blocking.https.window.html",
+     {}
+    ]
+   ],
    "battery-status/battery-iframe.https.html": [
     [
      "/battery-status/battery-iframe.https.html",
      {}
     ]
    ],
    "battery-status/battery-insecure-context.html": [
     [
@@ -329492,40 +331128,16 @@
     ]
    ],
    "content-security-policy/blink-contrib/object-in-svg-foreignobject.sub.html": [
     [
      "/content-security-policy/blink-contrib/object-in-svg-foreignobject.sub.html",
      {}
     ]
    ],
-   "content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html": [
-    [
-     "/content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html",
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-archive.sub.html": [
-    [
-     "/content-security-policy/blink-contrib/object-src-applet-archive.sub.html",
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html": [
-    [
-     "/content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html",
-     {}
-    ]
-   ],
-   "content-security-policy/blink-contrib/object-src-applet-code.sub.html": [
-    [
-     "/content-security-policy/blink-contrib/object-src-applet-code.sub.html",
-     {}
-    ]
-   ],
    "content-security-policy/blink-contrib/object-src-no-url-allowed.sub.html": [
     [
      "/content-security-policy/blink-contrib/object-src-no-url-allowed.sub.html",
      {}
     ]
    ],
    "content-security-policy/blink-contrib/object-src-no-url-blocked.sub.html": [
     [
@@ -331894,16 +333506,232 @@
     ]
    ],
    "css/css-fonts-3/test_font_feature_values_parsing.html": [
     [
      "/css/css-fonts-3/test_font_feature_values_parsing.html",
      {}
     ]
    ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-001.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-001.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-002.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-002.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-003.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-003.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-004.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-004.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-005.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-005.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-006.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-006.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-007.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-007.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-008.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-008.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-009.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-009.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-010.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-010.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-011.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-011.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-012.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-012.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-013.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-013.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-014.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-014.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-015.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-015.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-016.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-016.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-017.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-017.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-018.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-018.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-019.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-019.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-020.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-020.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-021.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-021.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-022.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-022.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-023.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-023.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-024.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-024.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-025.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-025.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-026.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-026.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-027.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-027.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-028.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-028.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-029.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-029.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-030.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-030.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-031.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-031.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-032.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-032.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-033.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-033.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-034.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-034.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-035.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-035.html",
+     {}
+    ]
+   ],
+   "css/css-grid-1/alignment/grid-alignment-implies-size-change-036.html": [
+    [
+     "/css/css-grid-1/alignment/grid-alignment-implies-size-change-036.html",
+     {}
+    ]
+   ],
    "css/css-grid-1/alignment/grid-self-alignment-stretch-001.html": [
     [
      "/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html",
      {}
     ]
    ],
    "css/css-grid-1/alignment/grid-self-alignment-stretch-002.html": [
     [
@@ -332218,16 +334046,22 @@
     ]
    ],
    "css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html": [
     [
      "/css/css-grid-1/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html",
      {}
     ]
    ],
+   "css/css-grid-1/grid-definition/grid-shorthand-001.html": [
+    [
+     "/css/css-grid-1/grid-definition/grid-shorthand-001.html",
+     {}
+    ]
+   ],
    "css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html": [
     [
      "/css/css-grid-1/grid-definition/grid-support-flexible-lengths-001.html",
      {}
     ]
    ],
    "css/css-grid-1/grid-definition/grid-support-grid-template-areas-001.html": [
     [
@@ -332278,43 +334112,43 @@
     ]
    ],
    "css/css-grid-1/grid-model/grid-support-display-001.html": [
     [
      "/css/css-grid-1/grid-model/grid-support-display-001.html",
      {}
     ]
    ],
-   "css/css-logical-properties-1/logicalprops-block-size-vlr.html": [
-    [
-     "/css/css-logical-properties-1/logicalprops-block-size-vlr.html",
-     {}
-    ]
-   ],
-   "css/css-logical-properties-1/logicalprops-block-size.html": [
-    [
-     "/css/css-logical-properties-1/logicalprops-block-size.html",
-     {}
-    ]
-   ],
-   "css/css-logical-properties-1/logicalprops-inline-size-vlr.html": [
-    [
-     "/css/css-logical-properties-1/logicalprops-inline-size-vlr.html",
-     {}
-    ]
-   ],
-   "css/css-logical-properties-1/logicalprops-inline-size.html": [
-    [
-     "/css/css-logical-properties-1/logicalprops-inline-size.html",
-     {}
-    ]
-   ],
-   "css/css-logical-properties-1/logicalprops-quirklength.html": [
-    [
-     "/css/css-logical-properties-1/logicalprops-quirklength.html",
+   "css/css-logical-1/logicalprops-block-size-vlr.html": [
+    [
+     "/css/css-logical-1/logicalprops-block-size-vlr.html",
+     {}
+    ]
+   ],
+   "css/css-logical-1/logicalprops-block-size.html": [
+    [
+     "/css/css-logical-1/logicalprops-block-size.html",
+     {}
+    ]
+   ],
+   "css/css-logical-1/logicalprops-inline-size-vlr.html": [
+    [
+     "/css/css-logical-1/logicalprops-inline-size-vlr.html",
+     {}
+    ]
+   ],
+   "css/css-logical-1/logicalprops-inline-size.html": [
+    [
+     "/css/css-logical-1/logicalprops-inline-size.html",
+     {}
+    ]
+   ],
+   "css/css-logical-1/logicalprops-quirklength.html": [
+    [
+     "/css/css-logical-1/logicalprops-quirklength.html",
      {}
     ]
    ],
    "css/css-position-3/position-sticky-get-bounding-client-rect.html": [
     [
      "/css/css-position-3/position-sticky-get-bounding-client-rect.html",
      {}
     ]
@@ -333040,16 +334874,28 @@
     ]
    ],
    "css/css-syntax-3/ident-three-code-points.html": [
     [
      "/css/css-syntax-3/ident-three-code-points.html",
      {}
     ]
    ],
+   "css/css-tables-3/fixed-layout-calc-width-001.html": [
+    [
+     "/css/css-tables-3/fixed-layout-calc-width-001.html",
+     {}
+    ]
+   ],
+   "css/css-tables-3/fixed-layout-excess-width-distribution-001.html": [
+    [
+     "/css/css-tables-3/fixed-layout-excess-width-distribution-001.html",
+     {}
+    ]
+   ],
    "css/css-tables-3/visibility-collapse-col-001.html": [
     [
      "/css/css-tables-3/visibility-collapse-col-001.html",
      {}
     ]
    ],
    "css/css-tables-3/visibility-collapse-col-002.html": [
     [
@@ -334372,16 +336218,28 @@
     ]
    ],
    "css/css-ui-3/outline-018.html": [
     [
      "/css/css-ui-3/outline-018.html",
      {}
     ]
    ],
+   "css/css-ui-3/text-overflow-023.html": [
+    [
+     "/css/css-ui-3/text-overflow-023.html",
+     {}
+    ]
+   ],
+   "css/css-values-3/absolute-length-units-001.html": [
+    [
+     "/css/css-values-3/absolute-length-units-001.html",
+     {}
+    ]
+   ],
    "css/css-values-3/calc-unit-analysis.html": [
     [
      "/css/css-values-3/calc-unit-analysis.html",
      {}
     ]
    ],
    "css/css-values-3/unset-value-storage.html": [
     [
@@ -335386,16 +337244,22 @@
     ]
    ],
    "css/geometry-1/interfaces.worker.js": [
     [
      "/css/geometry-1/interfaces.worker.html",
      {}
     ]
    ],
+   "css/geometry-1/spec-examples.html": [
+    [
+     "/css/geometry-1/spec-examples.html",
+     {}
+    ]
+   ],
    "css/geometry-1/structured-serialization.html": [
     [
      "/css/geometry-1/structured-serialization.html",
      {}
     ]
    ],
    "css/mediaqueries-3/test_media_queries.html": [
     [
@@ -335692,16 +337556,22 @@
     ]
    ],
    "cssom-view/htmlelement-offset-width-001.html": [
     [
      "/cssom-view/htmlelement-offset-width-001.html",
      {}
     ]
    ],
+   "cssom-view/interfaces.html": [
+    [
+     "/cssom-view/interfaces.html",
+     {}
+    ]
+   ],
    "cssom-view/matchMedia.xht": [
     [
      "/cssom-view/matchMedia.xht",
      {}
     ]
    ],
    "cssom-view/matchMediaAddListener.html": [
     [
@@ -335770,28 +337640,28 @@
     ]
    ],
    "cssom-view/scrollingElement.html": [
     [
      "/cssom-view/scrollingElement.html",
      {}
     ]
    ],
+   "cssom-view/scrollintoview.html": [
+    [
+     "/cssom-view/scrollintoview.html",
+     {}
+    ]
+   ],
    "cssom-view/ttwf-js-cssomview-getclientrects-length.html": [
     [
      "/cssom-view/ttwf-js-cssomview-getclientrects-length.html",
      {}
     ]
    ],
-   "cssom-view/ttwf-scrollintoview.html": [
-    [
-     "/cssom-view/ttwf-scrollintoview.html",
-     {}
-    ]
-   ],
    "cssom-view/window-screen-height-immutable.html": [
     [
      "/cssom-view/window-screen-height-immutable.html",
      {}
     ]
    ],
    "cssom-view/window-screen-height.html": [
     [
@@ -340014,16 +341884,22 @@
    "encrypted-media/drm-temporary-license-type.html": [
     [
      "/encrypted-media/drm-temporary-license-type.html",
      {
       "timeout": "long"
      }
     ]
    ],
+   "encrypted-media/encrypted-media-default-feature-policy.https.sub.html": [
+    [
+     "/encrypted-media/encrypted-media-default-feature-policy.https.sub.html",
+     {}
+    ]
+   ],
    "encrypted-media/idlharness.html": [
     [
      "/encrypted-media/idlharness.html",
      {}
     ]
    ],
    "eventsource/dedicated-worker/eventsource-close.htm": [
     [
@@ -340398,16 +342274,46 @@
     ]
    ],
    "ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.html": [
     [
      "/ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.html",
      {}
     ]
    ],
+   "feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
+    [
+     "/feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html",
+     {}
+    ]
+   ],
+   "feature-policy/payment-allowed-by-feature-policy-attribute.https.sub.html": [
+    [
+     "/feature-policy/payment-allowed-by-feature-policy-attribute.https.sub.html",
+     {}
+    ]
+   ],
+   "feature-policy/payment-allowed-by-feature-policy.https.sub.html": [
+    [
+     "/feature-policy/payment-allowed-by-feature-policy.https.sub.html",
+     {}
+    ]
+   ],
+   "feature-policy/payment-default-feature-policy.https.sub.html": [
+    [
+     "/feature-policy/payment-default-feature-policy.https.sub.html",
+     {}
+    ]
+   ],
+   "feature-policy/payment-disabled-by-feature-policy.https.sub.html": [
+    [
+     "/feature-policy/payment-disabled-by-feature-policy.https.sub.html",
+     {}
+    ]
+   ],
    "fetch/api/abort/cache.https.html": [
     [
      "/fetch/api/abort/cache.https.html",
      {}
     ]
    ],
    "fetch/api/abort/general-serviceworker.https.html": [
     [
@@ -341482,19 +343388,19 @@
     ]
    ],
    "gamepad/idlharness.html": [
     [
      "/gamepad/idlharness.html",
      {}
     ]
    ],
-   "generic-sensor/idlharness.html": [
-    [
-     "/generic-sensor/idlharness.html",
+   "generic-sensor/idlharness.https.html": [
+    [
+     "/generic-sensor/idlharness.https.html",
      {}
     ]
    ],
    "geolocation-API/PositionOptions.https.html": [
     [
      "/geolocation-API/PositionOptions.https.html",
      {}
     ]
@@ -341604,19 +343510,19 @@
     ]
    ],
    "hr-time/timing-attack.html": [
     [
      "/hr-time/timing-attack.html",
      {}
     ]
    ],
-   "hr-time/window-worker-time-origin.html": [
-    [
-     "/hr-time/window-worker-time-origin.html",
+   "hr-time/window-worker-timeOrigin.window.js": [
+    [
+     "/hr-time/window-worker-timeOrigin.window.html",
      {}
     ]
    ],
    "html-imports/document/document-method-changes.html": [
     [
      "/html-imports/document/document-method-changes.html",
      {}
     ]
@@ -344432,16 +346338,22 @@
     ]
    ],
    "html/dom/elements/global-attributes/the-translate-attribute-012.html": [
     [
      "/html/dom/elements/global-attributes/the-translate-attribute-012.html",
      {}
     ]
    ],
+   "html/dom/historical.html": [
+    [
+     "/html/dom/historical.html",
+     {}
+    ]
+   ],
    "html/dom/interfaces.html": [
     [
      "/html/dom/interfaces.html",
      {
       "timeout": "long"
      }
     ]
    ],
@@ -345262,16 +347174,28 @@
     ]
    ],
    "html/semantics/document-metadata/the-style-element/style_non_matching_media.html": [
     [
      "/html/semantics/document-metadata/the-style-element/style_non_matching_media.html",
      {}
     ]
    ],
+   "html/semantics/document-metadata/the-style-element/style_type.html": [
+    [
+     "/html/semantics/document-metadata/the-style-element/style_type.html",
+     {}
+    ]
+   ],
+   "html/semantics/document-metadata/the-style-element/style_type_change.html": [
+    [
+     "/html/semantics/document-metadata/the-style-element/style_type_change.html",
+     {}
+    ]
+   ],
    "html/semantics/document-metadata/the-title-element/title.text-01.html": [
     [
      "/html/semantics/document-metadata/the-title-element/title.text-01.html",
      {}
     ]
    ],
    "html/semantics/document-metadata/the-title-element/title.text-02.xhtml": [
     [
@@ -346392,16 +348316,22 @@
     ]
    ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-api-texttracks.html",
      {}
     ]
    ],
+   "html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html": [
+    [
+     "/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html",
+     {}
+    ]
+   ],
    "html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html": [
     [
      "/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html",
      {}
     ]
    ],
    "html/semantics/embedded-content/media-elements/user-interface/muted.html": [
     [
@@ -349044,34 +350974,16 @@
     ]
    ],
    "html/semantics/scripting-1/the-script-element/script-for-event.html": [
     [
      "/html/semantics/scripting-1/the-script-element/script-for-event.html",
      {}
     ]
    ],
-   "html/semantics/scripting-1/the-script-element/script-language-type.html": [
-    [
-     "/html/semantics/scripting-1/the-script-element/script-language-type.html",
-     {}
-    ]
-   ],
-   "html/semantics/scripting-1/the-script-element/script-languages-01.html": [
-    [
-     "/html/semantics/scripting-1/the-script-element/script-languages-01.html",
-     {}
-    ]
-   ],
-   "html/semantics/scripting-1/the-script-element/script-languages-02.html": [
-    [
-     "/html/semantics/scripting-1/the-script-element/script-languages-02.html",
-     {}
-    ]
-   ],
    "html/semantics/scripting-1/the-script-element/script-noembed-noframes-iframe.xhtml": [
     [
      "/html/semantics/scripting-1/the-script-element/script-noembed-noframes-iframe.xhtml",
      {}
     ]
    ],
    "html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html": [
     [
@@ -349116,16 +351028,34 @@
     ]
    ],
    "html/semantics/scripting-1/the-script-element/script-text.html": [
     [
      "/html/semantics/scripting-1/the-script-element/script-text.html",
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/script-type-and-language-empty.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/script-type-and-language-empty.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/script-type-and-language-js.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/script-type-and-language-js.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/script-type-and-language-with-params.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/script-type-and-language-with-params.html",
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/scripting-enabled.html": [
     [
      "/html/semantics/scripting-1/the-script-element/scripting-enabled.html",
      {}
     ]
    ],
    "html/semantics/scripting-1/the-template-element/additions-to-parsing-xhtml-documents/node-document.html": [
     [
@@ -349236,16 +351166,22 @@
     ]
    ],
    "html/semantics/scripting-1/the-template-element/template-element/template-descendant-head.html": [
     [
      "/html/semantics/scripting-1/the-template-element/template-element/template-descendant-head.html",
      {}
     ]
    ],
+   "html/semantics/selectors/pseudo-classes/checked-type-change.html": [
+    [
+     "/html/semantics/selectors/pseudo-classes/checked-type-change.html",
+     {}
+    ]
+   ],
    "html/semantics/selectors/pseudo-classes/checked.html": [
     [
      "/html/semantics/selectors/pseudo-classes/checked.html",
      {}
     ]
    ],
    "html/semantics/selectors/pseudo-classes/default.html": [
     [
@@ -349290,22 +351226,34 @@
     ]
    ],
    "html/semantics/selectors/pseudo-classes/indeterminate-radio.html": [
     [
      "/html/semantics/selectors/pseudo-classes/indeterminate-radio.html",
      {}
     ]
    ],
+   "html/semantics/selectors/pseudo-classes/indeterminate-type-change.html": [
+    [
+     "/html/semantics/selectors/pseudo-classes/indeterminate-type-change.html",
+     {}
+    ]
+   ],
    "html/semantics/selectors/pseudo-classes/indeterminate.html": [
     [
      "/html/semantics/selectors/pseudo-classes/indeterminate.html",
      {}
     ]
    ],
+   "html/semantics/selectors/pseudo-classes/inrange-outofrange-type-change.html": [
+    [
+     "/html/semantics/selectors/pseudo-classes/inrange-outofrange-type-change.html",
+     {}
+    ]
+   ],
    "html/semantics/selectors/pseudo-classes/inrange-outofrange.html": [
     [
      "/html/semantics/selectors/pseudo-classes/inrange-outofrange.html",
      {}
     ]
    ],
    "html/semantics/selectors/pseudo-classes/link.html": [
     [
@@ -351570,55 +353518,19 @@
     ]
    ],
    "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html": [
     [
      "/html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-4.html",
      {}
     ]
    ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content.html": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/001.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/001.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/002.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/002.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/003.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/003.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/004.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/004.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/005.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/005.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/content/006.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/content/006.xhtml",
+   "html/webappapis/system-state-and-capabilities/the-navigator-object/historical.window.js": [
+    [
+     "/html/webappapis/system-state-and-capabilities/the-navigator-object/historical.window.html",
      {}
     ]
    ],
    "html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-indexed.html": [
     [
      "/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-indexed.html",
      {}
     ]
@@ -351646,52 +353558,16 @@
     ]
    ],
    "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html": [
     [
      "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html",
      {}
     ]
    ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/001.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/001.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/004.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/004.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005.xhtml",
-     {}
-    ]
-   ],
-   "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006.xhtml": [
-    [
-     "/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006.xhtml",
-     {}
-    ]
-   ],
    "html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html": [
     [
      "/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html",
      {}
     ]
    ],
    "html/webappapis/timers/evil-spec-example.html": [
     [
@@ -351800,16 +353676,22 @@
     ]
    ],
    "input-events/idlharness.html": [
     [
      "/input-events/idlharness.html",
      {}
     ]
    ],
+   "input-events/input-events-exec-command.html": [
+    [
+     "/input-events/input-events-exec-command.html",
+     {}
+    ]
+   ],
    "intersection-observer/bounding-box.html": [
     [
      "/intersection-observer/bounding-box.html",
      {}
     ]
    ],
    "intersection-observer/client-rect.html": [
     [
@@ -352766,16 +354648,22 @@
     ]
    ],
    "mediacapture-streams/MediaStream-audio-only.https.html": [
     [
      "/mediacapture-streams/MediaStream-audio-only.https.html",
      {}
     ]
    ],
+   "mediacapture-streams/MediaStream-default-feature-policy.https.sub.html": [
+    [
+     "/mediacapture-streams/MediaStream-default-feature-policy.https.sub.html",
+     {}
+    ]
+   ],
    "mediacapture-streams/MediaStream-finished-add.https.html": [
     [
      "/mediacapture-streams/MediaStream-finished-add.https.html",
      {}
     ]
    ],
    "mediacapture-streams/MediaStream-gettrackid.https.html": [
     [
@@ -364834,16 +366722,92 @@
     ]
    ],
    "page-visibility/unload.html": [
     [
      "/page-visibility/unload.html",
      {}
     ]
    ],
+   "paint-timing/basetest.html": [
+    [
+     "/paint-timing/basetest.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-contentful-bg-image.html": [
+    [
+     "/paint-timing/first-contentful-bg-image.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-contentful-canvas.html": [
+    [
+     "/paint-timing/first-contentful-canvas.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-contentful-image.html": [
+    [
+     "/paint-timing/first-contentful-image.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-contentful-paint.html": [
+    [
+     "/paint-timing/first-contentful-paint.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-contentful-svg.html": [
+    [
+     "/paint-timing/first-contentful-svg.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-paint-bg-color.html": [
+    [
+     "/paint-timing/first-paint-bg-color.html",
+     {}
+    ]
+   ],
+   "paint-timing/first-paint-only.html": [
+    [
+     "/paint-timing/first-paint-only.html",
+     {}
+    ]
+   ],
+   "payment-handler/interfaces.https.any.js": [
+    [
+     "/payment-handler/interfaces.https.any.html",
+     {}
+    ],
+    [
+     "/payment-handler/interfaces.https.any.worker.html",
+     {}
+    ]
+   ],
+   "payment-request/PaymentRequestUpdateEvent/constructor.http.html": [
+    [
+     "/payment-request/PaymentRequestUpdateEvent/constructor.http.html",
+     {}
+    ]
+   ],
+   "payment-request/PaymentRequestUpdateEvent/constructor.https.html": [
+    [
+     "/payment-request/PaymentRequestUpdateEvent/constructor.https.html",
+     {}
+    ]
+   ],
+   "payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html": [
+    [
+     "/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html",
+     {}
+    ]
+   ],
    "payment-request/allowpaymentrequest/active-document-cross-origin.https.sub.html": [
     [
      "/payment-request/allowpaymentrequest/active-document-cross-origin.https.sub.html",
      {}
     ]
    ],
    "payment-request/allowpaymentrequest/active-document-same-origin.https.html": [
     [
@@ -364906,46 +366870,16 @@
     ]
    ],
    "payment-request/interfaces.https.html": [
     [
      "/payment-request/interfaces.https.html",
      {}
     ]
    ],
-   "payment-request/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
-    [
-     "/payment-request/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-allowed-by-feature-policy-attribute.https.sub.html": [
-    [
-     "/payment-request/payment-allowed-by-feature-policy-attribute.https.sub.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-allowed-by-feature-policy.https.sub.html": [
-    [
-     "/payment-request/payment-allowed-by-feature-policy.https.sub.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-default-feature-policy.https.sub.html": [
-    [
-     "/payment-request/payment-default-feature-policy.https.sub.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-disabled-by-feature-policy.https.sub.html": [
-    [
-     "/payment-request/payment-disabled-by-feature-policy.https.sub.html",
-     {}
-    ]
-   ],
    "payment-request/payment-request-abort-method.https.html": [
     [
      "/payment-request/payment-request-abort-method.https.html",
      {}
     ]
    ],
    "payment-request/payment-request-canmakepayment-method.https.html": [
     [
@@ -364992,43 +366926,43 @@
     ]
    ],
    "payment-request/payment-request-onshippingoptionchange-attribute.https.html": [
     [
      "/payment-request/payment-request-onshippingoptionchange-attribute.https.html",
      {}
     ]
    ],
+   "payment-request/payment-request-shippingAddress-attribute.https.html": [
+    [
+     "/payment-request/payment-request-shippingAddress-attribute.https.html",
+     {}
+    ]
+   ],
+   "payment-request/payment-request-shippingOption-attribute.https.html": [
+    [
+     "/payment-request/payment-request-shippingOption-attribute.https.html",
+     {}
+    ]
+   ],
    "payment-request/payment-request-shippingType-attribute.https.html": [
     [
      "/payment-request/payment-request-shippingType-attribute.https.html",
      {}
     ]
    ],
    "payment-request/payment-request-show-method.https.html": [
     [
      "/payment-request/payment-request-show-method.https.html",
      {}
     ]
    ],
-   "payment-request/payment-request-update-event-constructor.http.html": [
-    [
-     "/payment-request/payment-request-update-event-constructor.http.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-request-update-event-constructor.https.html": [
-    [
-     "/payment-request/payment-request-update-event-constructor.https.html",
-     {}
-    ]
-   ],
-   "payment-request/payment-request-update-event-updatewith-method.https.html": [
-    [
-     "/payment-request/payment-request-update-event-updatewith-method.https.html",
+   "payment-request/rejects_if_not_active.https.html": [
+    [
+     "/payment-request/rejects_if_not_active.https.html",
      {}
     ]
    ],
    "performance-timeline/case-sensitivity.any.js": [
     [
      "/performance-timeline/case-sensitivity.any.html",
      {}
     ],
@@ -376220,16 +378154,40 @@
     ]
    ],
    "streams/piping/transform-streams.sharedworker.html": [
     [
      "/streams/piping/transform-streams.sharedworker.html",
      {}
     ]
    ],
+   "streams/readable-byte-streams/brand-checks.dedicatedworker.html": [
+    [
+     "/streams/readable-byte-streams/brand-checks.dedicatedworker.html",
+     {}
+    ]
+   ],
+   "streams/readable-byte-streams/brand-checks.html": [
+    [
+     "/streams/readable-byte-streams/brand-checks.html",
+     {}
+    ]
+   ],
+   "streams/readable-byte-streams/brand-checks.serviceworker.https.html": [
+    [
+     "/streams/readable-byte-streams/brand-checks.serviceworker.https.html",
+     {}
+    ]
+   ],
+   "streams/readable-byte-streams/brand-checks.sharedworker.html": [
+    [
+     "/streams/readable-byte-streams/brand-checks.sharedworker.html",
+     {}
+    ]
+   ],
    "streams/readable-byte-streams/general.dedicatedworker.html": [
     [
      "/streams/readable-byte-streams/general.dedicatedworker.html",
      {}
     ]
    ],
    "streams/readable-byte-streams/general.html": [
     [
@@ -386826,16 +388784,22 @@
     ]
    ],
    "workers/shared-worker-name-via-options.html": [
     [
      "/workers/shared-worker-name-via-options.html",
      {}
     ]
    ],
+   "workers/worker-performance.worker.js": [
+    [
+     "/workers/worker-performance.worker.html",
+     {}
+    ]
+   ],
    "x-frame-options/deny.sub.html": [
     [
      "/x-frame-options/deny.sub.html",
      {}
     ]
    ],
    "x-frame-options/invalid.sub.html": [
     [
@@ -407378,29 +409342,29 @@
    "cfedb92777a36954d6e285461bf224cb6d2b5407",
    "support"
   ],
   "./LICENSE.md": [
    "722729a1062b97ad2fdd43896b2c6a45b1fff144",
    "support"
   ],
   "./README.md": [
-   "c81600cf81c43a2abef1bea9eaa09380412d4b03",
+   "fa83617dc51fcc6f69732e43be203bc94de05ec1",
    "support"
   ],
   "./check_stability.ini": [
    "f8af4287f3b0f6925a2a6c5c75b3788e24de1680",
    "support"
   ],
   "./config.default.json": [
    "403d365196f6fe2c631d27fe6042e3114d204016",
    "support"
   ],
   "./lint.whitelist": [
-   "223804666e64dde8a7e22ee394baa50d77e0cff0",
+   "85909de8994c7339bd86c969094a072de473a6de",
    "support"
   ],
   "./serve.py": [
    "0efa39b1f26f86d73f2fce4f9e46003d62057b41",
    "support"
   ],
   "./server-side.md": [
    "c51b17fbac2a2e3121dc74f7badbd2873ce92f61",
@@ -411606,37 +413570,37 @@
    "946f23f945163bf9f9da080291b21473f6e1cbd0",
    "support"
   ],
   "2dcontext/tools/build.sh": [
    "e4f65db6a439972ed7a83f4cc2c9bae792ec2d27",
    "support"
   ],
   "2dcontext/tools/current-work-canvas.xhtml": [
-   "891246c4dfe34f9b43b5e642b058072c4d664817",
+   "c712cdec9ced8da63eb6b8dfce17906a4210883e",
    "support"
   ],
   "2dcontext/tools/gentest.py": [
    "49951605ab640deeb16f2b0aebf2396237fc727e",
    "support"
   ],
   "2dcontext/tools/gentestutils.py": [
-   "f613a789c0e231a3600070583661ba3b1842fed3",
+   "d7862903e270295fd11e2d98c5c4dbcde4ae0717",
    "support"
   ],
   "2dcontext/tools/name2dir.yaml": [
-   "1333578a501fec686bc7ed22edf4cc8e7203ae13",
+   "3a852f1cc85eae2a17e67d56ce0c9bb5e4e69b41",
    "support"
   ],
   "2dcontext/tools/spec.yaml": [
-   "4405a99f9fa29069670a1fb8aaef5e1c89ac33d0",
+   "4692cedcc0d1d5af9ac917fa19d3979e2129a933",
    "support"
   ],
   "2dcontext/tools/specextract.py": [
-   "c6c58223012640480eb1e7d0b9ce4c343cafdb7c",
+   "5c656f7f4859ec0eb0559b1b1dfe6e085032d7c8",
    "support"
   ],
   "2dcontext/tools/templates.yaml": [
    "343f3ef053fadbb9e6a841d0244a737065f9e208",
    "support"
   ],
   "2dcontext/tools/tests.yaml": [
    "ce69d48960f561a0bf43b7346d7e387e2ac9e110",
@@ -411802,17 +413766,17 @@
    "d45d56f402dafa90a4705f0f2d667525ac60a238",
    "manual"
   ],
   "FileAPI/FileReaderSync.worker.js": [
    "19741fbd0498bf9135408ceb6128221cbeb4e2f3",
    "testharness"
   ],
   "FileAPI/OWNERS": [
-   "5e749f9ec12704ea48e99cf4c31e703e5325d419",
+   "f1d0cf569f445712d986e9a85f3cbc717137d7fe",
    "support"
   ],
   "FileAPI/blob/Blob-XHR-revoke.html": [
    "5858a79442dcad6325b3ab4bb6a20fc302fcf64c",
    "testharness"
   ],
   "FileAPI/blob/Blob-constructor.html": [
    "fc5f5ef1deff60ceb2e2db86b511cdc03f19072f",
@@ -414509,66 +416473,150 @@
   "XMLHttpRequest/access-control-basic-allow-star.htm": [
    "694f8b8d67002e7b27d98ea2eb32f27fee311cad",
    "testharness"
   ],
   "XMLHttpRequest/access-control-basic-allow.htm": [
    "8c2f2df46c8086f657806f763e68d775e1294bd0",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm": [
+   "29b6638f3de85cc39b77b86353dc49865e1fdc39",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm": [
+   "43748883f8bf38fe34e0c0f568dec6e1cc7c9b28",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-basic-denied.htm": [
    "890170b5b2857a6e837ea3ed0dc4692e206a864a",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-basic-get-fail-non-simple.htm": [
+   "4641b3a58df7f1eeea460e995692418cfd63f507",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm": [
    "b6e15129e3e0917bb35f5b021ba7849b924d6945",
    "testharness"
   ],
   "XMLHttpRequest/access-control-basic-post-success-no-content-type.htm": [
    "4e7a3f374bf054f9f49ed487c8f417374514293c",
    "testharness"
   ],
   "XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm": [
-   "4db804485282525ce98ef71c2824ade7fdb0f357",
+   "d7877dca1a16e5c3f52881558f9951e4a5f78ba8",
    "testharness"
   ],
   "XMLHttpRequest/access-control-basic-preflight-denied.htm": [
    "36a1951a7b814d7594e7474646ee9d03108208c6",
    "testharness"
   ],
   "XMLHttpRequest/access-control-preflight-async-header-denied.htm": [
    "f69a2fdd41df78f29187bfa848e88c5c39b60736",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-preflight-async-method-denied.htm": [
+   "29bb39b957742d739bb0d54464b48a53533206fe",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-preflight-async-not-supported.htm": [
+   "7520098b97455ca0795304751cef93197be469f6",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-preflight-credential-async.htm": [
    "ae93b44faf45f95927a1ee82052a414273333e61",
    "testharness"
   ],
   "XMLHttpRequest/access-control-preflight-credential-sync.htm": [
    "fa393dd9f33c2c7f151f00f034ae0f23a5bbf74a",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-preflight-headers-async.htm": [
+   "bd10420c088f4e871d1377bf1b7e45d30c1458c9",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-preflight-headers-sync.htm": [
    "8dcf3427076b048f2a38890a15427d703c36728f",
    "testharness"
   ],
   "XMLHttpRequest/access-control-preflight-request-header-lowercase.htm": [
    "1f3beb7047a0f4828d44f67664a977469af75263",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-preflight-request-header-sorted.htm": [
+   "45f904c2322ee7b14cc78075f99243bbad7ecd96",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-preflight-request-headers-origin.htm": [
+   "7928f916ba92a1c7c13bb2c099ec08fc5f14429e",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm": [
    "e59e2de75149869531b056b53501b92302fdee04",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm": [
+   "48fbbfd1a516469058e7559969eb1f36f02c3f14",
+   "testharness"
+  ],
   "XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm": [
    "a59b9c8f77991992faade11e955061078b9d9623",
    "testharness"
   ],
+  "XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm": [
+   "78f95f6f962f1696a1ff37a6a3216fba4e741f56",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-preflight-sync-header-denied.htm": [
+   "98e89f8ddccbba846b6f21f1d77b6a64554bcb52",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-preflight-sync-method-denied.htm": [
+   "536deb1a3322c4ef45e259849e659d1fa4bea7c7",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-preflight-sync-not-supported.htm": [
+   "997d43197782650b479ccdef1cc43d8bde7e31e4",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-recursive-failed-request.htm": [
+   "03650f5362e483a6e29a05554723385ab601495f",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-response-with-body-sync.htm": [
+   "ae7e24c4b3b3295caa7e76555ac8a21d9062556a",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-response-with-body.htm": [
+   "e5b2ae207a2ae58bd20a4d6903991cff5e27b5a7",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-response-with-exposed-headers.htm": [
+   "9c4a5cf99e43f1315dfd73f543450e4056dcef36",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm": [
+   "2b507239c3e3fa6602068d6d92897c5d042a7a0d",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-sandboxed-iframe-allow.htm": [
+   "b1140eacc383af590578319b25ee803ba50c3fee",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm": [
+   "a476086f22c912c13d4ac175af95c80f8e226c25",
+   "testharness"
+  ],
+  "XMLHttpRequest/access-control-sandboxed-iframe-denied.htm": [
+   "32fcbfa28e93aad6e0040b5b1c9478ce76e7e06e",
+   "testharness"
+  ],
   "XMLHttpRequest/allow-lists-starting-with-comma.htm": [
-   "5e7870a6d66c475c2f96fd64a146ea751b08f4b1",
+   "34a8d82f397f35902c73d9ced2f3cf900d04ae53",
    "testharness"
   ],
   "XMLHttpRequest/anonymous-mode-unsupported.htm": [
    "54a03fefabfad02e09baa4e9d37e19b6403dad9b",
    "testharness"
   ],
   "XMLHttpRequest/data-uri.htm": [
    "d42eb014a32cf82d7eba31ad9b80f51bff43eeea",
@@ -414902,17 +416950,21 @@
    "c8e945b53770efb8e4312f457a5a7261bc88a36c",
    "support"
   ],
   "XMLHttpRequest/resources/accept.py": [
    "4769a0c31c00777fb37e1af76209e68040918b64",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-allow-lists.py": [
-   "72914699c33449255e47adb9668983e1bef8da14",
+   "941a26e0b85d608bb2617362df74263564b5981d",
+   "support"
+  ],
+  "XMLHttpRequest/resources/access-control-allow-with-body.py": [
+   "fbd35be708e601c7c3fb625ce28b9f43de784e13",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-auth-basic.py": [
    "08d5c99e4c576557cab5ddc56fda038aab767dee",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py": [
    "593fc8c4d78f0213017c0fb2fa78ac46274eb6ea",
@@ -414921,16 +416973,20 @@
   "XMLHttpRequest/resources/access-control-basic-allow-star.py": [
    "d9aa8e1eaf8e73256edabafec32960bba8499f40",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-basic-allow.py": [
    "b7351f59af91646549075b6b732eeb6c750e3faf",
    "support"
   ],
+  "XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py": [
+   "19a0b1d88765fa152c17c7f684651be8c4bae3da",
+   "support"
+  ],
   "XMLHttpRequest/resources/access-control-basic-denied.py": [
    "35e7b6c552caf55e8ea7d34ec51d354c8eb2bc6e",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-basic-options-not-supported.py": [
    "ee16a30ec1252bd66ef899f7c7bc8d3d0fb76562",
    "support"
   ],
@@ -414945,32 +417001,56 @@
   "XMLHttpRequest/resources/access-control-basic-preflight-cache.py": [
    "32e713011ca3c4235f8ef77c4ec49c08c6a49469",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-basic-put-allow.py": [
    "eda02da8e1d89f28ff0e07442539b7eca4ca556f",
    "support"
   ],
+  "XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py": [
+   "c530b8431372e0511c91b150c5f1015d504ae374",
+   "support"
+  ],
+  "XMLHttpRequest/resources/access-control-cookie.py": [
+   "0551a6a4284fcae2ed5314d5d02767a4da1ad981",
+   "support"
+  ],
   "XMLHttpRequest/resources/access-control-origin-header.py": [
    "529883eed380c4505c1ddbc87ae5885254756626",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-preflight-denied.py": [
    "b41ba9f1e3fcad508d575331e0f3f43bc75c07b9",
    "support"
   ],
   "XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py": [
    "3f39f2f6bdda8c167df09525b8d23d04c16b2462",
    "support"
   ],
+  "XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py": [
+   "357dbf2f01ab59c8689af632c1116d2053f3829d",
+   "support"
+  ],
+  "XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py": [
+   "abc6b25627e019ae67b90beebad42164143321d0",
+   "support"
+  ],
   "XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py": [
    "c572b1e3d79f66df0a40766e6e4c3cc785458d0e",
    "support"
   ],
+  "XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py": [
+   "1343bfee18c64bfbb625591bc65117e5b692c487",
+   "support"
+  ],
+  "XMLHttpRequest/resources/access-control-sandboxed-iframe.html": [
+   "3aa5a903afc03e167a88322db44c29b287509f47",
+   "support"
+  ],
   "XMLHttpRequest/resources/auth1/auth.py": [
    "cbe9305740f7e0a9e8c7be9dbfcb606f8abb2758",
    "support"
   ],
   "XMLHttpRequest/resources/auth2/auth.py": [
    "cbe9305740f7e0a9e8c7be9dbfcb606f8abb2758",
    "support"
   ],
@@ -415754,17 +417834,17 @@
    "e03faad7d297ce2c5d6fefa66a2397c3d9a32e2d",
    "manual"
   ],
   "accelerometer/OWNERS": [
    "b119dbb984792f33c6e7463f3105d37c3c3b7ad8",
    "support"
   ],
   "accelerometer/idlharness.https.html": [
-   "ac421649ad01868af57e06d322515b4fa36a2dda",
+   "a4b5c164268d6742e7da504d15d6b9eeb4cfc6ce",
    "testharness"
   ],
   "ambient-light/AmbientLightSensor.https.html": [
    "86a1f84e2e034d58b2a7f6fc01880028b444c7cd",
    "testharness"
   ],
   "ambient-light/AmbientLightSensor_insecure_context.html": [
    "9267bca8016bdde90ba2e5e866e9989db7c045dd",
@@ -415774,17 +417854,17 @@
    "fa52072d6da7987db8f67c2a6fd9b2e281f03042",
    "manual"
   ],
   "ambient-light/OWNERS": [
    "267fa5a34646c535ff4e4772543bc2c5d8aecc30",
    "support"
   ],
   "ambient-light/idlharness.https.html": [
-   "2c0c24a7d0f4cc0026264641a64234a8c0e7ac5a",
+   "f48a58b450fa15e820bef6d9c6f5dac834d8d6fb",
    "testharness"
   ],
   "annotation-model/.editorconfig": [
    "18e9e31b4beb20bcfa5ad281584d816204a3f531",
    "support"
   ],
   "annotation-model/CONTRIBUTING.md": [
    "9e995a09f036f5e03c933d94c154fb53e8f4a1ad",
@@ -417853,40 +419933,64 @@
   "audio-output/setSinkId-manual.https.html": [
    "6743b9f6843a1c6134ac9cc627375b0368986e55",
    "manual"
   ],
   "audio-output/setSinkId.https.html": [
    "556ab735b0461aab4dbbb02d277da6ea07106469",
    "testharness"
   ],
-  "auxclick/OWNERS": [
-   "314d421a5544db277664bb55bd04b87e9ed2fdba",
-   "support"
-  ],
   "background-fetch/OWNERS": [
    "0c4e22b970a92b2d77b0f50cc27c2d46aad0b43b",
    "support"
   ],
+  "background-fetch/content-security-policy.https.window.js": [
+   "1675b0665319efe5ce8423230f839b20e3b6a63b",
+   "testharness"
+  ],
+  "background-fetch/credentials-in-url.https.window.js": [
+   "6fa8d069c6f17da908078ac1a3770b2bd730426c",
+   "testharness"
+  ],
+  "background-fetch/dangling-markup.https.window.js": [
+   "fd9efe16c485c6fa6cc4b587b492eb24bf9ccac2",
+   "testharness"
+  ],
   "background-fetch/interfaces-worker.https.html": [
    "3bdcb55c864d99da109cdc0abe56c06aaf3e3d1e",
    "testharness"
   ],
   "background-fetch/interfaces.html": [
    "b8a8e6792e6f3df1057e1c1b38c5e62291838a22",
    "testharness"
   ],
   "background-fetch/interfaces.idl": [
    "fce19c6d658a1bae8c79ab659da9a9201a7b02bb",
    "support"
   ],
   "background-fetch/interfaces.worker.js": [
    "0c959d5fa41c3db70c326b83e064b8261a6f90b4",
    "testharness"
   ],
+  "background-fetch/mixed-content-and-allowed-schemes.https.window.js": [
+   "13873d861416a40d831026a88f864f13a9447c7f",
+   "testharness"
+  ],
+  "background-fetch/port-blocking.https.window.js": [
+   "6e06b6e9b9cd8713ff5a8ca405c1b54fe15c559c",
+   "testharness"
+  ],
+  "background-fetch/resources/sw.js": [
+   "9b4fbabe0209a5367186e8c5717be88f32530027",
+   "support"
+  ],
+  "background-fetch/resources/utils.js": [
+   "1109faf95d0b0d09f2eb9a486638d68af55cb52c",
+   "support"
+  ],
   "battery-status/OWNERS": [
    "c08081d13e4029cf4fffb48c15d323d8b15a581b",
    "support"
   ],
   "battery-status/battery-charging-manual.https.html": [
    "9b4367fa0a6920b5c9bd0b310935f79260ec1214",
    "manual"
   ],
@@ -418081,16 +420185,20 @@
   "clear-site-data/support/service_worker.js": [
    "eb87eb25d4b84ae78c57a7bd3cd3d43b4df99881",
    "support"
   ],
   "clear-site-data/support/test_utils.sub.js": [
    "10f5f9d409ef513edb129e0e8522aa5f74d51ce8",
    "support"
   ],
+  "clipboard-apis/OWNERS": [
+   "bae753666bda85e9805a5e2fad80ba71459b8aba",
+   "support"
+  ],
   "clipboard-apis/async-interfaces.https.html": [
    "68a1ea255a72e54e6a2147797d4213914a79aece",
    "testharness"
   ],
   "clipboard-apis/async-navigator-clipboard-basics.https.html": [
    "59f25a9968d47079857989146e26562c3784be34",
    "testharness"
   ],
@@ -418105,20 +420213,16 @@
   "clipboard-apis/async-write-text-read-dttext-manual.https.html": [
    "4b0df740f9f8fa6f3831b1255dde491b83e3ef6c",
    "manual"
   ],
   "clipboard-apis/async-write-text-read-text-manual.https.html": [
    "e69933ca4cdc42105d469b7ffb105aa60a8e0875",
    "manual"
   ],
-  "clipboard/OWNERS": [
-   "bae753666bda85e9805a5e2fad80ba71459b8aba",
-   "support"
-  ],
   "common/OWNERS": [
    "13fbb201f77b9929d7f5693b70855c9b68abc70b",
    "support"
   ],
   "common/PrefixedLocalStorage.js": [
    "0516e849d40a16e82e1bb800372df28ed802aa8d",
    "support"
   ],
@@ -436805,48 +438909,16 @@
   "content-security-policy/blink-contrib/object-in-svg-foreignobject.sub.html": [
    "b190bbe16893d13d25599c2cbb344efc3f61eca8",
    "testharness"
   ],
   "content-security-policy/blink-contrib/object-in-svg-foreignobject.sub.html.sub.headers": [
    "368845671fc996d39fd6f85c113a26cdaa98ee3e",
    "support"
   ],
-  "content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html": [
-   "7f81f0fe6a5ed984e6084250672e598a2fe2c707",
-   "testharness"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-archive-codebase.sub.html.sub.headers": [
-   "37429d7e5523b4fa092f319e0348abf62f1fe95e",
-   "support"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-archive.sub.html": [
-   "9d07979a968cea9958c237e465b3562fac0d6e65",
-   "testharness"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-archive.sub.html.sub.headers": [
-   "0e9b0159e148542c330eeb1c9501911e2e0473c0",
-   "support"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html": [
-   "5b0ef3d19498af074fbd2ca00b6af16774b1b4cc",
-   "testharness"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-code-codebase.sub.html.sub.headers": [
-   "eac4a0d1aecb5475bb88b223deec64209f98b25c",
-   "support"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-code.sub.html": [
-   "5827478d16c8bf8f473daae756eaeabaafdee879",
-   "testharness"
-  ],
-  "content-security-policy/blink-contrib/object-src-applet-code.sub.html.sub.headers": [
-   "8d1f3d53e9702d62946969231a45c79f26e6e287",
-   "support"
-  ],
   "content-security-policy/blink-contrib/object-src-no-url-allowed.sub.html": [
    "e4cd8d8e7a3150626eea1d6ca7beed13feb6a76c",
    "testharness"
   ],
   "content-security-policy/blink-contrib/object-src-no-url-allowed.sub.html.sub.headers": [
    "45d7467bb741dc0c79dce502b805a5bbd1e9be87",
    "support"
   ],
@@ -438645,16 +440717,712 @@
   "cookies/secure/set-from-ws.https.sub.html": [
    "2d60b86d8beaa5b3329c804949c7ee0d51d929c3",
    "testharness"
   ],
   "cookies/secure/set-from-wss.https.sub.html": [
    "31461ac108fe717b074a41e14c12d9b83c064f85",
    "testharness"
   ],
+  "core-aam/OWNERS": [
+   "3a6002295ea2893ba74763e46965bd2d1291d55b",
+   "support"
+  ],
+  "core-aam/README.md": [
+   "a910a51a7869305635992eb784b0ddfe70d8f8ae",
+   "support"
+  ],
+  "core-aam/alert-manual.html": [
+   "d42332d1f0c644ce2b1fedacdfb0a12ea05e4357",
+   "manual"
+  ],
+  "core-aam/alertdialog-manual.html": [
+   "84ab9f273e1ede0209d8c394278fc082da9cae8d",
+   "manual"
+  ],
+  "core-aam/application-manual.html": [
+   "964f6da30719c6384df52e29ad87d1f58e0cc609",
+   "manual"
+  ],
+  "core-aam/aria-atomic_false-manual.html": [
+   "489457cac27ce80189341e416f2f0f1694890cd9",
+   "manual"
+  ],
+  "core-aam/aria-atomic_true-manual.html": [
+   "0fa10bed96154a734e66bd46dc0d69450e4d9c25",
+   "manual"
+  ],
+  "core-aam/aria-autocomplete_both_new-manual.html": [
+   "e91ce8ab8b283235d7f26290b3b82f6db82216e6",
+   "manual"
+  ],
+  "core-aam/aria-autocomplete_inline_new-manual.html": [
+   "bc4b69bdff2e3b4a8c93d11838c2e35043ab66f0",
+   "manual"
+  ],
+  "core-aam/aria-autocomplete_list_new-manual.html": [
+   "718d69f40b4ffa4205fdcbf4d3b9e7b8fcbd83bd",
+   "manual"
+  ],
+  "core-aam/aria-busy_false-manual.html": [
+   "196d40f611124d06960fcf2635795c35e0996218",
+   "manual"
+  ],
+  "core-aam/aria-busy_true-manual.html": [
+   "c47a4a1f5267e34c534beff3039edff75b559478",
+   "manual"
+  ],
+  "core-aam/aria-checked_false_on_checkbox-manual.html": [
+   "5e699c8f425a153be30d7bcffab3c7ac4e9fd182",
+   "manual"
+  ],
+  "core-aam/aria-checked_false_on_menuitemradio-manual.html": [
+   "1564ead59e7aacb66f411dcb7c046849f0eccf5e",
+   "manual"
+  ],
+  "core-aam/aria-checked_mixed-manual.html": [
+   "93c2d638955729f994e1ef3075399e66c4741a71",
+   "manual"
+  ],
+  "core-aam/aria-checked_true_on_checkbox-manual.html": [
+   "03765646df203d1e65f533d3ece48c4834921eb8",
+   "manual"
+  ],
+  "core-aam/aria-checked_true_on_menuitemradio-manual.html": [
+   "22ac9848616b98974f16cc0a6d3e1ea49ca45e90",
+   "manual"
+  ],
+  "core-aam/aria-colcount_new-manual.html": [
+   "7613cc5436b2a716259e0cc9db7961fe5963d205",
+   "manual"
+  ],
+  "core-aam/aria-colindex_new-manual.html": [
+   "420c066fde04092b86ba2877cb39048bf258b78a",
+   "manual"
+  ],
+  "core-aam/aria-colspan_new-manual.html": [
+   "19dc7dd49b40fc9d94e68158e936a92603c6eeda",
+   "manual"
+  ],
+  "core-aam/aria-controls-manual.html": [
+   "1ee9282c1802333d8e7d9f5fabba31f872ed689e",
+   "manual"
+  ],
+  "core-aam/aria-current_with_non-false_allowed_value_new-manual.html": [
+   "2830b1eecdd82134942db90d47ede5e180dae8d4",
+   "manual"
+  ],
+  "core-aam/aria-current_with_unrecognized_value_new-manual.html": [
+   "22e8ab095e4c7065a60c892427ce158850afe5a6",
+   "manual"
+  ],
+  "core-aam/aria-describedby-manual.html": [
+   "494c5a53797b0d2d1257507b529587fcc892a16b",
+   "manual"
+  ],
+  "core-aam/aria-details_new-manual.html": [
+   "d912f5dab5ac4ecf572389b5495285cd49f0e8e9",
+   "manual"
+  ],
+  "core-aam/aria-disabled_false-manual.html": [
+   "ab4570557f36e74cbbb65089c13da90b81fb8ce0",
+   "manual"
+  ],
+  "core-aam/aria-disabled_true-manual.html": [
+   "b6d35f2afbd12143d570b4e449798ec09e8a0e43",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_copy-manual.html": [
+   "a087d4af0835ed9a80870bb43e09c72b7a739e4c",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_execute-manual.html": [
+   "a1b1de19f749f69b11dcab73ee18899cdfac6514",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_link-manual.html": [
+   "417e5b9398d90dfbaf4892bc7eae662674683cb7",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_move-manual.html": [
+   "97e89dd1af2006340374b1928ecc5893e2ecc0d2",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_none-manual.html": [
+   "2f3fad02efb9328cea92ee015ab06ecbafc9b14f",
+   "manual"
+  ],
+  "core-aam/aria-dropeffect_popup-manual.html": [
+   "3e7723d80a5666ff1e5ffccb7ac564de712d6153",
+   "manual"
+  ],
+  "core-aam/aria-errormessage-manual.html": [
+   "5d6be02752f6a6a243b38fba4ecf5c5ef42c3261",
+   "manual"
+  ],
+  "core-aam/aria-expanded_false-manual.html": [
+   "ef72441e78e7464399ce9b8da19a04420d727735",
+   "manual"
+  ],
+  "core-aam/aria-expanded_true-manual.html": [
+   "e57f606a01fffc57ede231fda6e093b9759afc9c",
+   "manual"
+  ],
+  "core-aam/aria-flowto-manual.html": [
+   "23db7629412cb0f8fb2a7abe97e9ec2c69a9f512",
+   "manual"
+  ],
+  "core-aam/aria-grabbed_false-manual.html": [
+   "5fd4816c4c8b1800d4a102d66568bd9d2cfcb976",
+   "manual"
+  ],
+  "core-aam/aria-grabbed_true-manual.html": [
+   "4b3e3afad5525901db5d467a8416511b4af55cf3",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_dialog_new-manual.html": [
+   "3cdd2fe1bd4bb0115d8d92a38f7b4822e62e58fa",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_false-manual.html": [
+   "9a1821475c5f1b331326d3f32b5b2a3670780b91",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_listbox_new-manual.html": [
+   "dfade194716c8d54d5aad762ed16edfc9eb52e44",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_menu_new-manual.html": [
+   "51aafc7d69b65f3f40c1a8d0c8adf7c8857a60d9",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_tree_new-manual.html": [
+   "000a7add26a7805a53ddda772780986692b21e49",
+   "manual"
+  ],
+  "core-aam/aria-haspopup_true-manual.html": [
+   "617282c525855c68236395af33780c8a4644ce2f",
+   "manual"
+  ],
+  "core-aam/aria-hidden_true-manual.html": [
+   "769a8e4ac26d8d23e2cef46b6d3895613b51700c",
+   "manual"
+  ],
+  "core-aam/aria-invalid_false-manual.html": [
+   "8aa99436e751a7dd29cc6158d2a5cfa2dadc14e9",
+   "manual"
+  ],
+  "core-aam/aria-invalid_grammar-manual.html": [
+   "378f3fab4fd15d967045a4d8176d23cd33a74928",
+   "manual"
+  ],
+  "core-aam/aria-invalid_spelling-manual.html": [
+   "aec08e95facefecff84e413f4a9bdd419f60bfcb",
+   "manual"
+  ],
+  "core-aam/aria-invalid_true-manual.html": [
+   "7f2511c328d79e14ef5422659bf30ec7e0fc6e85",
+   "manual"
+  ],
+  "core-aam/aria-invalid_with_unrecognized_value-manual.html": [
+   "e73ce45d034570958a1a0b94375c996c8f480645",
+   "manual"
+  ],
+  "core-aam/aria-keyshortcuts_new-manual.html": [
+   "fb13fd6035b517631f765aa68da0a0e774b87edb",
+   "manual"
+  ],
+  "core-aam/aria-label-manual.html": [
+   "b4ed56e8ee499fa519bb1dc0ac962654ae4420f3",
+   "manual"
+  ],
+  "core-aam/aria-labelledby-manual.html": [
+   "33feb7b4ae809ab5633063fcb5ade3fbba47726c",
+   "manual"
+  ],
+  "core-aam/aria-level_on_heading_new-manual.html": [
+   "73922a74bc22596de087bc987fc0f04b0f991fd5",
+   "manual"
+  ],
+  "core-aam/aria-level_on_non-heading-manual.html": [
+   "b980f7c3d410a90faf90750bc147c3d6ff38a54c",
+   "manual"
+  ],
+  "core-aam/aria-live_assertive-manual.html": [
+   "f8feebe3c3f00322028226083d687e3bdf1fa147",
+   "manual"
+  ],
+  "core-aam/aria-live_off-manual.html": [
+   "4b0d41a00835bbf7c389f770e131ad116a53619f",
+   "manual"
+  ],
+  "core-aam/aria-live_polite-manual.html": [
+   "054cf669d56af6dbacf1b9b4b2d0e93abc5ade7f",
+   "manual"
+  ],
+  "core-aam/aria-modal_false_new-manual.html": [
+   "89dc63db15a5fe70dabe4dc853d9ece0b34739d0",
+   "manual"
+  ],
+  "core-aam/aria-modal_true_new-manual.html": [
+   "9cf751b1150bd94c3f7521beed0aa457d5185e5d",
+   "manual"
+  ],
+  "core-aam/aria-multiline_false-manual.html": [
+   "ed39d9373be306c9d8e0bfae33201e004e599114",
+   "manual"
+  ],
+  "core-aam/aria-multiline_true-manual.html": [
+   "82a17b7a1e9c2fc5cb12d37df4e3c671e28d7af4",
+   "manual"
+  ],
+  "core-aam/aria-multiselectable_false-manual.html": [
+   "f0a416187c0633f964a1c77c4df56b52d53846a7",
+   "manual"
+  ],
+  "core-aam/aria-multiselectable_true-manual.html": [
+   "6176397e7942c884647ed1fc8dd9cddb82d10149",
+   "manual"
+  ],
+  "core-aam/aria-orientation_horizontal-manual.html": [
+   "9f5294b95ab6e620c125b74844f7ead1e4279f56",
+   "manual"
+  ],
+  "core-aam/aria-orientation_undefined_new-manual.html": [
+   "c5a1b4f4b53dda1bc19f83cdeb5d6c97f468fc24",
+   "manual"
+  ],
+  "core-aam/aria-orientation_vertical-manual.html": [
+   "b256c78602ef52ff80d6fedfdc4dbe1680c789f9",
+   "manual"
+  ],
+  "core-aam/aria-owns_may_need_manual_verification-manual.html": [
+   "36e568e0da8ebfe722fd9f52e35929ea1426cf91",
+   "manual"
+  ],
+  "core-aam/aria-placeholder_new-manual.html": [
+   "0911902afabf27f9bac77e5d3b14e54c965b36fe",
+   "manual"
+  ],
+  "core-aam/aria-posinset-manual.html": [
+   "9152c29dac926f6ed946e04bbd6241389943dce3",
+   "manual"
+  ],
+  "core-aam/aria-pressed_false-manual.html": [
+   "ee3ed7c1db0b094addf65162c51cee6565794b33",
+   "manual"
+  ],
+  "core-aam/aria-pressed_mixed-manual.html": [
+   "acca0901bb55e4e14f56e42aa7072cd1f0b664c8",
+   "manual"
+  ],
+  "core-aam/aria-pressed_true-manual.html": [
+   "9fd08731864c1097b8900f9465be17e440fb6658",
+   "manual"
+  ],
+  "core-aam/aria-readonly_false-manual.html": [
+   "c04cdb4d072e4fd758cac204db1ed71fd9da7366",
+   "manual"
+  ],
+  "core-aam/aria-readonly_is_unspecified_on_gridcell_new-manual.html": [
+   "df49945ad25fa8f87d80444392fa56469edb199a",
+   "manual"
+  ],
+  "core-aam/aria-readonly_true_on_checkbox-manual.html": [
+   "c983178ece56e6553c43efe744f668f6bab72b99",
+   "manual"
+  ],
+  "core-aam/aria-readonly_true_on_radiogroup-manual.html": [
+   "dedf2204aac86268b5103e1f742ef610155749f1",
+   "manual"
+  ],
+  "core-aam/aria-readonly_true_on_textbox-manual.html": [
+   "a8d50b2a9d6358f8a2de2536f1f746d49ee3a6f4",
+   "manual"
+  ],
+  "core-aam/aria-relevant-manual.html": [
+   "1ba191d621ce4dd1660c09f8e835c8294821aa37",
+   "manual"
+  ],
+  "core-aam/aria-required_true-manual.html": [
+   "0c7016591a48bf1cf70eeba4eca818b8c4f675e5",
+   "manual"
+  ],
+  "core-aam/aria-roledescription_is_empty_or_whitespace_characters_new-manual.html": [
+   "85e91ac1ef676772dae201a13d6420da8b9e2c93",
+   "manual"
+  ],
+  "core-aam/aria-roledescription_new-manual.html": [
+   "9fe9d0b6ddf325c86f5e841f66b4a0dc64e2b1c9",
+   "manual"
+  ],
+  "core-aam/aria-rowcount_new-manual.html": [
+   "3d0199ecc43bd7804657515689d78ae5fc78df40",
+   "manual"
+  ],
+  "core-aam/aria-rowindex_new-manual.html": [
+   "c87845f54851850aaf1e7515527dd65c1b13c107",
+   "manual"
+  ],
+  "core-aam/aria-rowspan_new-manual.html": [
+   "b18306b6cf3dcbde4637acd8b0b6cac524b29a2b",
+   "manual"
+  ],
+  "core-aam/aria-selected_false-manual.html": [
+   "bacdc3819df22dc1bf058625601035b19f754d0f",
+   "manual"
+  ],
+  "core-aam/aria-selected_true-manual.html": [
+   "333a7c9da14989487923dcf2268b583ecff1d36b",
+   "manual"
+  ],
+  "core-aam/aria-setsize_-1-manual.html": [
+   "54f2be5a91f3742cb2c516b540728f3a9e47bdf6",
+   "manual"
+  ],
+  "core-aam/aria-setsize_3-manual.html": [
+   "41e2f5f7963fb1e442628918a00c6725a79884b3",
+   "manual"
+  ],
+  "core-aam/aria-sort_ascending-manual.html": [
+   "df75385bee7790243235d151f105cde9bcd1e1dd",
+   "manual"
+  ],
+  "core-aam/aria-sort_descending-manual.html": [
+   "0c5a16b83902173128d3421229a0b043454d7390",
+   "manual"
+  ],
+  "core-aam/aria-sort_none-manual.html": [
+   "17bd36d91b02923c47b3e768165d00bb661f64b3",
+   "manual"
+  ],
+  "core-aam/aria-sort_other-manual.html": [
+   "ae0cf4fbe7406ed857c9f7f622cd40bc13ebc04d",
+   "manual"
+  ],
+  "core-aam/aria-valuemax-manual.html": [
+   "95846c40b7f0b503e0308c11a01f24e1c7c655b2",
+   "manual"
+  ],
+  "core-aam/aria-valuemin-manual.html": [
+   "2a7bb955418c4bb067c657c8339b95c0e56a81dc",
+   "manual"
+  ],
+  "core-aam/aria-valuenow-manual.html": [
+   "c9907cef3fffa1abb886e8c40e2617f606ddaded",
+   "manual"
+  ],
+  "core-aam/aria-valuetext-manual.html": [
+   "6478e624e5d3c200c21170017d0231637cdfbcb4",
+   "manual"
+  ],
+  "core-aam/article-manual.html": [
+   "f8e5677917f2027b7bcda36ae9489658851f29cb",
+   "manual"
+  ],
+  "core-aam/banner_new-manual.html": [
+   "c55cb00d6a2d1d67e0d6007a9b8445e32d8a2a74",
+   "manual"
+  ],
+  "core-aam/button_with_aria-haspopup_dialog_new-manual.html": [
+   "80b2f3068a42c269602ac6afa6e0c42c2c8d24aa",
+   "manual"
+  ],
+  "core-aam/button_with_aria-haspopup_true_new-manual.html": [
+   "d700439726c0a8c29865a5d7d9dd67bc059be242",
+   "manual"
+  ],
+  "core-aam/button_with_default_values_for_aria-pressed_and_aria-haspopup-manual.html": [
+   "b9a71a7260271d95d1a90d40ab6bdf35f10de544",
+   "manual"
+  ],
+  "core-aam/button_with_defined_value_for_aria-pressed-manual.html": [
+   "794289d0e18725c0409ffe552fa41cdb55da73db",
+   "manual"
+  ],
+  "core-aam/cell_new-manual.html": [
+   "e2067a50a1c7b968a98953feaf0185e1e7fcc668",
+   "manual"
+  ],
+  "core-aam/checkbox-manual.html": [
+   "bb72df585717aba95d0655f23964f1453b6d26b2",
+   "manual"
+  ],
+  "core-aam/columnheader-manual.html": [
+   "176f72c047ed63f0ca590347511cfe0b65eaacd0",
+   "manual"
+  ],
+  "core-aam/combobox-manual.html": [
+   "bdef56d59a2075e909deee62fa4e83033945e5dd",
+   "manual"
+  ],
+  "core-aam/complementary_new-manual.html": [
+   "d96d9990a7974fe20a3a361dbfab249a292ddb69",
+   "manual"
+  ],
+  "core-aam/contentinfo_new-manual.html": [
+   "a94c8e0080614473f65eb2f096a8fca4659473ed",
+   "manual"
+  ],
+  "core-aam/definition-manual.html": [
+   "b242f6c3f03a77fc0185d0d87be79fb3d0909bb3",
+   "manual"
+  ],
+  "core-aam/dialog-manual.html": [
+   "9eac774edaa43c88b33832c78b3c6c3b3b18ee3d",
+   "manual"
+  ],
+  "core-aam/directory-manual.html": [
+   "7a83b021b400311c2f9298f1676b05c35d41dc05",
+   "manual"
+  ],
+  "core-aam/document-manual.html": [
+   "6fba7d1f7ff31959935e785060f5d3c908e5a87f",
+   "manual"
+  ],
+  "core-aam/feed_new-manual.html": [
+   "efa21e5b21974e5dd07755010be6296530675d66",
+   "manual"
+  ],
+  "core-aam/figure_new-manual.html": [
+   "9a88af2fa13af4b2fd2cfdddee404df94df313df",
+   "manual"
+  ],
+  "core-aam/form_new-manual.html": [
+   "9fba5ac3cc94db689059ecb7e40f1b5aa57ccd8f",
+   "manual"
+  ],
+  "core-aam/grid-manual.html": [
+   "b1da9b11d5744e65acd54009324a6005a3f93b73",
+   "manual"
+  ],
+  "core-aam/gridcell-manual.html": [
+   "182fc2e0dc0a34ca1046cce004d7c97bb43279bd",
+   "manual"
+  ],
+  "core-aam/group-manual.html": [
+   "d7ed139cf93ed5031012b2ef3c5ba4ef1b11f517",
+   "manual"
+  ],
+  "core-aam/heading-manual.html": [
+   "7826a67c3768f158e212b55cca69d8237c3f6c0e",
+   "manual"
+  ],
+  "core-aam/img-manual.html": [
+   "2b85d7d4f99d06bdb12e50a65e8d39c75c60aa8c",
+   "manual"
+  ],
+  "core-aam/link-manual.html": [
+   "8fb41f0d96179c1d901899eb82b89f86812962da",
+   "manual"
+  ],
+  "core-aam/list-manual.html": [
+   "8f76369c4ada1718356206104eed1984e2d17046",
+   "manual"
+  ],
+  "core-aam/listbox_not_owned_by_or_child_of_combobox-manual.html": [
+   "7f7e4e6109f3c1bf6d49a496b03b717207e60ec3",
+   "manual"
+  ],
+  "core-aam/listbox_owned_by_or_child_of_combobox-manual.html": [
+   "4e3061058708f705419b21b767b6e65f2349f247",
+   "manual"
+  ],
+  "core-aam/listitem-manual.html": [
+   "b867ef76a2ae9737fbad43d167b4c422c90530cc",
+   "manual"
+  ],
+  "core-aam/log-manual.html": [
+   "6248ca898362834265c76f584d97031ec87da0ea",
+   "manual"
+  ],
+  "core-aam/main_new-manual.html": [
+   "719ea5348c648c76ec6c49b48066d75669695d52",
+   "manual"
+  ],
+  "core-aam/marquee-manual.html": [
+   "7ac90bc94c00b956294eeb80afd5f9f66cd5d3bc",
+   "manual"
+  ],
+  "core-aam/math-manual.html": [
+   "e8b5acf5feec411a603522cebd570015b36001ca",
+   "manual"
+  ],
+  "core-aam/menu-manual.html": [
+   "7c4d7ebda6a4bd823bbf5923ed3a56fb250250f3",
+   "manual"
+  ],
+  "core-aam/menubar-manual.html": [
+   "f7b51bc3926dd680d2443c9a8844e270bee80941",
+   "manual"
+  ],
+  "core-aam/menuitem_not_owned_by_or_child_of_group-manual.html": [
+   "457f50336677ac538f571bf8278c9c2341889217",
+   "manual"
+  ],
+  "core-aam/menuitem_owned_by_or_child_of_group-manual.html": [
+   "458d7336a7d928017c69fb4727cd95698c355ad8",
+   "manual"
+  ],
+  "core-aam/menuitemcheckbox-manual.html": [
+   "2e98e1076407242eeecaabe5889efad369cec98a",
+   "manual"
+  ],
+  "core-aam/menuitemradio-manual.html": [
+   "61b7dc8e533e6cc1f48550b6829a057b0111e80d",
+   "manual"
+  ],
+  "core-aam/navigation_new-manual.html": [
+   "9bf8da1d1596ee280a07fec3feeb57adecd1f28e",
+   "manual"
+  ],
+  "core-aam/none_new-manual.html": [
+   "af2979bfd7b4571ba5fed156a7433e7e02c67e99",
+   "manual"
+  ],
+  "core-aam/note-manual.html": [
+   "77290ed56f12fab7d52dd20324cfba1c8288c87b",
+   "manual"
+  ],
+  "core-aam/option_inside_combobox-manual.html": [
+   "224a3ab52b06559452a999695208b08d5e1c5379",
+   "manual"
+  ],
+  "core-aam/option_not_inside_combobox-manual.html": [
+   "ab4300eeae7db2a8cfb503e963ea7a76d0b333ef",
+   "manual"
+  ],
+  "core-aam/presentation-manual.html": [
+   "085fabf6f64e30fdc0d5f000d6f7ee29f0758ce6",
+   "manual"
+  ],
+  "core-aam/progressbar-manual.html": [
+   "a9b4aabf96dbe5d5bcb5e316a60e2b4547825e18",
+   "manual"
+  ],
+  "core-aam/radio-manual.html": [
+   "00135d2f779f9a88b7b67a15e9485b7abf0dc310",
+   "manual"
+  ],
+  "core-aam/radiogroup-manual.html": [
+   "11c9d95418cdce273ad6c6bcdb5fe72c321dc3d6",
+   "manual"
+  ],
+  "core-aam/region_with_an_accessible_name_new-manual.html": [
+   "629494f6157ea303b37d09431bd1a122be8638bd",
+   "manual"
+  ],
+  "core-aam/region_without_an_accessible_name_new-manual.html": [
+   "6b7161ebcb83c684b5b1f4fc6e01ade384eb5e2a",
+   "manual"
+  ],
+  "core-aam/row_inside_treegrid-manual.html": [
+   "d6df3d3034ec2825ffd0bb1dad9e8da28d7c84ea",
+   "manual"
+  ],
+  "core-aam/row_not_inside_treegrid-manual.html": [
+   "a6e823cb242c9501727068dcbcfa7c932da4f003",
+   "manual"
+  ],
+  "core-aam/rowgroup-manual.html": [
+   "1792295bfbab4b89257c2d4ebe81ac3321a39ccd",
+   "manual"
+  ],
+  "core-aam/rowheader-manual.html": [
+   "598476f9904e3aa6b642d731208c5c1e3b59ef91",
+   "manual"
+  ],
+  "core-aam/scrollbar-manual.html": [
+   "976abf3cfdb51ed0744686e4c79336a0d855daaf",
+   "manual"
+  ],
+  "core-aam/search_new-manual.html": [
+   "79677f75005dc785a7e87d90787b1c8c257d72e9",
+   "manual"
+  ],
+  "core-aam/searchbox_new-manual.html": [
+   "cae60640123d4a2995a73730af7f8e12df598857",
+   "manual"
+  ],
+  "core-aam/separator_focusable_new-manual.html": [
+   "a166e125bb64943e629693400abcda772cdcc40e",
+   "manual"
+  ],
+  "core-aam/separator_non-focusable-manual.html": [
+   "eecb9fb266ed497ce745e49cb9ab02108bf93490",
+   "manual"
+  ],
+  "core-aam/slider-manual.html": [
+   "7b3d0f4c4b7f1ce841d6c5e94e6cc3f12a26e34e",
+   "manual"
+  ],
+  "core-aam/spinbutton-manual.html": [
+   "53786d793c51ad7482e0c374700c166ec3cd83da",
+   "manual"
+  ],
+  "core-aam/status-manual.html": [
+   "b852a9cbb8032ac3af2004943fe8f9c87819b5d0",
+   "manual"
+  ],
+  "core-aam/switch_new-manual.html": [
+   "28aeebd78b9bfdd61b5a03abe9f0d3005304f98d",
+   "manual"
+  ],
+  "core-aam/tab-manual.html": [
+   "1743d0df97c5a6cde3cd5bfd2fe1dc44fdcec4a7",
+   "manual"
+  ],
+  "core-aam/table_new-manual.html": [
+   "4befff0c1184d3e4b4c89e40cb72680b2615183d",
+   "manual"
+  ],
+  "core-aam/tablist-manual.html": [
+   "5c956d06e956fa4cd07fbb933fcbc82103739dcc",
+   "manual"
+  ],
+  "core-aam/tabpanel-manual.html": [
+   "08e8a711f80ebd09331154bc2e30683330e311f6",
+   "manual"
+  ],
+  "core-aam/term_new-manual.html": [
+   "422a60e4f6a9cd96e42aa5c4e248875f117b574e",
+   "manual"
+  ],
+  "core-aam/textbox_when_aria-multiline_is_false-manual.html": [
+   "f3f6c60b2029f22a09c9c476ae43f1243867759b",
+   "manual"
+  ],
+  "core-aam/textbox_when_aria-multiline_is_true-manual.html": [
+   "5247a2001f7fc3b9c86e4190dead1fcfab4f96a2",
+   "manual"
+  ],
+  "core-aam/timer-manual.html": [
+   "6be2a98ba2efa611e92bf3cfa94fb9432b5c8cd6",
+   "manual"
+  ],
+  "core-aam/toolbar-manual.html": [
+   "0939e5fafa214ac133835d307f5b6e63f0cfba86",
+   "manual"
+  ],
+  "core-aam/tooltip-manual.html": [
+   "e8710e8624cf36263e1444ada59cec2d8ef2816d",
+   "manual"
+  ],
+  "core-aam/tree-manual.html": [
+   "116c2469589beed721b6a5d17d6f89fe933b1d20",
+   "manual"
+  ],
+  "core-aam/treegrid-manual.html": [
+   "41ab52c5e0d75199de205e81a5f0d1fbbbffe7b9",
+   "manual"
+  ],
+  "core-aam/treeitem-manual.html": [
+   "043e7914d378655e1d107881641b2434acc7465e",
+   "manual"
+  ],
   "cors/304.htm": [
    "644c902be2861bed6dfa48ed12a12b08c6d9a2f5",
    "testharness"
   ],
   "cors/OWNERS": [
    "aee63d52a4bdc2af1cd26941a6f01a794b5be9fc",
    "support"
   ],
@@ -438809,32 +441577,32 @@
   "css-backgrounds/background-clip-color.html": [
    "9680097433363351d87f2b34da76108a3d33a5d9",
    "reftest"
   ],
   "css-cascade/inherit-initial.html": [
    "67ecb845c4bcdacc8185b0f78d36856f9a408342",
    "testharness"
   ],
-  "css-font-display/font-display-ref.html": [
-   "26fcc2758c649ce922397cd1c4aa862bdbf1e6a0",
-   "support"
-  ],
-  "css-font-display/font-display.html": [
-   "d83914326318602ce0eef5f248254a391b338df0",
-   "reftest"
-  ],
-  "css-font-display/resources/slow-ahem-loading.py": [
-   "aac16c1e618841ebdd28463adf5688ca837b9d57",
-   "support"
-  ],
   "css-font-loading/fontfacesetloadevent-constructor.html": [
    "ad355c3d5220c1b938182241a8e8abe030ace699",
    "testharness"
   ],
+  "css-fonts/font-display/font-display-ref.html": [
+   "26fcc2758c649ce922397cd1c4aa862bdbf1e6a0",
+   "support"
+  ],
+  "css-fonts/font-display/font-display.html": [
+   "d83914326318602ce0eef5f248254a391b338df0",
+   "reftest"
+  ],
+  "css-fonts/font-display/resources/slow-ahem-loading.py": [
+   "450ae01cb9fbd2c2cc436f1a8ace5386eb13442c",
+   "support"
+  ],
   "css-fonts/matching/OWNERS": [
    "2f711301297bd297b6bf5ccde958cd7a59c9e678",
    "support"
   ],
   "css-fonts/matching/README.md": [
    "194fbc4cdaf1ff4a43e1a4e6b7bc7fbc17eec6d8",
    "support"
   ],
@@ -438910,17 +441678,17 @@
    "0c1517f7ba747014c7c091b61d48f11421ed91c2",
    "support"
   ],
   "css-paint-api/background-image-alpha-ref.html": [
    "45ef6e998e5f266741f5403df650cd9557dbe005",
    "support"
   ],
   "css-paint-api/background-image-alpha.html": [
-   "2476286f8be52ae4f8ba22dd939b961d8e7ca379",
+   "84acc5f998812497d344067d7095c7561dda13ee",
    "reftest"
   ],
   "css-paint-api/background-image-multiple-ref.html": [
    "9ff536499d72240f67eb6911b768c624371ea678",
    "support"
   ],
   "css-paint-api/background-image-multiple.html": [
    "9e43ca2821fa0075073a898efde7595f6b57fad4",
@@ -439062,25 +441830,25 @@
    "1f8f97b0a2141f5f8530a535b24b2b04dadae31c",
    "reftest"
   ],
   "css-paint-api/paint-arguments-ref.html": [
    "cbe0372259011ca94f0fd8d233413439ba9cf117",
    "support"
   ],
   "css-paint-api/paint-arguments.html": [
-   "7e70944e4d1dd456cc91eb443f09bb2e28b812f4",
+   "7acf977d7e09bb85ada1b0df7fd9e4ea3a11ddfe",
    "reftest"
   ],
   "css-paint-api/paint-function-arguments-ref.html": [
    "a3aebfce59d0f62ab229248b7903b0dc731835d5",
    "support"
   ],
   "css-paint-api/paint-function-arguments.html": [
-   "e4083cf39fca7ce4783d36e3235d4cfecf7d2db9",
+   "cc19f4bc39c7a2cc1d9ed35a6a5a50d3935830af",
    "reftest"
   ],
   "css-paint-api/paint2d-composite-ref.html": [
    "60c069de8135b934df166560db5c592d5becbc92",
    "support"
   ],
   "css-paint-api/paint2d-composite.html": [
    "bfe095afc5c9a4325b06cfc22414a09395084113",
@@ -439206,31 +441974,47 @@
    "c10d44a53a00e6a9745d6ea1c359298723a0aee1",
    "reftest"
   ],
   "css-paint-api/parse-input-arguments-015.html": [
    "a78c728b67af31e47c8d46e60e33ba437769a020",
    "reftest"
   ],
   "css-paint-api/parse-input-arguments-016.html": [
-   "e06d4a98a350f1cd2ba3bacf132f1ada83f750c1",
+   "1c14dbe6c6bc0f218724731112c4c45888ede8b5",
    "reftest"
   ],
   "css-paint-api/parse-input-arguments-017.html": [
-   "6a16052f0435cc615447b548c598a6da5ce7d49b",
+   "cba3754c5044665b2648fec05e25d7b6028c185f",
    "reftest"
   ],
   "css-paint-api/parse-input-arguments-018-ref.html": [
    "7dd468373f6efa2b5a3a8d16c91c0d4dec87c143",
    "support"
   ],
   "css-paint-api/parse-input-arguments-018.html": [
    "b606bfff93300f114ea4efab85e489727e9821c7",
    "reftest"
   ],
+  "css-paint-api/parse-input-arguments-019.html": [
+   "db11565957c3da1ca7a51b9ab36cd4a823386a55",
+   "reftest"
+  ],
+  "css-paint-api/parse-input-arguments-020.html": [
+   "acbff610abd29a01574add30679b43d7a735c9bd",
+   "reftest"
+  ],
+  "css-paint-api/parse-input-arguments-021.html": [
+   "6f567a29ed4ec26ad8c97277469783a614a5811b",
+   "reftest"
+  ],
+  "css-paint-api/parse-input-arguments-022.html": [
+   "9f0efcee3e1412faa19fe50f475623fd5cf2852b",
+   "reftest"
+  ],
   "css-paint-api/parse-input-arguments-ref.html": [
    "6133bd65ef569456f58f1e501d81e088256bdc0a",
    "support"
   ],
   "css-paint-api/registered-properties-in-custom-paint.html": [
    "3855c8c28ea3a24bade81080f3f288ef75243dce",
    "reftest"
   ],
@@ -475762,29 +478546,29 @@
    "b47d3543a16c31e61ffab4a86b42d6cbbe2c3712",
    "support"
   ],
   "css/CSS2/selectors/attribute-token-selector-002.xht": [
    "fcd062142262e751c0085ae989aaff41d4fad5ec",
    "reftest"
   ],
   "css/CSS2/selectors/attribute-value-selector-001-ref.xht": [
-   "cc5ab97ad0b2bd2c9dc422c580bfd23bf731c304",
+   "6eb42b758e00b2d9bb41450530a710ccb1d8ae81",
    "support"
   ],
   "css/CSS2/selectors/attribute-value-selector-001.xht": [
-   "fa6e3b8b4a1f0590f5849d3486416d8b8fe1e3c0",
+   "3c9b82d12fc6e93c50bd196b47ba8f4521dc2023",
    "reftest"
   ],
   "css/CSS2/selectors/attribute-value-selector-002.xht": [
-   "72dfda92fefb318f1729683957841664929ec359",
+   "43cb55e259afd32bac61a315594651297b47e515",
    "reftest"
   ],
   "css/CSS2/selectors/attribute-value-selector-003.xht": [
-   "b52a459c432c60c7699161b21f3c1b747253064b",
+   "07904c2ee48717ace5cc920e0c508a87d2fd2b76",
    "reftest"
   ],
   "css/CSS2/selectors/attribute-value-selector-004.xht": [
    "da0169e38288e8dd2eaa20d1de8bf97cfc24348f",
    "reftest"
   ],
   "css/CSS2/selectors/attribute-value-selector-005.html": [
    "1742425ccbfcba902a84549f72b2d887a9db117f",
@@ -481026,57 +483810,57 @@
    "06ee3b7d490ecd1d0d5fa84bfa7a71c4050510cb",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-001-ref.xht": [
    "0fd083ef8ab31c00a0883c598a8507e6ad2f1a0a",
    "support"
   ],
   "css/CSS2/syntax/core-syntax-001.xht": [
-   "0d00dda2dbfd4fec65b86f8f3db0fd2c0ef7124f",
+   "c13c7398c669f4e4bdf781a75b5898803a06d58e",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-002-ref.xht": [
    "a4d652d68b7fd0794b3f5257a4e86b2dbd63bfaf",
    "support"
   ],
   "css/CSS2/syntax/core-syntax-002.xht": [
-   "baad1eef8de7d56df13bb8c77aa2d5b22060a80d",
+   "5112a461a9da6fd374ee75367b1241001a77fce3",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-003.xht": [
-   "a103e81effdbe66e4ab58133b4cc3fc8e48c8ebf",
+   "4e75ddf4bdda2aa673a5d988b2ba683e129afa19",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-004.xht": [
-   "5272eb4abedacec7754f9b2a9cb9f399fabc9258",
+   "22b5b2e876cc4811921382bebd73b77be5e94ed2",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-006-ref.xht": [
    "b044be14c17c776de5e22d5eff7ca157d4ebb35d",
    "support"
   ],
   "css/CSS2/syntax/core-syntax-006.xht": [
-   "2bd96a86b802c1fb340592c72f083f258ed9e8ee",
+   "7a5e151afe0f313bf230a476e3d58a5a80e16cff",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-007-ref.xht": [
    "3fe9a9ee22dba55faa9c4b05c0c4424fa1b4ea45",
    "support"
   ],
   "css/CSS2/syntax/core-syntax-007.xht": [
-   "9906220e67a0b04623d8674f45fa2dd356da9f2f",
+   "db758c4019bdd277d89faf4ac1f39c06b9af4bc2",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-008.xht": [
-   "539858614f1760b47bf8c210d9143ed64d3e89e8",
+   "a82132a4ce45d624bfb1ce4bcfef5b4bbb2d7932",
    "reftest"
   ],
   "css/CSS2/syntax/core-syntax-009.xht": [
-   "0d14614584b32ad61c85a5240dcd72e9c4d936c5",
+   "8ec94eb1916558a7e8bfa9dd7b5a6675dd85b74a",
    "reftest"
   ],
   "css/CSS2/syntax/counters-001-ref.xht": [
    "929433a9f41b68bc67cc983df3684f9e91184223",
    "support"
   ],
   "css/CSS2/syntax/counters-001.xht": [
    "8681d3a84836ca6aacdc0a6380574f0b4cc08266",
@@ -513293,450 +516077,594 @@
   "css/css-grid-1/abspos/positioned-grid-items-017-ref.html": [
    "b3df58b256846bc883c52128b76169b7f13755eb",
    "support"
   ],
   "css/css-grid-1/abspos/positioned-grid-items-017.html": [
    "6e0f7a2262ec3476d8cf32ea562fe0f67ad5a7f1",
    "reftest"
   ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-001.html": [
+   "19ae01ab31a15efc601d2857d3ca1dd879cb4e66",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-002.html": [
+   "abb8f221910dc58b87ff1d3f5b9f346994688a8d",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-003.html": [
+   "1dee7406f817681eaec5c1b5607b9762bc546329",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-004.html": [
+   "03da21bdcbb4fdb53f93c372da2af4a175fc0bc9",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-005.html": [
+   "c4e793351e05b74a9d859286407f30f019e581ee",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-006.html": [
+   "ab2604e1dd0396402ce6ab0acea3a340d107ad08",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-007.html": [
+   "17b0c72f106d9103af25c654e913ad00c2a5ee19",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-008.html": [
+   "32b50873af5b434817de9ca3fb5ea3b79808bdbc",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-009.html": [
+   "29551eeae983adc5cdd9b518b64a1d0c9560f062",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-010.html": [
+   "396afc15a311bb0a636ba2570b57366a52fbc770",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-011.html": [
+   "49109ff240399f0f1f60308850f805779dfc4b21",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-012.html": [
+   "45a9279c62d4052a150a6da13ae9c177a38f01a2",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-013.html": [
+   "29d4695a9ad8eb5eebcdf15b3693a714bc412779",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-014.html": [
+   "66d7b70d305869abb453caf2f0e51a274bd1a537",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-015.html": [
+   "874f6b55e6b204d6cfc41c73a2c00a5f4229d298",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-016.html": [
+   "51b59909bd41adefa471e9b8bf9ff75e9ed92259",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-017.html": [
+   "6423406f9bfaf43ac97fd4547a784c2bb8d19bc0",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-018.html": [
+   "123575acf3c090c6479e5e4fa064c75fcea56bda",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-019.html": [
+   "f611e34104ae873f1124032aa22621dfcf4fa128",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-020.html": [
+   "c0a3bf24655a77c05dce301b0173f18d0fa42234",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-021.html": [
+   "e39bd0c869b5c69f99ddb0e43ecd516c23e22051",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-022.html": [
+   "436855cb48c5de8f913f209ba8172644c0e97226",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-023.html": [
+   "07ea8b43529cc3abe597b5cbaf71b577c0e08a81",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-024.html": [
+   "4ef7fd0b4687fe9f08513cccff2707bb05d92a78",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-025.html": [
+   "4ecabe7266535153ce6e38e1bee6e4eba28c5260",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-026.html": [
+   "dc702a1d181ef4efcf4d5161ff1b10bbb8e08337",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-027.html": [
+   "a5646db94e62b9455c9ed44e9f1a86f1cda74153",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-028.html": [
+   "9940f6e83d28a45ad87a50b24afe5eca1c3ff596",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-029.html": [
+   "ed6197207c84d52614f2e4bda31aa0794ac244ce",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-030.html": [
+   "df920f26e14d9adb3e987771b74f3ca21d001b9d",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-031.html": [
+   "24cdde781a98046593d3f0a57906b756326c4d83",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-032.html": [
+   "489c89b0d82b3ad92e342db2b680b152e4bab404",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-033.html": [
+   "4905906bd110e7b9ef3ad1ca4e0b01417b0998c8",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-034.html": [
+   "c9ef480494c982efd2cc2b6801eb0c308de0a608",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-035.html": [
+   "f93f4f2a62aa2073676466dcfc5975556dd04739",
+   "testharness"
+  ],
+  "css/css-grid-1/alignment/grid-alignment-implies-size-change-036.html": [
+   "748d617dac4b7c97592967c0df1ee82f6a43cc0a",
+   "testharness"
+  ],
   "css/css-grid-1/alignment/grid-content-distribution-001.html": [
-   "71d678f48849879663d199ec57a5f19fb5e026b3",
+   "5622a264eb2dbd6cf621ac97aa4a8ae5db82c6b3",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-002.html": [
-   "a20d044edc50199306349700b03522225841fc72",
+   "2c62d06a72062571ede87351e2538e386807e0b9",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-003.html": [
-   "4ef0c09a8c51e4fd2979887fe7420a62eb783027",
+   "c07303851028f6421158fe307889a7a53d7f31e0",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-004.html": [
-   "f1f2f65fad70478230f2456cbdf68ead9c6de7f6",
+   "f8692678b09611f1bcb5f1a1446f4eaeeadb64ac",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-005.html": [
-   "cf1c4546b569bea0bea062736ccea0e9e4f934ac",
+   "7d0900472ae1237a92d1070ac434e7f56f537a52",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-006.html": [
-   "f0f17f458563b57a39ff7b684996edfede82e510",
+   "ca8fea1a3e366d3dda1f939d6e119949a3774c48",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-007.html": [
-   "08db6086c6a30888fee6881d6646d42c509d218b",
+   "01482b8fae411849e91dae8390d9bfe6e6ab9844",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-008.html": [
-   "66d112eae6876a44c2246312719c2e6a3b93a5eb",
+   "77bb5394d7628566d07047220a08aba58970cf6b",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-009.html": [
-   "a27003f50acf7ff550d99b14a4a4435f80e791c0",
+   "b5ded29b361ee406736a514d00743915ee7588c5",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-010.html": [
-   "1f59c3d1af79df13007d0ba29132917a6e075e54",
+   "c0a3834676fa8bb146441bb7bc969560c667d1e0",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-011.html": [
-   "edaf37eff5ed1db1709729e669aee460457de3ec",
+   "f9be3a544d65dd63f8a718b0884fd87bcebc34a0",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-012.html": [
-   "6ba269671145f1f8d5a32f6a1efe5927a695f693",
+   "ee86f5d97a3db4b22f3ea5e9cec5d1f603401d36",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-013.html": [
-   "a2036358ed56a79580d675cccd820e40b82bb3d0",
+   "ef01ff8ea9d9357382c59fca4832901e091b58b6",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-014.html": [
-   "9e20812f1655d4bbbde261694deee0c1d09ff214",
+   "db95b9693a1e8986d81fb0fb42b045226ae87de2",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-015.html": [
-   "d49d3b8b7a92a7cae108d7baa9d40b95699149aa",
+   "818bb47cab93792162cd3effbb1ab4bbf4cafeb4",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-016.html": [
-   "9ac8ed870190e63aa9e248cf41c81c41b4816442",
+   "c5a38881fd5302f7f87fc0a08048455c2f9c6d93",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-017.html": [
-   "7295162365f4929cf68ebad634be1d3bd6f7227a",
+   "4ad7a14d8e640963a7b19401e5805d20379da1ad",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-018.html": [
    "872fdebe89d9ddad40efbd19c5b429675a8fc1ce",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-019.html": [
-   "5e97218c93c95bd57edd96219a520a894184b2b6",
+   "4a72208bc09151b5b6b471582c7211d1c6e1abf9",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-020.html": [
-   "228cd6b2312f64f7ae7bb1421fb6b8c5e6bb4c22",
+   "cb61983358d8df21f445c52e2b4672f036b92930",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-021.html": [
-   "a626f563a51ef70a0a6221dd397c4ea9dce74f2c",
+   "9be4696e87426cb7d7bbfbd623012427e1211e15",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-022.html": [
-   "0699d18ff695b8920588304e9685f843fa006b4f",
+   "bc821e4fdc223b8f73c640f7dedc74c459cc6124",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-023.html": [
-   "788e76b9f562e1a2af800b8939d8cd6dccdaf991",
+   "1cf05242c1918dfd94c8e3f429296696f1fbf2a5",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-024.html": [
-   "d0f957e475c3c0934a3d84e64ea6552e47cfac7a",
+   "ed4439dcc8fca88286db1b6fbbfb9130f37bf17d",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-025.html": [
-   "136e1a1999f3696a5742cb53a0d30e6411cfa6f4",
+   "ada440cf035137bd6c5377d543de603802a10680",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-001.html": [
-   "0681924a44ddc7c141a8c20203289c0862e7ec7c",
+   "a4fb6eded9c20195017f73aacf53d08fff0fe990",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-002.html": [
-   "e7771a519139a375f641125ea2a0a90102d228c7",
+   "a87a2c260aaa872ec9ea5699a0dcfa106e45bb2b",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-003.html": [
-   "7ff3085ec34b3fe9664ef0a9e02ebe862c42c22f",
+   "1ae67e7963212bf6afa678b929873d86cec025e1",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-004.html": [
-   "c474e6c83ca32385734a035fd36ef41e2e666f24",
+   "bc0978ff89ec6af691f88aa88e2b805f17012368",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-005.html": [
-   "c5a5d80b273add95223306d99471d3a030fb8be6",
+   "2b5a655c5a934b98c0d7fcb8553eb8efa35cb5af",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-006.html": [
-   "55d9f476640c87eb1663114599ddb6eafd91b7f0",
+   "712436aec944f0e7163da66a62d8a629a1c7ce80",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-007.html": [
-   "d81f70fda4665e94cd32483127e069dec9b760cc",
+   "fa284f5404d3e24cc395a37380291cf58440e447",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-008.html": [
-   "d4f0fde36ff5b437ebda34698d199cce359f00fa",
+   "24253384b12c5c20ef44dd14d882ab35a7a411f2",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-009.html": [
-   "5a50c58f6b9ba8b4b51b020b93ee61d23bfb500f",
+   "a89a85650c01a24a088b5b704805389ac487afc7",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-010.html": [
-   "fa5cc94c766ac0d455326bb117ae530df0ce6d4d",
+   "a676ad7b1ad0dc6ad205d767a4e366d43b2d1600",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-011.html": [
-   "3f02b75738ac80f1875a3adc0ce07052841c6be4",
+   "c53c339b5ac8ea5f9b021cca8eca56bbffa25ead",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-012.html": [
-   "97dac1879d441e29c97743e9e63bb44f6a413f67",
+   "d8746b969ea563cc8e683d00824a239cb9f45953",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-013.html": [
-   "99832804da447b3cc35db8bb60492781a03ffb62",
+   "94aef014e0d0bb420a8d7421ebabb2a9699a14b4",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-014.html": [
-   "2cc1f4a715b939a882d7394cb0d49d5ba4b127c7",
+   "1eec29a79380f6fb9e55f5e65f61f9fb906da192",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-015.html": [
-   "8b1947a434ec968a5bd0170334e7e2c907e69f28",
+   "c792926de9e4a1923b5f67c44095fc5609f03f79",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-016.html": [
-   "998612427cda18f277c5edf484892fd3b313bffc",
+   "3cda565159049d2b6d715166d9835041cb4918df",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-017.html": [
-   "080c87419291575847c9e94eadf5096f4a438bb3",
+   "1d387c5780df35128eabaec4d431cb92c7f96d0f",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-018.html": [
-   "aec32266b3e66fb38f45888140bf773d537728c9",
+   "dc470e6ad001ba3c32a264941a5a245a8241a91f",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-019.html": [
-   "6891c290c82adce07bb2409732789b627f07ded0",
+   "425356e77beca062326b6902b0dc0322bf081e72",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-020.html": [
-   "0ea2837b789ce2289aa2ec1c514006899d13def7",
+   "8bd9b585fe347a4be4ef2df571164ccd5a2163b5",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-021.html": [
-   "0e2a972619d21b4de097ddca6f39f2cae486cc5c",
+   "f8127fd46686ae877b0ca01b26d0278a49fa898e",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-022.html": [
-   "fb73bdbdff8fda79519e4fe387127ca539506357",
+   "e8094181ef73d466757fef11a439efa1af839a06",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-023.html": [
-   "c8b2681075b476b15221bcb1fe1ea6a4e0c40409",
+   "c62f2d4b7bc3e85cc51b46b97e7281a7030e39a6",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-content-distribution-with-collapsed-tracks-024.html": [
-   "6446e5dede7383a43ac46b8083b6012b312a8124",
+   "046b9b3ebcc52c5ef1a5448ebef9ede1f0ed39f7",
    "reftest"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-001.html": [
-   "4ebbf6afe7452b5a61c9a475b7beb3958dd39ee5",
+   "faa0a4a8e6660d8bb12cec2ccbe86e8e23bcc936",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-002.html": [
-   "a1b58d6358acae0e0a4d48ec2e896b5a86b296bf",
+   "735b425c34d147a32b97e60606a5d088389fecfc",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-003.html": [
-   "3d0b16a4ad5d537fa2728e630bf81d8a55303cd4",
+   "7f5a41bc81b97bb4b62e55b69fa1ecfe241edaed",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-004.html": [
-   "71f1966a0c3f899dd3b2601d225ec5683514e296",
+   "0e12bf8b99c417c9176100f7b945b9a83d53f69c",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-005.html": [
-   "c95fbde16d02ff01eab5e39a1f9b66ab5d0ca88c",
+   "d28606de466e787ac8e4c1f742806c2bbf570a88",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-006.html": [
-   "3bf926a4638e8a7a36d255e3a54c2b33e978c850",
+   "2ea3e018bf73940231af89dc72c2352fe2985732",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-007.html": [
-   "00a3a65a3028898decd5b33dc749d1d4b61c05f5",
+   "d2ff7e0efbb1240bfa4b21b0d2e7eb0891950348",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-008.html": [
-   "f7058e3180965b0b85b83d66cc3623e4d6ed081c",
+   "0ee2f7d1f4bed6383a762f86efa6dc2a8a27bf4b",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-009.html": [
-   "c56e42e2c7726204f112bc124adf6bf4e75e1c83",
+   "d64052253097bade696ff9c8bee42bfa8cca9604",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-010.html": [
-   "cbec5d103a8c29e5af97a54fe856c250ced3ee69",
+   "9523288742cb15e2451b41b85596ff868b6b4648",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-011.html": [
-   "b2556efc42d96830190ef6bbe0fdeef7c939cd76",
+   "9929a38f502a2e82ae93b6a39910eacb04ee6e58",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-012.html": [
-   "7700cff07f4930e4453c7dabef98ff41dd85f04b",
+   "9a19df31cfded6c4270da40070c3e8390c8366b2",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-013.html": [
-   "64c4f341755b5bef5772cc164427033fbf3d44f3",
+   "a8cb352297f011b42b3740fd73f2f78f0bdca29d",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-014.html": [
-   "e7f19c6990b60e8d527089d600d0b5d585f37d42",
+   "11e3cb854d0c9fb7535a7408a56e9f372acf7b74",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-015.html": [
-   "516f95b9ab855414499423cc0b6354b37735c428",
+   "7b145fe80d78b51f42f1a257e64b77f256324029",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-016.html": [
-   "4e6a1caea23ac6a54e2e6f5fd9585d574dd615aa",
+   "3d7b17fa76b3f21ccd882072158f25c723698b24",
    "testharness"
   ],
   "css/css-grid-1/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [
-   "ba37dd2cb887de2c6a577e7ad538f588f6c2a6b5",
+   "613da8787ea601c01cd79348e68d94cbdf4f6c12",
    "testharness"
   ],
<