Merge autoland to mozilla-central. a=merge
authorMarian-Vasile Laza <mlaza@mozilla.com>
Thu, 27 Jan 2022 11:45:09 +0200
changeset 605659 7dff1a12e1a4fd90cd5bf56e334120b08b64066b
parent 605565 080b13c1c547a54dfb1522556d9410727e3ac557 (current diff)
parent 605658 ceb9af9bef25b27290718b845cb69e1834de83aa (diff)
child 605660 4dfa6c06a93661b281ca62ae833b4439f1609154
child 605676 a6b64c81fb66f52b328373e027df35f9697cf142
push id39200
push usermlaza@mozilla.com
push dateThu, 27 Jan 2022 09:46:20 +0000
treeherdermozilla-central@7dff1a12e1a4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone98.0a1
first release with
nightly linux32
7dff1a12e1a4 / 98.0a1 / 20220127094620 / files
nightly linux64
7dff1a12e1a4 / 98.0a1 / 20220127094620 / files
nightly mac
7dff1a12e1a4 / 98.0a1 / 20220127094620 / files
nightly win32
7dff1a12e1a4 / 98.0a1 / 20220127094620 / files
nightly win64
7dff1a12e1a4 / 98.0a1 / 20220127094620 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge autoland to mozilla-central. a=merge
--- a/.cargo/config.in
+++ b/.cargo/config.in
@@ -1,12 +1,17 @@
 # This file contains vendoring instructions for cargo.
 # It was generated by `mach vendor rust`.
 # Please do not edit.
 
+[source."https://github.com/smol-rs/async-task"]
+git = "https://github.com/smol-rs/async-task"
+replace-with = "vendored-sources"
+rev = "f6488e35beccb26eb6e85847b02aa78a42cd3d0e"
+
 [source."https://github.com/msirringhaus/minidump_writer_linux.git"]
 git = "https://github.com/msirringhaus/minidump_writer_linux.git"
 replace-with = "vendored-sources"
 rev = "029ac0d54b237f27dc7d8d4e51bc0fb076e5e852"
 
 [source."https://github.com/mozilla/neqo"]
 git = "https://github.com/mozilla/neqo"
 replace-with = "vendored-sources"
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -139,18 +139,17 @@ checksum = "b947f77692187a29daa2768b6644
 dependencies = [
  "ioctl-sys",
  "libc",
 ]
 
 [[package]]
 name = "async-task"
 version = "4.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
+source = "git+https://github.com/smol-rs/async-task?rev=f6488e35beccb26eb6e85847b02aa78a42cd3d0e#f6488e35beccb26eb6e85847b02aa78a42cd3d0e"
 
 [[package]]
 name = "async-trait"
 version = "0.1.52"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
 dependencies = [
  "proc-macro2",
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -98,16 +98,17 @@ js-sys = { path = "build/rust/dummy-web/
 slotmap = { path = "build/rust/dummy-web/slotmap" }
 wasm-bindgen = { path = "build/rust/dummy-web/wasm-bindgen" }
 web-sys = { path = "build/rust/dummy-web/web-sys" }
 
 # Overrides to allow easier use of common internal crates.
 moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
 
 # Other overrides
+async-task = { git = "https://github.com/smol-rs/async-task", rev="f6488e35beccb26eb6e85847b02aa78a42cd3d0e" }
 chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" }
 chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" }
 coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" }
 libudev-sys = { path = "dom/webauthn/libudev-sys" }
 packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="8b4bd7d8229660a749dbe419a57ea01df9de5453" }
 midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" }
 minidump_writer_linux = { git = "https://github.com/msirringhaus/minidump_writer_linux.git", rev = "029ac0d54b237f27dc7d8d4e51bc0fb076e5e852" }
 
--- a/Makefile.in
+++ b/Makefile.in
@@ -106,17 +106,17 @@ recurse_pre-export:: install-manifests
 binaries::
 	@$(MAKE) install-manifests install_manifests=dist/include
 
 ifdef BUILD_VERBOSE_LOG
 verbose_flag = -v
 endif
 
 recurse_artifact:
-	$(PYTHON3) $(topsrcdir)/mach --log-no-times artifact install$(if $(MOZ_ARTIFACT_BUILD_SYMBOLS), --symbols$(addprefix =,$(filter full,$(MOZ_ARTIFACT_BUILD_SYMBOLS)))) $(verbose_flag)
+	$(PYTHON3) $(topsrcdir)/mach --log-no-times artifact install$(if $(MOZ_ARTIFACT_BUILD_SYMBOLS), --symbols$(addprefix =,$(filter full,$(MOZ_ARTIFACT_BUILD_SYMBOLS)))) $(if $(ENABLE_TESTS),,--no-tests) $(verbose_flag)
 
 ifdef MOZ_EME_WIN32_ARTIFACT
 recurse_win32-artifact:
 	rm -rf $(DIST)/i686
 	$(PYTHON3) $(topsrcdir)/mach --log-no-times artifact install --job win32-opt --no-tests --distdir $(DIST)/i686 $(verbose_flag)
 	mv $(DIST)/i686/bin/* $(DIST)/i686
 endif
 
--- a/accessible/tests/browser/fission/browser.ini
+++ b/accessible/tests/browser/fission/browser.ini
@@ -4,12 +4,14 @@ support-files =
   !/accessible/tests/browser/shared-head.js
   !/accessible/tests/browser/*.jsm
   !/accessible/tests/mochitest/*.js
 
 [browser_content_tree.js]
 [browser_hidden_iframe.js]
 https_first_disabled = true
 [browser_nested_iframe.js]
+skip-if =
+  os == 'mac' && bits == 64 && !debug # Bug 1659435
 [browser_reframe_root.js]
 [browser_reframe_visibility.js]
 [browser_src_change.js]
 [browser_take_focus.js]
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -968,17 +968,17 @@ pref("plugins.favorfallback.rules", "nos
 
 // Toggling Search bar on and off in about:preferences
 pref("browser.preferences.search", true);
 #if defined(NIGHTLY_BUILD)
 pref("browser.preferences.experimental", true);
 #else
 pref("browser.preferences.experimental", false);
 #endif
-pref("browser.preferences.moreFromMozilla", false);
+pref("browser.preferences.moreFromMozilla", true);
 pref("browser.preferences.experimental.hidden", false);
 pref("browser.preferences.defaultPerformanceSettings.enabled", true);
 
 pref("browser.proton.toolbar.version", 0);
 
 // Backspace and Shift+Backspace behavior
 // 0 goes Back/Forward
 // 1 act like PgUp/PgDown
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
@@ -308,18 +308,16 @@
           </hbox>
         </vbox>
         <hbox id="PanelUI-profiler-content-recording">
           <spacer flex="1" />
           <image class="PanelUI-profiler-recording-icon" />
           <label class="PanelUI-profiler-recording-label" data-l10n-id="profiler-popup-recording-screen" />
           <spacer flex="1" />
         </hbox>
-        <description id="PanelUI-profiler-locked"
-                     data-l10n-id="profiler-popup-disabled" />
         <hbox id="PanelUI-profiler-inactive" class="PanelUI-profiler-buttons">
           <spacer flex="1" />
           <vbox>
             <button data-l10n-id="profiler-popup-start-recording-button"
                     id="PanelUI-profiler-startRecording"
                     class="PanelUI-profiler-button PanelUI-profiler-button-primary" />
             <label class="PanelUI-profiler-shortcut"
                    data-l10n-id="profiler-popup-start-shortcut" />
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -4015,17 +4015,17 @@ const BrowserSearch = {
    * putting it in search mode. Will do so in an existing non-popup browser
    * window or open a new one if necessary.
    */
   webSearch: function BrowserSearch_webSearch() {
     if (
       window.location.href != AppConstants.BROWSER_CHROME_URL ||
       gURLBar.readOnly
     ) {
-      let win = getTopWin(true);
+      let win = getTopWin({ skipPopups: true });
       if (win) {
         // If there's an open browser window, it should handle this command
         win.focus();
         win.BrowserSearch.webSearch();
       } else {
         // If there are no open browser windows, open a new one
         var observer = function(subject, topic, data) {
           if (subject == win) {
--- a/browser/base/content/hiddenWindowMac.xhtml
+++ b/browser/base/content/hiddenWindowMac.xhtml
@@ -9,29 +9,29 @@
 <?xml-stylesheet href="chrome://browser/skin/webRTC-menubar-indicator.css" type="text/css"?>
 
 <window id="main-window"
         xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         data-l10n-sync="true">
 
   <linkset>
-    <html:link rel="localization" href="browser/appmenu.ftl"/>
+    <html:link rel="localization" href="browser/menubar.ftl"/>
   </linkset>
 
 #include macWindow.inc.xhtml
 
 <!-- Dock menu -->
 <popupset>
   <!-- Hide this menupopup from the accessibility tree so that we don't fire
        any unintended accessibility notifications for it. Accessibility for the
        Dock menu is handled natively by macOS. -->
   <menupopup id="menu_mac_dockmenu" aria-hidden="true">
     <!-- The command cannot be cmd_newNavigator because we need to activate
          the application. -->
-    <menuitem data-l10n-id="appmenuitem-new-window" oncommand="OpenBrowserWindowFromDockMenu();"
+    <menuitem data-l10n-id="menu-file-new-window" oncommand="OpenBrowserWindowFromDockMenu();"
               id="macDockMenuNewWindow" />
-    <menuitem data-l10n-id="appmenuitem-new-private-window" oncommand="OpenBrowserWindowFromDockMenu({private: true});"
+    <menuitem data-l10n-id="menu-file-new-private-window" oncommand="OpenBrowserWindowFromDockMenu({private: true});"
               id="macDockMenuNewPrivateWindow" />
   </menupopup>
 </popupset>
 
 </window>
--- a/browser/base/content/moz.build
+++ b/browser/base/content/moz.build
@@ -101,16 +101,19 @@ with Files("test/tabcrashed/**"):
     BUG_COMPONENT = ("Firefox", "Tabbed Browser")
 
 with Files("test/tabs/**"):
     BUG_COMPONENT = ("Firefox", "Tabbed Browser")
 
 with Files("test/touch/**"):
     BUG_COMPONENT = ("Firefox", "General")
 
+with Files("test/utilityOverlay/**"):
+    BUG_COMPONENT = ("Firefox", "Tabbed Browser")
+
 with Files("test/protectionsUI/**"):
     BUG_COMPONENT = ("Firefox", "Protections UI")
 
 with Files("test/webextensions/**"):
     BUG_COMPONENT = ("WebExtensions", "Untriaged")
 
 with Files("test/webrtc/**"):
     BUG_COMPONENT = ("Core", "WebRTC")
--- a/browser/base/content/test/static/browser_title_case_menus.js
+++ b/browser/base/content/test/static/browser_title_case_menus.js
@@ -136,8 +136,23 @@ add_task(async function apa_test_title_c
   let menuToolbar = newWin.document.getElementById("main-menubar");
 
   for await (const menupopup of iterateMenuPopups(menuToolbar)) {
     checkMenuItems(menupopup);
   }
 
   await BrowserTestUtils.closeWindow(newWin);
 });
+
+/**
+ * This test iterates the menuitem labels of the macOS dock menu for the
+ * application to ensure the en-US strings are all in Title Case.
+ */
+add_task(async function apa_test_title_case_macos_dock_menu() {
+  if (AppConstants.platform != "macosx") {
+    return;
+  }
+
+  let hiddenWindow = Services.appShell.hiddenDOMWindow;
+  Assert.ok(hiddenWindow, "Could get at hidden window");
+  let menupopup = hiddenWindow.document.getElementById("menu_mac_dockmenu");
+  checkMenuItems(menupopup);
+});
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/utilityOverlay/.eslintrc.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = {
+  extends: ["plugin:mozilla/browser-test"],
+};
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/utilityOverlay/browser.ini
@@ -0,0 +1,2 @@
+[DEFAULT]
+[browser_openWebLinkIn.js]
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/utilityOverlay/browser_openWebLinkIn.js
@@ -0,0 +1,185 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+// Stolen from https://searchfox.org/mozilla-central/source/browser/base/content/test/popups/browser_popup_close_main_window.js
+// When calling this function, the main window where the test runs will be
+// hidden from various APIs, so that they won't be able to find it. This makes
+// it possible to test some behaviors when only private windows are present.
+function concealMainWindow() {
+  info("Concealing main window.");
+  let oldWinType = document.documentElement.getAttribute("windowtype");
+  // Check if we've already done this to allow calling multiple times:
+  if (oldWinType != "navigator:testrunner") {
+    // Make the main test window not count as a browser window any longer
+    document.documentElement.setAttribute("windowtype", "navigator:testrunner");
+    BrowserWindowTracker.untrackForTestsOnly(window);
+
+    registerCleanupFunction(() => {
+      info("Unconcealing the main window in the cleanup phase.");
+      BrowserWindowTracker.track(window);
+      document.documentElement.setAttribute("windowtype", oldWinType);
+    });
+  }
+}
+
+const EXAMPLE_URL = "https://example.org/";
+add_task(async function test_open_tab() {
+  const waitForTabPromise = BrowserTestUtils.waitForNewTab(
+    gBrowser,
+    EXAMPLE_URL
+  );
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    openWebLinkIn(EXAMPLE_URL, "tab", {
+      resolveOnContentBrowserCreated,
+    })
+  );
+
+  const tab = await waitForTabPromise;
+  is(
+    contentBrowser,
+    tab.linkedBrowser,
+    "We get a content browser that is the tab's linked browser as the result of opening a tab"
+  );
+
+  BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_open_window() {
+  const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    openWebLinkIn(EXAMPLE_URL, "window", {
+      resolveOnContentBrowserCreated,
+    })
+  );
+
+  const win = await waitForWindowPromise;
+  is(
+    contentBrowser,
+    win.gBrowser.selectedBrowser,
+    "We get the content browser for the newly opened window as a result of opening a window"
+  );
+
+  await BrowserTestUtils.closeWindow(win);
+});
+
+add_task(async function test_open_private_window() {
+  const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    openWebLinkIn(EXAMPLE_URL, "window", {
+      resolveOnContentBrowserCreated,
+      private: true,
+    })
+  );
+
+  const win = await waitForWindowPromise;
+  ok(
+    PrivateBrowsingUtils.isBrowserPrivate(win),
+    "The new window is a private window."
+  );
+  is(
+    contentBrowser,
+    win.gBrowser.selectedBrowser,
+    "We get the content browser for the newly opened window as a result of opening a private window"
+  );
+
+  await BrowserTestUtils.closeWindow(win);
+});
+
+add_task(async function test_open_private_tab_from_private_window() {
+  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+    private: true,
+  });
+  const waitForTabPromise = BrowserTestUtils.waitForNewTab(
+    privateWindow.gBrowser,
+    EXAMPLE_URL
+  );
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
+      resolveOnContentBrowserCreated,
+    })
+  );
+
+  const tab = await waitForTabPromise;
+  ok(
+    PrivateBrowsingUtils.isBrowserPrivate(tab),
+    "The new tab was opened in a private browser."
+  );
+  is(
+    contentBrowser,
+    tab.linkedBrowser,
+    "We get a content browser that is the tab's linked browser as the result of opening a private tab in a private window"
+  );
+
+  await BrowserTestUtils.closeWindow(privateWindow);
+});
+
+add_task(async function test_open_non_private_tab_from_private_window() {
+  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+    private: true,
+  });
+
+  // Opening this tab from the private window should open it in the non-private window.
+  const waitForTabPromise = BrowserTestUtils.waitForNewTab(
+    gBrowser,
+    EXAMPLE_URL
+  );
+
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
+      forceNonPrivate: true,
+      resolveOnContentBrowserCreated,
+    })
+  );
+
+  const nonPrivateTab = await waitForTabPromise;
+  ok(
+    !PrivateBrowsingUtils.isBrowserPrivate(nonPrivateTab),
+    "The new window isn't a private window."
+  );
+  is(
+    contentBrowser,
+    nonPrivateTab.linkedBrowser,
+    "We get a content browser that is the non private tab's linked browser as the result of opening a non private tab from a private window"
+  );
+
+  BrowserTestUtils.removeTab(nonPrivateTab);
+  await BrowserTestUtils.closeWindow(privateWindow);
+});
+
+add_task(async function test_open_non_private_tab_from_only_private_window() {
+  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+    private: true,
+  });
+
+  // In this test we'll hide the existing window from window trackers, because
+  // we want to test that we open a new window when there's only a private
+  // window.
+  concealMainWindow();
+
+  // Opening this tab from the private window should open it in a new non-private window.
+  const waitForWindowPromise = BrowserTestUtils.waitForNewWindow({
+    url: EXAMPLE_URL,
+  });
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
+      forceNonPrivate: true,
+      resolveOnContentBrowserCreated,
+    })
+  );
+
+  const nonPrivateWindow = await waitForWindowPromise;
+  ok(
+    !PrivateBrowsingUtils.isBrowserPrivate(nonPrivateWindow),
+    "The new window isn't a private window."
+  );
+  is(
+    contentBrowser,
+    nonPrivateWindow.gBrowser.selectedBrowser,
+    "We get the content browser for the newly opened non private window from a private window, as a result of opening a non private tab."
+  );
+
+  await BrowserTestUtils.closeWindow(nonPrivateWindow);
+  await BrowserTestUtils.closeWindow(privateWindow);
+});
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -76,30 +76,31 @@ function isBlankPageURL(aURL) {
   return (
     aURL == "about:blank" ||
     aURL == "about:home" ||
     aURL == "about:welcome" ||
     aURL == BROWSER_NEW_TAB_URL
   );
 }
 
