Bug 1596329 - Migrate .xul files in preferences to .xhtml;r=Gijs
authorBrian Grinstead <bgrinstead@mozilla.com>
Fri, 15 Nov 2019 17:36:11 +0000
changeset 502287 c5c17edb79f55f30fb8243e36b14688513c103c9
parent 502286 4921e64c42017a8fc5d935eb12e3334bb23a7b60
child 502288 10d924f0c08118b3241a0fe60e3ee7af59ad68ef
push id114172
push userdluca@mozilla.com
push dateTue, 19 Nov 2019 11:31:10 +0000
treeherdermozilla-inbound@b5c5ba07d3db [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersGijs
bugs1596329
milestone72.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1596329 - Migrate .xul files in preferences to .xhtml;r=Gijs Differential Revision: https://phabricator.services.mozilla.com/D53125
browser/base/content/aboutDialog-appUpdater.js
browser/base/content/test/pageinfo/browser_pageinfo_security.js
browser/base/content/test/siteIdentity/browser_identityPopup_clearSiteData.js
browser/components/about/AboutRedirector.cpp
browser/components/preferences/applicationManager.xhtml
browser/components/preferences/applicationManager.xul
browser/components/preferences/blocklists.xhtml
browser/components/preferences/blocklists.xul
browser/components/preferences/browserLanguages.xhtml
browser/components/preferences/browserLanguages.xul
browser/components/preferences/clearSiteData.xhtml
browser/components/preferences/clearSiteData.xul
browser/components/preferences/colors.xhtml
browser/components/preferences/colors.xul
browser/components/preferences/connection.xhtml
browser/components/preferences/connection.xul
browser/components/preferences/containers.xhtml
browser/components/preferences/containers.xul
browser/components/preferences/fonts.xhtml
browser/components/preferences/fonts.xul
browser/components/preferences/in-content/containers.inc.xhtml
browser/components/preferences/in-content/containers.inc.xul
browser/components/preferences/in-content/containers.js
browser/components/preferences/in-content/fxaPairDevice.xhtml
browser/components/preferences/in-content/fxaPairDevice.xul
browser/components/preferences/in-content/home.inc.xhtml
browser/components/preferences/in-content/home.inc.xul
browser/components/preferences/in-content/home.js
browser/components/preferences/in-content/jar.mn
browser/components/preferences/in-content/main.inc.xhtml
browser/components/preferences/in-content/main.inc.xul
browser/components/preferences/in-content/main.js
browser/components/preferences/in-content/preferences.xhtml
browser/components/preferences/in-content/preferences.xul
browser/components/preferences/in-content/privacy.inc.xhtml
browser/components/preferences/in-content/privacy.inc.xul
browser/components/preferences/in-content/privacy.js
browser/components/preferences/in-content/search.inc.xhtml
browser/components/preferences/in-content/search.inc.xul
browser/components/preferences/in-content/searchResults.inc.xhtml
browser/components/preferences/in-content/searchResults.inc.xul
browser/components/preferences/in-content/sync.inc.xhtml
browser/components/preferences/in-content/sync.inc.xul
browser/components/preferences/in-content/sync.js
browser/components/preferences/in-content/syncChooseWhatToSync.xhtml
browser/components/preferences/in-content/syncChooseWhatToSync.xul
browser/components/preferences/in-content/tests/browser_advanced_update.js
browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js
browser/components/preferences/in-content/tests/browser_browser_languages_subdialog.js
browser/components/preferences/in-content/tests/browser_change_app_handler.js
browser/components/preferences/in-content/tests/browser_connection.js
browser/components/preferences/in-content/tests/browser_connection_bug1445991.js
browser/components/preferences/in-content/tests/browser_connection_bug1505330.js
browser/components/preferences/in-content/tests/browser_connection_bug388287.js
browser/components/preferences/in-content/tests/browser_connection_dnsoverhttps.js
browser/components/preferences/in-content/tests/browser_containers_name_input.js
browser/components/preferences/in-content/tests/browser_cookie_exceptions_addRemove.js
browser/components/preferences/in-content/tests/browser_cookies_exceptions.js
browser/components/preferences/in-content/tests/browser_extension_controlled.js
browser/components/preferences/in-content/tests/browser_homepages_use_bookmark.js
browser/components/preferences/in-content/tests/browser_languages_subdialog.js
browser/components/preferences/in-content/tests/browser_masterpassword.js
browser/components/preferences/in-content/tests/browser_permissions_checkPermissionsWereAdded.js
browser/components/preferences/in-content/tests/browser_permissions_dialog.js
browser/components/preferences/in-content/tests/browser_permissions_urlFieldHidden.js
browser/components/preferences/in-content/tests/browser_proxy_backup.js
browser/components/preferences/in-content/tests/browser_site_login_exceptions.js
browser/components/preferences/in-content/tests/browser_sync_pairing.js
browser/components/preferences/in-content/tests/siteData/browser_clearSiteData.js
browser/components/preferences/in-content/tests/siteData/head.js
browser/components/preferences/jar.mn
browser/components/preferences/languages.xhtml
browser/components/preferences/languages.xul
browser/components/preferences/permissions.xhtml
browser/components/preferences/permissions.xul
browser/components/preferences/sanitize.xhtml
browser/components/preferences/sanitize.xul
browser/components/preferences/selectBookmark.xhtml
browser/components/preferences/selectBookmark.xul
browser/components/preferences/siteDataRemoveSelected.xhtml
browser/components/preferences/siteDataRemoveSelected.xul
browser/components/preferences/siteDataSettings.xhtml
browser/components/preferences/siteDataSettings.xul
browser/components/preferences/sitePermissions.xhtml
browser/components/preferences/sitePermissions.xul
browser/components/preferences/translation.xhtml
browser/components/preferences/translation.xul
browser/components/translation/test/browser_translation_exceptions.js
browser/modules/SiteDataManager.jsm
toolkit/components/passwordmgr/test/browser/browser_exceptions_dialog.js
toolkit/components/telemetry/docs/internals/preferences.rst
toolkit/content/aboutSupport.js
toolkit/locales/en-US/chrome/global/intl.properties
toolkit/mozapps/preferences/changemp.xhtml
toolkit/mozapps/preferences/changemp.xul
toolkit/mozapps/preferences/jar.mn
toolkit/mozapps/preferences/removemp.xhtml
toolkit/mozapps/preferences/removemp.xul
toolkit/mozapps/update/content/history.xhtml
toolkit/mozapps/update/content/history.xul
toolkit/mozapps/update/jar.mn
--- a/browser/base/content/aboutDialog-appUpdater.js
+++ b/browser/base/content/aboutDialog-appUpdater.js
@@ -1,13 +1,13 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-// Note: this file is included in aboutDialog.xul and preferences/advanced.xul
+// Note: this file is included in aboutDialog.xul and preferences/advanced.xhtml
 // if MOZ_UPDATER is defined.
 
 /* import-globals-from aboutDialog.js */
 
 var { XPCOMUtils } = ChromeUtils.import(
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 
--- a/browser/base/content/test/pageinfo/browser_pageinfo_security.js
+++ b/browser/base/content/test/pageinfo/browser_pageinfo_security.js
@@ -8,17 +8,17 @@ ChromeUtils.defineModuleGetter(
   "DownloadUtils",
   "resource://gre/modules/DownloadUtils.jsm"
 );
 
 const TEST_ORIGIN = "https://example.com";
 const TEST_HTTP_ORIGIN = "http://example.com";
 const TEST_SUB_ORIGIN = "https://test1.example.com";
 const REMOVE_DIALOG_URL =
-  "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
+  "chrome://browser/content/preferences/siteDataRemoveSelected.xhtml";
 const TEST_ORIGIN_CERT_ERROR = "https://expired.example.com";
 
 // Test opening the correct certificate information when clicking "Show certificate".
 add_task(async function test_ShowCertificate() {
   SpecialPowers.pushPrefEnv({
     set: [["security.aboutcertificate.enabled", true]],
   });
   let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_ORIGIN);
--- a/browser/base/content/test/siteIdentity/browser_identityPopup_clearSiteData.js
+++ b/browser/base/content/test/siteIdentity/browser_identityPopup_clearSiteData.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const TEST_ORIGIN = "https://example.com";
 const TEST_SUB_ORIGIN = "https://test1.example.com";
 const REMOVE_DIALOG_URL =
-  "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
+  "chrome://browser/content/preferences/siteDataRemoveSelected.xhtml";
 
 // Greek IDN for 'example.test'.
 const TEST_IDN_ORIGIN =
   "https://\u03C0\u03B1\u03C1\u03AC\u03B4\u03B5\u03B9\u03B3\u03BC\u03B1.\u03B4\u03BF\u03BA\u03B9\u03BC\u03AE";
 const TEST_PUNY_ORIGIN = "https://xn--hxajbheg2az3al.xn--jxalpdlp/";
 const TEST_PUNY_SUB_ORIGIN = "https://sub1.xn--hxajbheg2az3al.xn--jxalpdlp/";
 
 ChromeUtils.defineModuleGetter(
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -95,17 +95,17 @@ static const RedirEntry kRedirMap[] = {
      nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
          nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
          nsIAboutModule::HIDE_FROM_ABOUTABOUT},
     {"pocket-signup", "chrome://pocket/content/panels/signup.html",
      nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
          nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
          nsIAboutModule::HIDE_FROM_ABOUTABOUT},
     {"preferences",
-     "chrome://browser/content/preferences/in-content/preferences.xul",
+     "chrome://browser/content/preferences/in-content/preferences.xhtml",
      nsIAboutModule::ALLOW_SCRIPT},
     {"downloads",
      "chrome://browser/content/downloads/contentAreaDownloadsView.xul",
      nsIAboutModule::ALLOW_SCRIPT},
     {"reader", "chrome://global/content/reader/aboutReader.html",
      nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
          nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
          nsIAboutModule::HIDE_FROM_ABOUTABOUT},
rename from browser/components/preferences/applicationManager.xul
rename to browser/components/preferences/applicationManager.xhtml
rename from browser/components/preferences/blocklists.xul
rename to browser/components/preferences/blocklists.xhtml
rename from browser/components/preferences/browserLanguages.xul
rename to browser/components/preferences/browserLanguages.xhtml
rename from browser/components/preferences/clearSiteData.xul
rename to browser/components/preferences/clearSiteData.xhtml
rename from browser/components/preferences/colors.xul
rename to browser/components/preferences/colors.xhtml
rename from browser/components/preferences/connection.xul
rename to browser/components/preferences/connection.xhtml
rename from browser/components/preferences/containers.xul
rename to browser/components/preferences/containers.xhtml
rename from browser/components/preferences/fonts.xul
rename to browser/components/preferences/fonts.xhtml
rename from browser/components/preferences/in-content/containers.inc.xul
rename to browser/components/preferences/in-content/containers.inc.xhtml
--- a/browser/components/preferences/in-content/containers.js
+++ b/browser/components/preferences/in-content/containers.js
@@ -151,14 +151,14 @@ let gContainersPane = {
       );
       identity.name = ContextualIdentityService.getUserContextLabel(
         identity.userContextId
       );
     }
 
     const params = { userContextId, identity };
     gSubDialog.open(
-      "chrome://browser/content/preferences/containers.xul",
+      "chrome://browser/content/preferences/containers.xhtml",
       null,
       params
     );
   },
 };
rename from browser/components/preferences/in-content/fxaPairDevice.xul
rename to browser/components/preferences/in-content/fxaPairDevice.xhtml
rename from browser/components/preferences/in-content/home.inc.xul
rename to browser/components/preferences/in-content/home.inc.xhtml
--- a/browser/components/preferences/in-content/home.js
+++ b/browser/components/preferences/in-content/home.js
@@ -391,17 +391,17 @@ var gHomePane = {
   /**
    * Displays a dialog in which the user can select a bookmark to use as home
    * page.  If the user selects a bookmark, that bookmark's name is displayed in
    * UI and the bookmark's address is stored to the home page preference.
    */
   setHomePageToBookmark() {
     const rv = { urls: null, names: null };
     gSubDialog.open(
-      "chrome://browser/content/preferences/selectBookmark.xul",
+      "chrome://browser/content/preferences/selectBookmark.xhtml",
       "resizable=yes, modal=yes",
       rv,
       this._setHomePageToBookmarkClosed.bind(this, rv)
     );
     Services.telemetry.scalarAdd("preferences.use_bookmark", 1);
   },
 
   restoreDefaultHomePage() {
--- a/browser/components/preferences/in-content/jar.mn
+++ b/browser/components/preferences/in-content/jar.mn
@@ -1,21 +1,21 @@
 # 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/.
 
 browser.jar:
    content/browser/preferences/in-content/preferences.js
    content/browser/preferences/in-content/extensionControlled.js
-*  content/browser/preferences/in-content/preferences.xul
+*  content/browser/preferences/in-content/preferences.xhtml
    content/browser/preferences/in-content/subdialogs.js
 
    content/browser/preferences/in-content/main.js
    content/browser/preferences/in-content/home.js
    content/browser/preferences/in-content/search.js
    content/browser/preferences/in-content/privacy.js
    content/browser/preferences/in-content/containers.js
    content/browser/preferences/in-content/sync.js
-   content/browser/preferences/in-content/syncChooseWhatToSync.xul
+   content/browser/preferences/in-content/syncChooseWhatToSync.xhtml
    content/browser/preferences/in-content/syncChooseWhatToSync.js
-   content/browser/preferences/in-content/fxaPairDevice.xul
+   content/browser/preferences/in-content/fxaPairDevice.xhtml
    content/browser/preferences/in-content/fxaPairDevice.js
    content/browser/preferences/in-content/findInPage.js
rename from browser/components/preferences/in-content/main.inc.xul
rename to browser/components/preferences/in-content/main.inc.xhtml
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -1228,17 +1228,17 @@ var gMainPane = {
       document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
     }
   },
 
   /**
    * Shows a dialog in which the preferred language for web content may be set.
    */
   showLanguages() {
-    gSubDialog.open("chrome://browser/content/preferences/languages.xul");
+    gSubDialog.open("chrome://browser/content/preferences/languages.xhtml");
   },
 
   recordBrowserLanguagesTelemetry(method, value = null) {
     Services.telemetry.recordEvent(
       "intl.ui.browserLanguage",
       method,
       "main",
       value
@@ -1251,17 +1251,17 @@ var gMainPane = {
       Services.telemetry.msSinceProcessStart(),
       10
     ).toString();
     let method = search ? "search" : "manage";
     gMainPane.recordBrowserLanguagesTelemetry(method, telemetryId);
 
     let opts = { selected: gMainPane.selectedLocales, search, telemetryId };
     gSubDialog.open(
-      "chrome://browser/content/preferences/browserLanguages.xul",
+      "chrome://browser/content/preferences/browserLanguages.xhtml",
       null,
       opts,
       this.browserLanguagesClosed
     );
   },
 
   /* Show or hide the confirm change message bar based on the updated ordering. */
   browserLanguagesClosed() {
@@ -1284,55 +1284,55 @@ var gMainPane = {
     gMainPane.hideConfirmLanguageChangeMessageBar();
   },
 
   /**
    * Displays the translation exceptions dialog where specific site and language
    * translation preferences can be set.
    */
   showTranslationExceptions() {
-    gSubDialog.open("chrome://browser/content/preferences/translation.xul");
+    gSubDialog.open("chrome://browser/content/preferences/translation.xhtml");
   },
 
   openTranslationProviderAttribution() {
     var { Translation } = ChromeUtils.import(
       "resource:///modules/translation/Translation.jsm"
     );
     Translation.openProviderAttribution();
   },
 
   /**
    * Displays the fonts dialog, where web page font names and sizes can be
    * configured.
    */
   configureFonts() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/fonts.xul",
+      "chrome://browser/content/preferences/fonts.xhtml",
       "resizable=no"
     );
   },
 
   /**
    * Displays the colors dialog, where default web page/link/etc. colors can be
    * configured.
    */
   configureColors() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/colors.xul",
+      "chrome://browser/content/preferences/colors.xhtml",
       "resizable=no"
     );
   },
 
   // NETWORK
   /**
    * Displays a dialog in which proxy settings may be changed.
    */
   showConnections() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/connection.xul",