-function getTopWin(skipPopups) {
+function getTopWin({ skipPopups, forceNonPrivate } = {}) {
   // If this is called in a browser window, use that window regardless of
   // whether it's the frontmost window, since commands can be executed in
   // background windows (bug 626148).
   if (
     top.document.documentElement.getAttribute("windowtype") ==
       "navigator:browser" &&
-    (!skipPopups || top.toolbar.visible)
+    (!skipPopups || top.toolbar.visible) &&
+    (!forceNonPrivate || !PrivateBrowsingUtils.isWindowPrivate(top))
   ) {
     return top;
   }
 
   return BrowserWindowTracker.getTopWindow({
-    private: PrivateBrowsingUtils.isWindowPrivate(window),
+    private: !forceNonPrivate && PrivateBrowsingUtils.isWindowPrivate(window),
     allowPopups: !skipPopups,
   });
 }
 
 function doGetProtocolFlags(aURI) {
   let handler = Services.io.getProtocolHandler(aURI.scheme);
   // see DoGetProtocolFlags in nsIProtocolHandler.idl
   return handler instanceof Ci.nsIProtocolHandlerWithDynamicFlags
@@ -288,27 +289,30 @@ function openLinkIn(url, where, params) 
     ? params.referrerInfo
     : new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY, true, null);
   var aRelatedToCurrent = params.relatedToCurrent;
   var aAllowInheritPrincipal = !!params.allowInheritPrincipal;
   var aForceAllowDataURI = params.forceAllowDataURI;
   var aInBackground = params.inBackground;
   var aInitiatingDoc = params.initiatingDoc;
   var aIsPrivate = params.private;
+  var aForceNonPrivate = params.forceNonPrivate;
   var aSkipTabAnimation = params.skipTabAnimation;
   var aAllowPinnedTabHostChange = !!params.allowPinnedTabHostChange;
   var aAllowPopups = !!params.allowPopups;
   var aUserContextId = params.userContextId;
   var aIndicateErrorPageLoad = params.indicateErrorPageLoad;
   var aPrincipal = params.originPrincipal;
   var aStoragePrincipal = params.originStoragePrincipal;
   var aTriggeringPrincipal = params.triggeringPrincipal;
   var aCsp = params.csp;
   var aForceAboutBlankViewerInCurrent = params.forceAboutBlankViewerInCurrent;
   var aResolveOnNewTabCreated = params.resolveOnNewTabCreated;
+  // This callback will be called with the content browser once it's created.
+  var aResolveOnContentBrowserReady = params.resolveOnContentBrowserCreated;
 
   if (!aTriggeringPrincipal) {
     throw new Error("Must load with a triggering Principal");
   }
 
   if (where == "save") {
     if ("isContentWindowPrivate" in params) {
       saveURL(
@@ -336,22 +340,22 @@ function openLinkIn(url, where, params) 
     return;
   }
 
   // Establish which window we'll load the link in.
   let w;
   if (where == "current" && params.targetBrowser) {
     w = params.targetBrowser.ownerGlobal;
   } else {
-    w = getTopWin();
+    w = getTopWin({ forceNonPrivate: aForceNonPrivate });
   }
   // We don't want to open tabs in popups, so try to find a non-popup window in
   // that case.
   if ((where == "tab" || where == "tabshifted") && w && !w.toolbar.visible) {
-    w = getTopWin(true);
+    w = getTopWin({ skipPopups: true, forceNonPrivate: aForceNonPrivate });
     aRelatedToCurrent = false;
   }
 
   // Teach the principal about the right OA to use, e.g. in case when
   // opening a link in a new private window, or in a new container tab.
   // Please note we do not have to do that for SystemPrincipals and we
   // can not do it for NullPrincipals since NullPrincipals are only
   // identical if they actually are the same object (See Bug: 1346759)
@@ -377,16 +381,18 @@ function openLinkIn(url, where, params) 
       features += ",private";
       // To prevent regular browsing data from leaking to private browsing sites,
       // strip the referrer when opening a new private window. (See Bug: 1409226)
       aReferrerInfo = new ReferrerInfo(
         aReferrerInfo.referrerPolicy,
         false,
         aReferrerInfo.originalReferrer
       );
+    } else if (aForceNonPrivate) {
+      features += ",non-private";
     }
 
     // This propagates to window.arguments.
     var sa = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
 
     var wuri = Cc["@mozilla.org/supports-string;1"].createInstance(
       Ci.nsISupportsString
     );
@@ -419,53 +425,71 @@ function openLinkIn(url, where, params) 
     sa.appendElement(aPrincipal);
     sa.appendElement(aStoragePrincipal);
     sa.appendElement(aTriggeringPrincipal);
     sa.appendElement(null); // allowInheritPrincipal
     sa.appendElement(aCsp);
 
     const sourceWindow = w || window;
     let win;
+
+    // Returns a promise that will be resolved when the new window's startup is finished.
+    function waitForWindowStartup() {
+      return new Promise(resolve => {
+        const delayedStartupObserver = aSubject => {
+          if (aSubject == win) {
+            Services.obs.removeObserver(
+              delayedStartupObserver,
+              "browser-delayed-startup-finished"
+            );
+            resolve();
+          }
+        };
+        Services.obs.addObserver(
+          delayedStartupObserver,
+          "browser-delayed-startup-finished"
+        );
+      });
+    }
+
     if (params.frameID != undefined && sourceWindow) {
       // Only notify it as a WebExtensions' webNavigation.onCreatedNavigationTarget
       // event if it contains the expected frameID params.
       // (e.g. we should not notify it as a onCreatedNavigationTarget if the user is
       // opening a new window using the keyboard shortcut).
       const sourceTabBrowser = sourceWindow.gBrowser.selectedBrowser;
-      let delayedStartupObserver = aSubject => {
-        if (aSubject == win) {
-          Services.obs.removeObserver(
-            delayedStartupObserver,
-            "browser-delayed-startup-finished"
-          );
-          Services.obs.notifyObservers(
-            {
-              wrappedJSObject: {
-                url,
-                createdTabBrowser: win.gBrowser.selectedBrowser,
-                sourceTabBrowser,
-                sourceFrameID: params.frameID,
-              },
+      waitForWindowStartup().then(() => {
+        Services.obs.notifyObservers(
+          {
+            wrappedJSObject: {
+              url,
+              createdTabBrowser: win.gBrowser.selectedBrowser,
+              sourceTabBrowser,
+              sourceFrameID: params.frameID,
             },
-            "webNavigation-createdNavigationTarget"
-          );
-        }
-      };
-      Services.obs.addObserver(
-        delayedStartupObserver,
-        "browser-delayed-startup-finished"
+          },
+          "webNavigation-createdNavigationTarget"
+        );
+      });
+    }
+
+    if (aResolveOnContentBrowserReady) {
+      waitForWindowStartup().then(() =>
+        aResolveOnContentBrowserReady(win.gBrowser.selectedBrowser)
       );
     }
+
     win = Services.ww.openWindow(
       sourceWindow,
       AppConstants.BROWSER_CHROME_URL,
       null,
       features,
       sa
     );
+
     return;
   }
 
   // We're now committed to loading the link in an existing browser window.
 
   // Raise the target window before loading the URI, since loading it may
   // result in a new frontmost window (e.g. "javascript:window.open('');").
   w.focus();
@@ -555,16 +579,19 @@ function openLinkIn(url, where, params) 
       targetBrowser.loadURI(url, {
         triggeringPrincipal: aTriggeringPrincipal,
         csp: aCsp,
         flags,
         referrerInfo: aReferrerInfo,
         postData: aPostData,
         userContextId: aUserContextId,
       });
+      if (aResolveOnContentBrowserReady) {
+        aResolveOnContentBrowserReady(targetBrowser);
+      }
 
       // Don't focus the content area if focus is in the address bar and we're
       // loading the New Tab page.
       focusUrlBar =
         w.document.activeElement == w.gURLBar.inputField &&
         w.isBlankPageURL(url);
       break;
     case "tabshifted":
@@ -593,16 +620,19 @@ function openLinkIn(url, where, params) 
         focusUrlBar,
         openerBrowser: params.openerBrowser,
       });
       targetBrowser = tabUsedForLoad.linkedBrowser;
 
       if (aResolveOnNewTabCreated) {
         aResolveOnNewTabCreated(targetBrowser);
       }
+      if (aResolveOnContentBrowserReady) {
+        aResolveOnContentBrowserReady(targetBrowser);
+      }
 
       if (params.frameID != undefined && w) {
         // Only notify it as a WebExtensions' webNavigation.onCreatedNavigationTarget
         // event if it contains the expected frameID params.
         // (e.g. we should not notify it as a onCreatedNavigationTarget if the user is
         // opening a new tab using the keyboard shortcut).
         Services.obs.notifyObservers(
           {
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -56,16 +56,17 @@ BROWSER_CHROME_MANIFESTS += [
     "content/test/statuspanel/browser.ini",
     "content/test/sync/browser.ini",
     "content/test/tabcrashed/browser.ini",
     "content/test/tabdialogs/browser.ini",
     "content/test/tabMediaIndicator/browser.ini",
     "content/test/tabPrompts/browser.ini",
     "content/test/tabs/browser.ini",
     "content/test/touch/browser.ini",
+    "content/test/utilityOverlay/browser.ini",
     "content/test/webextensions/browser.ini",
     "content/test/webrtc/browser.ini",
     "content/test/webrtc/gracePeriod/browser.ini",
     "content/test/webrtc/legacyIndicator/browser.ini",
     "content/test/zoom/browser.ini",
 ]
 
 PERFTESTS_MANIFESTS += ["content/test/perftest.ini"]
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -3396,17 +3396,17 @@ BrowserGlue.prototype = {
         Services.xulStore.setValue(docUrl, hashedId, "open", "true");
       });
   },
 
   // eslint-disable-next-line complexity
   _migrateUI: function BG__migrateUI() {
     // Use an increasing number to keep track of the current migration state.
     // Completely unrelated to the current Firefox release number.
-    const UI_VERSION = 122;
+    const UI_VERSION = 123;
     const BROWSER_DOCURL = AppConstants.BROWSER_CHROME_URL;
 
     const PROFILE_DIR = Services.dirsvc.get("ProfD", Ci.nsIFile).path;
 
     if (!Services.prefs.prefHasUserValue("browser.migration.version")) {
       // This is a new profile, nothing to migrate.
       Services.prefs.setIntPref("browser.migration.version", UI_VERSION);
       this._isNewProfile = true;
@@ -4115,16 +4115,52 @@ BrowserGlue.prototype = {
             "widget.use-xdg-desktop-portal.mime-handler",
             1
           );
         }
         Services.prefs.clearUserPref(oldPref);
       } catch (ex) {}
     }
 
+    if (currentUIVersion < 123) {
+      // Migrate "extensions.formautofill.available" and
+      // "extensions.formautofill.creditCards.available" from old to new prefs
+      const oldFormAutofillModule = "extensions.formautofill.available";
+      const oldCreditCardsAvailable =
+        "extensions.formautofill.creditCards.available";
+      const newCreditCardsAvailable =
+        "extensions.formautofill.creditCards.supported";
+      const newAddressesAvailable =
+        "extensions.formautofill.addresses.supported";
+      if (Services.prefs.prefHasUserValue(oldFormAutofillModule)) {
+        let moduleAvailability = Services.prefs.getCharPref(
+          oldFormAutofillModule
+        );
+        if (moduleAvailability == "on") {
+          Services.prefs.setCharPref(newAddressesAvailable, moduleAvailability);
+          Services.prefs.setCharPref(
+            newCreditCardsAvailable,
+            Services.prefs.getBoolPref(oldCreditCardsAvailable) ? "on" : "off"
+          );
+        }
+
+        if (moduleAvailability == "off") {
+          Services.prefs.setCharPref(
+            newCreditCardsAvailable,
+            moduleAvailability
+          );
+          Services.prefs.setCharPref(newAddressesAvailable, moduleAvailability);
+        }
+      }
+
+      // after migrating, clear old prefs so we can remove them later.
+      Services.prefs.clearUserPref(oldFormAutofillModule);
+      Services.prefs.clearUserPref(oldCreditCardsAvailable);
+    }
+
     // Update the migration version.
     Services.prefs.setIntPref("browser.migration.version", UI_VERSION);
   },
 
   _showUpgradeDialog() {
     BrowserWindowTracker.getTopWindow().gDialogBox.open(
       "chrome://browser/content/upgradeDialog.html"
     );
--- a/browser/components/customizableui/CustomizeMode.jsm
+++ b/browser/components/customizableui/CustomizeMode.jsm
@@ -268,24 +268,24 @@ CustomizeMode.prototype = {
 
     if (gTab.selected) {
       win.gCustomizeMode.enter();
     }
   },
 
   enter() {
     if (!this.window.toolbar.visible) {
-      let w = this.window.getTopWin(true);
+      let w = this.window.getTopWin({ skipPopups: true });
       if (w) {
         w.gCustomizeMode.enter();
         return;
       }
       let obs = () => {
         Services.obs.removeObserver(obs, "browser-delayed-startup-finished");
-        w = this.window.getTopWin(true);
+        w = this.window.getTopWin({ skipPopups: true });
         w.gCustomizeMode.enter();
       };
       Services.obs.addObserver(obs, "browser-delayed-startup-finished");
       this.window.openTrustedLinkIn("about:newtab", "window");
       return;
     }
     this._wantToBeInCustomizeMode = true;
 
--- a/browser/components/preferences/extensionControlled.js
+++ b/browser/components/preferences/extensionControlled.js
@@ -161,16 +161,17 @@ function setControllingExtensionDescript
   const src = addon.iconURL || defaultIcon;
 
   if (!existingImg) {
     // If an element doesn't have an image child
     // node, add it.
     let image = document.createElementNS("http://www.w3.org/1999/xhtml", "img");
     image.setAttribute("src", src);
     image.setAttribute("data-l10n-name", "icon");
+    image.setAttribute("role", "presentation");
     image.classList.add("extension-controlled-icon");
     elem.appendChild(image);
   } else if (existingImg.getAttribute("src") !== src) {
     existingImg.setAttribute("src", src);
   }
 
   const l10nId = settingNameToL10nID(settingName);
   document.l10n.setAttributes(elem, l10nId, {
@@ -226,16 +227,17 @@ function showEnableExtensionMessage(sett
   // We need to remove the l10n-id annotation from the <description> to prevent
   // Fluent from overwriting the element in case of any retranslation.
   elements.description.removeAttribute("data-l10n-id");
 
   let icon = (url, name) => {
     let img = document.createElementNS("http://www.w3.org/1999/xhtml", "img");
     img.src = url;
     img.setAttribute("data-l10n-name", name);
+    img.setAttribute("role", "presentation");
     img.className = "extension-controlled-icon";
     return img;
   };
   let label = document.createXULElement("label");
   let addonIcon = icon(
     "chrome://mozapps/skin/extensions/extensionGeneric.svg",
     "addons-icon"
   );
--- a/browser/components/preferences/tests/browser_moreFromMozilla.js
+++ b/browser/components/preferences/tests/browser_moreFromMozilla.js
@@ -17,43 +17,17 @@ const initialHomeRegion = Region._home;
 const intialCurrentRegion = Region._current;
 
 // Helper to run tests for specific regions
 async function setupRegions(home, current) {
   Region._setHomeRegion(home || "");
   Region._setCurrentRegion(current || "");
 }
 
-/**
- * Test that we don't show moreFromMozilla pane when it's disabled.
- */
-add_task(async function testwhenPrefDisabled() {
-  await SpecialPowers.pushPrefEnv({
-    set: [["browser.preferences.moreFromMozilla", false]],
-  });
-
-  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
-    leaveOpen: true,
-  });
-  let doc = gBrowser.contentDocument;
-
-  let moreFromMozillaCategory = doc.getElementById(
-    "category-more-from-mozilla"
-  );
-  ok(moreFromMozillaCategory, "The category exists");
-  ok(moreFromMozillaCategory.hidden, "The category is hidden");
-
-  BrowserTestUtils.removeTab(gBrowser.selectedTab);
-});
-
 add_task(async function testDefaultUIWithoutTemplatePref() {
-  await SpecialPowers.pushPrefEnv({
-    set: [["browser.preferences.moreFromMozilla", true]],
-  });
-
   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
     leaveOpen: true,
   });
   let doc = gBrowser.contentDocument;
   let tab = gBrowser.selectedTab;
 
   let moreFromMozillaCategory = doc.getElementById(
     "category-more-from-mozilla"
@@ -93,28 +67,55 @@ add_task(async function testDefaultUIWit
     "morefrommozilla",
     "utm_campaign set"
   );
   Assert.equal(
     searchParams.get("utm_medium"),
     "firefox-desktop",
     "utm_medium set"
   );
+  Assert.equal(
+    searchParams.get("utm_content"),
+    "default-global",
+    "default utm_content set"
+  );
   Assert.ok(
     !searchParams.has("entrypoint_variation"),
     "entrypoint_variation should not be set"
   );
   Assert.ok(
     !searchParams.has("entrypoint_experiment"),
     "entrypoint_experiment should not be set"
   );
   BrowserTestUtils.removeTab(openedTab);
   BrowserTestUtils.removeTab(tab);
 });
 
+/**
+ * Test that we don't show moreFromMozilla pane when it's disabled.
+ */
+add_task(async function testwhenPrefDisabled() {
+  await SpecialPowers.pushPrefEnv({
+    set: [["browser.preferences.moreFromMozilla", false]],
+  });
+
+  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
+    leaveOpen: true,
+  });
+  let doc = gBrowser.contentDocument;
+
+  let moreFromMozillaCategory = doc.getElementById(
+    "category-more-from-mozilla"
+  );
+  ok(moreFromMozillaCategory, "The category exists");
+  ok(moreFromMozillaCategory.hidden, "The category is hidden");
+
+  BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
 add_task(async function test_aboutpreferences_event_telemetry() {
   Services.telemetry.clearEvents();
   Services.telemetry.setEventRecordingEnabled("aboutpreferences", true);
 
   await SpecialPowers.pushPrefEnv({
     set: [["browser.preferences.moreFromMozilla", true]],
   });
   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
--- a/browser/components/preferences/tests/browser_spotlight.js
+++ b/browser/components/preferences/tests/browser_spotlight.js
@@ -20,19 +20,27 @@ add_task(async function test_openPrefere
       "privacy-permissions-block-popups",
       "panePrivacy",
       "#privacy",
       "permissions-block-popups",
     ],
   ]) {
     if (
       arg == "privacy-credit-card-autofill" &&
-      !Services.prefs.getBoolPref(
-        "extensions.formautofill.creditCards.available"
-      )
+      Services.prefs.getCharPref(
+        "extensions.formautofill.creditCards.supported"
+      ) == "off"
+    ) {
+      continue;
+    }
+    if (
+      arg == "privacy-address-autofill" &&
+      Services.prefs.getCharPref(
+        "extensions.formautofill.addresses.supported"
+      ) == "off"
     ) {
       continue;
     }
 
     let prefs = await openPreferencesViaOpenPreferencesAPI(arg, {
       leaveOpen: true,
     });
     is(prefs.selectedPane, expectedPane, "The right pane is selected");
--- a/browser/components/resistfingerprinting/test/browser/browser_navigator.js
+++ b/browser/components/resistfingerprinting/test/browser/browser_navigator.js
@@ -401,16 +401,52 @@ add_task(async function runOverrideTest(
 
   // Pop general.appname.override etc
   await SpecialPowers.popPrefEnv();
 
   // Pop privacy.resistFingerprinting
   await SpecialPowers.popPrefEnv();
 });
 
+add_task(async function testForceVersion100() {
+  await SpecialPowers.pushPrefEnv({
+    set: [["general.useragent.forceVersion100", true]],
+  });
+
+  const VERSION_100_OSCPU = {
+    linux: "Linux x86_64",
+    win:
+      cpuArch == "x86_64" ? "Windows NT 10.0; Win64; x64" : "Windows NT 10.0",
+    macosx: "Intel Mac OS X 10.15",
+  };
+
+  let version100UserAgent = `Mozilla/5.0 (${
+    DEFAULT_UA_OS[AppConstants.platform]
+  }; rv:100.0) Gecko/20100101 Firefox/100.0`;
+
+  expectedResults = {
+    testDesc: "forceVersion100",
+    appVersion: DEFAULT_APPVERSION[AppConstants.platform],
+    hardwareConcurrency: navigator.hardwareConcurrency,
+    oscpu: VERSION_100_OSCPU[AppConstants.platform],
+    platform: DEFAULT_PLATFORM[AppConstants.platform],
+    userAgentNavigator: version100UserAgent,
+    userAgentHeader: version100UserAgent,
+  };
+
+  await testNavigator();
+
+  await testUserAgentHeader();
+
+  await testWorkerNavigator();
+
+  // Pop general.useragent.override etc
+  await SpecialPowers.popPrefEnv();
+});
+
 // Only test the Firefox and Gecko experiment prefs on desktop.
 if (AppConstants.platform != "android") {
   add_task(async function setupFirefoxVersionExperiment() {
     // Mock Nimbus experiment settings
     const { ExperimentFakes } = ChromeUtils.import(
       "resource://testing-common/NimbusTestUtils.jsm"
     );
     let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
new file mode 100644
--- /dev/null
+++ b/browser/components/tests/unit/test_browserGlue_migration_formautofill.js
@@ -0,0 +1,142 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const TOPIC_BROWSERGLUE_TEST = "browser-glue-test";
+const TOPICDATA_BROWSERGLUE_TEST = "force-ui-migration";
+
+const gBrowserGlue = Cc["@mozilla.org/browser/browserglue;1"].getService(
+  Ci.nsIObserver
+);
+const UI_VERSION = 123;
+
+function ensureOldPrefsAreCleared() {
+  Assert.ok(
+    !Services.prefs.prefHasUserValue("extensions.formautofill.available"),
+    "main module available pref should have been cleared"
+  );
+  Assert.ok(
+    !Services.prefs.prefHasUserValue(
+      "extensions.formautofill.creditCards.available"
+    ),
+    "old credit card available pref should have been cleared"
+  );
+}
+
+add_task(async function setup() {
+  registerCleanupFunction(() => {
+    Services.prefs.clearUserPref("browser.migration.version");
+    Services.prefs.clearUserPref("extensions.formautofill.available");
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.available"
+    );
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.supported"
+    );
+  });
+});
+
+add_task(async function test_check_form_autofill_module_detect() {
+  Services.prefs.setIntPref("browser.migration.version", UI_VERSION - 1);
+  Services.prefs.setCharPref("extensions.formautofill.available", "detect");
+  // Simulate a migration.
+  gBrowserGlue.observe(
+    null,
+    TOPIC_BROWSERGLUE_TEST,
+    TOPICDATA_BROWSERGLUE_TEST
+  );
+  // old credit card available should migrate to "detect" due to
+  // "extensions.formautofill.available" being "detect".
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.creditCards.supported"),
+    "detect"
+  );
+  // old address available pref follows the main module pref
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.addresses.supported"),
+    "detect"
+  );
+  ensureOldPrefsAreCleared();
+});
+
+add_task(async function test_check_old_form_autofill_module_off() {
+  Services.prefs.setIntPref("browser.migration.version", UI_VERSION - 1);
+  Services.prefs.setCharPref("extensions.formautofill.available", "off");
+
+  // Simulate a migration.
+  gBrowserGlue.observe(
+    null,
+    TOPIC_BROWSERGLUE_TEST,
+    TOPICDATA_BROWSERGLUE_TEST
+  );
+
+  // old credit card available should migrate to off due to
+  // "extensions.formautofill.available" being off.
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.creditCards.supported"),
+    "off"
+  );
+  // old address available pref follows the main module pref
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.addresses.supported"),
+    "off"
+  );
+  ensureOldPrefsAreCleared();
+});
+
+add_task(async function test_check_old_form_autofill_module_on_cc_on() {
+  Services.prefs.setIntPref("browser.migration.version", UI_VERSION - 1);
+  Services.prefs.setCharPref("extensions.formautofill.available", "on");
+  Services.prefs.setBoolPref(
+    "extensions.formautofill.creditCards.available",
+    true
+  );
+
+  // Simulate a migration.
+  gBrowserGlue.observe(
+    null,
+    TOPIC_BROWSERGLUE_TEST,
+    TOPICDATA_BROWSERGLUE_TEST
+  );
+
+  // old credit card available should migrate to "on" due to
+  // "extensions.formautofill.available" being on and
+  // "extensions.formautofill.creditCards.available" having a default value of true.
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.creditCards.supported"),
+    "on"
+  );
+  // old address available pref follows the main module pref
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.addresses.supported"),
+    "on"
+  );
+  ensureOldPrefsAreCleared();
+});
+
+add_task(async function test_check_old_form_autofill_module_on_cc_off() {
+  Services.prefs.setIntPref("browser.migration.version", UI_VERSION - 1);
+  Services.prefs.setCharPref("extensions.formautofill.available", "on");
+  Services.prefs.setBoolPref(
+    "extensions.formautofill.creditCards.available",
+    false
+  );
+
+  // Simulate a migration.
+  gBrowserGlue.observe(
+    null,
+    TOPIC_BROWSERGLUE_TEST,
+    TOPICDATA_BROWSERGLUE_TEST
+  );
+
+  // old credit card available should migrate to "off" due to
+  // "extensions.formautofill.available" being on and
+  // "extensions.formautofill.creditCards.available" having a user set value of false.
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.creditCards.supported"),
+    "off"
+  );
+
+  ensureOldPrefsAreCleared();
+});
--- a/browser/components/tests/unit/xpcshell.ini
+++ b/browser/components/tests/unit/xpcshell.ini
@@ -1,13 +1,14 @@
 [DEFAULT]
 head = head.js
 firefox-appdir = browser
 skip-if = toolkit == 'android' # bug 1730213
 support-files =
   distribution.ini
 
+[test_browserGlue_migration_formautofill.js]
 [test_browserGlue_migration_places_xulstore.js]
 [test_browserGlue_migration_ctrltab_recently_used_order.js]
 [test_distribution.js]
 [test_distribution_cachedexistence.js]
 [test_browserGlue_migration_no_errors.js]
 [test_browserGlue_migration_social_cleanup.js]
--- a/browser/extensions/formautofill/api.js
+++ b/browser/extensions/formautofill/api.js
@@ -67,39 +67,72 @@ function ensureCssLoaded(domWindow) {
     "chrome://formautofill/content/skin/autocomplete-item-shared.css"
   );
   insertStyleSheet(
     domWindow,
     "chrome://formautofill/content/skin/autocomplete-item.css"
   );
 }
 
-function isAvailable() {
-  let availablePref = Services.prefs.getCharPref(
-    "extensions.formautofill.available"
-  );
-  if (availablePref == "on") {
-    return true;
-  } else if (availablePref == "detect") {
-    let region = Services.prefs.getCharPref("browser.search.region", "");
-    let supportedCountries = Services.prefs
-      .getCharPref("extensions.formautofill.supportedCountries")
-      .split(",");
-    if (
-      !Services.prefs.getBoolPref("extensions.formautofill.supportRTL") &&
-      Services.locale.isAppLocaleRTL
-    ) {
-      return false;
+this.formautofill = class extends ExtensionAPI {
+  /**
+   * Adjusts and checks form autofill preferences during startup.
+   *
+   * @param {boolean} addressAutofillAvailable
+   * @param {boolean} creditCardAutofillAvailable
+   */
+  adjustAndCheckFormAutofillPrefs(
+    addressAutofillAvailable,
+    creditCardAutofillAvailable
+  ) {
+    // Reset the sync prefs in case the features were previously available
+    // but aren't now.
+    if (!creditCardAutofillAvailable) {
+      Services.prefs.clearUserPref(
+        "services.sync.engine.creditcards.available"
+      );
+    }
+    if (!addressAutofillAvailable) {
+      Services.prefs.clearUserPref("services.sync.engine.addresses.available");
+    }
+
+    if (!addressAutofillAvailable && !creditCardAutofillAvailable) {
+      Services.prefs.clearUserPref("dom.forms.autocomplete.formautofill");
+      Services.telemetry.scalarSet("formautofill.availability", false);
+      return;
     }
-    return supportedCountries.includes(region);
+
+    // This pref is used for web contents to detect the autocomplete feature.
+    // When it's true, "element.autocomplete" will return tokens we currently
+    // support -- otherwise it'll return an empty string.
+    Services.prefs.setBoolPref("dom.forms.autocomplete.formautofill", true);
+    Services.telemetry.scalarSet("formautofill.availability", true);
+
+    // These "*.available" prefs determines whether the "addresses"/"creditcards" sync engine is
+    // available (ie, whether it is shown in any UI etc) - it *does not* determine
+    // whether the engine is actually enabled or not.
+    if (FormAutofill.isAutofillAddressesAvailable) {
+      Services.prefs.setBoolPref(
+        "services.sync.engine.addresses.available",
+        true
+      );
+    } else {
+      Services.prefs.clearUserPref("services.sync.engine.addresses.available");
+    }
+    if (FormAutofill.isAutofillCreditCardsAvailable) {
+      Services.prefs.setBoolPref(
+        "services.sync.engine.creditcards.available",
+        true
+      );
+    } else {
+      Services.prefs.clearUserPref(
+        "services.sync.engine.creditcards.available"
+      );
+    }
   }
-  return false;
-}
-
-this.formautofill = class extends ExtensionAPI {
   onStartup() {
     // We have to do this before actually determining if we're enabled, since
     // there are scripts inside of the core browser code that depend on the
     // FormAutofill JSMs being registered.
     let uri = Services.io.newURI("chrome/res/", null, this.extension.rootURI);
     resProto.setSubstitution(RESOURCE_HOST, uri);
 
     let aomStartup = Cc[
@@ -127,53 +160,26 @@ this.formautofill = class extends Extens
 
     if (this.autofillManifest) {
       Components.manager.addBootstrappedManifestLocation(this.autofillManifest);
     } else {
       Cu.reportError(
         "Cannot find formautofill chrome.manifest for registring translated strings"
       );
     }
-
-    if (!isAvailable()) {
-      Services.prefs.clearUserPref("dom.forms.autocomplete.formautofill");
-      // reset the sync related prefs incase the feature was previously available
-      // but isn't now.
-      Services.prefs.clearUserPref("services.sync.engine.addresses.available");
-      Services.prefs.clearUserPref(
-        "services.sync.engine.creditcards.available"
-      );
-      Services.telemetry.scalarSet("formautofill.availability", false);
+    let addressAutofillAvailable = FormAutofill.isAutofillAddressesAvailable;
+    let creditCardAutofillAvailable =
+      FormAutofill.isAutofillCreditCardsAvailable;
+    this.adjustAndCheckFormAutofillPrefs(
+      addressAutofillAvailable,
+      creditCardAutofillAvailable
+    );
+    if (!creditCardAutofillAvailable && !addressAutofillAvailable) {
       return;
     }
-
-    // This pref is used for web contents to detect the autocomplete feature.
-    // When it's true, "element.autocomplete" will return tokens we currently
-    // support -- otherwise it'll return an empty string.
-    Services.prefs.setBoolPref("dom.forms.autocomplete.formautofill", true);
-    Services.telemetry.scalarSet("formautofill.availability", true);
-
-    // This pref determines whether the "addresses"/"creditcards" sync engine is
-    // available (ie, whether it is shown in any UI etc) - it *does not* determine
-    // whether the engine is actually enabled or not.
-    Services.prefs.setBoolPref(
-      "services.sync.engine.addresses.available",
-      true
-    );
-    if (FormAutofill.isAutofillCreditCardsAvailable) {
-      Services.prefs.setBoolPref(
-        "services.sync.engine.creditcards.available",
-        true
-      );
-    } else {
-      Services.prefs.clearUserPref(
-        "services.sync.engine.creditcards.available"
-      );
-    }
-
     // Listen for the autocomplete popup message
     // or the form submitted message (which may trigger a
     // doorhanger) to lazily append our stylesheets related
     // to the autocomplete feature.
     AutoCompleteParent.addPopupStateListener(ensureCssLoaded);
     FormAutofillParent.addMessageObserver(this);
     this.onFormSubmitted = (data, window) => ensureCssLoaded(window);
 
--- a/browser/extensions/formautofill/test/browser/browser.ini
+++ b/browser/extensions/formautofill/test/browser/browser.ini
@@ -12,21 +12,25 @@ skip-if = !debug && os == "mac" # perma-
 [browser_autocomplete_marked_detached_tab.js]
 skip-if = (verify && (os == 'win')) || (os == 'mac')
 [browser_check_installed.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
 [browser_dropdown_layout.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
 [browser_editAddressDialog.js]
 skip-if =
-  verify || (!debug && os == "mac") # perma-fail see Bug 1600059
+  verify
+  (!debug && os == "mac") # perma-fail see Bug 1600059
   win10_2004 # Bug 1723573
 [browser_first_time_use_doorhanger.js]
-skip-if = verify || (!debug && os == "mac") # perma-fail see Bug 1600059
+skip-if = 
+  verify || (!debug && os == "mac") # perma-fail see Bug 1600059
 [browser_manageAddressesDialog.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
+[browser_privacyPreferences.js]
+skip-if = (( os == "mac") || (os == 'linux') || (os == 'win')) # perma-fail see Bug 1600059
 [browser_remoteiframe.js]
 skip-if =
   !debug && os == "mac" # perma-fail see Bug 1600059
 [browser_submission_in_private_mode.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
 [browser_update_doorhanger.js]
 skip-if = true # bug 1426981 # Bug 1445538
--- a/browser/extensions/formautofill/test/browser/browser_first_time_use_doorhanger.js
+++ b/browser/extensions/formautofill/test/browser/browser_first_time_use_doorhanger.js
@@ -3,16 +3,17 @@
 
 add_task(async function test_first_time_save() {
   let addresses = await getAddresses();
   is(addresses.length, 0, "No address in storage");
   await SpecialPowers.pushPrefEnv({
     set: [
       [FTU_PREF, true],
       [ENABLED_AUTOFILL_ADDRESSES_PREF, true],
+      [AUTOFILL_ADDRESSES_AVAILABLE_PREF, "on"],
       [ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF, true],
     ],
   });
 
   await BrowserTestUtils.withNewTab({ gBrowser, url: FORM_URL }, async function(
     browser
   ) {
     let promiseShown = BrowserTestUtils.waitForEvent(
@@ -47,16 +48,23 @@ add_task(async function test_first_time_
 
   addresses = await getAddresses();
   is(addresses.length, 1, "Address saved");
   let ftuPref = SpecialPowers.getBoolPref(FTU_PREF);
   is(ftuPref, false, "First time use flag is false");
 });
 
 add_task(async function test_non_first_time_save() {
+  await SpecialPowers.pushPrefEnv({
+    set: [
+      [ENABLED_AUTOFILL_ADDRESSES_PREF, true],
+      [AUTOFILL_ADDRESSES_AVAILABLE_PREF, "on"],
+      [ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF, true],
+    ],
+  });
   let addresses = await getAddresses();
   let ftuPref = SpecialPowers.getBoolPref(FTU_PREF);
   is(ftuPref, false, "First time use flag is false");
   is(addresses.length, 1, "1 address in storage");
 
   await BrowserTestUtils.withNewTab({ gBrowser, url: FORM_URL }, async function(
     browser
   ) {
@@ -73,23 +81,25 @@ add_task(async function test_non_first_t
     });
 
     await sleep(1000);
     is(PopupNotifications.panel.state, "closed", "Doorhanger is hidden");
   });
 
   addresses = await getAddresses();
   is(addresses.length, 2, "Another address saved");
+  await SpecialPowers.popPrefEnv();
 });
 
 add_task(async function test_first_time_save_with_sync_account() {
   await SpecialPowers.pushPrefEnv({
     set: [
       [FTU_PREF, true],
       [ENABLED_AUTOFILL_ADDRESSES_PREF, true],
+      [AUTOFILL_ADDRESSES_AVAILABLE_PREF, "on"],
       [SYNC_USERNAME_PREF, "foo@bar.com"],
     ],
   });
 
   await BrowserTestUtils.withNewTab({ gBrowser, url: FORM_URL }, async function(
     browser
   ) {
     let promiseShown = BrowserTestUtils.waitForEvent(
@@ -132,9 +142,10 @@ add_task(async function test_first_time_
     await clickDoorhangerButton(MAIN_BUTTON);
     let tab = await tabPromise;
     ok(tab, "Privacy panel opened");
     BrowserTestUtils.removeTab(tab);
   });
 
   let ftuPref = SpecialPowers.getBoolPref(FTU_PREF);
   is(ftuPref, false, "First time use flag is false");
+  await SpecialPowers.popPrefEnv();
 });
rename from browser/extensions/formautofill/test/browser/creditCard/browser_privacyPreferences.js
rename to browser/extensions/formautofill/test/browser/browser_privacyPreferences.js
--- a/browser/extensions/formautofill/test/browser/creditCard/browser_privacyPreferences.js
+++ b/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js
@@ -8,16 +8,20 @@ const SELECTORS = {
   creditCardAutofillCheckbox: "#creditCardAutofill checkbox",
   savedAddressesBtn: "#addressAutofill button",
   savedCreditCardsBtn: "#creditCardAutofill button",
   addressAutofillLearnMore: "#addressAutofillLearnMore",
   creditCardAutofillLearnMore: "#creditCardAutofillLearnMore",
   reauthCheckbox: "#creditCardReauthenticate checkbox",
 };
 
+const { FormAutofill } = ChromeUtils.import(
+  "resource://autofill/FormAutofill.jsm"
+);
+
 // Visibility of form autofill group should be hidden when opening
 // preferences page.
 add_task(async function test_aboutPreferences() {
   let finalPrefPaneLoaded = TestUtils.topicObserved(
     "sync-pane-loaded",
     () => true
   );
   await BrowserTestUtils.withNewTab(
@@ -242,17 +246,17 @@ add_task(async function test_creditCardH
       });
     }
   );
   SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_HIDE_UI_PREF);
 });
 
 add_task(async function test_reauth() {
   await SpecialPowers.pushPrefEnv({
-    set: [[AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true]],
+    set: [[AUTOFILL_CREDITCARDS_AVAILABLE_PREF, "on"]],
   });
   let { OSKeyStore } = ChromeUtils.import(
     "resource://gre/modules/OSKeyStore.jsm"
   );
 
   let finalPrefPaneLoaded = TestUtils.topicObserved(
     "sync-pane-loaded",
     () => true
@@ -270,8 +274,163 @@ add_task(async function test_reauth() {
             !!content.document.querySelector(selectors.reauthCheckbox),
             "Re-authentication checkbox should be available if OSKeyStore.canReauth() is `true`"
           );
         }
       );
     }
   );
 });
+
+add_task(async function test_addressAutofillNotAvailable() {
+  await SpecialPowers.pushPrefEnv({
+    set: [[AUTOFILL_ADDRESSES_AVAILABLE_PREF, "off"]],
+  });
+
+  let autofillAddressEnabledValue = Services.prefs.getBoolPref(
+    ENABLED_AUTOFILL_ADDRESSES_PREF
+  );
+  let finalPrefPaneLoaded = TestUtils.topicObserved(
+    "sync-pane-loaded",
+    () => true
+  );
+  await BrowserTestUtils.withNewTab(
+    { gBrowser, url: PAGE_PRIVACY },
+    async function(browser) {
+      await finalPrefPaneLoaded;
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        is(
+          content.document.querySelector(selectors.group).hidden,
+          false,
+          "Form Autofill group should be visible"
+        );
+        is(
+          content.document.querySelector(selectors.addressAutofillCheckbox),
+          null,
+          "Address checkbox should not exist when address autofill is not enabled"
+        );
+        is(
+          content.document.querySelector(selectors.creditCardAutofillCheckbox)
+            .checked,
+          true,
+          "Checkbox should be checked when Autofill Credit Cards is enabled"
+        );
+      });
+      info("test toggling the credit card autofill checkbox");
+
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        content.document
+          .querySelector(selectors.creditCardAutofillCheckbox)
+          .scrollIntoView({ block: "center", behavior: "instant" });
+      });
+      await BrowserTestUtils.synthesizeMouseAtCenter(
+        SELECTORS.creditCardAutofillCheckbox,
+        {},
+        browser
+      );
+      is(
+        Services.prefs.getBoolPref(ENABLED_AUTOFILL_CREDITCARDS_PREF),
+        false,
+        "Check credit card autofill is now disabled"
+      );
+      is(
+        Services.prefs.getBoolPref(ENABLED_AUTOFILL_ADDRESSES_PREF),
+        autofillAddressEnabledValue,
+        "Address autofill enabled's value should not change due to credit card checkbox interaction"
+      );
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        is(
+          content.document.querySelector(selectors.addressAutofillCheckbox),
+          null,
+          "Address checkbox should exist due to interaction with credit card checkbox"
+        );
+      });
+    }
+  );
+  await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function test_addressAutofillNotAvailableViaRegion() {
+  await SpecialPowers.pushPrefEnv({
+    set: [
+      ["extensions.formautofill.addresses.supported", "detect"],
+      ["extensions.formautofill.creditCards.enabled", true],
+      ["browser.search.region", "FR"],
+      [ENABLED_AUTOFILL_ADDRESSES_SUPPORTED_COUNTRIES_PREF, "US,CA"],
+    ],
+  });
+
+  const addressAutofillEnabledPrefValue = Services.prefs.getBoolPref(
+    ENABLED_AUTOFILL_ADDRESSES_PREF
+  );
+  const addressAutofillAvailablePrefValue = Services.prefs.getCharPref(
+    AUTOFILL_ADDRESSES_AVAILABLE_PREF
+  );
+  is(
+    FormAutofill.isAutofillAddressesAvailable,
+    false,
+    "Address autofill should not be available due to unsupported region"
+  );
+  let finalPrefPaneLoaded = TestUtils.topicObserved(
+    "sync-pane-loaded",
+    () => true
+  );
+  await BrowserTestUtils.withNewTab(
+    { gBrowser, url: PAGE_PRIVACY },
+    async function(browser) {
+      await finalPrefPaneLoaded;
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        is(
+          content.document.querySelector(selectors.group).hidden,
+          false,
+          "Form Autofill group should be visible"
+        );
+        is(
+          content.document.querySelector(selectors.addressAutofillCheckbox),
+          null,
+          "Address checkbox should not exist due to address autofill not being available"
+        );
+        is(
+          content.document.querySelector(selectors.creditCardAutofillCheckbox)
+            .checked,
+          true,
+          "Checkbox should be checked when Autofill Credit Cards is enabled"
+        );
+      });
+      info("test toggling the credit card autofill checkbox");
+
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        content.document
+          .querySelector(selectors.creditCardAutofillCheckbox)
+          .scrollIntoView({ block: "center", behavior: "instant" });
+      });
+      await BrowserTestUtils.synthesizeMouseAtCenter(
+        SELECTORS.creditCardAutofillCheckbox,
+        {},
+        browser
+      );
+      is(
+        Services.prefs.getBoolPref(ENABLED_AUTOFILL_CREDITCARDS_PREF),
+        false,
+        "Check credit card autofill is now disabled"
+      );
+      is(
+        Services.prefs.getCharPref(AUTOFILL_ADDRESSES_AVAILABLE_PREF),
+        addressAutofillAvailablePrefValue,
+        "Address autofill availability should not change due to interaction with credit card checkbox"
+      );
+      is(
+        addressAutofillEnabledPrefValue,
+        Services.prefs.getBoolPref(ENABLED_AUTOFILL_ADDRESSES_PREF),
+        "Address autofill enabled pref should not change due to credit card checkbox"
+      );
+      await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
+        is(
+          content.document.querySelector(selectors.addressAutofillCheckbox),
+          null,
+          "Address checkbox should not exist due to address autofill not being available"
+        );
+      });
+    }
+  );
+
+  await SpecialPowers.popPrefEnv();
+});
--- a/browser/extensions/formautofill/test/browser/browser_remoteiframe.js
+++ b/browser/extensions/formautofill/test/browser/browser_remoteiframe.js
@@ -3,16 +3,17 @@
 
 const IFRAME_URL_PATH = BASE_URL + "autocomplete_iframe.html";
 const PRIVACY_PREF_URL = "about:preferences#privacy";
 
 // Start by adding a few addresses to storage.
 add_task(async function setup_storage() {
   await SpecialPowers.pushPrefEnv({
     set: [
+      [AUTOFILL_ADDRESSES_AVAILABLE_PREF, "on"],
       [ENABLED_AUTOFILL_ADDRESSES_PREF, true],
       [ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF, true],
     ],
   });
   await saveAddress(TEST_ADDRESS_2);
   await saveAddress(TEST_ADDRESS_4);
   await saveAddress(TEST_ADDRESS_5);
 });