+      "chrome://browser/content/preferences/connection.xhtml",
       null,
       null,
       this.updateProxySettingsUI.bind(this)
     );
   },
 
   // Update the UI to show the proper description depending on whether an
   // extension is in control or not.
@@ -1765,17 +1765,17 @@ var gMainPane = {
       um.cleanupActiveUpdate();
     }
   },
 
   /**
    * Displays the history of installed updates.
    */
   showUpdates() {
-    gSubDialog.open("chrome://mozapps/content/update/history.xul");
+    gSubDialog.open("chrome://mozapps/content/update/history.xhtml");
   },
 
   destroy() {
     window.removeEventListener("unload", this);
     Services.prefs.removeObserver(PREF_SHOW_PLUGINS_IN_LIST, this);
     Services.prefs.removeObserver(PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS, this);
 
     Services.prefs.removeObserver(PREF_CONTAINERS_EXTENSION, this);
@@ -2513,17 +2513,17 @@ var gMainPane = {
       // or "Always ask" if the previous default application has been removed
       this.rebuildActionsMenu();
 
       // update the richlistitem too. Will be visible when selecting another row
       this.selectedHandlerListItem.refreshAction();
     };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/applicationManager.xul",
+      "chrome://browser/content/preferences/applicationManager.xhtml",
       "resizable=no",
       handlerInfo,
       onComplete
     );
   },
 
   async chooseApp(aEvent) {
     // Don't let the normal "on select action" handler get this event,
rename from browser/components/preferences/in-content/preferences.xul
rename to browser/components/preferences/in-content/preferences.xhtml
--- a/browser/components/preferences/in-content/preferences.xul
+++ b/browser/components/preferences/in-content/preferences.xhtml
@@ -185,23 +185,23 @@
           </hbox>
           <search-textbox
             id="searchInput"
             data-l10n-id="search-input-box"
             data-l10n-attrs="placeholder, style"
             hidden="true"/>
         </hbox>
         <vbox id="mainPrefPane">
-#include searchResults.inc.xul
-#include main.inc.xul
-#include home.inc.xul
-#include search.inc.xul
-#include privacy.inc.xul
-#include containers.inc.xul
-#include sync.inc.xul
+#include searchResults.inc.xhtml
+#include main.inc.xhtml
+#include home.inc.xhtml
+#include search.inc.xhtml
+#include privacy.inc.xhtml
+#include containers.inc.xhtml
+#include sync.inc.xhtml
         </vbox>
       </vbox>
     </vbox>
   </hbox>
 
   <stack id="dialogStack" hidden="true"/>
   <vbox id="dialogTemplate" class="dialogOverlay" align="center" pack="center" topmost="true" hidden="true">
     <vbox class="dialogBox"
rename from browser/components/preferences/in-content/privacy.inc.xul
rename to browser/components/preferences/in-content/privacy.inc.xhtml
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -1314,17 +1314,17 @@ var gPrivacyPane = {
    *   Clear Private Data settings, false otherwise
    */
 
   /**
    * Displays the Clear Private Data settings dialog.
    */
   showClearPrivateDataSettings() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/sanitize.xul",
+      "chrome://browser/content/preferences/sanitize.xhtml",
       "resizable=no"
     );
   },
 
   /**
    * Displays a dialog from which individual parts of private data may be
    * cleared.
    */
@@ -1440,28 +1440,28 @@ var gPrivacyPane = {
    * Displays fine-grained, per-site preferences for tracking protection.
    */
   showTrackingProtectionExceptions() {
     let params = {
       permissionType: "trackingprotection",
       hideStatusColumn: true,
     };
     gSubDialog.open(
-      "chrome://browser/content/preferences/permissions.xul",
+      "chrome://browser/content/preferences/permissions.xhtml",
       null,
       params
     );
   },
 
   /**
    * Displays the available block lists for tracking protection.
    */
   showBlockLists() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/blocklists.xul",
+      "chrome://browser/content/preferences/blocklists.xhtml",
       null
     );
   },
 
   // COOKIES AND SITE DATA
 
   /*
    * Preferences:
@@ -1611,25 +1611,25 @@ var gPrivacyPane = {
     var params = {
       blockVisible: true,
       sessionVisible: true,
       allowVisible: true,
       prefilledHost: "",
       permissionType: "cookie",
     };
     gSubDialog.open(
-      "chrome://browser/content/preferences/permissions.xul",
+      "chrome://browser/content/preferences/permissions.xhtml",
       null,
       params
     );
   },
 
   showSiteDataSettings() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/siteDataSettings.xul"
+      "chrome://browser/content/preferences/siteDataSettings.xhtml"
     );
   },
 
   toggleSiteData(shouldShow) {
     let clearButton = document.getElementById("clearSiteDataButton");
     let settingsButton = document.getElementById("siteDataSettings");
     clearButton.disabled = !shouldShow;
     settingsButton.disabled = !shouldShow;
@@ -1655,90 +1655,90 @@ var gPrivacyPane = {
           value,
           unit,
         }
       );
     });
   },
 
   clearSiteData() {
-    gSubDialog.open("chrome://browser/content/preferences/clearSiteData.xul");
+    gSubDialog.open("chrome://browser/content/preferences/clearSiteData.xhtml");
   },
 
   // GEOLOCATION
 
   /**
    * Displays the location exceptions dialog where specific site location
    * preferences can be set.
    */
   showLocationExceptions() {
     let params = { permissionType: "geo" };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/sitePermissions.xul",
+      "chrome://browser/content/preferences/sitePermissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // CAMERA
 
   /**
    * Displays the camera exceptions dialog where specific site camera
    * preferences can be set.
    */
   showCameraExceptions() {
     let params = { permissionType: "camera" };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/sitePermissions.xul",
+      "chrome://browser/content/preferences/sitePermissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // MICROPHONE
 
   /**
    * Displays the microphone exceptions dialog where specific site microphone
    * preferences can be set.
    */
   showMicrophoneExceptions() {
     let params = { permissionType: "microphone" };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/sitePermissions.xul",
+      "chrome://browser/content/preferences/sitePermissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // NOTIFICATIONS
 
   /**
    * Displays the notifications exceptions dialog where specific site notification
    * preferences can be set.
    */
   showNotificationExceptions() {
     let params = { permissionType: "desktop-notification" };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/sitePermissions.xul",
+      "chrome://browser/content/preferences/sitePermissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // MEDIA
 
   showAutoplayMediaExceptions() {
     var params = { permissionType: "autoplay-media" };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/sitePermissions.xul",
+      "chrome://browser/content/preferences/sitePermissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // POP-UPS
 
   /**
@@ -1750,17 +1750,17 @@ var gPrivacyPane = {
       blockVisible: false,
       sessionVisible: false,
       allowVisible: true,
       prefilledHost: "",
       permissionType: "popup",
     };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/permissions.xul",
+      "chrome://browser/content/preferences/permissions.xhtml",
       "resizable=yes",
       params
     );
   },
 
   // UTILITY FUNCTIONS
 
   /**
@@ -1795,17 +1795,17 @@ var gPrivacyPane = {
       sessionVisible: false,
       allowVisible: false,
       hideStatusColumn: true,
       prefilledHost: "",
       permissionType: "login-saving",
     };
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/permissions.xul",
+      "chrome://browser/content/preferences/permissions.xhtml",
       null,
       params
     );
   },
 
   /**
    * Initializes master password UI: the "use master password" checkbox, selects
    * the master password button to show, and enables/disables it as necessary.
@@ -1859,30 +1859,30 @@ var gPrivacyPane = {
     );
     if (secmodDB.isFIPSEnabled) {
       let title = document.getElementById("fips-title").textContent;
       let desc = document.getElementById("fips-desc").textContent;
       Services.prompt.alert(window, title, desc);
       this._initMasterPasswordUI();
     } else {
       gSubDialog.open(
-        "chrome://mozapps/content/preferences/removemp.xul",
+        "chrome://mozapps/content/preferences/removemp.xhtml",
         null,
         null,
         this._initMasterPasswordUI.bind(this)
       );
     }
   },
 
   /**
    * Displays a dialog in which the master password may be changed.
    */
   changeMasterPassword() {
     gSubDialog.open(
-      "chrome://mozapps/content/preferences/changemp.xul",
+      "chrome://mozapps/content/preferences/changemp.xhtml",
       "resizable=no",
       null,
       this._initMasterPasswordUI.bind(this)
     );
   },
 
   /**
    * Set up the initial state for the password generation UI.
@@ -2076,17 +2076,17 @@ var gPrivacyPane = {
 
   /**
    * Displays the exceptions lists for add-on installation warnings.
    */
   showAddonExceptions() {
     var params = this._addonParams;
 
     gSubDialog.open(
-      "chrome://browser/content/preferences/permissions.xul",
+      "chrome://browser/content/preferences/permissions.xhtml",
       null,
       params
     );
   },
 
   /**
    * Parameters for the add-on install permissions dialog.
    */
rename from browser/components/preferences/in-content/search.inc.xul
rename to browser/components/preferences/in-content/search.inc.xhtml
rename from browser/components/preferences/in-content/searchResults.inc.xul
rename to browser/components/preferences/in-content/searchResults.inc.xhtml
rename from browser/components/preferences/in-content/sync.inc.xul
rename to browser/components/preferences/in-content/sync.inc.xhtml
--- a/browser/components/preferences/in-content/sync.js
+++ b/browser/components/preferences/in-content/sync.js
@@ -289,17 +289,17 @@ var gSyncPane = {
       }
     }
     let params = {};
     if (isAlreadySyncing) {
       // If we are already syncing then we also offer to disconnect.
       params.disconnectFun = () => this.disconnectSync();
     }
     gSubDialog.open(
-      "chrome://browser/content/preferences/in-content/syncChooseWhatToSync.xul",
+      "chrome://browser/content/preferences/in-content/syncChooseWhatToSync.xhtml",
       "" /* aFeatures */,
       params /* aParams */,
       event => {
         /* aClosingCallback */
         if (!isAlreadySyncing && event.detail.button == "accept") {
           // We weren't syncing but the user has accepted the dialog - so we
           // want to start!
           Weave.Service.configure();
@@ -553,17 +553,17 @@ var gSyncPane = {
     return window.docShell.rootTreeItem.domWindow.gSync.disconnect({
       confirm: true,
       disconnectAccount: false,
     });
   },
 
   pairAnotherDevice() {
     gSubDialog.open(
-      "chrome://browser/content/preferences/in-content/fxaPairDevice.xul",
+      "chrome://browser/content/preferences/in-content/fxaPairDevice.xhtml",
       "resizable=no" /* aFeatures */,
       null /* aParams */,
       null /* aClosingCallback */
     );
   },
 
   _populateComputerName(value) {
     let textbox = document.getElementById("fxaSyncComputerName");
rename from browser/components/preferences/in-content/syncChooseWhatToSync.xul
rename to browser/components/preferences/in-content/syncChooseWhatToSync.xhtml
--- a/browser/components/preferences/in-content/tests/browser_advanced_update.js
+++ b/browser/components/preferences/in-content/tests/browser_advanced_update.js
@@ -128,17 +128,17 @@ add_task(async function() {
   // It is registered here so that we could assert update history subdialog
   // without stopping the preferences advanced pane from loading.
   // See bug 1361929.
   mockUpdateManager.register();
 
   // Test the dialog window opens
   is(dialogOverlay.style.visibility, "", "The dialog should be invisible");
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://mozapps/content/update/history.xul"
+    "chrome://mozapps/content/update/history.xhtml"
   );
   showBtn.doCommand();
   await promiseSubDialogLoaded;
   is(dialogOverlay.style.visibility, "visible", "The dialog should be visible");
 
   let dialogFrame = dialogOverlay.querySelector(".dialogFrame");
   let frameDoc = dialogFrame.contentDocument;
   let updates = frameDoc.querySelectorAll("richlistitem.update");
--- a/browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js
+++ b/browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js
@@ -95,17 +95,17 @@ add_task(async function() {
   let fontSizeField = doc.getElementById("defaultFontSize");
   is(
     fontSizeField.value,
     defaultFontSize,
     "Font size should be set correctly."
   );
 
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/fonts.xul"
+    "chrome://browser/content/preferences/fonts.xhtml"
   );
   doc.getElementById("advancedFonts").click();
   let win = await promiseSubDialogLoaded;
   doc = win.document;
 
   // Simulate a dumb font backend.
   win.FontBuilder._enumerator = {
     _list: ["MockedFont1", "MockedFont2", "MockedFont3"],
--- a/browser/components/preferences/in-content/tests/browser_browser_languages_subdialog.js
+++ b/browser/components/preferences/in-content/tests/browser_browser_languages_subdialog.js
@@ -2,17 +2,17 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 ChromeUtils.import("resource://testing-common/AddonTestUtils.jsm", this);
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 AddonTestUtils.initMochitest(this);
 
 const BROWSER_LANGUAGES_URL =
-  "chrome://browser/content/preferences/browserLanguages.xul";
+  "chrome://browser/content/preferences/browserLanguages.xhtml";
 const DICTIONARY_ID_PL = "pl@dictionaries.addons.mozilla.org";
 const TELEMETRY_CATEGORY = "intl.ui.browserLanguage";
 
 function langpackId(locale) {
   return `langpack-${locale}@firefox.mozilla.org`;
 }
 
 function getManifestData(locale, version = "2.0") {
--- a/browser/components/preferences/in-content/tests/browser_change_app_handler.js
+++ b/browser/components/preferences/in-content/tests/browser_change_app_handler.js
@@ -85,17 +85,17 @@ add_task(async function() {
   ok(list.selectedItem, "Should have a selected item");
   ok(
     mimeInfo.preferredApplicationHandler.equals(list.selectedItem.handlerApp),
     "App should be visible as preferred item."
   );
 
   // Now try to 'manage' this list:
   dialogLoadedPromise = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/applicationManager.xul"
+    "chrome://browser/content/preferences/applicationManager.xhtml"
   );
 
   let manageItem = list.menupopup.querySelector(".manage-app-item");
   cmdEvent = win.document.createEvent("xulcommandevent");
   cmdEvent.initCommandEvent(
     "command",
     true,
     true,
--- a/browser/components/preferences/in-content/tests/browser_connection.js
+++ b/browser/components/preferences/in-content/tests/browser_connection.js
@@ -12,17 +12,17 @@ function test() {
   // changes this setting from the default
   let oldNetworkProxyType = Services.prefs.getIntPref("network.proxy.type");
   registerCleanupFunction(function() {
     Services.prefs.setIntPref("network.proxy.type", oldNetworkProxyType);
     Services.prefs.clearUserPref("network.proxy.no_proxies_on");
     Services.prefs.clearUserPref("browser.preferences.instantApply");
   });
 
-  let connectionURL = "chrome://browser/content/preferences/connection.xul";
+  let connectionURL = "chrome://browser/content/preferences/connection.xhtml";
 
   /*
   The connection dialog alone won't save onaccept since it uses type="child",
   so it has to be opened as a sub dialog of the main pref tab.
   Open the main tab here.
   */
   open_preferences(async function tabOpened(aContentWindow) {
     is(
--- a/browser/components/preferences/in-content/tests/browser_connection_bug1445991.js
+++ b/browser/components/preferences/in-content/tests/browser_connection_bug1445991.js
@@ -10,17 +10,17 @@ add_task(async function testAutoconfigRe
   await SpecialPowers.pushPrefEnv({
     set: [
       ["network.proxy.type", 2],
       ["network.proxy.autoconfig_url", "file:///nonexistent.pac"],
     ],
   });
 
   await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true });
-  const connectionURL = "chrome://browser/content/preferences/connection.xul";
+  const connectionURL = "chrome://browser/content/preferences/connection.xhtml";
   const promiseDialogLoaded = promiseLoadSubDialog(connectionURL);
   gBrowser.contentDocument.getElementById("connectionSettings").click();
   const dialog = await promiseDialogLoaded;
 
   ok(
     !dialog.document.getElementById("autoReload").disabled,
     "Reload button is enabled when proxy type is autoconfig"
   );
--- a/browser/components/preferences/in-content/tests/browser_connection_bug1505330.js
+++ b/browser/components/preferences/in-content/tests/browser_connection_bug1505330.js
@@ -5,17 +5,17 @@
 "use strict";
 
 // Test the disabled status of the autoconfig Reload button when the proxy type
 // is autoconfig (network.proxy.type == 2).
 add_task(async function testAutoconfigReloadButton() {
   Services.prefs.lockPref("signon.autologin.proxy");
 
   await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true });
-  const connectionURL = "chrome://browser/content/preferences/connection.xul";
+  const connectionURL = "chrome://browser/content/preferences/connection.xhtml";
   const promiseDialogLoaded = promiseLoadSubDialog(connectionURL);
   gBrowser.contentDocument.getElementById("connectionSettings").click();
   const dialog = await promiseDialogLoaded;
 
   ok(
     !dialog.document.getElementById("networkProxyType").firstChild.disabled,
     "Connection options should not be disabled"
   );
--- a/browser/components/preferences/in-content/tests/browser_connection_bug388287.js
+++ b/browser/components/preferences/in-content/tests/browser_connection_bug388287.js
@@ -1,17 +1,17 @@
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 function test() {
   waitForExplicitFinish();
-  const connectionURL = "chrome://browser/content/preferences/connection.xul";
+  const connectionURL = "chrome://browser/content/preferences/connection.xhtml";
   let closeable = false;
   let finalTest = false;
 
   // The changed preferences need to be backed up and restored because this mochitest
   // changes them setting from the default
   let oldNetworkProxyType = Services.prefs.getIntPref("network.proxy.type");
   registerCleanupFunction(function() {
     Services.prefs.setIntPref("network.proxy.type", oldNetworkProxyType);
--- a/browser/components/preferences/in-content/tests/browser_connection_dnsoverhttps.js
+++ b/browser/components/preferences/in-content/tests/browser_connection_dnsoverhttps.js
@@ -1,11 +1,11 @@
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
-const SUBDIALOG_URL = "chrome://browser/content/preferences/connection.xul";
+const SUBDIALOG_URL = "chrome://browser/content/preferences/connection.xhtml";
 const TRR_MODE_PREF = "network.trr.mode";
 const TRR_URI_PREF = "network.trr.uri";
 const TRR_RESOLVERS_PREF = "network.trr.resolvers";
 const TRR_CUSTOM_URI_PREF = "network.trr.custom_uri";
 const DEFAULT_RESOLVER_VALUE = "https://mozilla.cloudflare-dns.com/dns-query";
 
 const modeCheckboxSelector = "#networkDnsOverHttps";
 const uriTextboxSelector = "#networkCustomDnsOverHttpsInput";
--- a/browser/components/preferences/in-content/tests/browser_containers_name_input.js
+++ b/browser/components/preferences/in-content/tests/browser_containers_name_input.js
@@ -1,9 +1,9 @@
-const CONTAINERS_URL = "chrome://browser/content/preferences/containers.xul";
+const CONTAINERS_URL = "chrome://browser/content/preferences/containers.xhtml";
 
 add_task(async function setup() {
   await openPreferencesViaOpenPreferencesAPI("containers", { leaveOpen: true });
   registerCleanupFunction(async function() {
     BrowserTestUtils.removeTab(gBrowser.selectedTab);
   });
 });
 
--- a/browser/components/preferences/in-content/tests/browser_cookie_exceptions_addRemove.js
+++ b/browser/components/preferences/in-content/tests/browser_cookie_exceptions_addRemove.js
@@ -1,14 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+const PERMISSIONS_URL =
+  "chrome://browser/content/preferences/permissions.xhtml";
 
 async function openCookiesDialog(doc) {
   let cookieExceptionsButton = doc.getElementById("cookieExceptions");
   ok(cookieExceptionsButton, "cookieExceptionsButton found");
   let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
   cookieExceptionsButton.click();
   let dialog = await dialogPromise;
   return dialog;
--- a/browser/components/preferences/in-content/tests/browser_cookies_exceptions.js
+++ b/browser/components/preferences/in-content/tests/browser_cookies_exceptions.js
@@ -501,17 +501,17 @@ async function runTest(test, getObservan
   });
 
   let doc = gBrowser.contentDocument;
   let historyMode = doc.getElementById("historyMode");
   historyMode.value = "custom";
   historyMode.doCommand();
 
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/permissions.xul"
+    "chrome://browser/content/preferences/permissions.xhtml"
   );
   doc.getElementById("cookieExceptions").doCommand();
 
   let win = await promiseSubDialogLoaded;
 
   doc = win.document;
   let params = {
     doc,
--- a/browser/components/preferences/in-content/tests/browser_extension_controlled.js
+++ b/browser/components/preferences/in-content/tests/browser_extension_controlled.js
@@ -18,17 +18,17 @@ XPCOMUtils.defineLazyPreferenceGetter(th
 const { AddonTestUtils } = ChromeUtils.import(
   "resource://testing-common/AddonTestUtils.jsm"
 );
 AddonTestUtils.initMochitest(this);
 
 const TEST_DIR = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
 const CHROME_URL_ROOT = TEST_DIR + "/";
 const PERMISSIONS_URL =
-  "chrome://browser/content/preferences/sitePermissions.xul";
+  "chrome://browser/content/preferences/sitePermissions.xhtml";
 let sitePermissionsDialog;
 
 function getSupportsFile(path) {
   let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(
     Ci.nsIChromeRegistry
   );
   let uri = Services.io.newURI(CHROME_URL_ROOT + path);
   let fileurl = cr.convertChromeURL(uri);
@@ -965,17 +965,17 @@ add_task(async function testExtensionCon
 
 add_task(async function testExtensionControlledProxyConfig() {
   const proxySvc = Ci.nsIProtocolProxyService;
   const PROXY_DEFAULT = proxySvc.PROXYCONFIG_SYSTEM;
   const EXTENSION_ID = "@set_proxy";
   const CONTROLLED_SECTION_ID = "proxyExtensionContent";
   const CONTROLLED_BUTTON_ID = "disableProxyExtension";
   const CONNECTION_SETTINGS_DESC_ID = "connectionSettingsDescription";
-  const PANEL_URL = "chrome://browser/content/preferences/connection.xul";
+  const PANEL_URL = "chrome://browser/content/preferences/connection.xhtml";
 
   await SpecialPowers.pushPrefEnv({ set: [[PROXY_PREF, PROXY_DEFAULT]] });
 
   function background() {
     browser.proxy.settings.set({ value: { proxyType: "none" } });
   }
 
   function expectedConnectionSettingsMessage(doc, isControlled) {
--- a/browser/components/preferences/in-content/tests/browser_homepages_use_bookmark.js
+++ b/browser/components/preferences/in-content/tests/browser_homepages_use_bookmark.js
@@ -31,17 +31,17 @@ add_task(async function testSetHomepageF
     url: TEST_URL1,
   });
 
   let doc = gBrowser.contentDocument;
   // Select the custom URLs option.
   doc.getElementById("homeMode").value = 2;
 
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/selectBookmark.xul"
+    "chrome://browser/content/preferences/selectBookmark.xhtml"
   );
   doc.getElementById("useBookmarkBtn").click();
 
   let dialog = await promiseSubDialogLoaded;
   dialog.document.getElementById("bookmarks").selectItems([bm.guid]);
   dialog.document.documentElement.getButton("accept").click();
 
   await TestUtils.waitForCondition(() => HomePage.get() == TEST_URL1);
@@ -61,17 +61,17 @@ add_task(async function testSetHomepageF
     url: TEST_URL2,
   });
 
   let doc = gBrowser.contentDocument;
   // Select the custom URLs option.
   doc.getElementById("homeMode").value = 2;
 
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/selectBookmark.xul"
+    "chrome://browser/content/preferences/selectBookmark.xhtml"
   );
   doc.getElementById("useBookmarkBtn").click();
 
   let dialog = await promiseSubDialogLoaded;
   dialog.document
     .getElementById("bookmarks")
     .selectItems([PlacesUtils.bookmarks.menuGuid]);
   dialog.document.documentElement.getButton("accept").click();
--- a/browser/components/preferences/in-content/tests/browser_languages_subdialog.js
+++ b/browser/components/preferences/in-content/tests/browser_languages_subdialog.js
@@ -1,16 +1,16 @@
 add_task(async function() {
   await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true });
   const contentDocument = gBrowser.contentDocument;
   const dialogOverlay = content.gSubDialog._preloadDialog._overlay;
 
   async function languagesSubdialogOpened() {
     const promiseSubDialogLoaded = promiseLoadSubDialog(
-      "chrome://browser/content/preferences/languages.xul"
+      "chrome://browser/content/preferences/languages.xhtml"
     );
     contentDocument.getElementById("chooseLanguage").click();
     const win = await promiseSubDialogLoaded;
     win.Preferences.forceEnableInstantApply();
     is(dialogOverlay.style.visibility, "visible", "The dialog is visible.");
     return win;
   }
 
--- a/browser/components/preferences/in-content/tests/browser_masterpassword.js
+++ b/browser/components/preferences/in-content/tests/browser_masterpassword.js
@@ -29,37 +29,37 @@ add_task(async function() {
   );
   let button = doc.getElementById("changeMasterPassword");
   ok(button.disabled, "master password button should be disabled by default");
 
   let masterPasswordNextState = true;
   checkbox.click();
   is(
     dialogURL,
-    "chrome://mozapps/content/preferences/changemp.xul",
+    "chrome://mozapps/content/preferences/changemp.xhtml",
     "clicking on the checkbox should open the masterpassword dialog"
   );
   ok(!button.disabled, "master password button should now be enabled");
   ok(checkbox.checked, "master password checkbox should be checked now");
 
   dialogURL = "";
   button.doCommand();
   is(
     dialogURL,
-    "chrome://mozapps/content/preferences/changemp.xul",
+    "chrome://mozapps/content/preferences/changemp.xhtml",
     "clicking on the button should open the masterpassword dialog"
   );
   ok(!button.disabled, "master password button should still be enabled");
   ok(checkbox.checked, "master password checkbox should be checked still");
 
   masterPasswordNextState = false;
   dialogURL = "";
   checkbox.click();
   is(
     dialogURL,
-    "chrome://mozapps/content/preferences/removemp.xul",
+    "chrome://mozapps/content/preferences/removemp.xhtml",
     "clicking on the checkbox to uncheck master password should show the removal dialog"
   );
   ok(button.disabled, "master password button should now be disabled");
   ok(!checkbox.checked, "master password checkbox should now be unchecked");
 
   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 });
--- a/browser/components/preferences/in-content/tests/browser_permissions_checkPermissionsWereAdded.js
+++ b/browser/components/preferences/in-content/tests/browser_permissions_checkPermissionsWereAdded.js
@@ -1,14 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+const PERMISSIONS_URL =
+  "chrome://browser/content/preferences/permissions.xhtml";
 
 const _checkAndOpenCookiesDialog = async doc => {
   let cookieExceptionsButton = doc.getElementById("cookieExceptions");
   ok(cookieExceptionsButton, "cookieExceptionsButton found");
   let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
   cookieExceptionsButton.click();
   let dialog = await dialogPromise;
   return dialog;
--- a/browser/components/preferences/in-content/tests/browser_permissions_dialog.js
+++ b/browser/components/preferences/in-content/tests/browser_permissions_dialog.js
@@ -6,17 +6,17 @@
 
 var { SitePermissions } = ChromeUtils.import(
   "resource:///modules/SitePermissions.jsm"
 );
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
 const PERMISSIONS_URL =
-  "chrome://browser/content/preferences/sitePermissions.xul";
+  "chrome://browser/content/preferences/sitePermissions.xhtml";
 const URL = "http://www.example.com";
 const URI = Services.io.newURI(URL);
 var sitePermissionsDialog;
 
 function checkPermissionItem(origin, state) {
   let doc = sitePermissionsDialog.document;
 
   let label = doc.getElementsByTagName("label")[3];
--- a/browser/components/preferences/in-content/tests/browser_permissions_urlFieldHidden.js
+++ b/browser/components/preferences/in-content/tests/browser_permissions_urlFieldHidden.js
@@ -1,11 +1,12 @@
 "use strict";
 
-const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+const PERMISSIONS_URL =
+  "chrome://browser/content/preferences/permissions.xhtml";
 
 add_task(async function urlFieldVisibleForPopupPermissions(finish) {
   await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
     leaveOpen: true,
   });
   let win = gBrowser.selectedBrowser.contentWindow;
   let doc = win.document;
   let popupPolicyCheckbox = doc.getElementById("popupPolicy");
--- a/browser/components/preferences/in-content/tests/browser_proxy_backup.js
+++ b/browser/components/preferences/in-content/tests/browser_proxy_backup.js
@@ -23,17 +23,17 @@ function test() {
       }
       Services.prefs.clearUserPref("network.proxy.backup." + proxyType);
       Services.prefs.clearUserPref(
         "network.proxy.backup." + proxyType + "_port"
       );
     }
   });
 
-  let connectionURL = "chrome://browser/content/preferences/connection.xul";
+  let connectionURL = "chrome://browser/content/preferences/connection.xhtml";
 
   // Set a shared proxy and a SOCKS backup
   Services.prefs.setIntPref("network.proxy.type", 1);
   Services.prefs.setBoolPref("network.proxy.share_proxy_settings", true);
   Services.prefs.setCharPref("network.proxy.http", "example.com");
   Services.prefs.setIntPref("network.proxy.http_port", 1200);
   Services.prefs.setCharPref("network.proxy.socks", "example.com");
   Services.prefs.setIntPref("network.proxy.socks_port", 1200);
--- a/browser/components/preferences/in-content/tests/browser_site_login_exceptions.js
+++ b/browser/components/preferences/in-content/tests/browser_site_login_exceptions.js
@@ -1,10 +1,11 @@
 "use strict";
-const PERMISSIONS_URL = "chrome://browser/content/preferences/permissions.xul";
+const PERMISSIONS_URL =
+  "chrome://browser/content/preferences/permissions.xhtml";
 
 var exceptionsDialog;
 
 add_task(async function openLoginExceptionsSubDialog() {
   // ensure rememberSignons is off for this test;
   ok(
     !Services.prefs.getBoolPref("signon.rememberSignons"),
     "Check initial value of signon.rememberSignons pref"
--- a/browser/components/preferences/in-content/tests/browser_sync_pairing.js
+++ b/browser/components/preferences/in-content/tests/browser_sync_pairing.js
@@ -130,17 +130,17 @@ add_task(async function testError() {
     await promiseUnloaded;
   });
 });
 
 async function runWithPairingDialog(test) {
   await openPreferencesViaOpenPreferencesAPI("paneSync", { leaveOpen: true });
 
   let promiseSubDialogLoaded = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/in-content/fxaPairDevice.xul"
+    "chrome://browser/content/preferences/in-content/fxaPairDevice.xhtml"
   );
   gBrowser.contentWindow.gSyncPane.pairAnotherDevice();
 
   let win = await promiseSubDialogLoaded;
 
   await test(win);
 
   sinon.restore();
--- a/browser/components/preferences/in-content/tests/siteData/browser_clearSiteData.js
+++ b/browser/components/preferences/in-content/tests/siteData/browser_clearSiteData.js
@@ -59,17 +59,17 @@ async function testClearData(clearSiteDa
       return sizeLabel.textContent;
     }
   );
 
   let doc = gBrowser.selectedBrowser.contentDocument;
   let clearSiteDataButton = doc.getElementById("clearSiteDataButton");
 
   let dialogOpened = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/clearSiteData.xul"
+    "chrome://browser/content/preferences/clearSiteData.xhtml"
   );
   clearSiteDataButton.doCommand();
   let dialogWin = await dialogOpened;
 
   // Convert the usage numbers in the same way the UI does it to assert
   // that they're displayed in the dialog.
   let [convertedTotalUsage] = DownloadUtils.convertByteUnits(totalUsage);
   // For cache we just assert that the right unit (KB, probably) is displayed,
--- a/browser/components/preferences/in-content/tests/siteData/head.js
+++ b/browser/components/preferences/in-content/tests/siteData/head.js
@@ -19,17 +19,17 @@ const TEST_OFFLINE_URL =
   ) + "/offline/offline.html";
 const TEST_SERVICE_WORKER_URL =
   getRootDirectory(gTestPath).replace(
     "chrome://mochitests/content",
     TEST_OFFLINE_ORIGIN
   ) + "/service_worker_test.html";
 
 const REMOVE_DIALOG_URL =
-  "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
+  "chrome://browser/content/preferences/siteDataRemoveSelected.xhtml";
 
 const { DownloadUtils } = ChromeUtils.import(
   "resource://gre/modules/DownloadUtils.jsm"
 );
 const { SiteDataManager } = ChromeUtils.import(
   "resource:///modules/SiteDataManager.jsm"
 );
 const { OfflineAppCacheHelper } = ChromeUtils.import(
@@ -145,17 +145,17 @@ function openPreferencesViaOpenPreferenc
   });
 }
 
 function openSiteDataSettingsDialog() {
   let doc = gBrowser.selectedBrowser.contentDocument;
   let settingsBtn = doc.getElementById("siteDataSettings");
   let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
   let dialogLoadPromise = promiseLoadSubDialog(
-    "chrome://browser/content/preferences/siteDataSettings.xul"
+    "chrome://browser/content/preferences/siteDataSettings.xhtml"
   );
   let dialogInitPromise = TestUtils.topicObserved(
     "sitedata-settings-init",
     () => true
   );
   let fullyLoadPromise = Promise.all([
     dialogLoadPromise,
     dialogInitPromise,
@@ -175,17 +175,17 @@ function promiseSettingsDialogClose() {
     let win = gBrowser.selectedBrowser.contentWindow;
     let dialogOverlay = win.gSubDialog._topDialog._overlay;
     let dialogWin = win.gSubDialog._topDialog._frame.contentWindow;
     dialogWin.addEventListener(
       "unload",
       function unload() {
         if (
           dialogWin.document.documentURI ===
-          "chrome://browser/content/preferences/siteDataSettings.xul"
+          "chrome://browser/content/preferences/siteDataSettings.xhtml"
         ) {
           isnot(
             dialogOverlay.style.visibility,
             "visible",
             "The Settings dialog should be hidden"
           );
           resolve();
         }
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -1,40 +1,40 @@
 # 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/.
 
 browser.jar:
-    content/browser/preferences/applicationManager.xul
+    content/browser/preferences/applicationManager.xhtml
     content/browser/preferences/applicationManager.js
-    content/browser/preferences/blocklists.xul
+    content/browser/preferences/blocklists.xhtml
     content/browser/preferences/blocklists.js
-    content/browser/preferences/browserLanguages.xul
+    content/browser/preferences/browserLanguages.xhtml
     content/browser/preferences/browserLanguages.js
     content/browser/preferences/clearSiteData.css
     content/browser/preferences/clearSiteData.js
-    content/browser/preferences/clearSiteData.xul
-    content/browser/preferences/colors.xul
+    content/browser/preferences/clearSiteData.xhtml
+    content/browser/preferences/colors.xhtml
     content/browser/preferences/colors.js
-    content/browser/preferences/connection.xul
+    content/browser/preferences/connection.xhtml
     content/browser/preferences/connection.js
-    content/browser/preferences/fonts.xul
+    content/browser/preferences/fonts.xhtml
     content/browser/preferences/fonts.js
     content/browser/preferences/handlers.css
-    content/browser/preferences/languages.xul
+    content/browser/preferences/languages.xhtml
     content/browser/preferences/languages.js
-    content/browser/preferences/permissions.xul
-    content/browser/preferences/sitePermissions.xul
+    content/browser/preferences/permissions.xhtml
+    content/browser/preferences/sitePermissions.xhtml
     content/browser/preferences/sitePermissions.js
     content/browser/preferences/sitePermissions.css
-    content/browser/preferences/containers.xul
+    content/browser/preferences/containers.xhtml
     content/browser/preferences/containers.js
     content/browser/preferences/permissions.js
-    content/browser/preferences/sanitize.xul
+    content/browser/preferences/sanitize.xhtml
     content/browser/preferences/sanitize.js
-    content/browser/preferences/selectBookmark.xul
+    content/browser/preferences/selectBookmark.xhtml
     content/browser/preferences/selectBookmark.js
-    content/browser/preferences/siteDataSettings.xul
+    content/browser/preferences/siteDataSettings.xhtml
     content/browser/preferences/siteDataSettings.js
-*   content/browser/preferences/siteDataRemoveSelected.xul
+*   content/browser/preferences/siteDataRemoveSelected.xhtml
     content/browser/preferences/siteDataRemoveSelected.js
-    content/browser/preferences/translation.xul
+    content/browser/preferences/translation.xhtml
     content/browser/preferences/translation.js
rename from browser/components/preferences/languages.xul
rename to browser/components/preferences/languages.xhtml
rename from browser/components/preferences/permissions.xul
rename to browser/components/preferences/permissions.xhtml
rename from browser/components/preferences/sanitize.xul
rename to browser/components/preferences/sanitize.xhtml
rename from browser/components/preferences/selectBookmark.xul
rename to browser/components/preferences/selectBookmark.xhtml
rename from browser/components/preferences/siteDataRemoveSelected.xul
rename to browser/components/preferences/siteDataRemoveSelected.xhtml
rename from browser/components/preferences/siteDataSettings.xul
rename to browser/components/preferences/siteDataSettings.xhtml
rename from browser/components/preferences/sitePermissions.xul
rename to browser/components/preferences/sitePermissions.xhtml
rename from browser/components/preferences/translation.xul
rename to browser/components/preferences/translation.xhtml
--- a/browser/components/translation/test/browser_translation_exceptions.js
+++ b/browser/components/translation/test/browser_translation_exceptions.js
@@ -252,17 +252,17 @@ var gTests = [
     desc: "language exception list",
     run: async function checkLanguageExceptions() {
       // Put 2 languages in the pref before opening the window to check
       // the list is displayed on load.
       Services.prefs.setCharPref(kLanguagesPref, "fr,de");
 
       // Open the translation exceptions dialog.
       let win = openDialog(
-        "chrome://browser/content/preferences/translation.xul",
+        "chrome://browser/content/preferences/translation.xhtml",
         "Browser:TranslationExceptions",
         "",
         null
       );
       await waitForWindowLoad(win);
 
       // Check that the list of language exceptions is loaded.
       let getById = win.document.getElementById.bind(win.document);
@@ -318,17 +318,17 @@ var gTests = [
       PermissionTestUtils.add(
         "http://example.com",
         "translate",
         Services.perms.DENY_ACTION
       );
 
       // Open the translation exceptions dialog.
       let win = openDialog(
-        "chrome://browser/content/preferences/translation.xul",
+        "chrome://browser/content/preferences/translation.xhtml",
         "Browser:TranslationExceptions",
         "",
         null
       );
       await waitForWindowLoad(win);
 
       // Check that the list of language exceptions is loaded.
       let getById = win.document.getElementById.bind(win.document);
--- a/browser/modules/SiteDataManager.jsm
+++ b/browser/modules/SiteDataManager.jsm
@@ -508,17 +508,17 @@ var SiteDataManager = {
   promptSiteDataRemoval(win, removals) {
     if (removals) {
       let args = {
         hosts: removals,
         allowed: false,
       };
       let features = "centerscreen,chrome,modal,resizable=no";
       win.docShell.rootTreeItem.domWindow.openDialog(
-        "chrome://browser/content/preferences/siteDataRemoveSelected.xul",
+        "chrome://browser/content/preferences/siteDataRemoveSelected.xhtml",
         "",
         features,
         args
       );
       return args.allowed;
     }
 
     let brandName = gBrandBundle.GetStringFromName("brandShortName");
--- a/toolkit/components/passwordmgr/test/browser/browser_exceptions_dialog.js
+++ b/toolkit/components/passwordmgr/test/browser/browser_exceptions_dialog.js
@@ -1,15 +1,15 @@
 "use strict";
 
 const LOGIN_HOST = "http://example.com";
 
 function openExceptionsDialog() {
   return window.openDialog(
-    "chrome://browser/content/preferences/permissions.xul",
+    "chrome://browser/content/preferences/permissions.xhtml",
     "Toolkit:PasswordManagerExceptions",
     "",
     {
       blockVisible: true,
       sessionVisible: false,
       allowVisible: false,
       hideStatusColumn: true,
       prefilledHost: "",
--- a/toolkit/components/telemetry/docs/internals/preferences.rst
+++ b/toolkit/components/telemetry/docs/internals/preferences.rst
@@ -34,17 +34,17 @@ mozconfig Defines
 
   When Defined (which it is when ``MOZ_TELEMETRY_REPORTING``, ``MOZ_SERVICES_HEALTHREPORT``, or ``MOZ_CRASHREPORTER`` is defined (so, on most platforms, but not typically on developer builds)):
 
   * Enables ``app.shield.optoutstudies.enabled``
 
   When Not Defined:
 
   * Disables ``app.shield.optoutstudies.enabled``
-  * Removes the Data Collection Preferences UI in ``privacy.xul``
+  * Removes the Data Collection Preferences UI in ``privacy.xhtml``
 
 ``MOZILLA_OFFICIAL``
 
   When Not Defined (defined on our own external builds and builds from several Linux distros, but not typically on defeloper builds):
 
   * Disables Telemetry from being sent (due to ``Telemetry::IsOfficialTelemetry``)
 
 ``MOZ_UPDATE_CHANNEL``
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
@@ -1493,17 +1493,17 @@ function setupEventListeners() {
         );
         new nsLocalFile(updateDirPath).reveal();
       });
     }
     button = $("show-update-history-button");
     if (button) {
       button.addEventListener("click", function(event) {
         window.docShell.rootTreeItem.domWindow.openDialog(
-          "chrome://mozapps/content/update/history.xul",
+          "chrome://mozapps/content/update/history.xhtml",
           "Update:History",
           "centerscreen,resizable=no,titlebar,modal"
         );
       });
     }
   }
   button = $("verify-place-integrity-button");
   if (button) {
--- a/toolkit/locales/en-US/chrome/global/intl.properties
+++ b/toolkit/locales/en-US/chrome/global/intl.properties
@@ -22,17 +22,17 @@
 # intl.accept_languages=br, fr-FR, fr, en-GB, en
 intl.accept_languages=en-US, en
 
 # LOCALIZATION NOTE (font.language.group):
 # This preference controls the initial setting of the language drop-down menu
 # in the Fonts and Colors > Advanced preference panel.
 #
 # Set it to the value of one of the menuitems in the "selectLangs" menulist in
-# http://dxr.mozilla.org/mozilla-central/source/browser/components/preferences/fonts.xul
+# http://dxr.mozilla.org/mozilla-central/source/browser/components/preferences/fonts.xhtml
 font.language.group=x-western
 
 # LOCALIZATION NOTE (intl.charset.detector):
 # This preference controls the initial setting for the character encoding
 # detector. Valid values are ja_parallel_state_machine for Japanese, ruprob
 # for Russian and ukprob for Ukrainian and the empty string to turn detection
 # off. The value must be empty for locales other than Japanese, Russian and
 # Ukrainian.
rename from toolkit/mozapps/preferences/changemp.xul
rename to toolkit/mozapps/preferences/changemp.xhtml
--- a/toolkit/mozapps/preferences/jar.mn
+++ b/toolkit/mozapps/preferences/jar.mn
@@ -1,11 +1,11 @@
 # 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/.
 
 toolkit.jar:
 % content mozapps %content/mozapps/
   content/mozapps/preferences/fontbuilder.js
   content/mozapps/preferences/changemp.js
-  content/mozapps/preferences/changemp.xul
+  content/mozapps/preferences/changemp.xhtml
   content/mozapps/preferences/removemp.js
-  content/mozapps/preferences/removemp.xul
+  content/mozapps/preferences/removemp.xhtml
rename from toolkit/mozapps/preferences/removemp.xul
rename to toolkit/mozapps/preferences/removemp.xhtml
rename from toolkit/mozapps/update/content/history.xul
rename to toolkit/mozapps/update/content/history.xhtml
--- a/toolkit/mozapps/update/jar.mn
+++ b/toolkit/mozapps/update/jar.mn
@@ -1,10 +1,10 @@
 # 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/.
 
 toolkit.jar:
 % content mozapps %content/mozapps/
-  content/mozapps/update/history.xul                            (content/history.xul)
+  content/mozapps/update/history.xhtml                          (content/history.xhtml)
   content/mozapps/update/history.js                             (content/history.js)
   content/mozapps/update/updateElevation.js                     (content/updateElevation.js)
 * content/mozapps/update/updateElevation.xul                    (content/updateElevation.xul)