--- a/browser/extensions/formautofill/test/browser/creditCard/browser.ini
+++ b/browser/extensions/formautofill/test/browser/creditCard/browser.ini
@@ -1,11 +1,10 @@
 [DEFAULT]
 prefs =
-  extensions.formautofill.creditCards.available=true
   extensions.formautofill.creditCards.enabled=true
   extensions.formautofill.reauth.enabled=true
   # lower the interval for event telemetry in the content process to update the parent process
   toolkit.telemetry.ipcBatchTimeout=0
 support-files =
   ../head.js
   !/browser/extensions/formautofill/test/fixtures/autocomplete_basic.html
   ../../fixtures/autocomplete_creditcard_basic.html
@@ -19,14 +18,12 @@ skip-if = ((os == "mac") || (os == 'linu
 [browser_creditCard_fill_cancel_login.js]
 skip-if = ((!debug && os == "mac") || (os == 'linux') || (os == 'win'))
 [browser_editCreditCardDialog.js]
 skip-if = ((os == 'linux') || (os == "mac") || (os == 'win')) # perma-fail see Bug 1600059
 [browser_insecure_form.js]
 skip-if = ((os == 'mac') || (os == 'linux') || (os == 'win')) # bug 1456284
 [browser_manageCreditCardsDialog.js]
 skip-if = ((os == 'win') || (os == 'mac') || (os == 'linux'))
-[browser_privacyPreferences.js]
-skip-if = (( os == "mac") || (os == 'linux') || (os == 'win')) # perma-fail see Bug 1600059
 [browser_anti_clickjacking.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
 [browser_creditCard_telemetry.js]
 skip-if = !debug && os == "mac" # perma-fail see Bug 1600059
--- a/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_telemetry.js
+++ b/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_telemetry.js
@@ -119,18 +119,18 @@ async function useCreditCard(idx) {
     }
   );
   await onUsed;
 }
 
 add_task(async function test_popup_opened() {
   await SpecialPowers.pushPrefEnv({
     set: [
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
       [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
+      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, "on"],
     ],
   });
 
   Services.telemetry.clearEvents();
   Services.telemetry.clearScalars();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
@@ -160,31 +160,29 @@ add_task(async function test_popup_opene
     1,
     "There should be 1 section detected."
   );
   TelemetryTestUtils.assertScalarUnset(
     TelemetryTestUtils.getProcessScalars("content"),
     "formautofill.creditCards.submitted_sections_count"
   );
 
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
-  SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
+  await SpecialPowers.popPrefEnv();
 });
 
 add_task(async function test_submit_creditCard_new() {
   async function test_per_command(
     command,
     idx,
     useCount = {},
     expectChanged = undefined
   ) {
     await SpecialPowers.pushPrefEnv({
       set: [
         [CREDITCARDS_USED_STATUS_PREF, 0],
-        [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
         [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
       ],
     });
     await BrowserTestUtils.withNewTab(
       { gBrowser, url: CREDITCARD_FORM_URL },
       async function(browser) {
         let promiseShown = BrowserTestUtils.waitForEvent(
           PopupNotifications.panel,
@@ -220,17 +218,16 @@ add_task(async function test_submit_cred
             "There should be ${expectChanged} profile(s) stored."
           );
         }
       }
     );
 
     SpecialPowers.clearUserPref(CREDITCARDS_USED_STATUS_PREF);
     SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-    SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
     assertHistogram(CC_NUM_USES_HISTOGRAM, useCount);
 
     await removeAllRecords();
   }
 
   Services.telemetry.clearEvents();
   Services.telemetry.clearScalars();
@@ -295,34 +292,32 @@ add_task(async function test_submit_cred
 
   Services.telemetry.clearEvents();
   Services.telemetry.getHistogramById(CC_NUM_USES_HISTOGRAM).clear();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await SpecialPowers.pushPrefEnv({
     set: [
       [CREDITCARDS_USED_STATUS_PREF, 0],
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
       [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
     ],
   });
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
   let creditCards = await getCreditCards();
   is(creditCards.length, 1, "1 credit card in storage");
 
   await useCreditCard(1);
 
   assertHistogram(CC_NUM_USES_HISTOGRAM, {
     1: 1,
   });
 
   SpecialPowers.clearUserPref(CREDITCARDS_USED_STATUS_PREF);
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
   await removeAllRecords();
 
   await assertTelemetry(
     [
       ["creditcard", "detected", "cc_form"],
       ["creditcard", "popup_shown", "cc_form"],
       ["creditcard", "filled", "cc_form"],
@@ -355,17 +350,16 @@ add_task(async function test_submit_cred
     command,
     idx,
     useCount = {},
     expectChanged = undefined
   ) {
     await SpecialPowers.pushPrefEnv({
       set: [
         [CREDITCARDS_USED_STATUS_PREF, 0],
-        [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
         [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
       ],
     });
 
     await saveCreditCard(TEST_CREDIT_CARD_1);
     let creditCards = await getCreditCards();
     is(creditCards.length, 1, "1 credit card in storage");
 
@@ -410,17 +404,16 @@ add_task(async function test_submit_cred
         }
       }
     );
 
     assertHistogram("CREDITCARD_NUM_USES", useCount);
 
     SpecialPowers.clearUserPref(CREDITCARDS_USED_STATUS_PREF);
     SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-    SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
     await removeAllRecords();
   }
   Services.telemetry.clearEvents();
   Services.telemetry.getHistogramById(CC_NUM_USES_HISTOGRAM).clear();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   let expected_content = [
@@ -469,20 +462,17 @@ const TEST_SELECTORS = {
 
 const DIALOG_SIZE = "width=600,height=400";
 
 add_task(async function test_removingCreditCardsViaKeyboardDelete() {
   Services.telemetry.clearEvents();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await SpecialPowers.pushPrefEnv({
-    set: [
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
-      [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
-    ],
+    set: [[ENABLED_AUTOFILL_CREDITCARDS_PREF, true]],
   });
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
   let win = window.openDialog(
     MANAGE_CREDIT_CARDS_DIALOG_URL,
     null,
     DIALOG_SIZE
   );
@@ -500,30 +490,26 @@ add_task(async function test_removingCre
   win.close();
 
   await assertTelemetry(undefined, [
     ["creditcard", "show", "manage"],
     ["creditcard", "delete", "manage"],
   ]);
 
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
   await removeAllRecords();
 });
 
 add_task(async function test_saveCreditCard() {
   Services.telemetry.clearEvents();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await SpecialPowers.pushPrefEnv({
-    set: [
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
-      [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
-    ],
+    set: [[ENABLED_AUTOFILL_CREDITCARDS_PREF, true]],
   });
 
   await testDialog(EDIT_CREDIT_CARD_DIALOG_URL, win => {
     EventUtils.synthesizeKey("VK_TAB", {}, win);
     EventUtils.synthesizeKey(TEST_CREDIT_CARD_1["cc-number"], {}, win);
     EventUtils.synthesizeKey("VK_TAB", {}, win);
     EventUtils.synthesizeKey(
       "0" + TEST_CREDIT_CARD_1["cc-exp-month"].toString(),
@@ -542,32 +528,28 @@ add_task(async function test_saveCreditC
     EventUtils.synthesizeKey(TEST_CREDIT_CARD_1["cc-type"], {}, win);
     EventUtils.synthesizeKey("VK_TAB", {}, win);
     EventUtils.synthesizeKey("VK_TAB", {}, win);
     info("saving credit card");
     EventUtils.synthesizeKey("VK_RETURN", {}, win);
   });
 
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
   await removeAllRecords();
 
   await assertTelemetry(undefined, [["creditcard", "add", "manage"]]);
 });
 
 add_task(async function test_editCreditCard() {
   Services.telemetry.clearEvents();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await SpecialPowers.pushPrefEnv({
-    set: [
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
-      [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
-    ],
+    set: [[ENABLED_AUTOFILL_CREDITCARDS_PREF, true]],
   });
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
 
   let creditCards = await getCreditCards();
   is(creditCards.length, 1, "only one credit card is in storage");
   await testDialog(
     EDIT_CREDIT_CARD_DIALOG_URL,
@@ -581,17 +563,16 @@ add_task(async function test_editCreditC
       win.document.querySelector("#save").click();
     },
     {
       record: creditCards[0],
     }
   );
 
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
   await removeAllRecords();
   await assertTelemetry(undefined, [
     ["creditcard", "show_entry", "manage"],
     ["creditcard", "edit", "manage"],
   ]);
 });
 
@@ -600,20 +581,17 @@ add_task(async function test_histogram()
     todo(
       OSKeyStoreTestUtils.canTestOSKeyStoreLogin(),
       "Cannot test OS key store login on official builds."
     );
     return;
   }
 
   await SpecialPowers.pushPrefEnv({
-    set: [
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
-      [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
-    ],
+    set: [[ENABLED_AUTOFILL_CREDITCARDS_PREF, true]],
   });
 
   Services.telemetry.getHistogramById(CC_NUM_USES_HISTOGRAM).clear();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
   await saveCreditCard(TEST_CREDIT_CARD_2);
   await saveCreditCard(TEST_CREDIT_CARD_5);
@@ -651,17 +629,16 @@ add_task(async function test_histogram()
 
   await useCreditCard(3);
   assertHistogram(CC_NUM_USES_HISTOGRAM, {
     1: 1,
     2: 2,
   });
 
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
 
   await removeAllRecords();
 
   assertHistogram(CC_NUM_USES_HISTOGRAM, {});
 });
 
 add_task(async function test_submit_creditCard_new_with_hidden_ui() {
   const AUTOFILL_CREDITCARDS_HIDE_UI_PREF =
@@ -670,17 +647,16 @@ add_task(async function test_submit_cred
   Services.telemetry.clearEvents();
   Services.telemetry.clearScalars();
   Services.telemetry.getHistogramById(CC_NUM_USES_HISTOGRAM).clear();
   Services.telemetry.setEventRecordingEnabled("creditcard", true);
 
   await SpecialPowers.pushPrefEnv({
     set: [
       [CREDITCARDS_USED_STATUS_PREF, 0],
-      [AUTOFILL_CREDITCARDS_AVAILABLE_PREF, true],
       [ENABLED_AUTOFILL_CREDITCARDS_PREF, true],
       [AUTOFILL_CREDITCARDS_HIDE_UI_PREF, true],
     ],
   });
 
   await saveCreditCard(TEST_CREDIT_CARD_1);
 
   await BrowserTestUtils.withNewTab(
@@ -721,17 +697,16 @@ add_task(async function test_submit_cred
         "Doorhanger is still hidden"
       );
       browser.removeEventListener("popupshowing", rejectPopup, true);
     }
   );
 
   SpecialPowers.clearUserPref(CREDITCARDS_USED_STATUS_PREF);
   SpecialPowers.clearUserPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
-  SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF);
   SpecialPowers.clearUserPref(AUTOFILL_CREDITCARDS_HIDE_UI_PREF);
 
   assertHistogram(CC_NUM_USES_HISTOGRAM, { 0: 1 });
 
   let expected_content = [
     ["creditcard", "detected", "cc_form"],
     [
       "creditcard",
--- a/browser/extensions/formautofill/test/browser/head.js
+++ b/browser/extensions/formautofill/test/browser/head.js
@@ -1,14 +1,17 @@
 /* exported MANAGE_ADDRESSES_DIALOG_URL, MANAGE_CREDIT_CARDS_DIALOG_URL, EDIT_ADDRESS_DIALOG_URL, EDIT_CREDIT_CARD_DIALOG_URL,
             BASE_URL, TEST_ADDRESS_1, TEST_ADDRESS_2, TEST_ADDRESS_3, TEST_ADDRESS_4, TEST_ADDRESS_5, TEST_ADDRESS_CA_1, TEST_ADDRESS_DE_1,
             TEST_ADDRESS_IE_1,
             TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2, TEST_CREDIT_CARD_3, TEST_CREDIT_CARD_4, TEST_CREDIT_CARD_5,
             FORM_URL, CREDITCARD_FORM_URL, CREDITCARD_FORM_IFRAME_URL
-            FTU_PREF, ENABLED_AUTOFILL_ADDRESSES_PREF, ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF, AUTOFILL_CREDITCARDS_AVAILABLE_PREF, ENABLED_AUTOFILL_CREDITCARDS_PREF,
+            FTU_PREF, ENABLED_AUTOFILL_ADDRESSES_PREF,
+            AUTOFILL_ADDRESSES_AVAILABLE_PREF,
+            ENABLED_AUTOFILL_ADDRESSES_SUPPORTED_COUNTRIES_PREF, 
+            ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF, AUTOFILL_CREDITCARDS_AVAILABLE_PREF, ENABLED_AUTOFILL_CREDITCARDS_PREF,
             SUPPORTED_COUNTRIES_PREF,
             SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, SYNC_CREDITCARDS_PREF, SYNC_CREDITCARDS_AVAILABLE_PREF, CREDITCARDS_USED_STATUS_PREF,
             sleep, expectPopupOpen, openPopupOn, openPopupForSubframe, closePopup, closePopupForSubframe,
             clickDoorhangerButton, getAddresses, saveAddress, removeAddresses, saveCreditCard,
             getDisplayedPopupItems, getDoorhangerCheckbox, waitForPopupEnabled,
             getNotification, getDoorhangerButton, removeAllRecords, expectWarningText, testDialog */
 
 "use strict";
@@ -42,18 +45,22 @@ const CREDITCARD_FORM_IFRAME_URL =
   "creditCard/autocomplete_creditcard_iframe.html";
 
 const FTU_PREF = "extensions.formautofill.firstTimeUse";
 const CREDITCARDS_USED_STATUS_PREF = "extensions.formautofill.creditCards.used";
 const ENABLED_AUTOFILL_ADDRESSES_PREF =
   "extensions.formautofill.addresses.enabled";
 const ENABLED_AUTOFILL_ADDRESSES_CAPTURE_PREF =
   "extensions.formautofill.addresses.capture.enabled";
+const AUTOFILL_ADDRESSES_AVAILABLE_PREF =
+  "extensions.formautofill.addresses.supported";
+const ENABLED_AUTOFILL_ADDRESSES_SUPPORTED_COUNTRIES_PREF =
+  "extensions.formautofill.addresses.supportedCountries";
 const AUTOFILL_CREDITCARDS_AVAILABLE_PREF =
-  "extensions.formautofill.creditCards.available";
+  "extensions.formautofill.creditCards.supported";
 const ENABLED_AUTOFILL_CREDITCARDS_PREF =
   "extensions.formautofill.creditCards.enabled";
 const SUPPORTED_COUNTRIES_PREF = "extensions.formautofill.supportedCountries";
 const SYNC_USERNAME_PREF = "services.sync.username";
 const SYNC_ADDRESSES_PREF = "services.sync.engine.addresses";
 const SYNC_CREDITCARDS_PREF = "services.sync.engine.creditcards";
 const SYNC_CREDITCARDS_AVAILABLE_PREF =
   "services.sync.engine.creditcards.available";
@@ -515,22 +522,19 @@ function getDoorhangerButton(button) {
   return getNotification()[button];
 }
 
 async function removeAllRecords() {
   let addresses = await getAddresses();
   if (addresses.length) {
     await removeAddresses(addresses.map(address => address.guid));
   }
-
-  if (Services.prefs.getBoolPref(AUTOFILL_CREDITCARDS_AVAILABLE_PREF)) {
-    let creditCards = await getCreditCards();
-    if (creditCards.length) {
-      await removeCreditCards(creditCards.map(cc => cc.guid));
-    }
+  let creditCards = await getCreditCards();
+  if (creditCards.length) {
+    await removeCreditCards(creditCards.map(cc => cc.guid));
   }
 }
 
 async function waitForFocusAndFormReady(win) {
   return Promise.all([
     new Promise(resolve => waitForFocus(resolve, win)),
     BrowserTestUtils.waitForEvent(win, "FormReady"),
   ]);
--- a/browser/extensions/formautofill/test/mochitest/creditCard/mochitest.ini
+++ b/browser/extensions/formautofill/test/mochitest/creditCard/mochitest.ini
@@ -1,11 +1,11 @@
 [DEFAULT]
 prefs =
-  extensions.formautofill.creditCards.available=true
+  extensions.formautofill.creditCards.supported=on
   extensions.formautofill.creditCards.enabled=true
   extensions.formautofill.reauth.enabled=true
 support-files =
   !/toolkit/components/satchel/test/satchel_common.js
   ../../../../../../toolkit/components/satchel/test/parent_utils.js
   !/toolkit/components/satchel/test/parent_utils.js
   !/browser/extensions/formautofill/test/mochitest/formautofill_common.js
   !/browser/extensions/formautofill/test/mochitest/formautofill_parent_utils.js
--- a/browser/extensions/formautofill/test/mochitest/mochitest.ini
+++ b/browser/extensions/formautofill/test/mochitest/mochitest.ini
@@ -1,18 +1,25 @@
 [DEFAULT]
+prefs =
+  extensions.formautofill.creditCards.supported=on
+  extensions.formautofill.creditCards.enabled=true
+  extensions.formautofill.addresses.supported=on
+  extensions.formautofill.addresses.enabled=true
 skip-if = toolkit == 'android' # bug 1730213
 support-files =
   ../../../../../toolkit/components/satchel/test/satchel_common.js
   ../../../../../toolkit/components/satchel/test/parent_utils.js
   formautofill_common.js
   formautofill_parent_utils.js
 
 [test_address_level_1_submission.html]
 [test_autofill_and_ordinal_forms.html]
 [test_autofocus_form.html]
 [test_basic_autocomplete_form.html]
 [test_form_changes.html]
 [test_formautofill_preview_highlight.html]
-skip-if = verify || (!debug && os == "mac") # perma-fail see Bug 1600059
+skip-if = 
+  verify 
+  (!debug && os == "mac") # perma-fail see Bug 1600059
 [test_multi_locale_CA_address_form.html]
 [test_multiple_forms.html]
 [test_on_address_submission.html]
--- a/browser/extensions/formautofill/test/mochitest/test_address_level_1_submission.html
+++ b/browser/extensions/formautofill/test/mochitest/test_address_level_1_submission.html
@@ -23,19 +23,19 @@ const TEST_ADDRESSES = [{
   "address-level1": "AL",
   country: "DE",
   timesUsed: 1,
 }];
 
 add_task(async function test_DE_is_valid_testcase() {
   await SpecialPowers.pushPrefEnv({
     set: [
-      ["extensions.formautofill.addresses.enabled", true],
       ["extensions.formautofill.addresses.capture.enabled", true],
-      ["extensions.formautofill.supportedCountries", "US,CA,DE"],
+      ["extensions.formautofill.addresses.supportedCountries", "US,CA,DE"],
+      ["extensions.formautofill.creditCards.supportedCountries", "US,CA,DE"],
     ],
   });
   let chromeScript = SpecialPowers.loadChromeScript(function test_country_data() {
     const {AddressDataLoader} = ChromeUtils.import("resource://autofill/FormAutofillUtils.jsm");
     let data = AddressDataLoader.getData("DE");
     /* global addMessageListener */
     addMessageListener("CheckSubKeys", () => {
       return !data.defaultLocale.sub_keys;
@@ -52,29 +52,30 @@ add_task(async function test_DE_is_valid
 
 add_task(async function test_form_will_submit_without_sub_keys() {
   await SpecialPowers.pushPrefEnv({
     set: [
       // This needs to match the country in the previous test and must have no sub_keys.
       ["browser.search.region", "DE"],
       // We already verified the first time use case in browser test
       ["extensions.formautofill.firstTimeUse", false],
+      ["extensions.formautofill.addresses.capture.enabled", true],
+      ["extensions.formautofill.addresses.supportedCountries", "US,CA,DE"],
+      ["extensions.formautofill.addresses.supported", "detect"]
     ],
   });
-
   // Click a field to get the form handler created
   await focusAndWaitForFieldsIdentified("input[autocomplete='organization']");
 
   let loadPromise = new Promise(resolve => {
     /* eslint-disable-next-line mozilla/balanced-listeners */
     document.getElementById("submit_frame").addEventListener("load", resolve);
   });
 
   clickOnElement("input[type=submit]");
-
   await onStorageChanged("add");
   // Check if timesUsed is set correctly
   let matching = await checkAddresses(TEST_ADDRESSES);
   ok(matching, "Address saved as expected");
 
   await loadPromise;
   isnot(window.submit_frame.location.href, "about:blank", "Check form submitted");
 });
--- a/browser/extensions/formautofill/test/unit/head.js
+++ b/browser/extensions/formautofill/test/unit/head.js
@@ -292,44 +292,51 @@ function objectMatches(object, fields) {
       return false;
     }
     actual[key] = object[key];
   }
   return ObjectUtils.deepEqual(actual, fields);
 }
 
 add_task(async function head_initialize() {
-  Services.prefs.setStringPref("extensions.formautofill.available", "on");
   Services.prefs.setBoolPref("extensions.experiments.enabled", true);
   Services.prefs.setBoolPref(
-    "extensions.formautofill.creditCards.available",
-    true
-  );
-  Services.prefs.setBoolPref(
-    "extensions.formautofill.creditCards.enabled",
-    true
-  );
-  Services.prefs.setBoolPref(
     "extensions.formautofill.heuristics.enabled",
     true
   );
   Services.prefs.setBoolPref("extensions.formautofill.section.enabled", true);
   Services.prefs.setBoolPref("dom.forms.autocomplete.formautofill", true);
 
+  Services.prefs.setCharPref(
+    "extensions.formautofill.addresses.supported",
+    "on"
+  );
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supported",
+    "on"
+  );
+  Services.prefs.setBoolPref("extensions.formautofill.addresses.enabled", true);
+  Services.prefs.setBoolPref(
+    "extensions.formautofill.creditCards.enabled",
+    true
+  );
+
   // Clean up after every test.
   registerCleanupFunction(function head_cleanup() {
-    Services.prefs.clearUserPref("extensions.formautofill.available");
     Services.prefs.clearUserPref("extensions.experiments.enabled");
     Services.prefs.clearUserPref(
-      "extensions.formautofill.creditCards.available"
+      "extensions.formautofill.creditCards.supported"
     );
+    Services.prefs.clearUserPref("extensions.formautofill.addresses.supported");
     Services.prefs.clearUserPref("extensions.formautofill.creditCards.enabled");
     Services.prefs.clearUserPref("extensions.formautofill.heuristics.enabled");
     Services.prefs.clearUserPref("extensions.formautofill.section.enabled");
     Services.prefs.clearUserPref("dom.forms.autocomplete.formautofill");
+    Services.prefs.clearUserPref("extensions.formautofill.addresses.enabled");
+    Services.prefs.clearUserPref("extensions.formautofill.creditCards.enabled");
   });
 
   await loadExtension();
 });
 
 let OSKeyStoreTestUtils;
 add_task(async function os_key_store_setup() {
   ({ OSKeyStoreTestUtils } = ChromeUtils.import(
--- a/browser/extensions/formautofill/test/unit/test_creditCardRecords.js
+++ b/browser/extensions/formautofill/test/unit/test_creditCardRecords.js
@@ -859,19 +859,19 @@ add_task(async function test_creditCardF
 
   Services.prefs.setBoolPref(
     "extensions.formautofill.creditCards.enabled",
     true
   );
 });
 
 add_task(async function test_creditCardFillUnavailable() {
-  Services.prefs.setBoolPref(
-    "extensions.formautofill.creditCards.available",
-    false
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supported",
+    "off"
   );
 
   let path = getTempFile(TEST_STORE_FILE_NAME).path;
   let profileStorage = new FormAutofillStorage(path);
   await profileStorage.initialize();
 
   try {
     profileStorage.creditCards; // eslint-disable-line no-unused-expressions
@@ -879,13 +879,12 @@ add_task(async function test_creditCardF
   } catch (err) {
     Assert.equal(
       err.message,
       "CreditCards is not initialized. " +
         "Please restart if you flip the pref manually."
     );
   }
 
-  Services.prefs.setBoolPref(
-    "extensions.formautofill.creditCards.available",
-    true
+  Services.prefs.clearUserPref(
+    "extensions.formautofill.creditCards.availability"
   );
 });
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/test_isAddressAutofillAvailable.js
@@ -0,0 +1,74 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Test enabling address autofill in specific locales and regions.
+ */
+
+"use strict";
+
+const { FormAutofill } = ChromeUtils.import(
+  "resource://autofill/FormAutofill.jsm"
+);
+
+add_task(async function test_defaultTestEnvironment() {
+  Assert.equal(
+    Services.prefs.getCharPref("extensions.formautofill.addresses.supported"),
+    "on"
+  );
+});
+
+add_task(async function test_default_supported_module_and_autofill_region() {
+  Services.prefs.setCharPref("browser.search.region", "US");
+  registerCleanupFunction(function cleanupRegion() {
+    Services.prefs.clearUserPref("browser.search.region");
+  });
+
+  let addon = await AddonManager.getAddonByID(EXTENSION_ID);
+  await addon.reload();
+
+  Assert.equal(FormAutofill.isAutofillAddressesAvailable, true);
+  Assert.equal(FormAutofill.isAutofillAddressesEnabled, true);
+});
+
+add_task(
+  async function test_supported_creditCard_region_unsupported_address_region() {
+    Services.prefs.setCharPref(
+      "extensions.formautofill.addresses.supported",
+      "detect"
+    );
+    Services.prefs.setCharPref(
+      "extensions.formautofill.creditCards.supported",
+      "detect"
+    );
+    Services.prefs.setCharPref("browser.search.region", "FR");
+    Services.prefs.setCharPref(
+      "extensions.formautofill.addresses.supportedCountries",
+      "US,CA"
+    );
+    Services.prefs.setCharPref(
+      "extensions.formautofill.creditCards.supportedCountries",
+      "US,CA,FR"
+    );
+    registerCleanupFunction(function cleanupPrefs() {
+      Services.prefs.clearUserPref("browser.search.region");
+      Services.prefs.clearUserPref(
+        "extensions.formautofill.addresses.supportedCountries"
+      );
+      Services.prefs.clearUserPref(
+        "extensions.formautofill.addresses.supported"
+      );
+      Services.prefs.clearUserPref(
+        "extensions.formautofill.creditCards.supported"
+      );
+    });
+
+    let addon = await AddonManager.getAddonByID(EXTENSION_ID);
+    await addon.reload();
+    Assert.ok(
+      Services.prefs.getBoolPref("extensions.formautofill.creditCards.enabled")
+    );
+    Assert.equal(FormAutofill.isAutofillAddressesAvailable, false);
+    Assert.equal(FormAutofill.isAutofillAddressesEnabled, false);
+  }
+);
deleted file mode 100644
--- a/browser/extensions/formautofill/test/unit/test_isAvailable.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Test enabling the feature in specific locales and regions.
- */
-
-"use strict";
-
-const DOM_ENABLED_PREF = "dom.forms.autocomplete.formautofill";
-
-add_task(async function test_defaultTestEnvironment() {
-  Assert.ok(Services.prefs.getBoolPref(DOM_ENABLED_PREF));
-});
-
-add_task(async function test_unsupportedRegion() {
-  Services.prefs.setCharPref("extensions.formautofill.available", "detect");
-  Services.prefs.setCharPref("browser.search.region", "ZZ");
-  registerCleanupFunction(function cleanupRegion() {
-    Services.prefs.clearUserPref("browser.search.region");
-  });
-
-  let addon = await AddonManager.getAddonByID(EXTENSION_ID);
-  await addon.reload();
-
-  Assert.ok(!Services.prefs.getBoolPref(DOM_ENABLED_PREF));
-});
-
-add_task(async function test_supportedRegion() {
-  Services.prefs.setCharPref("extensions.formautofill.available", "detect");
-  Services.prefs.setCharPref("browser.search.region", "US");
-  registerCleanupFunction(function cleanupRegion() {
-    Services.prefs.clearUserPref("browser.search.region");
-  });
-
-  let addon = await AddonManager.getAddonByID(EXTENSION_ID);
-  await addon.reload();
-
-  Assert.ok(Services.prefs.getBoolPref(DOM_ENABLED_PREF));
-});
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/test_isCreditCardAutofillAvailable.js
@@ -0,0 +1,84 @@
+/**
+ * Test enabling the feature in specific locales and regions.
+ */
+
+"use strict";
+
+const { FormAutofill } = ChromeUtils.import(
+  "resource://autofill/FormAutofill.jsm"
+);
+
+add_task(async function test_defaultTestEnvironment() {
+  Assert.ok(Services.prefs.getBoolPref("dom.forms.autocomplete.formautofill"));
+});
+
+add_task(async function test_detect_unsupportedRegion() {
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supported",
+    "detect"
+  );
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supportedCountries",
+    "US,CA"
+  );
+  Services.prefs.setCharPref("browser.search.region", "ZZ");
+  registerCleanupFunction(function cleanupRegion() {
+    Services.prefs.clearUserPref("browser.search.region");
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.supported"
+    );
+    Services.prefs.clearUserPref("extensions.formautofill.addresses.supported");
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.supportedCountries"
+    );
+  });
+
+  let addon = await AddonManager.getAddonByID(EXTENSION_ID);
+  await addon.reload();
+
+  Assert.equal(
+    FormAutofill.isAutofillCreditCardsAvailable,
+    false,
+    "Credit card autofill should not be available"
+  );
+  Assert.equal(
+    FormAutofill.isAutofillCreditCardsEnabled,
+    false,
+    "Credit card autofill should not be enabled"
+  );
+});
+
+add_task(async function test_detect_supportedRegion() {
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supported",
+    "detect"
+  );
+  Services.prefs.setCharPref(
+    "extensions.formautofill.creditCards.supportedCountries",
+    "US,CA"
+  );
+  Services.prefs.setCharPref("browser.search.region", "US");
+  registerCleanupFunction(function cleanupRegion() {
+    Services.prefs.clearUserPref("browser.search.region");
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.supported"
+    );
+    Services.prefs.clearUserPref(
+      "extensions.formautofill.creditCards.supportedCountries"
+    );
+  });
+
+  let addon = await AddonManager.getAddonByID(EXTENSION_ID);
+  await addon.reload();
+
+  Assert.equal(
+    FormAutofill.isAutofillCreditCardsAvailable,
+    true,
+    "Credit card autofill should be available"
+  );
+  Assert.equal(
+    FormAutofill.isAutofillCreditCardsEnabled,
+    true,
+    "Credit card autofill should be enabled"
+  );
+});
--- a/browser/extensions/formautofill/test/unit/xpcshell.ini
+++ b/browser/extensions/formautofill/test/unit/xpcshell.ini
@@ -27,18 +27,19 @@ skip-if =
 [test_getAdaptedProfiles_locales.js]
 [test_getCategoriesFromFieldNames.js]
 [test_getFormInputDetails.js]
 [test_getInfo.js]
 [test_getRecords.js]
 skip-if =
   tsan # Times out, bug 1612707
   apple_silicon # bug 1729554
-[test_isAvailable.js]
+[test_isAddressAutofillAvailable.js]
 [test_isCJKName.js]
+[test_isCreditCardAutofillAvailable.js]
 [test_isFieldEligibleForAutofill.js]
 [test_markAsAutofillField.js]
 [test_migrateRecords.js]
 skip-if = tsan # Times out, bug 1612707
 [test_nameUtils.js]
 [test_onFormSubmitted.js]
 skip-if = tsan # Times out, bug 1612707
 [test_parseAddressFormat.js]
--- a/browser/locales/en-US/browser/appmenu.ftl
+++ b/browser/locales/en-US/browser/appmenu.ftl
@@ -160,20 +160,16 @@ profiler-popup-learn-more-button =
 
 profiler-popup-settings =
   .value = Settings
 
 # This link takes the user to about:profiling, and is only visible with the Custom preset.
 profiler-popup-edit-settings-button =
   .label = Edit Settingsā€¦
 
-profiler-popup-disabled =
-  The profiler is currently disabled, most likely due to a Private Browsing window
-  being open.
-
 profiler-popup-recording-screen = Recordingā€¦
 
 profiler-popup-start-recording-button =
   .label = Start Recording
 
 profiler-popup-discard-button =
   .label = Discard
 
--- a/browser/modules/BrowserWindowTracker.jsm
+++ b/browser/modules/BrowserWindowTracker.jsm
@@ -207,9 +207,16 @@ this.BrowserWindowTracker = {
       }
     }
     return tabs;
   },
 
   track(window) {
     return WindowHelper.addWindow(window);
   },
+
+  // For tests only, this function will remove this window from the list of
+  // tracked windows. Please don't forget to add it back at the end of your
+  // tests!
+  untrackForTestsOnly(window) {
+    return WindowHelper.removeWindow(window);
+  },
 };
--- a/build/autoconf/toolchain.m4
+++ b/build/autoconf/toolchain.m4
@@ -77,20 +77,18 @@ case "${TOOLCHAIN_PREFIX}" in
     ;;
 esac
 AC_PROG_CC
 AC_PROG_CXX
 
 AC_CHECK_PROGS(RANLIB, "${TOOLCHAIN_PREFIX}ranlib", :)
 AC_CHECK_PROGS(AS, "${TOOLCHAIN_PREFIX}as", :)
 AC_CHECK_PROGS(LIPO, "${TOOLCHAIN_PREFIX}lipo", :)
-AC_CHECK_PROGS(STRIP, "${TOOLCHAIN_PREFIX}strip", :)
 AC_CHECK_PROGS(OTOOL, "${TOOLCHAIN_PREFIX}otool", :)
 AC_CHECK_PROGS(INSTALL_NAME_TOOL, "${TOOLCHAIN_PREFIX}install_name_tool", :)
-AC_CHECK_PROGS(OBJCOPY, "${TOOLCHAIN_PREFIX}objcopy", :)
 PATH=$_SAVE_PATH
 ])
 
 AC_DEFUN([MOZ_CXX11],
 [
 dnl Updates to the test below should be duplicated further below for the
 dnl cross-compiling case.
 AC_LANG_CPLUSPLUS
--- a/build/mach_virtualenv_packages.txt
+++ b/build/mach_virtualenv_packages.txt
@@ -129,9 +129,9 @@ pth:xpcom/geckoprocesstypes_generator
 pth:xpcom/idl-parser
 # glean-sdk may not be installable if a wheel isn't available
 # and it has to be built from source.
 pypi-optional:glean-sdk==43.0.2:telemetry will not be collected
 # Mach gracefully handles the case where `psutil` is unavailable.
 # We aren't (yet) able to pin packages in automation, so we have to
 # support down to the oldest locally-installed version (5.4.2).
 pypi-optional:psutil>=5.4.2,<=5.8.0:telemetry will be missing some data
-pypi-optional:zstandard>=0.11.1,<=0.16.0:zstd archives will not be possible to extract
+pypi-optional:zstandard>=0.11.1,<=0.17.0:zstd archives will not be possible to extract
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -71,21 +71,17 @@ def prepare_configure(mozconfig, old_con
 
         for k, v in old_configure_assignments:
             inject("%s=%s" % (k, quote(v)))
 
 
 @template
 def old_configure_options(*options):
     for opt in options:
-        if "-system-" in opt and opt != "--enable-system-extension-dirs":
-            cb = system_lib_option
-        else:
-            cb = option
-        cb(opt, nargs="*", help="Help missing for old configure options")
+        option(opt, nargs="*", help="Help missing for old configure options")
 
     @dependable
     def all_options():
         return list(options)
 
     return depends(
         host_for_sub_configure, target_for_sub_configure, all_options, *options
     )
--- a/build/zstandard_requirements.in
+++ b/build/zstandard_requirements.in
@@ -1,2 +1,2 @@
-zstandard==0.16.0
+zstandard==0.17.0
 
--- a/build/zstandard_requirements.txt
+++ b/build/zstandard_requirements.txt
@@ -1,52 +1,52 @@
-#
-# This file is autogenerated by pip-compile with python 3.9
-# To update, run:
-#
-#    pip-compile --generate-hashes --output-file=build/zstandard_requirements.txt build/zstandard_requirements.in
-#
-zstandard==0.16.0 \
-    --hash=sha256:066488e721ec882485a500c216302b443f2eaef39356f7c65130e76c671e3ce2 \
-    --hash=sha256:08a728715858f1477239887ba3c692bc462b2c86e7a8e467dc5affa7bba9093f \
-    --hash=sha256:11216b47c62e9fc71a25f4b42f525a81da268071bdb434bc1e642ffc38a24a02 \
-    --hash=sha256:127c4c93f578d9b509732c74ed9b44b23e94041ba11b13827be0a7d2e3869b39 \
-    --hash=sha256:12dddee2574b00c262270cfb46bd0c048e92208b95fdd39ad2a9eac1cef30498 \
-    --hash=sha256:1bdda52224043e13ed20f847e3b308de1c9372d1563824fad776b1cf1f847ef0 \
-    --hash=sha256:2e31680d1bcf85e7a58a45df7365af894402ae77a9868c751dc991dd13099a5f \
-    --hash=sha256:42992e89b250fe6878c175119af529775d4be7967cd9de86990145d615d6a444 \
-    --hash=sha256:453e42af96923582ddbf3acf843f55d2dc534a3f7b345003852dd522aa51eae6 \
-    --hash=sha256:4d8a296dab7f8f5d53acc693a6785751f43ca39b51c8eabc672f978306fb40e6 \
-    --hash=sha256:5251ac352d8350869c404a0ca94457da018b726f692f6456ec82bbf907fbc956 \
-    --hash=sha256:57a6cfc34d906d514358769ed6d510b312be1cf033aafb5db44865a6717579bd \
-    --hash=sha256:6ed51162e270b9b8097dcae6f2c239ada05ec112194633193ec3241498988924 \
-    --hash=sha256:74cbea966462afed5a89eb99e4577538d10d425e05bf6240a75c086d59ccaf89 \
-    --hash=sha256:87bea44ad24c15cd872263c0d5f912186a4be3db361eab3b25f1a61dcb5ca014 \
-    --hash=sha256:8a745862ed525eee4e28bdbd58bf3ea952bf9da3c31bb4e4ce11ef15aea5c625 \
-    --hash=sha256:8b760fc8118b1a0aa1d8f4e2012622e8f5f178d4b8cb94f8c6d2948b6a49a485 \
-    --hash=sha256:8c8c0e813b67de1c9d7f2760768c4ae53f011c75ace18d5cff4fb40d2173763f \
-    --hash=sha256:8d5fe983e23b05f0e924fe8d0dd3935f0c9fd3266e4c6ff8621c12c350da299d \
-    --hash=sha256:8f5785c0b9b71d49d789240ae16a636728596631cf100f32b963a6f9857af5a4 \
-    --hash=sha256:91efd5ea5fb3c347e7ebb6d5622bfa37d72594a2dec37c5dde70b691edb6cc03 \
-    --hash=sha256:92e6c1a656390176d51125847f2f422f9d8ed468c24b63958f6ee50d9aa98c83 \
-    --hash=sha256:9bcbfe1ec89789239f63daeea8778488cb5ba9034a374d7753815935f83dad65 \
-    --hash=sha256:a92aa26789f17ca3b1f45cc7e728597165e2b166b99d1204bb397a672edee761 \
-    --hash=sha256:a9ec6de2c058e611e9dfe88d9809a5676bc1d2a53543c1273a90a60e41b8f43c \
-    --hash=sha256:ac5d97f9dece91a1162f651da79b735c5cde4d5863477785962aad648b592446 \
-    --hash=sha256:ae19628886d994ac1f3d2fc7f9ed5bb551d81000f7b4e0c57a0e88301aea2766 \
-    --hash=sha256:b2ea1937eff0ed5621876dc377933fe76624abfb2ab5b418995f43af6bac50de \
-    --hash=sha256:b46220bef7bf9271a2a05512e86acbabc86cca08bebde8447bdbb4acb3179447 \
-    --hash=sha256:b61586b0ff55c4137e512f1e9df4e4d7a6e1e9df782b4b87652df27737c90cc1 \
-    --hash=sha256:be68fbac1e88f0dbe033a2d2e3aaaf9c8307730b905f3cd3c698ca4b904f0702 \
-    --hash=sha256:c75557d53bb2d064521ff20cce9b8a51ee8301e031b1d6bcedb6458dda3bc85d \
-    --hash=sha256:c7e6b6ad58ae6f77872da9376ef0ecbf8c1ae7a0c8fc29a2473abc90f79a9a1b \
-    --hash=sha256:c8828f4e78774a6c0b8d21e59677f8f48d2e17fe2ef72793c94c10abc032c41c \
-    --hash=sha256:cae9bfcb9148152f8bfb9163b4b779326ca39fe9889e45e0572c56d25d5021be \
-    --hash=sha256:ce61492764d0442ca1e81d38d7bf7847d7df5003bce28089bab64c0519749351 \
-    --hash=sha256:d40447f4a44b442fa6715779ff49a1e319729d829198279927d18bca0d7ac32d \
-    --hash=sha256:d9946cfe54bf3365f14a5aa233eb2425de3b77eac6a4c7d03dda7dbb6acd3267 \
-    --hash=sha256:dd5a2287893e52204e4ce9d0e1bcea6240661dbb412efb53d5446b881d3c10a2 \
-    --hash=sha256:e9456492eb13249841e53221e742bef93f4868122bfc26bafa12a07677619732 \
-    --hash=sha256:eaae2d3e8fdf8bfe269628385087e4b648beef85bb0c187644e7df4fb0fe9046 \
-    --hash=sha256:eba125d3899f2003debf97019cd6f46f841a405df067da23d11443ad17952a40 \
-    --hash=sha256:ef759c1dfe78aa5a01747d3465d2585de14e08fc2b0195ce3f31f45477fc5a72 \
-    --hash=sha256:ffe1d24c5e11e98e4c5f96f846cdd19619d8c7e5e8e5082bed62d39baa30cecb
-    # via -r build/zstandard_requirements.in
+#
+# This file is autogenerated by pip-compile with python 3.9
+# To update, run:
+#
+#    pip-compile --generate-hashes --output-file=build/zstandard_requirements.txt build/zstandard_requirements.in
+#
+zstandard==0.17.0 \
+    --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \
+    --hash=sha256:2a2ac752162ba5cbc869c60c4a4e54e890b2ee2ffb57d3ff159feab1ae4518db \
+    --hash=sha256:37e50501baaa935f13a1820ab2114f74313b5cb4cfff8146acb8c5b18cdced2a \
+    --hash=sha256:3cf96ace804945e53bc3e5294097e5fa32a2d43bc52416c632b414b870ee0a21 \
+    --hash=sha256:42f3c02c7021073cafbc6cd152b288c56a25e585518861589bb08b063b6d2ad2 \
+    --hash=sha256:4768449d8d1b0785309ace288e017cc5fa42e11a52bf08c90d9c3eb3a7a73cc6 \
+    --hash=sha256:477f172807a9fa83467b30d7c58876af1410d20177c554c27525211edf535bae \
+    --hash=sha256:49cd09ccbd1e3c0e2690dd62ebf95064d84aa42b9db381867e0b138631f969f2 \
+    --hash=sha256:59eadb9f347d40e8f7ef77caffd0c04a31e82c1df82fe2d2a688032429d750ac \
+    --hash=sha256:60943f71e3117583655a1eb76188a7cc78a25267ef09cc74be4d25a0b0c8b947 \
+    --hash=sha256:787efc741e61e00ffe5e65dac99b0dc5c88b9421012a207a91b869a8b1164921 \
+    --hash=sha256:7a3a1aa9528087f6f4c47f4ece2d5e6a160527821263fb8174ff36429233e093 \
+    --hash=sha256:7d2e7abac41d2b4b18f03575aca860d2cb647c343e13c23d6c769106a3db2f6f \
+    --hash=sha256:802109f67328c5b822d4fdac28e1cf65a24de2e2e99d76cdbeee9121cedb1b6c \
+    --hash=sha256:8aedd38d357f6d5e2facd88ce62b4976afdc29db57216a23f14a0cd0ca05a8a3 \
+    --hash=sha256:8fd386d0ec1f9343f1776391d9e60d4eedced0a0b0e625bb89b91f6d05f70e83 \
+    --hash=sha256:90a9ba3a9c16b86afcb785b3c9418af39ccfb238fd5f6e429166e3ca8542b01f \
+    --hash=sha256:91a228a077fc7cd8486c273788d4a006a37d060cb4293f471eb0325c3113af68 \
+    --hash=sha256:9cf18c156b3a108197a8bf90b37d03c31c8ef35a7c18807b321d96b74e12c301 \
+    --hash=sha256:9ec62a4c2dbb0a86ee5138c16ef133e59a23ac108f8d7ac97aeb61d410ce6857 \
+    --hash=sha256:a1991cdf2e81e643b53fb8d272931d2bdf5f4e70d56a457e1ef95bde147ae627 \
+    --hash=sha256:a628f20d019feb0f3a171c7a55cc4f75681f3b8c1bd7a5009165a487314887cd \
+    --hash=sha256:a71809ec062c5b7acf286ba6d4484e6fe8130fc2b93c25e596bb34e7810c79b2 \
+    --hash=sha256:a7756a9446f83c81101f6c0a48c3bfd8d387a249933c57b0d095ca8b20541337 \
+    --hash=sha256:a827b9c464ee966524f8e82ec1aabb4a77ff9514cae041667fa81ae2ec8bd3e9 \
+    --hash=sha256:b1ad6d2952b41d9a0ea702a474cc08c05210c6289e29dd496935c9ca3c7fb45c \
+    --hash=sha256:b4e671c4c0804cdf752be26f260058bb858fbdaaef1340af170635913ecca01e \
+    --hash=sha256:bd842ae3dbb7cba88beb022161c819fa80ca7d0c5a4ddd209e7daae85d904e49 \
+    --hash=sha256:bdf691a205bc492956e6daef7a06fb38f8cbe8b2c1cb0386f35f4412c360c9e9 \
+    --hash=sha256:c19d1e06569c277dcc872d80cbadf14a29e8199e013ff2a176d169f461439a40 \
+    --hash=sha256:c81fd9386449df0ebf1ab3e01187bb30d61122c74df53ba4880a2454d866e55d \
+    --hash=sha256:d0e9fec68e304fb35c559c44530213adbc7d5918bdab906a45a0f40cd56c4de2 \
+    --hash=sha256:d1405caa964ba11b2396bd9fd19940440217345752e192c936d084ba5fe67dcb \
+    --hash=sha256:d5373a56b90052f171c8634fedc53a6ac371e6c742606e9825772a394bdbd4b0 \
+    --hash=sha256:d78aac2ffc4e88ab1cbcad844669924c24e24c7c255de9628a18f14d832007c5 \
+    --hash=sha256:d916018289d2f9a882e90d2e3bd41652861ce11b5ecd8515fa07ad31d97d56e5 \
+    --hash=sha256:db993a56e21d903893933887984ca9b0d274f2b1db7b3cf21ba129783953864f \
+    --hash=sha256:de1aa618306a741e0497878b7f845fd6c397e52dd096fb76ed791e7268887176 \
+    --hash=sha256:e37c4e21f696d6bcdbbc7caf98dffa505d04c0053909b9db0a6e8ca3b935eb07 \
+    --hash=sha256:ef62eb3bcfd6d786f439828bb544ebd3936432db669403e0b8f48e424f1d55f1 \
+    --hash=sha256:f0c87f097d6867833a839b086eb8d03676bb87c2efa067a131099f04aa790683 \
+    --hash=sha256:f2e3ea5e4d5ecf3faefd4a5294acb6af1f0578b0cdd75d6b4529c45deaa54d6f \
+    --hash=sha256:f502fe79757434292174b04db114f9e25c767b2d5ca9e759d118b22a66f445f8 \
+    --hash=sha256:fa9194cb91441df7242aa3ddc4cb184be38876cb10dd973674887f334bafbfb6
+    # via -r build/zstandard_requirements.in
--- a/devtools/client/aboutdebugging/src/modules/client-wrapper.js
+++ b/devtools/client/aboutdebugging/src/modules/client-wrapper.js
@@ -175,17 +175,18 @@ class ClientWrapper {
   }
 
   /**
    * @param {Window} win - The window of the dialog window.
    * @param {Function} openAboutProfiling
    */
   async loadPerformanceProfiler(win, openAboutProfiling) {
     const perfFront = await this.getFront("perf");
-    await win.gInit(perfFront, "devtools-remote", openAboutProfiling);
+    const { traits } = this.client;
+    await win.gInit(perfFront, traits, "devtools-remote", openAboutProfiling);
   }
 
   /**
    * @param {Window} win - The window of the dialog window.
    * @param {Function} openRemoteDevTools
    */
   async loadAboutProfiling(win, openRemoteDevTools) {
     const perfFront = await this.getFront("perf");
--- a/devtools/client/fronts/style-rule.js
+++ b/devtools/client/fronts/style-rule.js
@@ -149,16 +149,20 @@ class StyleRuleFront extends FrontClassW
     return {
       source: this.parentStyleSheet,
       href: this.href,
       line: this.line,
       column: this.column,
     };
   }
 
+  get layerName() {
+    return this._form.layerName;
+  }
+
   _clearOriginalLocation() {
     this._originalLocation = null;
   }
 
   getOriginalLocation() {
     if (this._originalLocation) {
       return Promise.resolve(this._originalLocation);
     }
--- a/devtools/client/inspector/compatibility/components/Footer.js
+++ b/devtools/client/inspector/compatibility/components/Footer.js
@@ -14,27 +14,16 @@ const PropTypes = require("devtools/clie
 
 const FluentReact = require("devtools/client/shared/vendor/fluent-react");
 const Localized = createFactory(FluentReact.Localized);
 
 const {
   updateSettingsVisibility,
 } = require("devtools/client/inspector/compatibility/actions/compatibility");
 
-loader.lazyRequireGetter(
-  this,
-  "openDocLink",
-  "devtools/client/shared/link",
-  true
-);
-
-const FEEDBACK_LINK =
-  "https://docs.google.com/forms/d/e/1FAIpQLSeevOHveQ1tDuKYY5Fxyb3vvbKKumdLWUT5-RuwJWoAAOST5g/viewform";
-
-const REPORT_ICON = "chrome://devtools/skin/images/report.svg";
 const SETTINGS_ICON = "chrome://devtools/skin/images/settings.svg";
 
 class Footer extends PureComponent {
   static get propTypes() {
     return {
       updateSettingsVisibility: PropTypes.func.isRequired,
     };
   }
@@ -75,22 +64,16 @@ class Footer extends PureComponent {
       {
         className: "compatibility-footer",
       },
       this._renderButton(
         SETTINGS_ICON,
         "compatibility-settings-button-label",
         "compatibility-settings-button-title",
         this.props.updateSettingsVisibility
-      ),
-      this._renderButton(
-        REPORT_ICON,
-        "compatibility-feedback-button-label",
-        "compatibility-feedback-button-title",
-        () => openDocLink(FEEDBACK_LINK)
       )
     );
   }
 }
 
 const mapDispatchToProps = dispatch => {
   return {
     updateSettingsVisibility: () => dispatch(updateSettingsVisibility(true)),
--- a/devtools/client/inspector/compatibility/test/node/components/__snapshots__/components-compatibility-Footer.test.js.snap
+++ b/devtools/client/inspector/compatibility/test/node/components/__snapshots__/components-compatibility-Footer.test.js.snap
@@ -27,38 +27,10 @@ exports[`Footer component renders 1`] = 
         <label
           className="compatibility-footer__label"
         >
           compatibility-settings-button-label
         </label>
       </Localized>
     </button>
   </Localized>
-  <Localized
-    attrs={
-      Object {
-        "title": true,
-      }
-    }
-    id="compatibility-feedback-button-title"
-  >
-    <button
-      className="compatibility-footer__button"
-      onClick={[Function]}
-      title="compatibility-feedback-button-title"
-    >
-      <img
-        className="compatibility-footer__icon"
-        src="chrome://devtools/skin/images/report.svg"
-      />
-      <Localized
-        id="compatibility-feedback-button-label"
-      >
-        <label
-          className="compatibility-footer__label"
-        >
-          compatibility-feedback-button-label
-        </label>
-      </Localized>
-    </button>
-  </Localized>
 </footer>
 `;
--- a/devtools/client/inspector/rules/test/browser_part2.ini
+++ b/devtools/client/inspector/rules/test/browser_part2.ini
@@ -34,16 +34,18 @@ support-files =
   doc_urls_clickable.css
   doc_urls_clickable.html
   doc_variables_1.html
   doc_variables_2.html
   doc_variables_3.html
   doc_visited.html
   doc_visited_in_media_query.html
   doc_visited_with_style_attribute.html
+  doc_imported_anonymous_layer.css
+  doc_imported_named_layer.css
   head.js
   sjs_imported_stylesheet_edit.sjs
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/shared-head.js
   !/devtools/client/shared/test/telemetry-test-helpers.js
   !/devtools/client/shared/test/highlighter-test-actor.js
 
@@ -101,16 +103,17 @@ skip-if = os == 'linux' # focusEditableF
 [browser_rules_inline-style-order.js]
 [browser_rules_invalid.js]
 [browser_rules_invalid-source-map.js]
 [browser_rules_keybindings.js]
 [browser_rules_keyframes-rule-shadowdom.js]
 [browser_rules_keyframes-rule_01.js]
 [browser_rules_keyframes-rule_02.js]
 [browser_rules_keyframeLineNumbers.js]
+[browser_rules_layer.js]
 [browser_rules_lineNumbers.js]
 [browser_rules_livepreview.js]
 [browser_rules_mark_overridden_01.js]
 [browser_rules_mark_overridden_02.js]
 [browser_rules_mark_overridden_03.js]
 [browser_rules_mark_overridden_04.js]
 [browser_rules_mark_overridden_05.js]
 [browser_rules_mark_overridden_06.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/rules/test/browser_rules_layer.js
@@ -0,0 +1,81 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test that the rule-view content is correct when the page defines layers.
+
+const TEST_URI = `
+  <style type="text/css">
+    @import url(${URL_ROOT_COM_SSL}doc_imported_anonymous_layer.css) layer;
+    @import url(${URL_ROOT_COM_SSL}doc_imported_named_layer.css) layer(importedLayer);
+
+    @layer myLayer {
+      h1 {
+        background-color: tomato;
+        color: lightgreen;
+      }
+    }
+
+    @layer {
+      h1 {
+        color: green;
+        font-variant: small-caps
+      }
+    }
+  </style>
+  <h1>Hello @layer!</h1>
+`;
+
+add_task(async function() {
+  await addTab(
+    "https://example.com/document-builder.sjs?html=" +
+      encodeURIComponent(TEST_URI)
+  );
+  const { inspector, view } = await openRuleView();
+
+  await selectNode("h1", inspector);
+
+  is(
+    getRuleViewParentDataTextByIndex(view, 1),
+    "@layer",
+    "text at index 1 contains anonymous layer."
+  );
+
+  is(
+    getRuleViewParentDataTextByIndex(view, 2),
+    "@layer myLayer",
+    "text at index 2 contains named layer."
+  );
+
+  is(
+    getRuleViewParentDataTextByIndex(view, 3),
+    "@layer importedLayer @media screen",
+    "text at index 3 contains imported stylesheet named layer."
+  );
+
+  // XXX: This is highlighting an issue with nested layers/media queries, where only the
+  // last item is displayed. This should be fixed in Bug 1751417, and this test case should
+  // then have `@layer importedLayer @media screen @layer in-imported-stylesheet`
+  is(
+    getRuleViewParentDataTextByIndex(view, 4),
+    "@layer in-imported-stylesheet",
+    "text at index 4 only contains the last layer it's in."
+  );
+
+  is(
+    getRuleViewParentDataTextByIndex(view, 5),
+    "@layer",
+    "text at index 5 contains imported stylesheet anonymous layer."
+  );
+});
+
+function getRuleViewParentDataElementByIndex(view, ruleIndex) {
+  return view.styleDocument.querySelector(
+    `.ruleview-rule:nth-of-type(${ruleIndex + 1}) .ruleview-rule-parent-data`
+  );
+}
+
+function getRuleViewParentDataTextByIndex(view, ruleIndex) {
+  return getRuleViewParentDataElementByIndex(view, ruleIndex)?.textContent;
+}
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/rules/test/doc_imported_anonymous_layer.css
@@ -0,0 +1,4 @@
+h1 {
+    color:cyan;
+    outline: 10px solid cyan;
+}
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/rules/test/doc_imported_named_layer.css
@@ -0,0 +1,12 @@
+@media screen {
+    h1 {
+        color:tomato;
+        border: 10px dotted currentColor;
+    }
+
+    @layer in-imported-stylesheet {
+        h1 {
+            color: purple;
+        }
+    }
+}
--- a/devtools/client/inspector/rules/views/rule-editor.js
+++ b/devtools/client/inspector/rules/views/rule-editor.js
@@ -130,24 +130,49 @@ RuleEditor.prototype = {
     this.source.addEventListener("click", this._onSourceClick);
 
     const sourceLabel = this.doc.createElement("span");
     sourceLabel.classList.add("ruleview-rule-source-label");
     this.source.appendChild(sourceLabel);
 
     this.updateSourceLink();
 
-    if (this.rule.mediaText) {
-      const text = `@media ${this.rule.mediaText}`;
+    const hasMediaText = this.rule.mediaText;
+    const hasLayer = typeof this.rule.domRule.layerName !== "undefined";
+    if (hasMediaText || hasLayer) {
+      const parts = [];
+
+      if (hasLayer) {
+        // The layer can be anonymous, in such case its name is an empty string
+        parts.push(
+          `@layer${
+            this.rule.domRule.layerName ? " " + this.rule.domRule.layerName : ""
+          }`
+        );
+      }
+      if (hasMediaText) {
+        parts.push(`@media ${this.rule.mediaText}`);
+      }
+
+      // For now, we can only have at most a layer and a media query (if the rule stylesheet
+      // was imported with a layer name and the parent rule is a media query) so we can get
+      // await with displaying them one after the other.
+      // This might change with Bug 1751417 where we'll show the whole tree of media/layer
+      const text = parts.join(" ");
+
+      // We force the string to be LTR in CSS, but as @ is listed as having neutral
+      // directionality and starting a string with this char would default to RTL for that
+      // character (when in RTL locale), and then the next char (`m` of `media`, or `l` of `layer`)
+      // would start a new LTR visual run, since it is strongly LTR (through `direction` CSS property).
+      // To have the `@` properly displayed, we force LTR with \u202A
+      const title = `${text.replaceAll("@", "\u202A@")}`;
+
       createChild(this.element, "span", {
         class: "ruleview-rule-parent-data theme-link",
-        // We force the string to be LTR in CSS, but for some reason, the `@` char is seen
-        // as not part of the string in the tooltip, and is displayed "at the end" of the
-        // string in RTL locales. To workaround this, we force LTR with \u202D
-        title: `\u202A${text}`,
+        title,
         textContent: text,
       });
     }
 
     const code = createChild(this.element, "div", {
       class: "ruleview-code",
     });
 
--- a/devtools/client/locales/en-US/compatibility.ftl
+++ b/devtools/client/locales/en-US/compatibility.ftl
@@ -17,19 +17,16 @@ compatibility-issue-deprecated-prefixnee
 compatibility-issue-experimental-prefixneeded = (experimental, prefix needed)
 compatibility-issue-deprecated-experimental-prefixneeded = (deprecated, experimental, prefix needed)
 
 ## Messages used as labels and titles for buttons in the footer
 
 compatibility-settings-button-label = Settings
 compatibility-settings-button-title =
     .title = Settings
-compatibility-feedback-button-label = Feedback
-compatibility-feedback-button-title =
-    .title = Feedback
 
 ## Messages used as headers in settings pane
 
 compatibility-settings-header = Settings
 compatibility-target-browsers-header = Target Browsers
 
 ##
 
--- a/devtools/client/performance-new/@types/gecko.d.ts
+++ b/devtools/client/performance-new/@types/gecko.d.ts
@@ -68,17 +68,29 @@ declare namespace MockedExports {
   }
 
   interface BrowserTab {
     linkedBrowser: Browser;
   }
 
   interface ChromeWindow {
     gBrowser: Browser;
-    focus: () => void;
+    focus(): void;
+    openWebLinkIn(
+      url: string,
+      where: "current" | "tab" | "window",
+      options: Partial<{
+        // Not all possible options are present, please add more if/when needed.
+        userContextId: number;
+        forceNonPrivate: boolean;
+        resolveOnContentBrowserCreated: (
+          contentBrowser: ChromeBrowser
+        ) => unknown;
+      }>
+    ): void;
   }
 
   interface ChromeBrowser {
     browsingContext?: BrowsingContext;
   }
 
   interface BrowsingContext {
     /**
@@ -133,17 +145,16 @@ declare namespace MockedExports {
     debugPath: string;
     breakpadId: string;
     arch: string;
   }
 
   type Services = {
     prefs: nsIPrefBranch;
     profiler: {
-      CanProfile: () => boolean;
       StartProfiler: (
         entryCount: number,
         interval: number,
         features: string[],
         filters?: string[],
         activeTabId?: number,
         duration?: number
       ) => void;
@@ -165,16 +176,17 @@ declare namespace MockedExports {
     };
     platform: string;
     obs: {
       addObserver: (observer: object, type: string) => void;
       removeObserver: (observer: object, type: string) => void;
     };
     wm: {
       getMostRecentWindow: (name: string) => ChromeWindow;
+      getMostRecentNonPBWindow: (name: string) => ChromeWindow;
     };
     focus: {
       activeWindow: ChromeWindow;
     };
     io: {
       newURI(url: string): nsIURI;
     };
     scriptSecurityManager: any;
--- a/devtools/client/performance-new/@types/perf.d.ts
+++ b/devtools/client/performance-new/@types/perf.d.ts
@@ -9,17 +9,22 @@
 import {
   Reducer as ReduxReducer,
   Store as ReduxStore,
 } from "devtools/client/shared/vendor/redux";
 
 export interface PanelWindow {
   gToolbox?: any;
   gStore?: Store;
-  gInit(perfFront: PerfFront, pageContext: PageContext): Promise<void>;
+  gInit(
+    perfFront: PerfFront,
+    traits: RootTraits,
+    pageContext: PageContext,
+    openAboutProfiling: () => void
+  ): Promise<void>;
   gDestroy(): void;
   gIsPanelDestroyed?: boolean;
 }
 
 /**
  * TS-TODO - Stub.
  */
 export interface Target {
@@ -34,16 +39,23 @@ export interface Toolbox {
   target: Target;
 }
 
 /**
  * TS-TODO - Stub.
  */
 export interface Commands {
   client: any;
+  targetCommand: {
+    targetFront: {
+      getTrait: (
+        traitName: "noDisablingOnPrivateBrowsing"
+      ) => boolean | undefined;
+    };
+  };
 }
 
 /**
  * TS-TODO - Stub.
  */
 export interface PerfFront {
   startProfiler: (options: RecordingSettings) => Promise<boolean>;
   getProfileAndStopProfiler: () => Promise<any>;
@@ -69,16 +81,26 @@ export interface PreferenceFront {
   getStringPref: (prefName: string) => Promise<string>;
   setStringPref: (prefName: string, value: string) => Promise<void>;
   getCharPref: (prefName: string) => Promise<string>;
   setCharPref: (prefName: string, value: string) => Promise<void>;
   getIntPref: (prefName: string) => Promise<number>;
   setIntPref: (prefName: string, value: number) => Promise<void>;
 }
 
+export interface RootTraits {
+  // In Firefox >= 98, this will be true, and will be missing for older
+  // versions. The functionality controlled by this property can be removed once
+  // Firefox 98 hits release.
+  noDisablingOnPrivateBrowsing?: boolean;
+
+  // There are other properties too, but we don't use them here as they're not
+  // related to the performance panel.
+}
+
 export type RecordingState =
   // The initial state before we've queried the PerfActor
   | "not-yet-known"
   // The profiler is available, we haven't started recording yet.
   | "available-to-record"
   // An async request has been sent to start the profiler.
   | "request-to-start-recording"
   // An async request has been sent to get the profile and stop the profiler.
--- a/devtools/client/performance-new/browser.js
+++ b/devtools/client/performance-new/browser.js
@@ -53,28 +53,20 @@ const UI_BASE_URL_PATH_DEFAULT = "/from-
 
 /**
  * Once a profile is received from the actor, it needs to be opened up in
  * profiler.firefox.com to be analyzed. This function opens up profiler.firefox.com
  * into a new browser tab.
  * @param {ProfilerViewMode | undefined} profilerViewMode - View mode for the Firefox Profiler
  *   front-end timeline. While opening the url, we should append a query string
  *   if a view other than "full" needs to be displayed.
- * @returns {MockedExports.Browser} The browser for the opened tab.
+ * @returns {Promise<MockedExports.Browser>} The browser for the opened tab.
  */
-function openProfilerTab(profilerViewMode) {
+async function openProfilerTab(profilerViewMode) {
   const Services = lazy.Services();
-  // Find the most recently used window, as the DevTools client could be in a variety
-  // of hosts.
-  const win = Services.wm.getMostRecentWindow("navigator:browser");
-  if (!win) {
-    throw new Error("No browser window");
-  }
-  const browser = win.gBrowser;
-  win.focus();
 
   // Allow the user to point to something other than profiler.firefox.com.
   const baseUrl = Services.prefs.getStringPref(
     UI_BASE_URL_PREF,
     UI_BASE_URL_DEFAULT
   );
   // Allow tests to override the path.
   const baseUrlPath = Services.prefs.getStringPref(
@@ -87,26 +79,38 @@ function openProfilerTab(profilerViewMod
   // timeline view in that case.
   let viewModeQueryString = "";
   if (profilerViewMode === "active-tab") {
     viewModeQueryString = "?view=active-tab&implementation=js";
   } else if (profilerViewMode !== undefined && profilerViewMode !== "full") {
     viewModeQueryString = `?view=${profilerViewMode}`;
   }
 
-  const tab = browser.addWebTab(
-    `${baseUrl}${baseUrlPath}${viewModeQueryString}`,
-    {
-      triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({
-        userContextId: browser.contentPrincipal.userContextId,
-      }),
-    }
+  const urlToLoad = `${baseUrl}${baseUrlPath}${viewModeQueryString}`;
+
+  // Find the most recently used window, as the DevTools client could be in a variety
+  // of hosts.
+  const win = Services.wm.getMostRecentWindow("navigator:browser");
+  if (!win) {
+    throw new Error("No browser window");
+  }
+  win.focus();
+
+  // The profiler frontend currently doesn't support being loaded in a private
+  // window, because it does some storage writes in IndexedDB. That's why we
+  // force the opening of the tab in a non-private window. This might open a new
+  // non-private window if the only currently opened window is a private window.
+  const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
+    win.openWebLinkIn(urlToLoad, "tab", {
+      forceNonPrivate: true,
+      resolveOnContentBrowserCreated,
+      userContextId: win.gBrowser.contentPrincipal.userContextId,
+    })
   );
-  browser.selectedTab = tab;
-  return tab.linkedBrowser;
+  return contentBrowser;
 }
 
 /**
  * Flatten all the sharedLibraries of the different processes in the profile
  * into one list of libraries.
  * @param {MinimallyTypedGeckoProfile} profile - The profile JSON object
  * @returns {Library[]}
  */
--- a/devtools/client/performance-new/components/ProfilerEventHandling.js
+++ b/devtools/client/performance-new/components/ProfilerEventHandling.js
@@ -1,14 +1,22 @@
 /* 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/. */
 // @ts-check
 
 /**
+ * @typedef {import("../@types/perf").PerfFront} PerfFront
+ * @typedef {import("../@types/perf").RecordingState} RecordingState
+ * @typedef {import("../@types/perf").State} StoreState
+ * @typedef {import("../@types/perf").RootTraits} RootTraits
+ * @typedef {import("../@types/perf").PanelWindow} PanelWindow
+ */
+
+/**
  * @template P
  * @typedef {import("react-redux").ResolveThunks<P>} ResolveThunks<P>
  */
 
 /**
  * @typedef {Object} StateProps
  * @property {RecordingState} recordingState
  * @property {boolean?} isSupportedPlatform
@@ -21,28 +29,22 @@
  * @property {typeof actions.reportProfilerStopped} reportProfilerStopped
  * @property {typeof actions.reportPrivateBrowsingStarted} reportPrivateBrowsingStarted
  * @property {typeof actions.reportPrivateBrowsingStopped} reportPrivateBrowsingStopped
  */
 
 /**
  * @typedef {Object} OwnProps
  * @property {PerfFront} perfFront
+ * @property {RootTraits} traits
  */
 
 /**
  * @typedef {ResolveThunks<ThunkDispatchProps>} DispatchProps
  * @typedef {StateProps & DispatchProps & OwnProps} Props
- * @typedef {import("../@types/perf").PerfFront} PerfFront
- * @typedef {import("../@types/perf").RecordingState} RecordingState
- * @typedef {import("../@types/perf").State} StoreState
- */
-
-/**
- * @typedef {import("../@types/perf").PanelWindow} PanelWindow
  */
 
 "use strict";
 
 const { PureComponent } = require("devtools/client/shared/vendor/react");
 const { connect } = require("devtools/client/shared/vendor/react-redux");
 const actions = require("devtools/client/performance-new/store/actions");
 const selectors = require("devtools/client/performance-new/store/selectors");
@@ -59,41 +61,50 @@ class ProfilerEventHandling extends Pure
     const {
       perfFront,
       isSupportedPlatform,
       reportProfilerReady,
       reportProfilerStarted,
       reportProfilerStopped,
       reportPrivateBrowsingStarted,
       reportPrivateBrowsingStopped,
+      traits: { noDisablingOnPrivateBrowsing },
     } = this.props;
 
     if (!isSupportedPlatform) {
       return;
     }
 
     // Ask for the initial state of the profiler.
     Promise.all([
       perfFront.isActive(),
-      perfFront.isLockedForPrivateBrowsing(),
+      noDisablingOnPrivateBrowsing
+        ? false
+        : perfFront.isLockedForPrivateBrowsing(),
     ]).then(([isActive, isLockedForPrivateBrowsing]) => {
       reportProfilerReady(isActive, isLockedForPrivateBrowsing);
     });
 
     // Handle when the profiler changes state. It might be us, it might be someone else.
     this.props.perfFront.on("profiler-started", reportProfilerStarted);
     this.props.perfFront.on("profiler-stopped", reportProfilerStopped);
-    this.props.perfFront.on(
-      "profile-locked-by-private-browsing",
-      reportPrivateBrowsingStarted
-    );
-    this.props.perfFront.on(
-      "profile-unlocked-from-private-browsing",
-      reportPrivateBrowsingStopped
-    );
+
+    if (!noDisablingOnPrivateBrowsing) {
+      // @backward-compat { version 98 }
+      // These events are not used anymore in Firefox 98 and above. They can be
+      // removed along with the rest of the functionality once 98 hits release.
+      this.props.perfFront.on(
+        "profile-locked-by-private-browsing",
+        reportPrivateBrowsingStarted
+      );
+      this.props.perfFront.on(
+        "profile-unlocked-from-private-browsing",
+        reportPrivateBrowsingStopped
+      );
+    }
   }
 
   componentWillUnmount() {
     switch (this.props.recordingState) {
       case "not-yet-known":
       case "available-to-record":
       case "request-to-stop-profiler":
       case "request-to-get-profile-and-stop-profiler":
--- a/devtools/client/performance-new/initializer.js
+++ b/devtools/client/performance-new/initializer.js
@@ -9,16 +9,17 @@
  * @typedef {import("./@types/perf").PreferenceFront} PreferenceFront
  * @typedef {import("./@types/perf").RecordingSettings} RecordingSettings
  * @typedef {import("./@types/perf").PageContext} PageContext
  * @typedef {import("./@types/perf").PanelWindow} PanelWindow
  * @typedef {import("./@types/perf").Store} Store
  * @typedef {import("./@types/perf").MinimallyTypedGeckoProfile} MinimallyTypedGeckoProfile
  * @typedef {import("./@types/perf").ProfileCaptureResult} ProfileCaptureResult
  * @typedef {import("./@types/perf").ProfilerViewMode} ProfilerViewMode
+ * @typedef {import("./@types/perf").RootTraits} RootTraits
  */
 "use strict";
 
 {
   // Create the browser loader, but take care not to conflict with
   // TypeScript. See devtools/client/performance-new/typescript.md and
   // the section on "Do not overload require" for more information.
 
@@ -84,31 +85,27 @@ const {
  * the DevTools specific environment, and then passing those requirements into
  * the UI.
  */
 
 /**
  * Initialize the panel by creating a redux store, and render the root component.
  *
  * @param {PerfFront} perfFront - The Perf actor's front. Used to start and stop recordings.
+ * @param {RootTraits} traits - The traits coming from the root actor. This
+ *                              makes it possible to change some code path
+ *                              depending on the server version.
  * @param {PageContext} pageContext - The context that the UI is being loaded in under.
- * @param {(() => void)?} openAboutProfiling - Optional call to open about:profiling
+ * @param {(() => void)} openAboutProfiling - Optional call to open about:profiling
  */
-async function gInit(perfFront, pageContext, openAboutProfiling) {
+async function gInit(perfFront, traits, pageContext, openAboutProfiling) {
   const store = createStore(reducers);
   const isSupportedPlatform = await perfFront.isSupportedPlatform();
   const supportedFeatures = await perfFront.getSupportedFeatures();
 
-  if (!openAboutProfiling) {
-    openAboutProfiling = () => {
-      const { openTrustedLink } = require("devtools/client/shared/link");
-      openTrustedLink("about:profiling", {});
-    };
-  }
-
   {
     // Expose the store as a global, for testing.
     const anyWindow = /** @type {any} */ (window);
     const panelWindow = /** @type {PanelWindow} */ (anyWindow);
     // The store variable is a `ReduxStore`, not our `Store` type, as defined
     // in perf.d.ts. Coerce it into the `Store` type.
     const anyStore = /** @type {any} */ (store);
     panelWindow.gStore = anyStore;
@@ -133,26 +130,26 @@ async function gInit(perfFront, pageCont
       supportedFeatures,
       pageContext,
     })
   );
 
   /**
    * @param {MinimallyTypedGeckoProfile} profile
    */
-  const onProfileReceived = profile => {
+  const onProfileReceived = async profile => {
     const objdirs = selectors.getObjdirs(store.getState());
     const profilerViewMode = getProfilerViewModeForCurrentPreset(pageContext);
     const sharedLibraries = sharedLibrariesFromProfile(profile);
     const symbolicationService = createLocalSymbolicationService(
       sharedLibraries,
       objdirs,
       perfFront
     );
-    const browser = openProfilerTab(profilerViewMode);
+    const browser = await openProfilerTab(profilerViewMode);
 
     /**
      * @type {ProfileCaptureResult}
      */
     const profileCaptureResult = { type: "SUCCESS", profile };
 
     registerProfileCaptureForBrowser(
       browser,
@@ -166,17 +163,17 @@ async function gInit(perfFront, pageCont
   ReactDOM.render(
     Provider(
       { store },
       LocalizationProvider(
         { bundles: l10n.getBundles() },
         React.createElement(
           React.Fragment,
           null,
-          ProfilerEventHandling({ perfFront }),
+          ProfilerEventHandling({ perfFront, traits }),
           ProfilerPreferenceObserver(),
           DevToolsPanel({
             perfFront,
             onProfileReceived,
             onEditSettingsLinkClicked,
           })
         )
       )
--- a/devtools/client/performance-new/panel.js
+++ b/devtools/client/performance-new/panel.js
@@ -57,21 +57,36 @@ class PerformancePanel {
    * This function is the actual implementation of the open() method.
    * @returns Promise<PerformancePanel>
    */
   async _doOpen() {
     this.panelWin.gToolbox = this.toolbox;
     this.panelWin.gIsPanelDestroyed = false;
 
     const perfFront = await this.commands.client.mainRoot.getFront("perf");
+    const traits = {
+      noDisablingOnPrivateBrowsing: this.commands.targetCommand.targetFront.getTrait(
+        "noDisablingOnPrivateBrowsing"
+      ),
+    };
 
-    await this.panelWin.gInit(perfFront, "devtools");
+    await this.panelWin.gInit(
+      perfFront,
+      traits,
+      "devtools",
+      this._openAboutProfiling
+    );
     return this;
   }
 
+  _openAboutProfiling() {
+    const { openTrustedLink } = require("devtools/client/shared/link");
+    openTrustedLink("about:profiling", {});
+  }
+
   // DevToolPanel API:
 
   /**
    * @returns {Target} target
    */
   get target() {
     return this.toolbox.target;
   }
--- a/devtools/client/performance-new/popup/background.jsm.js
+++ b/devtools/client/performance-new/popup/background.jsm.js
@@ -331,17 +331,17 @@ async function captureProfile(pageContex
 
   const { createLocalSymbolicationService } = lazy.PerfSymbolication();
   const symbolicationService = createLocalSymbolicationService(
     sharedLibraries,
     objdirs
   );
 
   const { openProfilerTab } = lazy.BrowserModule();
-  const browser = openProfilerTab(profilerViewMode);
+  const browser = await openProfilerTab(profilerViewMode);
   registerProfileCaptureForBrowser(
     browser,
     profileCaptureResult,
     symbolicationService
   );
 
   Services.profiler.StopProfiler();
 }
--- a/devtools/client/performance-new/popup/panel.jsm.js
+++ b/devtools/client/performance-new/popup/panel.jsm.js
@@ -65,17 +65,16 @@ function selectElementsInPanelview(panel
   const chromeWindow = chromeWindowAny;
 
   return {
     document,
     panelview,
     window: chromeWindow,
     inactive: getElementById("PanelUI-profiler-inactive"),
     active: getElementById("PanelUI-profiler-active"),
-    locked: getElementById("PanelUI-profiler-locked"),
     presetDescription: getElementById("PanelUI-profiler-content-description"),
     presetsEditSettings: getElementById(
       "PanelUI-profiler-content-edit-settings"
     ),
     presetsMenuList: /** @type {MenuListElement} */ (getElementById(
       "PanelUI-profiler-presets"
     )),
     header: getElementById("PanelUI-profiler-header"),
@@ -143,55 +142,27 @@ function createViewControllers(state, el
       }
       const { PanelMultiView } = lazy.PanelMultiView();
       // Update the description height sizing.
       PanelMultiView.forNode(elements.panelview).descriptionHeightWorkaround();
     },
 
     updateProfilerState() {
       const { Services } = lazy.Services();
-      /**
-       * Convert two boolean values into a "profilerState" enum.
-       *
-       * @type {"active" | "inactive" | "locked"}
-       */
-      let profilerState = Services.profiler.IsActive() ? "active" : "inactive";
-      if (!Services.profiler.CanProfile()) {
-        // In private browsing mode, the profiler is locked.
-        profilerState = "locked";
-      }
 
-      switch (profilerState) {
-        case "active":
-          elements.inactive.hidden = true;
-          elements.active.hidden = false;
-          elements.settingsSection.hidden = true;
-          elements.contentRecording.hidden = false;
-          elements.locked.hidden = true;
-          break;
-        case "inactive":
-          elements.inactive.hidden = false;
-          elements.active.hidden = true;
-          elements.settingsSection.hidden = false;
-          elements.contentRecording.hidden = true;
-          elements.locked.hidden = true;
-          break;
-        case "locked": {
-          elements.inactive.hidden = true;
-          elements.active.hidden = true;
-          elements.settingsSection.hidden = true;
-          elements.contentRecording.hidden = true;
-          elements.locked.hidden = false;
-          // This works around XULElement height issues.
-          const { height } = elements.locked.getBoundingClientRect();
-          elements.locked.style.height = `${height}px`;
-          break;
-        }
-        default:
-          throw new Error("Unhandled profiler state.");
+      if (Services.profiler.IsActive()) {
+        elements.inactive.hidden = true;
+        elements.active.hidden = false;
+        elements.settingsSection.hidden = true;
+        elements.contentRecording.hidden = false;
+      } else {
+        elements.inactive.hidden = false;
+        elements.active.hidden = true;
+        elements.settingsSection.hidden = false;
+        elements.contentRecording.hidden = true;
       }
     },
 
     createPresetsList() {
       // Check the DOM if the presets were built or not. We can't cache this value
       // in the `State` object, as the `State` object will be removed if the
       // button is removed from the toolbar, but the DOM changes will still persist.
       if (elements.menupopup.getAttribute("presetsbuilt") === "true") {
@@ -354,22 +325,17 @@ function addPopupEventHandlers(state, el
     elements.window.openTrustedLinkIn("about:profiling", "tab");
     view.hidePopup();
   });
 
   // Update the view when the profiler starts/stops.
   const { Services } = lazy.Services();
 
   // These are all events that can affect the current state of the profiler.
-  const events = [
-    "profiler-started",
-    "profiler-stopped",
-    "chrome-document-global-created", // This is potentially a private browser.
-    "last-pb-context-exited",
-  ];
+  const events = ["profiler-started", "profiler-stopped"];
   for (const event of events) {
     Services.obs.addObserver(view.updateProfilerState, event);
     state.cleanup.push(() => {
       Services.obs.removeObserver(view.updateProfilerState, event);
     });
   }
 }
 
--- a/devtools/client/performance-new/test/browser/browser.ini
+++ b/devtools/client/performance-new/test/browser/browser.ini
@@ -20,36 +20,27 @@ skip-if = tsan # Frequently times out on
 [browser_aboutprofiling-threads-behavior.js]
 [browser_aboutprofiling-presets.js]
 [browser_aboutprofiling-presets-custom.js]
 [browser_aboutprofiling-rtl.js]
 [browser_devtools-interrupted.js]
 [browser_devtools-onboarding.js]
 [browser_devtools-presets.js]
 [browser_devtools-previously-started.js]
-[browser_devtools-private-window.js]
 [browser_devtools-record-capture.js]
 https_first_disabled = true
 [browser_devtools-record-discard.js]
 [browser_webchannel-enable-menu-button.js]
 https_first_disabled = true
 [browser_webchannel-enable-menu-button-preset.js]
 https_first_disabled = true
 [browser_popup-profiler-states.js]
 https_first_disabled = true
 [browser_popup-record-capture.js]
 https_first_disabled = true
 [browser_popup-record-capture-view.js]
 https_first_disabled = true
 [browser_popup-record-discard.js]
 
-# The popupshown and popuphidden events are not firing correctly on linux, as of
-# Bug 1625044. It could be because of the opening of a second private browsing
-# window. There should be good enough coverage of this feature with it disabled
-# on Linux. This bug appears to have been around for awhile see:
-# Bug 941073. Also see: 1178420, 1115757, 1401049, 1269392
-[browser_popup-private-browsing.js]
-skip-if = os == 'linux'
-
 [browser_split-toolbar-button.js]
 https_first_disabled = true
 
 [browser_interaction-between-interfaces.js]
deleted file mode 100644
--- a/devtools/client/performance-new/test/browser/browser_devtools-private-window.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-add_task(async function test() {
-  info("Test opening a private browsing window while the profiler is active.");
-
-  await withDevToolsPanel(async document => {
-    const getRecordingState = setupGetRecordingState(document);
-
-    const startRecording = await getActiveButtonFromText(
-      document,
-      "Start recording"
-    );
-
-    ok(!startRecording.disabled, "The start recording button is not disabled.");
-    is(
-      getRecordingState(),
-      "available-to-record",
-      "The panel is available to record."
-    );
-
-    const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
-      private: true,
-    });
-
-    await getElementFromDocumentByText(
-      document,
-      "The profiler is disabled when Private Browsing is enabled"
-    );
-
-    ok(
-      startRecording.disabled,
-      "The start recording button is disabled when a private browsing window is open."
-    );
-
-    is(
-      getRecordingState(),
-      "locked-by-private-browsing",
-      "The client knows about the private window."
-    );
-
-    info("Closing the private window");
-    await BrowserTestUtils.closeWindow(privateWindow);
-
-    info("Finally wait for the start recording button to become active again.");
-    await getActiveButtonFromText(document, "Start recording");
-
-    is(
-      getRecordingState(),
-      "available-to-record",
-      "The panel is available to record again."
-    );
-  });
-});
--- a/devtools/client/performance-new/test/browser/browser_devtools-record-capture.js
+++ b/devtools/client/performance-new/test/browser/browser_devtools-record-capture.js
@@ -54,16 +54,72 @@ add_task(async function test() {
       document,
       preset: "web-developer",
       expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
       getRecordingState,
     });
   });
 });
 
+add_task(async function test_in_private_window() {
+  info("Test that DevTools can capture profiles in a private window.");
+
+  // This test assumes that the Web Developer preset is set by default, which is
+  // not the case on Nightly and custom builds.
+  BackgroundJSM.changePreset(
+    "aboutprofiling",
+    "web-developer",
+    Services.profiler.GetFeatures()
+  );
+
+  await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
+
+  info("Open a private window.");
+  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+    private: true,
+  });
+
+  await withDevToolsPanel(async document => {
+    const getRecordingState = setupGetRecordingState(document);
+
+    // The initial state of the profiler UI is racy, as it calls out to the PerfFront
+    // to get the status of the profiler. This can race with the initialization of
+    // the test. Most of the the time the result is "not-yet-known", but rarely
+    // the PerfFront will win this race. Allow for both outcomes of the race in this
+    // test.
+    ok(
+      getRecordingState() === "not-yet-known" ||
+        getRecordingState() === "available-to-record",
+      "The component starts out in an unknown state or is already available to record."
+    );
+
+    // First check for "firefox-platform" preset which will have no "view" query
+    // string because this is where our traditional "full" view opens up.
+    // Note that this utility will check for a new tab in the main non-private
+    // window, which is exactly what we want here.
+    await setPresetCaptureAndAssertUrl({
+      document,
+      preset: "firefox-platform",
+      expectedUrl: FRONTEND_BASE_URL,
+      getRecordingState,
+    });
+
+    // Now, let's check for "web-developer" preset. This will open up the frontend
+    // with "active-tab" view query string. Frontend will understand and open the active tab view for it.
+    await setPresetCaptureAndAssertUrl({
+      document,
+      preset: "web-developer",
+      expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
+      getRecordingState,
+    });
+  }, privateWindow);
+
+  await BrowserTestUtils.closeWindow(privateWindow);
+});
+
 async function setPresetCaptureAndAssertUrl({
   document,
   preset,
   expectedUrl,
   getRecordingState,
 }) {
   const presetsInDevtools = await getNearestInputFromText(document, "Settings");
   setReactFriendlyInputValue(presetsInDevtools, preset);
deleted file mode 100644
--- a/devtools/client/performance-new/test/browser/browser_popup-private-browsing.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-add_task(async function test() {
-  info(
-    "Test that the profiler popup gets disabled when a private browsing window is open."
-  );
-  await makeSureProfilerPopupIsEnabled();
-
-  const getRecordingButton = () =>
-    getElementByLabel(document, "Start Recording");
-
-  const getDisabledMessage = () =>
-    getElementFromDocumentByText(
-      document,
-      "The profiler is currently disabled"
-    );
-
-  await withPopupOpen(window, async () => {
-    ok(await getRecordingButton(), "The start recording button is available");
-  });
-
-  info("Open a private browsing window.");
-  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
-    private: true,
-  });
-
-  info("Switch back to the main window and open the popup again.");
-  window.focus();
-  await withPopupOpen(window, async () => {
-    ok(await getDisabledMessage(), "The disabled message is displayed.");
-  });
-
-  info("Close the private window");
-  await BrowserTestUtils.closeWindow(privateWindow);
-
-  info("Make sure the first window is focused, and open the popup back up.");
-  window.focus();
-  await withPopupOpen(window, async () => {
-    ok(
-      await getRecordingButton(),
-      "The start recording button is available once again."
-    );
-  });
-});
--- a/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js
+++ b/devtools/client/performance-new/test/browser/browser_popup-record-capture-view.js
@@ -24,31 +24,79 @@ add_task(async function test() {
   );
 
   await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
   await makeSureProfilerPopupIsEnabled();
 
   // First check for the "Media" preset which will have no "view" query
   // string because it opens our traditional "full" view.
   await openPopupAndAssertUrlForPreset({
+    window,
     preset: "Media",
     expectedUrl: FRONTEND_BASE_URL,
   });
 
   // Now, let's check for "web-developer" preset. This will open up the frontend
   // with "active-tab" view query string. Frontend will understand and open the active tab view for it.
   await openPopupAndAssertUrlForPreset({
+    window,
     preset: "Web Developer",
     expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
   });
 });
 
-async function openPopupAndAssertUrlForPreset({ preset, expectedUrl }) {
+add_task(async function test_in_private_window() {
+  info(
+    "Test that the profiler pop-up correctly opens the captured profile on the " +
+      "correct frontend view by adding proper view query string. This also tests " +
+      "that a tab is opened on the non-private window even when the popup is used " +
+      "in the private window."
+  );
+
+  // This test assumes that the Web Developer preset is set by default, which is
+  // not the case on Nightly and custom builds.
+  BackgroundJSM.changePreset(
+    "aboutprofiling",
+    "web-developer",
+    Services.profiler.GetFeatures()
+  );
+
+  await setProfilerFrontendUrl(FRONTEND_BASE_HOST, FRONTEND_BASE_PATH);
+  await makeSureProfilerPopupIsEnabled();
+
+  info("Open a private window.");
+  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
+    private: true,
+  });
+
+  // First check for the "Media" preset which will have no "view" query
+  // string because it opens our traditional "full" view.
+  // Note that this utility will check for a new tab in the main non-private
+  // window, which is exactly what we want here.
+  await openPopupAndAssertUrlForPreset({
+    window: privateWindow,
+    preset: "Media",
+    expectedUrl: FRONTEND_BASE_URL,
+  });
+
+  // Now, let's check for "web-developer" preset. This will open up the frontend
+  // with "active-tab" view query string. Frontend will understand and open the active tab view for it.
+  await openPopupAndAssertUrlForPreset({
+    window: privateWindow,
+    preset: "Web Developer",
+    expectedUrl: FRONTEND_BASE_URL + "?view=active-tab&implementation=js",
+  });
+
+  await BrowserTestUtils.closeWindow(privateWindow);
+});
+
+async function openPopupAndAssertUrlForPreset({ window, preset, expectedUrl }) {
   // Let's capture a profile and assert newly created tab's url.
   await openPopupAndEnsureCloses(window, async () => {
+    const { document } = window;
     {
       // Select the preset in the popup
       const presetsInPopup = document.getElementById(
         "PanelUI-profiler-presets"
       );
       presetsInPopup.menupopup.openPopup();
       presetsInPopup.menupopup.activateItem(
         await getElementByLabel(presetsInPopup, preset)
--- a/devtools/client/performance-new/test/browser/browser_split-toolbar-button.js
+++ b/devtools/client/performance-new/test/browser/browser_split-toolbar-button.js
@@ -72,27 +72,27 @@ add_task(async function click_icon() {
 });
 
 add_task(async function click_dropmarker() {
   info("Test that the profiler icon dropmarker opens the panel.");
 
   ok(!dropmarker.hasAttribute("open"), "should start with the panel closed");
   ok(!isActive(), "should start with the profiler inactive");
 
-  const popupShownPromise = waitForProfilerPopupEvent("popupshown");
+  const popupShownPromise = waitForProfilerPopupEvent(window, "popupshown");
   dropmarker.click();
   await popupShownPromise;
 
   info("Ensure the panel is open and the profiler still inactive.");
   ok(dropmarker.getAttribute("open") == "true", "panel should be open");
   ok(!isActive(), "profiler should still be inactive");
   await getElementByLabel(document, "Start Recording");
 
   info("Press Escape to close the panel.");
-  const popupHiddenPromise = waitForProfilerPopupEvent("popuphidden");
+  const popupHiddenPromise = waitForProfilerPopupEvent(window, "popuphidden");
   EventUtils.synthesizeKey("KEY_Escape");
   await popupHiddenPromise;
   ok(!dropmarker.hasAttribute("open"), "panel should be closed");
 });
 
 add_task(async function click_overflowed_icon() {
   info("Test that the profiler icon opens the panel when overflowed.");
 
--- a/devtools/client/performance-new/test/browser/helpers.js
+++ b/devtools/client/performance-new/test/browser/helpers.js
@@ -192,20 +192,21 @@ async function makeSureProfilerPopupIsEn
 }
 /* exported makeSureProfilerPopupIsEnabled */
 
 /**
  * XUL popups will fire the popupshown and popuphidden events. These will fire for
  * any type of popup in the browser. This function waits for one of those events, and
  * checks that the viewId of the popup is PanelUI-profiler
  *
+ * @param {Window} window
  * @param {"popupshown" | "popuphidden"} eventName
  * @returns {Promise<void>}
  */
-function waitForProfilerPopupEvent(eventName) {
+function waitForProfilerPopupEvent(window, eventName) {
   return new Promise(resolve => {
     function handleEvent(event) {
       if (event.target.getAttribute("viewId") === "PanelUI-profiler") {
         window.removeEventListener(eventName, handleEvent);
         resolve();
       }
     }
     window.addEventListener(eventName, handleEvent);
@@ -213,35 +214,36 @@ function waitForProfilerPopupEvent(event
 }
 /* exported waitForProfilerPopupEvent */
 
 /**
  * Do not use this directly in a test. Prefer withPopupOpen and openPopupAndEnsureCloses.
  *
  * This function toggles the profiler menu button, and then uses user gestures
  * to click it open. It waits a tick to make sure it has a chance to initialize.
+ * @param {Window} window
  * @return {Promise<void>}
  */
 async function _toggleOpenProfilerPopup(window) {
   info("Toggle open the profiler popup.");
 
   info("> Find the profiler menu button.");
-  const profilerDropmarker = document.getElementById(
+  const profilerDropmarker = window.document.getElementById(
     "profiler-button-dropmarker"
   );
   if (!profilerDropmarker) {
     throw new Error(
       "Could not find the profiler button dropmarker in the toolbar."
     );
   }
 
-  const popupShown = waitForProfilerPopupEvent("popupshown");
+  const popupShown = waitForProfilerPopupEvent(window, "popupshown");
 
   info("> Trigger a click on the profiler button dropmarker.");
-  await EventUtils.synthesizeMouseAtCenter(profilerDropmarker, {});
+  await EventUtils.synthesizeMouseAtCenter(profilerDropmarker, {}, window);
 
   if (profilerDropmarker.getAttribute("open") !== "true") {
     throw new Error(
       "This test assumes that the button will have an open=true attribute after clicking it."
     );
   }
 
   info("> Wait for the popup to be shown.");
@@ -250,20 +252,21 @@ async function _toggleOpenProfilerPopup(
   // and is doing synchronous work with it.
   await tick();
 }
 
 /**
  * Do not use this directly in a test. Prefer withPopupOpen.
  *
  * This function uses a keyboard shortcut to close the profiler popup.
+ * @param {Window} window
  * @return {Promise<void>}
  */
 async function _closePopup(window) {
-  const popupHiddenPromise = waitForProfilerPopupEvent("popuphidden");
+  const popupHiddenPromise = waitForProfilerPopupEvent(window, "popuphidden");
   info("> Trigger an escape key to hide the popup");
   EventUtils.synthesizeKey("KEY_Escape");
 
   info("> Wait for the popup to be hidden.");
   await popupHiddenPromise;
   // Also wait a tick in case someone else is subscribing to the "popuphidden" event
   // and is doing synchronous work with it.
   await tick();
@@ -287,17 +290,17 @@ async function withPopupOpen(window, cal
  * popup to close through an implicit action, like opening a tab.
  *
  * @param {Window} window
  * @param {() => Promise<void>} callback
  */
 async function openPopupAndEnsureCloses(window, callback) {
   await _toggleOpenProfilerPopup(window);
   // We want to ensure the popup gets closed by the test, during the callback.
-  const popupHiddenPromise = waitForProfilerPopupEvent("popuphidden");
+  const popupHiddenPromise = waitForProfilerPopupEvent(window, "popuphidden");
   await callback();
   info("> Verifying that the popup was closed by the test.");
   await popupHiddenPromise;
 }
 /* exported openPopupAndEnsureCloses */
 
 /**
  * This function overwrites the default profiler.firefox.com URL for tests. This
@@ -460,24 +463,28 @@ function withAboutProfiling(callback) {
  * Open DevTools and view the performance-new tab. After running the callback, clean
  * up the test.
  *
  * @param {string} [url="about:blank"] url for the new tab
  * @param {(Document, Document) => unknown} callback: the first parameter is the
  *                                          devtools panel's document, the
  *                                          second parameter is the opened tab's
  *                                          document.
+ * @param {Window} [aWindow] The browser's window object we target
  * @returns {Promise<void>}
  */
-async function withDevToolsPanel(url, callback) {
-  if (typeof url !== "string" && !callback) {
+async function withDevToolsPanel(url, callback, aWindow = window) {
+  if (typeof url === "function") {
+    aWindow = callback ?? window;
     callback = url;
     url = "about:blank";
   }
 
+  const { gBrowser } = aWindow;
+
   SpecialPowers.pushPrefEnv({
     set: [["devtools.performance.new-panel-enabled", "true"]],
   });
 
   const { gDevTools } = require("devtools/client/framework/devtools");
 
   info(`Create a new tab with url "${url}".`);
   const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
--- a/devtools/client/performance/test/browser.ini
+++ b/devtools/client/performance/test/browser.ini
@@ -72,18 +72,16 @@ disabled=TODO bug 1256350
 [browser_perf-overview-render-01.js]
 [browser_perf-overview-render-02.js]
 [browser_perf-overview-render-03.js]
 [browser_perf-overview-render-04.js]
 [browser_perf-overview-selection-01.js]
 [browser_perf-overview-selection-02.js]
 [browser_perf-overview-selection-03.js]
 [browser_perf-overview-time-interval.js]
-[browser_perf-private-browsing.js]
-disabled=TODO bug 1256350
 [browser_perf-range-changed-render.js]
 [browser_perf-recording-notices-01.js]
 [browser_perf-recording-notices-02.js]
 [browser_perf-recording-notices-03.js]
 skip-if = (debug && (bits == 32))  # debug 32 bit: bug 1273374
 [browser_perf-recording-notices-04.js]
 [browser_perf-recording-notices-05.js]
 [browser_perf-recording-selected-01.js]
deleted file mode 100644
--- a/devtools/client/performance/test/browser_perf-private-browsing.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-"use strict";
-
-/**
- * Tests that the frontend is disabled when in private browsing mode.
- */
-
-const { SIMPLE_URL } = require("devtools/client/performance/test/helpers/urls");
-const {
-  initPerformanceInNewTab,
-  teardownToolboxAndRemoveTab,
-} = require("devtools/client/performance/test/helpers/panel-utils");
-const {
-  startRecording,
-  stopRecording,
-} = require("devtools/client/performance/test/helpers/actions");
-const {
-  once,
-} = require("devtools/client/performance/test/helpers/event-utils");
-
-let gPanelWinTuples = [];
-
-add_task(async function() {
-  await testNormalWindow();
-  await testPrivateWindow();
-  await testRecordingFailingInWindow(0);
-  await testRecordingFailingInWindow(1);
-  await teardownPerfInWindow(1, { shouldCloseWindow: true });
-  await testRecordingSucceedingInWindow(0);
-  await teardownPerfInWindow(0, { shouldCloseWindow: false });
-
-  gPanelWinTuples = null;
-});
-
-async function createPanelInNewWindow(options) {
-  const win = await BrowserTestUtils.openNewBrowserWindow(options);
-  return createPanelInWindow(options, win);
-}
-
-async function createPanelInWindow(options, win = window) {
-  const { panel } = await initPerformanceInNewTab(
-    {
-      url: SIMPLE_URL,
-      win: win,
-    },
-    options
-  );
-
-  gPanelWinTuples.push({ panel, win });
-  return { panel, win };
-}
-
-async function testNormalWindow() {
-  const { panel } = await createPanelInWindow({
-    private: false,
-  });
-
-  const { PerformanceView } = panel.panelWin;
-
-  is(
-    PerformanceView.getState(),
-    "empty",
-    "The initial state of the performance panel view is correct (1)."
-  );
-}
-
-async function testPrivateWindow() {
-  const { panel } = await createPanelInNewWindow({
-    private: true,
-    // The add-on SDK can't seem to be able to listen to "ready" or "close"
-    // events for private tabs. Don't really absolutely need to though.
-    dontWaitForTabReady: true,
-  });
-
-  const { PerformanceView } = panel.panelWin;
-
-  is(
-    PerformanceView.getState(),
-    "unavailable",
-    "The initial state of the performance panel view is correct (2)."
-  );
-}
-
-async function testRecordingFailingInWindow(index) {
-  const { panel } = gPanelWinTuples[index];
-  const { EVENTS, PerformanceController } = panel.panelWin;
-
-  const onRecordingStarted = () => {
-    ok(false, "Recording should not start while a private window is present.");
-  };
-
-  PerformanceController.on(EVENTS.RECORDING_STATE_CHANGE, onRecordingStarted);
-
-  const whenFailed = once(
-    PerformanceController,
-    EVENTS.BACKEND_FAILED_AFTER_RECORDING_START
-  );
-  PerformanceController.startRecording();
-  await whenFailed;
-  ok(true, "Recording has failed.");
-
-  PerformanceController.off(EVENTS.RECORDING_STATE_CHANGE, onRecordingStarted);
-}
-
-async function testRecordingSucceedingInWindow(index) {
-  const { panel } = gPanelWinTuples[index];
-  const { EVENTS, PerformanceController } = panel.panelWin;
-
-  const onRecordingFailed = () => {
-    ok(false, "Recording should start while now private windows are present.");
-  };
-
-  PerformanceController.on(
-    EVENTS.BACKEND_FAILED_AFTER_RECORDING_START,
-    onRecordingFailed
-  );
-
-  await startRecording(panel);
-  await stopRecording(panel);
-  ok(true, "Recording has succeeded.");
-
-  PerformanceController.off(
-    EVENTS.BACKEND_FAILED_AFTER_RECORDING_START,
-    onRecordingFailed
-  );
-}
-
-async function teardownPerfInWindow(index, options) {
-  const { panel, win } = gPanelWinTuples[index];
-  await teardownToolboxAndRemoveTab(panel);
-
-  if (options.shouldCloseWindow) {
-    win.close();
-  }
-}
--- a/devtools/server/actors/perf.js
+++ b/devtools/server/actors/perf.js
@@ -27,33 +27,27 @@ function _bridgeEvents(actor, names) {
  */
 exports.PerfActor = ActorClassWithSpec(perfSpec, {
   initialize: function(conn, targetActor) {
     Actor.prototype.initialize.call(this, conn);
     // The "bridge" is the actual implementation of the actor. It is separated
     // for historical reasons, and could be merged into this class.
     this.bridge = new ActorReadyGeckoProfilerInterface();
 
-    _bridgeEvents(this, [
-      "profile-locked-by-private-browsing",
-      "profile-unlocked-from-private-browsing",
-      "profiler-started",
-      "profiler-stopped",
-    ]);
+    _bridgeEvents(this, ["profiler-started", "profiler-stopped"]);
   },
 
   destroy: function(conn) {
     Actor.prototype.destroy.call(this, conn);
     this.bridge.destroy();
   },
 
   // Connect the rest of the ActorReadyGeckoProfilerInterface's methods to the PerfActor.
   startProfiler: actorBridgeWithSpec("startProfiler"),
   stopProfilerAndDiscardProfile: actorBridgeWithSpec(
     "stopProfilerAndDiscardProfile"
   ),
   getSymbolTable: actorBridgeWithSpec("getSymbolTable"),
   getProfileAndStopProfiler: actorBridgeWithSpec("getProfileAndStopProfiler"),
   isActive: actorBridgeWithSpec("isActive"),
   isSupportedPlatform: actorBridgeWithSpec("isSupportedPlatform"),
-  isLockedForPrivateBrowsing: actorBridgeWithSpec("isLockedForPrivateBrowsing"),
   getSupportedFeatures: actorBridgeWithSpec("getSupportedFeatures"),
 });
--- a/devtools/server/actors/root.js
+++ b/devtools/server/actors/root.js
@@ -125,16 +125,21 @@ exports.RootActor = protocol.ActorClassW
       workerConsoleApiMessagesDispatchedToMainThread: Services.prefs
         ? Services.prefs.getBoolPref(
             "dom.worker.console.dispatch_events_to_main_thread"
           )
         : true,
       // @backward-compat { version 86 } ThreadActor.attach no longer pauses the thread,
       //                                 so that we no longer have to resume.
       noPauseOnThreadActorAttach: true,
+      // @backward-compat { version 98 }
+      // Starting version 98, we stopped disabling the profiler if the user has
+      // a window with private browsing enabled. This trait helps to detect this
+      // so that different code paths can be called.
+      noDisablingOnPrivateBrowsing: true,
     };
   },
 
   /**
    * Return a 'hello' packet as specified by the Remote Debugging Protocol.
    */
   sayHello: function() {
     return {
--- a/devtools/server/actors/style-rule.js
+++ b/devtools/server/actors/style-rule.js
@@ -56,16 +56,18 @@ loader.lazyRequireGetter(
 );
 loader.lazyRequireGetter(
   this,
   ["UPDATE_PRESERVING_RULES", "UPDATE_GENERAL"],
   "devtools/server/actors/style-sheet",
   true
 );
 
+loader.lazyRequireGetter(this, "ChromeUtils");
+
 const XHTML_NS = "http://www.w3.org/1999/xhtml";
 
 const SUPPORTED_RULE_TYPES = [
   CSSRule.STYLE_RULE,
   CSSRule.SUPPORTS_RULE,
   CSSRule.KEYFRAME_RULE,
   CSSRule.KEYFRAMES_RULE,
   CSSRule.MEDIA_RULE,
@@ -325,27 +327,42 @@ const StyleRuleActor = protocol.ActorCla
       // a media rule so we do this here instead of in the switch statement
       // below.
       if (this.rawRule.parentRule.type === CSSRule.MEDIA_RULE) {
         form.media = [];
         for (let i = 0, n = this.rawRule.parentRule.media.length; i < n; i++) {
           form.media.push(this.rawRule.parentRule.media.item(i));
         }
       }
+
+      if (
+        ChromeUtils.getClassName(this.rawRule.parentRule) ===
+        "CSSLayerBlockRule"
+      ) {
+        form.layerName = this.rawRule.parentRule.name;
+      }
     }
     if (this._parentSheet) {
       if (this.pageStyle.hasStyleSheetWatcherSupport) {
         form.parentStyleSheet = this.pageStyle.styleSheetsManager.getStyleSheetResourceId(
           this._parentSheet
         );
       } else {
         form.parentStyleSheet = this.pageStyle._sheetRef(
           this._parentSheet
         ).actorID;
       }
+
+      // Only override layerName if it wasn't set from the parent rule
+      if (
+        typeof this._parentSheet.ownerRule?.layerName !== "undefined" &&
+        form.layerName == undefined
+      ) {
+        form.layerName = this._parentSheet.ownerRule.layerName;
+      }
     }
 
     // One tricky thing here is that other methods in this actor must
     // ensure that authoredText has been set before |form| is called.
     // This has to be treated specially, for now, because we cannot
     // synchronously compute the authored text, but |form| also cannot
     // return a promise.  See bug 1205868.
     form.authoredText = this.authoredText;
--- a/devtools/server/performance/profiler.js
+++ b/devtools/server/performance/profiler.js
@@ -550,24 +550,16 @@ class Profiler {
           ProfilerManager.unsubscribeToProfilerStatusEvents();
         }
         this.subscribedEvents.delete(e);
         response.push(e);
       }
     });
     return { registered: response };
   }
-
-  /**
-   * Checks whether or not the profiler module can currently run.
-   * @return boolean
-   */
-  static canProfile() {
-    return Services.profiler.CanProfile();
-  }
 }
 
 /**
  * JSON.stringify callback used in Profiler.prototype.observe.
  */
 function cycleBreaker(key, value) {
   if (key == "wrappedJSObject") {
     return undefined;
--- a/devtools/server/performance/recorder.js
+++ b/devtools/server/performance/recorder.js
@@ -284,26 +284,25 @@ PerformanceRecorder.prototype = {
     if (activeRecordings.length) {
       this.emit("timeline-data", eventName, eventData, activeRecordings);
     }
   },
 
   /**
    * Checks whether or not recording is currently supported. At the moment,
    * this is only influenced by private browsing mode and the profiler.
+   * This function looks useless after some recent changes -- and it is.
+   * Removing it would involve a lot of cleanup including backward
+   * incompatibility work, which is a lot of work for this panel that's due to
+   * be removed in the near future.
    */
   canCurrentlyRecord: function() {
-    let success = true;
+    const success = true;
     const reasons = [];
 
-    if (!Profiler.canProfile()) {
-      success = false;
-      reasons.push("profiler-unavailable");
-    }
-
     // Check other factors that will affect the possibility of successfully
     // starting a recording here.
 
     return { success, reasons };
   },
 
   /**
    * Begins a recording session
--- a/devtools/server/tests/browser/browser.ini
+++ b/devtools/server/tests/browser/browser.ini
@@ -134,17 +134,16 @@ skip-if =
 [browser_markers-parse-html.js]
 [browser_markers-styles.js]
 [browser_markers-timestamp.js]
 [browser_memory_allocations_01.js]
 [browser_navigateEvents.js]
 https_first_disabled = true
 [browser_perf-01.js]
 [browser_perf-02.js]
-[browser_perf-03.js]
 [browser_perf-04.js]
 [browser_perf-allocation-data.js]
 [browser_perf-getSupportedFeatures.js]
 [browser_perf-profiler-01.js]
 [browser_perf-profiler-02.js]
 skip-if = true # Needs to be updated for async actor destruction
 [browser_perf-profiler-03.js]
 skip-if = true # Needs to be updated for async actor destruction
--- a/devtools/server/tests/browser/browser_perf-01.js
+++ b/devtools/server/tests/browser/browser_perf-01.js
@@ -17,21 +17,16 @@ add_task(async function() {
   const { front, client } = await initPerfFront();
 
   // Assert the initial state.
   is(
     await front.isSupportedPlatform(),
     true,
     "This test only runs on supported platforms."
   );
-  is(
-    await front.isLockedForPrivateBrowsing(),
-    false,
-    "The browser is not in private browsing mode."
-  );
   is(await front.isActive(), false, "The profiler is not active yet.");
 
   // Start the profiler.
   const profilerStarted = once(front, "profiler-started");
   await front.startProfiler();
   await profilerStarted;
   is(await front.isActive(), true, "The profiler was started.");
 
deleted file mode 100644
--- a/devtools/server/tests/browser/browser_perf-03.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-/**
- * Test that the profiler emits events when private browsing windows are opened
- * and closed.
- */
-add_task(async function() {
-  const { front, client } = await initPerfFront();
-
-  is(
-    await front.isLockedForPrivateBrowsing(),
-    false,
-    "The profiler is not locked for private browsing."
-  );
-
-  // Open up a new private browser window, and assert the correct events are fired.
-  const profilerLocked = once(front, "profile-locked-by-private-browsing");
-  const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
-    private: true,
-  });
-  await profilerLocked;
-  is(
-    await front.isLockedForPrivateBrowsing(),
-    true,
-    "The profiler is now locked because of private browsing."
-  );
-
-  // Close the private browser window, and assert the correct events are fired.
-  const profilerUnlocked = once(
-    front,
-    "profile-unlocked-from-private-browsing"
-  );
-  await BrowserTestUtils.closeWindow(privateWindow);
-  await profilerUnlocked;
-  is(
-    await front.isLockedForPrivateBrowsing(),
-    false,
-    "The profiler is available again after closing the private browsing window."
-  );
-
-  // Clean up.
-  await front.destroy();
-  await client.close();
-});
--- a/devtools/server/tests/browser/browser_perf-04.js
+++ b/devtools/server/tests/browser/browser_perf-04.js
@@ -10,21 +10,16 @@ add_task(async function() {
   const { front, client } = await initPerfFront();
 
   // Assert the initial state.
   is(
     await front.isSupportedPlatform(),
     true,
     "This test only runs on supported platforms."
   );
-  is(
-    await front.isLockedForPrivateBrowsing(),
-    false,
-    "The browser is not in private browsing mode."
-  );
   is(await front.isActive(), false, "The profiler is not active yet.");
 
   // Getting the active Browser ID to assert in the "profiler-started" event.
   const win = Services.wm.getMostRecentWindow("navigator:browser");
   const activeTabID = win.gBrowser.selectedBrowser.browsingContext.browserId;
 
   front.once(
     "profiler-started",
--- a/devtools/shared/performance-new/gecko-profiler-interface.js
+++ b/devtools/shared/performance-new/gecko-profiler-interface.js
@@ -6,22 +6,16 @@
 /**
  * This file is for the new performance panel that targets profiler.firefox.com,
  * not the default-enabled DevTools performance panel.
  */
 
 const { Ci } = require("chrome");
 const Services = require("Services");
 
-loader.lazyImporter(
-  this,
-  "PrivateBrowsingUtils",
-  "resource://gre/modules/PrivateBrowsingUtils.jsm"
-);
-
 loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter");
 loader.lazyRequireGetter(
   this,
   "RecordingUtils",
   "devtools/shared/performance-new/recording-utils"
 );
 
 // Some platforms are built without the Gecko Profiler.
@@ -36,37 +30,27 @@ class ActorReadyGeckoProfilerInterface {
   constructor() {
     // Only setup the observers on a supported platform.
     if (IS_SUPPORTED_PLATFORM) {
       this._observer = {
         observe: this._observe.bind(this),
       };
       Services.obs.addObserver(this._observer, "profiler-started");
       Services.obs.addObserver(this._observer, "profiler-stopped");
-      Services.obs.addObserver(
-        this._observer,
-        "chrome-document-global-created"
-      );
-      Services.obs.addObserver(this._observer, "last-pb-context-exited");
     }
 
     EventEmitter.decorate(this);
   }
 
   destroy() {
     if (!IS_SUPPORTED_PLATFORM) {
       return;
     }
     Services.obs.removeObserver(this._observer, "profiler-started");
     Services.obs.removeObserver(this._observer, "profiler-stopped");
-    Services.obs.removeObserver(
-      this._observer,
-      "chrome-document-global-created"
-    );
-    Services.obs.removeObserver(this._observer, "last-pb-context-exited");
   }
 
   startProfiler(options) {
     if (!IS_SUPPORTED_PLATFORM) {
       return false;
     }
 
     // For a quick implementation, decide on some default values. These may need
@@ -167,42 +151,24 @@ class ActorReadyGeckoProfilerInterface {
     }
     return Services.profiler.IsActive();
   }
 
   isSupportedPlatform() {
     return IS_SUPPORTED_PLATFORM;
   }
 
-  isLockedForPrivateBrowsing() {
-    if (!IS_SUPPORTED_PLATFORM) {
-      return false;
-    }
-    return !Services.profiler.CanProfile();
-  }
-
   /**
    * Watch for events that happen within the browser. These can affect the
    * current availability and state of the Gecko Profiler.
    */
   _observe(subject, topic, _data) {
     // Note! If emitting new events make sure and update the list of bridged
     // events in the perf actor.
     switch (topic) {
-      case "chrome-document-global-created":
-        if (
-          subject.isChromeWindow &&
-          PrivateBrowsingUtils.isWindowPrivate(subject)
-        ) {
-          this.emit("profile-locked-by-private-browsing");
-        }
-        break;
-      case "last-pb-context-exited":
-        this.emit("profile-unlocked-from-private-browsing");
-        break;
       case "profiler-started":
         const param = subject.QueryInterface(Ci.nsIProfilerStartParams);
         this.emit(
           topic,
           param.entries,
           param.interval,
           param.features,
           param.duration,
--- a/devtools/shared/specs/perf.js
+++ b/devtools/shared/specs/perf.js
@@ -26,16 +26,20 @@ const perfDescription = {
       // server, that's why we don't need to pass anything on `startProfiler`
       // actor method. But we return this in "profiler-started" event because
       // client may want to use that value.
       activeTabID: Arg(4, "number"),
     },
     "profiler-stopped": {
       type: "profiler-stopped",
     },
+    // @backward-compat { version 98 } These 2 events are not used anymore since
+    // Firefox 98. Instead we expose the information about private browsing in
+    // captured profile and show a warning in the profiler frontend UI. We can
+    // remove these 2 events once Firefox 98 hits release.
     "profile-locked-by-private-browsing": {
       type: "profile-locked-by-private-browsing",
     },
     "profile-unlocked-from-private-browsing": {
       type: "profile-unlocked-from-private-browsing",
     },
   },
 
@@ -77,16 +81,18 @@ const perfDescription = {
       response: { value: RetVal("boolean") },
     },
 
     isSupportedPlatform: {
       request: {},
       response: { value: RetVal("boolean") },
     },
 
+    // @backward-compat { version 98 } This method is not used since Firefox 98.
+    // We can remove it once Firefox 98 hits release.
     isLockedForPrivateBrowsing: {
       request: {},
       response: { value: RetVal("boolean") },
     },
 
     getSupportedFeatures: {
       request: {},
       response: { value: RetVal("array:string") },
--- a/docshell/base/CanonicalBrowsingContext.cpp
+++ b/docshell/base/CanonicalBrowsingContext.cpp
@@ -820,16 +820,20 @@ void CanonicalBrowsingContext::SessionHi
         } else {
           mActiveEntry = newActiveEntry;
         }
 
         if (loadFromSessionHistory) {
           // XXX Synchronize browsing context tree and session history tree?
           shistory->InternalSetRequestedIndex(indexOfHistoryLoad);
           shistory->UpdateIndex();
+
+          if (IsTop()) {
+            mActiveEntry->SetWireframe(Nothing());
+          }
         } else if (addEntry) {
           shistory->AddEntry(mActiveEntry, aPersist);
           shistory->InternalSetRequestedIndex(-1);
         }
       } else {
         // FIXME The old implementations adds it to the parent's mLSHE if there
         //       is one, need to figure out if that makes sense here (peterv
         //       doesn't think it would).
@@ -1011,16 +1015,20 @@ void CanonicalBrowsingContext::ReplaceAc
   nsSHistory* shistory = static_cast<nsSHistory*>(GetSessionHistory());
   if (shistory) {
     shistory->NotifyOnHistoryReplaceEntry();
     shistory->UpdateRootBrowsingContextState();
   }
 
   ResetSHEntryHasUserInteractionCache();
 
+  if (IsTop()) {
+    mActiveEntry->SetWireframe(Nothing());
+  }
+
   // FIXME Need to do the equivalent of EvictContentViewersOrReplaceEntry.
 }
 
 void CanonicalBrowsingContext::RemoveDynEntriesFromActiveSessionHistoryEntry() {
   nsISHistory* shistory = GetSessionHistory();
   // In theory shistory can be null here if the method is called right after
   // CanonicalBrowsingContext::ReplacedBy call.
   NS_ENSURE_TRUE_VOID(shistory);
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -83,16 +83,17 @@
 #include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/ToJSValue.h"
 #include "mozilla/dom/UserActivation.h"
 #include "mozilla/dom/ChildSHistory.h"
 #include "mozilla/dom/nsCSPContext.h"
 #include "mozilla/dom/nsHTTPSOnlyUtils.h"
 #include "mozilla/dom/LoadURIOptionsBinding.h"
 #include "mozilla/dom/JSWindowActorChild.h"
+#include "mozilla/dom/DocumentBinding.h"
 #include "mozilla/ipc/ProtocolUtils.h"
 #include "mozilla/net/DocumentChannel.h"
 #include "mozilla/net/DocumentChannelChild.h"
 #include "mozilla/net/ParentChannelWrapper.h"
 #include "mozilla/net/UrlClassifierFeatureFactory.h"
 #include "ReferrerInfo.h"
 
 #include "nsIAppShell.h"
@@ -8799,16 +8800,17 @@ nsresult nsDocShell::HandleSameDocumentN
         }
         mLSHE->AdoptBFCacheEntry(mOSHE);
       }
     }
   } else {
     if (mActiveEntry) {
       mActiveEntry->SetScrollPosition(scrollPos.x, scrollPos.y);
       if (mBrowsingContext) {
+        CollectWireframe();
         if (XRE_IsParentProcess()) {
           SessionHistoryEntry* entry =
               mBrowsingContext->Canonical()->GetActiveSessionHistoryEntry();
           if (entry) {
             entry->SetScrollPosition(scrollPos.x, scrollPos.y);
           }
         } else {
           mozilla::Unused << ContentChild::GetSingleton()
@@ -10935,16 +10937,39 @@ bool nsDocShell::OnNewURI(nsIURI* aURI, 
   // Make sure to store the referrer from the channel, if any
   nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(aChannel));
   if (httpChannel) {
     mReferrerInfo = httpChannel->GetReferrerInfo();
   }
   return onLocationChangeNeeded;
 }
 
+void nsDocShell::CollectWireframe() {
+  if (mozilla::SessionHistoryInParent() &&
+      StaticPrefs::browser_history_collectWireframes() &&
+      mBrowsingContext->IsTop() && mActiveEntry) {
+    RefPtr<Document> doc = mContentViewer->GetDocument();
+    Nullable<Wireframe> wireframe;
+    doc->GetWireframeWithoutFlushing(false, wireframe);
+    if (!wireframe.IsNull()) {
+      if (XRE_IsParentProcess()) {
+        SessionHistoryEntry* entry =
+            mBrowsingContext->Canonical()->GetActiveSessionHistoryEntry();
+        if (entry) {
+          entry->SetWireframe(Some(wireframe.Value()));
+        }
+      } else {
+        mozilla::Unused
+            << ContentChild::GetSingleton()->SendSessionHistoryEntryWireframe(
+                   mBrowsingContext, wireframe.Value());
+      }
+    }
+  }
+}
+
 //*****************************************************************************
 // nsDocShell: Session History
 //*****************************************************************************
 
 NS_IMETHODIMP
 nsDocShell::AddState(JS::Handle<JS::Value> aData, const nsAString& aTitle,
                      const nsAString& aURL, bool aReplace, JSContext* aCx) {
   MOZ_LOG(gSHLog, LogLevel::Debug,
@@ -11702,16 +11727,21 @@ void nsDocShell::UpdateActiveEntry(
           ("Creating an active entry on nsDocShell %p to %s", this,
            aURI->GetSpecOrDefault().get()));
 
   // Even if we're replacing an existing entry we create new a
   // SessionHistoryInfo. In the parent process we'll keep the existing
   // SessionHistoryEntry, but just replace its SessionHistoryInfo, that way the
   // entry keeps identity but its data is replaced.
   bool replace = aReplace && mActiveEntry;
+
+  if (!replace) {
+    CollectWireframe();
+  }
+
   if (mActiveEntry) {
     // Link this entry to the previous active entry.
     mActiveEntry = MakeUnique<SessionHistoryInfo>(*mActiveEntry, aURI);
   } else {
     mActiveEntry = MakeUnique<SessionHistoryInfo>(
         aURI, aTriggeringPrincipal, nullptr, nullptr, aCsp, mContentTypeHint);
   }
   mActiveEntry->SetOriginalURI(aOriginalURI);
@@ -11851,16 +11881,18 @@ nsDocShell::PersistLayoutHistoryState() 
       // Even if we don't have layout anymore, we may want to reset the
       // current scroll state in layout history.
       GetLayoutHistoryState(getter_AddRefs(layoutState));
     }
 
     if (scrollRestorationIsManual && layoutState) {
       layoutState->ResetScrollState();
     }
+
+    CollectWireframe();
   }
 
   return rv;
 }
 
 void nsDocShell::SwapHistoryEntries(nsISHEntry* aOldEntry,
                                     nsISHEntry* aNewEntry) {
   if (aOldEntry == mOSHE) {
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -727,16 +727,21 @@ class nsDocShell final : public nsDocLoa
   // will be upgraded to HTTPS.
   bool OnNewURI(nsIURI* aURI, nsIChannel* aChannel,
                 nsIPrincipal* aTriggeringPrincipal,
                 nsIPrincipal* aPrincipalToInherit,
                 nsIPrincipal* aPartitionedPrincipalToInehrit,
                 nsIContentSecurityPolicy* aCsp, bool aFireOnLocationChange,
                 bool aAddToGlobalHistory, bool aCloneSHChildren);
 
+  // If wireframe collection is enabled, will attempt to gather the
+  // wireframe for the document and stash it inside of the active history
+  // entry.
+  void CollectWireframe();
+
  public:
   // Helper method that is called when a new document (including any
   // sub-documents - ie. frames) has been completely loaded.
   MOZ_CAN_RUN_SCRIPT_BOUNDARY
   nsresult EndPageLoad(nsIWebProgress* aProgress, nsIChannel* aChannel,
                        nsresult aResult);
 
   // Builds an error page URI (e.g. about:neterror?etc) for the given aURI
--- a/docshell/shistory/SessionHistoryEntry.cpp
+++ b/docshell/shistory/SessionHistoryEntry.cpp
@@ -18,16 +18,17 @@
 #include "mozilla/PresState.h"
 #include "mozilla/StaticPrefs_fission.h"
 #include "mozilla/Tuple.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "mozilla/dom/CanonicalBrowsingContext.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/dom/CSPMessageUtils.h"
+#include "mozilla/dom/DocumentBinding.h"
 #include "mozilla/dom/DOMTypes.h"
 #include "mozilla/dom/nsCSPContext.h"
 #include "mozilla/dom/PermissionMessageUtils.h"
 #include "mozilla/dom/ReferrerInfoUtils.h"
 #include "mozilla/ipc/IPDLParamTraits.h"
 #include "mozilla/ipc/ProtocolUtils.h"
 #include "mozilla/ipc/URIUtils.h"
 
@@ -1052,16 +1053,20 @@ SessionHistoryEntry::HasDetachedEditor()
   return false;
 }
 
 NS_IMETHODIMP_(bool)
 SessionHistoryEntry::IsDynamicallyAdded() {
   return SharedInfo()->mDynamicallyCreated;
 }
 
+void SessionHistoryEntry::SetWireframe(const Maybe<Wireframe>& aWireframe) {
+  mWireframe = aWireframe;
+}
+
 void SessionHistoryEntry::SetIsDynamicallyAdded(bool aDynamic) {
   MOZ_ASSERT_IF(SharedInfo()->mDynamicallyCreated, aDynamic);
   SharedInfo()->mDynamicallyCreated = aDynamic;
 }
 
 NS_IMETHODIMP
 SessionHistoryEntry::HasDynamicallyAddedChild(bool* aHasDynamicallyAddedChild) {
   for (const auto& child : mChildren) {
@@ -1343,16 +1348,26 @@ SessionHistoryEntry::CreateLoadInfo(nsDo
 }
 
 NS_IMETHODIMP
 SessionHistoryEntry::GetBfcacheID(uint64_t* aBfcacheID) {
   *aBfcacheID = SharedInfo()->mId;
   return NS_OK;
 }
 
+NS_IMETHODIMP
+SessionHistoryEntry::GetWireframe(JSContext* aCx, JS::MutableHandleValue aOut) {
+  if (mWireframe.isNothing()) {
+    aOut.set(JS::NullValue());
+  } else if (NS_WARN_IF(!mWireframe->ToObjectInternal(aCx, aOut))) {
+    return NS_ERROR_FAILURE;
+  }
+  return NS_OK;
+}
+
 NS_IMETHODIMP_(void)
 SessionHistoryEntry::SyncTreesForSubframeNavigation(
     nsISHEntry* aEntry, mozilla::dom::BrowsingContext* aTopBC,
     mozilla::dom::BrowsingContext* aIgnoreBC) {
   // XXX Keep this in sync with nsSHEntry::SyncTreesForSubframeNavigation.
   //
   // We need to sync up the browsing context and session history trees for
   // subframe navigation.  If the load was in a subframe, we forward up to
@@ -1668,11 +1683,63 @@ bool IPDLParamTraits<nsILayoutHistorySta
       PresState& state = states[i];
       UniquePtr<PresState> newState = MakeUnique<PresState>(state);
       (*aResult)->AddState(keys[i], std::move(newState));
     }
   }
   return true;
 }
 
+void IPDLParamTraits<mozilla::dom::Wireframe>::Write(
+    IPC::Message* aMsg, IProtocol* aActor,
+    const mozilla::dom::Wireframe& aParam) {
+  WriteParam(aMsg, aParam.mCanvasBackground);
+  WriteParam(aMsg, aParam.mRects);
+}
+
+bool IPDLParamTraits<mozilla::dom::Wireframe>::Read(
+    const IPC::Message* aMsg, PickleIterator* aIter, IProtocol* aActor,
+    mozilla::dom::Wireframe* aResult) {
+  return ReadParam(aMsg, aIter, &aResult->mCanvasBackground) &&
+         ReadParam(aMsg, aIter, &aResult->mRects);
+}
+
 }  // namespace ipc
+}  // namespace mozilla
+
+namespace IPC {
+// Allow sending mozilla::dom::WireframeRectType enums over IPC.
+template <>
+struct ParamTraits<mozilla::dom::WireframeRectType>
+    : public ContiguousEnumSerializer<
+          mozilla::dom::WireframeRectType,
+          mozilla::dom::WireframeRectType::Image,
+          mozilla::dom::WireframeRectType::EndGuard_> {};
 
-}  // namespace mozilla
+template <>
+struct ParamTraits<mozilla::dom::WireframeTaggedRect> {
+  static void Write(Message* aMsg,
+                    const mozilla::dom::WireframeTaggedRect& aParam);
+  static bool Read(const Message* aMsg, PickleIterator* aIter,
+                   mozilla::dom::WireframeTaggedRect* aResult);
+};
+
+void ParamTraits<mozilla::dom::WireframeTaggedRect>::Write(
+    Message* aMsg, const mozilla::dom::WireframeTaggedRect& aParam) {
+  WriteParam(aMsg, aParam.mColor);
+  WriteParam(aMsg, aParam.mType);
+  WriteParam(aMsg, aParam.mX);
+  WriteParam(aMsg, aParam.mY);
+  WriteParam(aMsg, aParam.mWidth);
+  WriteParam(aMsg, aParam.mHeight);
+}
+
+bool ParamTraits<mozilla::dom::WireframeTaggedRect>::Read(
+    const IPC::Message* aMsg, PickleIterator* aIter,
+    mozilla::dom::WireframeTaggedRect* aResult) {
+  return ReadParam(aMsg, aIter, &aResult->mColor) &&
+         ReadParam(aMsg, aIter, &aResult->mType) &&
+         ReadParam(aMsg, aIter, &aResult->mX) &&
+         ReadParam(aMsg, aIter, &aResult->mY) &&
+         ReadParam(aMsg, aIter, &aResult->mWidth) &&
+         ReadParam(aMsg, aIter, &aResult->mHeight);
+}
+}  // namespace IPC
--- a/docshell/shistory/SessionHistoryEntry.h
+++ b/docshell/shistory/SessionHistoryEntry.h
@@ -2,16 +2,17 @@
 /* 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/. */
 
 #ifndef mozilla_dom_SessionHistoryEntry_h
 #define mozilla_dom_SessionHistoryEntry_h
 
+#include "mozilla/dom/DocumentBinding.h"
 #include "mozilla/Maybe.h"
 #include "mozilla/UniquePtr.h"
 #include "nsILayoutHistoryState.h"
 #include "nsISHEntry.h"
 #include "nsSHEntryShared.h"
 #include "nsStructuredCloneContainer.h"
 #include "nsTHashMap.h"
 
@@ -385,32 +386,35 @@ class SessionHistoryEntry : public nsISH
   void SetBCHistoryLength(HistoryEntryCounterForBrowsingContext& aCounter) {
     mBCHistoryLength.CopyValueFrom(aCounter);
   }
 
   void ClearBCHistoryLength() { mBCHistoryLength.Reset(); }
 
   void SetIsDynamicallyAdded(bool aDynamic);
 
+  void SetWireframe(const Maybe<Wireframe>& aWireframe);
+
   // Get an entry based on LoadingSessionHistoryInfo's mLoadId. Parent process
   // only.
   static SessionHistoryEntry* GetByLoadId(uint64_t aLoadId);
   static void SetByLoadId(uint64_t aLoadId, SessionHistoryEntry* aEntry);
   static void RemoveLoadId(uint64_t aLoadId);
 
   const nsTArray<RefPtr<SessionHistoryEntry>>& Children() { return mChildren; }
 
  private:
   friend struct LoadingSessionHistoryInfo;
   virtual ~SessionHistoryEntry();
 
   UniquePtr<SessionHistoryInfo> mInfo;
   nsISHEntry* mParent = nullptr;
   uint32_t mID;
   nsTArray<RefPtr<SessionHistoryEntry>> mChildren;
+  Maybe<Wireframe> mWireframe;
 
   bool mForInitialLoad = false;
 
   HistoryEntryCounterForBrowsingContext mBCHistoryLength;
 
   static nsTHashMap<nsUint64HashKey, SessionHistoryEntry*>* sLoadIdToEntry;
 };
 
@@ -444,13 +448,22 @@ struct IPDLParamTraits<dom::LoadingSessi
 template <>
 struct IPDLParamTraits<nsILayoutHistoryState*> {
   static void Write(IPC::Message* aMsg, IProtocol* aActor,
                     nsILayoutHistoryState* aParam);
   static bool Read(const IPC::Message* aMsg, PickleIterator* aIter,
                    IProtocol* aActor, RefPtr<nsILayoutHistoryState>* aResult);
 };
 
+// Allow sending dom::Wireframe objects over IPC.
+template <>
+struct IPDLParamTraits<mozilla::dom::Wireframe> {
+  static void Write(IPC::Message* aMsg, IProtocol* aActor,
+                    const mozilla::dom::Wireframe& aParam);
+  static bool Read(const IPC::Message* aMsg, PickleIterator* aIter,
+                   IProtocol* aActor, mozilla::dom::Wireframe* aResult);
+};
+
 }  // namespace ipc
 
 }  // namespace mozilla
 
 #endif /* mozilla_dom_SessionHistoryEntry_h */
--- a/docshell/shistory/nsISHEntry.idl
+++ b/docshell/shistory/nsISHEntry.idl
@@ -452,9 +452,18 @@ interface nsISHEntry : nsISupports
      * @param aEntry                    new entry
      * @param aTopBC                    top BC corresponding to the root ancestor
                                         of the docshell that called this method
      * @param aIgnoreBC                 current BC
      */
     [notxpcom] void SyncTreesForSubframeNavigation(in nsISHEntry aEntry,
                                                    in BrowsingContext aTopBC,
                                                    in BrowsingContext aIgnoreBC);
+
+    /**
+     * If browser.history.collectWireframes is true, this will get populated
+     * with a Wireframe upon document navigation / pushState. This will only
+     * be set for nsISHEntry's accessed in the parent process with
+     * sessionHistoryInParent enabled. See Document.webidl for more details on
+     * what a Wireframe is.
+     */
+    [implicit_jscontext] readonly attribute jsval wireframe;
 };
--- a/docshell/shistory/nsSHEntry.cpp
+++ b/docshell/shistory/nsSHEntry.cpp
@@ -1100,8 +1100,14 @@ nsSHEntry::AbandonBFCacheEntry() {
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsSHEntry::GetBfcacheID(uint64_t* aBFCacheID) {
   *aBFCacheID = mShared->GetId();
   return NS_OK;
 }
+
+NS_IMETHODIMP
+nsSHEntry::GetWireframe(JSContext* aCx, JS::MutableHandleValue aOut) {
+  aOut.set(JS::NullValue());
+  return NS_OK;
+}
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -14561,19 +14561,24 @@ Element* Document::TopLayerPop(FunctionR
     }
   }
 
   return removedElement;
 }
 
 void Document::GetWireframe(bool aIncludeNodes,
                             Nullable<Wireframe>& aWireframe) {
+  FlushPendingNotifications(FlushType::Layout);
+  GetWireframeWithoutFlushing(aIncludeNodes, aWireframe);
+}
+
+void Document::GetWireframeWithoutFlushing(bool aIncludeNodes,
+                                           Nullable<Wireframe>& aWireframe) {
   using FrameForPointOptions = nsLayoutUtils::FrameForPointOptions;
   using FrameForPointOption = nsLayoutUtils::FrameForPointOption;
-  FlushPendingNotifications(FlushType::Layout);
 
   PresShell* shell = GetPresShell();
   if (!shell) {
     return;
   }
 
   nsPresContext* pc = shell->GetPresContext();
   if (!pc) {
@@ -14597,29 +14602,31 @@ void Document::GetWireframe(bool aInclud
 
   // TODO(emilio): We could rewrite hit testing to return nsDisplayItem*s or
   // something perhaps, but seems hard / like it'd involve at least some extra
   // copying around, since they don't outlive GetFramesForArea.
   auto& rects = wireframe.mRects.Construct();
   if (!rects.SetCapacity(frames.Length(), fallible)) {
     return;
   }
-  for (nsIFrame* frame : frames) {
+  for (nsIFrame* frame : Reversed(frames)) {
     // Can't really fail because SetCapacity succeeded.
     auto& taggedRect = *rects.AppendElement(fallible);
     const auto r =
         CSSRect::FromAppUnits(nsLayoutUtils::TransformFrameRectToAncestor(
             frame, frame->GetRectRelativeToSelf(), relativeTo));
     if (aIncludeNodes) {
       if (nsIContent* c = frame->GetContent()) {
         taggedRect.mNode.Construct(c);
       }
     }
-    taggedRect.mRect.Construct(MakeRefPtr<DOMRectReadOnly>(
-        ToSupports(this), r.x, r.y, r.width, r.height));
+    taggedRect.mX = r.x;
+    taggedRect.mY = r.y;
+    taggedRect.mWidth = r.width;
+    taggedRect.mHeight = r.height;
     taggedRect.mType.Construct() = [&] {
       if (frame->IsTextFrame()) {
         nsStyleUtil::GetSerializedColorValue(
             frame->StyleText()->mWebkitTextFillColor.CalcColor(frame),
             taggedRect.mColor.Construct());
         return WireframeRectType::Text;
       }
       if (frame->IsImageFrame() || frame->IsSVGOuterSVGFrame()) {
--- a/dom/base/Document.h
+++ b/dom/base/Document.h
@@ -271,16 +271,17 @@ class SVGSVGElement;
 class SVGUseElement;
 class Touch;
 class TouchList;
 class TreeWalker;
 enum class ViewportFitType : uint8_t;
 class WindowContext;
 class WindowGlobalChild;
 class WindowProxyHolder;
+struct Wireframe;
 class WorkerDocumentListener;
 class XPathEvaluator;
 class XPathExpression;
 class XPathNSResolver;
 class XPathResult;
 class BrowsingContext;
 
 class nsDocumentOnStack;
@@ -3405,16 +3406,18 @@ class Document : public nsINode,
   void MozSetImageElement(const nsAString& aImageElementId, Element* aElement);
   nsIURI* GetDocumentURIObject() const;
   // Not const because all the fullscreen goop is not const
   const char* GetFullscreenError(CallerType);
   bool FullscreenEnabled(CallerType aCallerType) {
     return !GetFullscreenError(aCallerType);
   }
 
+  void GetWireframeWithoutFlushing(bool aIncludeNodes, Nullable<Wireframe>&);
+
   MOZ_CAN_RUN_SCRIPT void GetWireframe(bool aIncludeNodes,
                                        Nullable<Wireframe>&);
 
   Element* GetTopLayerTop();
   // Return the fullscreen element in the top layer
   Element* GetUnretargetedFullScreenElement() const;
   bool Fullscreen() const { return !!GetUnretargetedFullScreenElement(); }
   already_AddRefed<Promise> ExitFullscreen(ErrorResult&);
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -7335,16 +7335,31 @@ mozilla::ipc::IPCResult ContentParent::R
   SessionHistoryEntry* entry =
       aContext.get_canonical()->GetActiveSessionHistoryEntry();
   if (entry) {
     entry->SetCacheKey(aCacheKey);
   }
   return IPC_OK();
 }
 
+mozilla::ipc::IPCResult ContentParent::RecvSessionHistoryEntryWireframe(
+    const MaybeDiscarded<BrowsingContext>& aContext,
+    const Wireframe& aWireframe) {
+  if (aContext.IsNullOrDiscarded()) {
+    return IPC_OK();
+  }
+
+  SessionHistoryEntry* entry =
+      aContext.get_canonical()->GetActiveSessionHistoryEntry();
+  if (entry) {
+    entry->SetWireframe(Some(aWireframe));
+  }
+  return IPC_OK();
+}
+
 mozilla::ipc::IPCResult
 ContentParent::RecvGetLoadingSessionHistoryInfoFromParent(
     const MaybeDiscarded<BrowsingContext>& aContext,
     GetLoadingSessionHistoryInfoFromParentResolver&& aResolver) {
   if (aContext.IsNullOrDiscarded()) {
     return IPC_OK();
   }
 
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -1372,16 +1372,20 @@ class ContentParent final
   mozilla::ipc::IPCResult RecvSessionHistoryEntryScrollPosition(
       const MaybeDiscarded<BrowsingContext>& aContext, const int32_t& aX,
       const int32_t& aY);
 
   mozilla::ipc::IPCResult RecvSessionHistoryEntryCacheKey(
       const MaybeDiscarded<BrowsingContext>& aContext,
       const uint32_t& aCacheKey);
 
+  mozilla::ipc::IPCResult RecvSessionHistoryEntryWireframe(
+      const MaybeDiscarded<BrowsingContext>& aContext,
+      const Wireframe& aWireframe);
+
   mozilla::ipc::IPCResult
   RecvSessionHistoryEntryStoreWindowNameInContiguousEntries(
       const MaybeDiscarded<BrowsingContext>& aContext, const nsString& aName);
 
   mozilla::ipc::IPCResult RecvGetLoadingSessionHistoryInfoFromParent(
       const MaybeDiscarded<BrowsingContext>& aContext,
       GetLoadingSessionHistoryInfoFromParentResolver&& aResolver);
 
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -148,16 +148,17 @@ using mozilla::PermissionDelegateHandler
 [RefCounted] using class nsILayoutHistoryState from "nsILayoutHistoryState.h";
 using class mozilla::dom::SessionHistoryInfo from "mozilla/dom/SessionHistoryEntry.h";
 using struct nsPoint from "nsPoint.h";
 using struct mozilla::dom::LoadingSessionHistoryInfo from "mozilla/dom/SessionHistoryEntry.h";
 using mozilla::PDMFactory::MediaCodecsSupported from "PDMFactory.h";
 using mozilla::RemoteDecodeIn from "mozilla/RemoteDecoderManagerChild.h";
 using mozilla::dom::PerformanceTimingData from "mozilla/dom/PerformanceTiming.h";
 [RefCounted] using mozilla::dom::FeaturePolicy from "mozilla/dom/FeaturePolicy.h";
+using Wireframe from "mozilla/dom/DocumentBinding.h";
 
 union ChromeRegistryItem
 {
     ChromePackage;
     OverrideMapping;
     SubstitutionMapping;
 };
 
@@ -1011,16 +1012,19 @@ parent:
                                             int32_t aX, int32_t aY);
 
     async SessionHistoryEntryCacheKey(MaybeDiscardedBrowsingContext aContext,
                                       uint32_t aCacheKey);
 
     async SessionHistoryEntryStoreWindowNameInContiguousEntries(MaybeDiscardedBrowsingContext aContext,
                                                                 nsString aName);
 
+    async SessionHistoryEntryWireframe(MaybeDiscardedBrowsingContext aContext,
+                                       Wireframe aWireframe);
+
     async GetLoadingSessionHistoryInfoFromParent(MaybeDiscardedBrowsingContext aContext)
         returns (LoadingSessionHistoryInfo? aLoadingInfo);
 
     async RemoveFromBFCache(MaybeDiscardedBrowsingContext aContext);
 
     async InitBackground(Endpoint<PBackgroundStarterParent> aEndpoint);
 
     async CreateGMPService();
--- a/dom/ipc/WindowGlobalChild.cpp
+++ b/dom/ipc/WindowGlobalChild.cpp
@@ -68,17 +68,18 @@ WindowGlobalChild::WindowGlobalChild(dom
   // loaded, the first url loaded in it will be about:blank. This call keeps the
   // first non-about:blank registration of window and discards the previous one.
   uint64_t embedderInnerWindowID = 0;
   if (BrowsingContext()->GetParent()) {
     embedderInnerWindowID = BrowsingContext()->GetEmbedderInnerWindowId();
   }
   profiler_register_page(BrowsingContext()->BrowserId(), InnerWindowId(),
                          aDocumentURI->GetSpecOrDefault(),
-                         embedderInnerWindowID);
+                         embedderInnerWindowID,
+                         BrowsingContext()->UsePrivateBrowsing());
 }
 
 already_AddRefed<WindowGlobalChild> WindowGlobalChild::Create(
     nsGlobalWindowInner* aWindow) {
 #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
   // Opener policy is set when we start to load a document. Here, we ensure we
   // have set the correct Opener policy so that it will be available in the
   // parent process through window global child.
@@ -597,17 +598,18 @@ void WindowGlobalChild::SetDocumentURI(n
   // loaded, the first url loaded in it will be about:blank. This call keeps the
   // first non-about:blank registration of window and discards the previous one.
   uint64_t embedderInnerWindowID = 0;
   if (BrowsingContext()->GetParent()) {
     embedderInnerWindowID = BrowsingContext()->GetEmbedderInnerWindowId();
   }
   profiler_register_page(BrowsingContext()->BrowserId(), InnerWindowId(),
                          aDocumentURI->GetSpecOrDefault(),
-                         embedderInnerWindowID);
+                         embedderInnerWindowID,
+                         BrowsingContext()->UsePrivateBrowsing());
   mDocumentURI = aDocumentURI;
   SendUpdateDocumentURI(aDocumentURI);
 }
 
 void WindowGlobalChild::SetDocumentPrincipal(
     nsIPrincipal* aNewDocumentPrincipal,
     nsIPrincipal* aNewDocumentStoragePrincipal) {
   MOZ_ASSERT(mDocumentPrincipal->Equals(aNewDocumentPrincipal));
--- a/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
+++ b/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
@@ -65,16 +65,17 @@ IS_LINUX=0
 echo "" > third_party/libwebrtc/moz.build
 
 # For now, only macOS, Windows, and Linux (including Android builds) are supported here.
 if [ "x$SYS_NAME" = "xDarwin" ]; then
   CONFIGS="x64_False_arm64_mac x64_True_arm64_mac x64_False_x64_mac x64_True_x64_mac"
   IS_DARWIN=1
 elif [ "x$SYS_NAME" = "xMINGW32_NT-6.2" ]; then
   export DEPOT_TOOLS_WIN_TOOLCHAIN=0
+  unset ANSICON
   CONFIGS="x64_True_arm64_win x64_False_arm64_win"
   CONFIGS="$CONFIGS x64_True_x64_win x64_False_x64_win"
   CONFIGS="$CONFIGS x64_True_x86_win x64_False_x86_win"
   IS_WIN=1
 elif [ "x$SYS_NAME" = "xOpenBSD" ]; then
   CONFIGS="x64_False_x64_openbsd x64_True_x64_openbsd"
 else
   # Ensure rust has the correct targets for building x86 and arm64.  These
--- a/dom/media/webrtc/third_party_build/gn-configs/x64_False_arm64_win.json
+++ b/dom/media/webrtc/third_party_build/gn-configs/x64_False_arm64_win.json
@@ -34,17 +34,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -223,17 +222,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -394,17 +392,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -565,17 +562,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -741,17 +737,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -913,17 +908,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1081,17 +1075,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1246,17 +1239,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1420,17 +1412,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1595,17 +1586,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1769,17 +1759,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -1944,17 +1933,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2118,17 +2106,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2294,17 +2281,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2457,17 +2443,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2633,17 +2618,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2811,17 +2795,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -2974,17 +2957,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -3145,17 +3127,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -3322,17 +3303,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -3493,17 +3473,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -3670,17 +3649,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -3847,17 +3825,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4025,17 +4002,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4188,17 +4164,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4362,17 +4337,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4540,17 +4514,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4713,17 +4686,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -4901,17 +4873,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5085,17 +5056,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5269,17 +5239,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5436,17 +5405,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5603,17 +5571,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5775,17 +5742,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -5947,17 +5913,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6125,17 +6090,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6300,17 +6264,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6469,17 +6432,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6642,17 +6604,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6816,17 +6777,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -6986,17 +6946,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -7155,17 +7114,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -7324,17 +7282,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -7491,17 +7448,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -7661,17 +7617,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -7836,17 +7791,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8013,17 +7967,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8179,17 +8132,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8351,17 +8303,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8520,17 +8471,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8690,17 +8640,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -8859,17 +8808,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9029,17 +8977,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9208,17 +9155,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9379,17 +9325,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9558,17 +9503,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9731,17 +9675,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -9899,17 +9842,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10070,17 +10012,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10237,17 +10178,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10406,17 +10346,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10569,17 +10508,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10750,17 +10688,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -10929,17 +10866,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11108,17 +11044,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11280,17 +11215,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11459,17 +11393,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11622,17 +11555,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11800,17 +11732,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -11981,17 +11912,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -12158,17 +12088,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -12323,17 +12252,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -12497,17 +12425,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -12675,17 +12602,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -12866,17 +12792,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13067,17 +12992,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13242,17 +13166,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13408,17 +13331,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13577,17 +13499,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13743,17 +13664,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -13906,17 +13826,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14071,17 +13990,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14238,17 +14156,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14411,17 +14328,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14576,17 +14492,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14739,17 +14654,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -14917,17 +14831,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15080,17 +14993,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15243,17 +15155,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15410,17 +15321,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15582,17 +15492,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15753,17 +15662,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -15928,17 +15836,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16103,17 +16010,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16266,17 +16172,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16429,17 +16334,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16600,17 +16504,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16764,17 +16667,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -16944,17 +16846,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -17194,17 +17095,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -17401,17 +17301,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -17568,17 +17467,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -17750,17 +17648,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -17926,17 +17823,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -18149,17 +18045,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -18366,17 +18261,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -18548,17 +18442,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -18736,17 +18629,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -18918,17 +18810,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -19137,17 +19028,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -19317,17 +19207,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -19488,17 +19377,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -19682,17 +19570,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -19858,17 +19745,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20022,17 +19908,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20186,17 +20071,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20395,17 +20279,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20623,17 +20506,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20784,17 +20666,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -20956,17 +20837,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21133,17 +21013,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21308,17 +21187,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21471,17 +21349,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21649,17 +21526,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21823,17 +21699,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -21995,17 +21870,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -22213,17 +22087,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -22376,17 +22249,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -22555,17 +22427,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -22742,17 +22613,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -22912,17 +22782,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23095,17 +22964,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23269,17 +23137,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23438,17 +23305,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23602,17 +23468,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23779,17 +23644,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -23954,17 +23818,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -24155,17 +24018,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -24376,17 +24238,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -24539,17 +24400,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -24729,17 +24589,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -24900,17 +24759,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25099,17 +24957,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25264,17 +25121,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25437,17 +25293,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25613,17 +25468,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25819,17 +25673,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -25985,17 +25838,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -26161,17 +26013,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -26339,17 +26190,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -26506,17 +26356,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -26685,17 +26534,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -26852,17 +26700,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -27035,17 +26882,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -27351,17 +27197,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -27527,17 +27372,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -27690,17 +27534,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -27907,17 +27750,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -28086,17 +27928,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -28265,17 +28106,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -28437,17 +28277,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -28693,17 +28532,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -28872,17 +28710,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29038,17 +28875,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29215,17 +29051,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29390,17 +29225,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29580,17 +29414,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29773,17 +29606,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -29951,17 +29783,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -30120,17 +29951,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -30293,17 +30123,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -30476,17 +30305,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -30643,17 +30471,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -30816,17 +30643,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -31015,17 +30841,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -31189,17 +31014,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -31381,17 +31205,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -31557,17 +31380,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -31724,17 +31546,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32019,17 +31840,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32182,17 +32002,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32358,17 +32177,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32525,17 +32343,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32695,17 +32512,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -32870,17 +32686,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33038,17 +32853,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33208,17 +33022,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33376,17 +33189,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33557,17 +33369,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33756,17 +33567,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -33946,17 +33756,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -34115,17 +33924,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -34284,17 +34092,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -34469,17 +34276,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -34640,17 +34446,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -34826,17 +34631,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35012,17 +34816,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35187,17 +34990,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35376,17 +35178,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35539,17 +35340,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35702,17 +35502,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -35881,17 +35680,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36058,17 +35856,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36271,17 +36068,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36434,17 +36230,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36625,17 +36420,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36792,17 +36586,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -36961,17 +36754,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -37129,17 +36921,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -37323,17 +37114,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -37493,17 +37283,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -37676,17 +37465,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -37851,17 +37639,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38031,17 +37818,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38201,17 +37987,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38366,17 +38151,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38610,17 +38394,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38777,17 +38560,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -38944,17 +38726,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39118,17 +38899,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39290,17 +39070,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39458,17 +39237,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39633,17 +39411,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39811,17 +39588,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -39996,17 +39772,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -40195,17 +39970,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -40394,17 +40168,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -40562,17 +40335,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -40749,17 +40521,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -40936,17 +40707,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -41110,17 +40880,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -41290,17 +41059,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -41476,17 +41244,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -41654,17 +41421,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -41824,17 +41590,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -42110,17 +41875,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -42287,17 +42051,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -42456,17 +42219,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -42667,17 +42429,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -42876,17 +42637,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -43215,17 +42975,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -43447,17 +43206,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -43622,17 +43380,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -43786,17 +43543,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -43952,17 +43708,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -44119,17 +43874,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -44297,17 +44051,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -44484,17 +44237,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -44676,17 +44428,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -44845,17 +44596,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45016,17 +44766,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45201,17 +44950,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45372,17 +45120,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45540,17 +45287,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45726,17 +45472,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -45901,17 +45646,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -46087,17 +45831,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -46269,17 +46012,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -46538,17 +46280,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -46754,17 +46495,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -46949,17 +46689,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -47140,17 +46879,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -47341,17 +47079,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -47527,17 +47264,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -47721,17 +47457,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -47904,17 +47639,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48069,17 +47803,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48262,17 +47995,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48428,17 +48160,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48592,17 +48323,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48757,17 +48487,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -48920,17 +48649,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -49091,17 +48819,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -49263,17 +48990,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",
                 "/Brepro",
                 "-Wno-builtin-macro-redefined",
                 "-D__DATE__=",
                 "-D__TIME__=",
                 "-D__TIMESTAMP__=",
                 "-Xclang",
                 "-fdebug-compilation-dir",
                 "-Xclang",
@@ -49434,17 +49160,16 @@
                 "/utf-8",
                 "/Zc:twoPhase",
                 "/Zc:sizedDealloc-",
                 "/X",
                 "/D__WRL_ENABLE_FUNCTION_STATICS__",
                 "-fmsc-version=1916",
                 "/guard:cf,nochecks",
                 "--target=arm64-windows",
-                "-fansi-escape-codes",