Bug 1605845 - Change all references to .xul files to .xhtml instead; rs=bustage-fix
authorGeoff Lankow <geoff@darktrojan.net>
Tue, 24 Dec 2019 22:30:36 +1300
changeset 37810 d58d6a653555e55d244c7a13beba7ba09ffa38df
parent 37809 0ff64b19c5136621a4ad40a2d9192d2bfc43a185
child 37811 baf7e2d8318991cd912c3618a5fba2bdc680e1e7
push id397
push userclokep@gmail.com
push dateMon, 10 Feb 2020 21:16:13 +0000
reviewersbustage-fix
bugs1605845
Bug 1605845 - Change all references to .xul files to .xhtml instead; rs=bustage-fix
.eslintignore
calendar/base/content/calendar-chrome-startup.js
calendar/base/content/calendar-clipboard.js
calendar/base/content/calendar-extract.js
calendar/base/content/calendar-invitations-manager.js
calendar/base/content/calendar-item-editing.js
calendar/base/content/calendar-management.js
calendar/base/content/dialogs/calendar-dialog-utils.js
calendar/base/content/dialogs/calendar-event-dialog-attendees.js
calendar/base/content/dialogs/calendar-event-dialog.xhtml
calendar/base/content/dialogs/calendar-invitations-dialog.js
calendar/base/content/dialogs/calendar-migration-dialog.js
calendar/base/content/dialogs/calendar-print-dialog.js
calendar/base/content/import-export.js
calendar/base/content/preferences/categories.js
calendar/base/content/preferences/general.js
calendar/base/jar.mn
calendar/base/modules/utils/calItipUtils.jsm
calendar/base/modules/utils/calProviderUtils.jsm
calendar/base/modules/utils/calWindowUtils.jsm
calendar/base/src/calAlarmMonitor.js
calendar/base/src/calCalendarManager.js
calendar/base/themes/common/widgets/calendar-widgets.css
calendar/itip/calItipEmailTransport.js
calendar/lightning/content/lightning-item-iframe.js
calendar/lightning/content/lightning-item-panel.js
calendar/lightning/content/lightning-item-panel.xhtml
calendar/lightning/content/messenger-overlay-preferences.xhtml
calendar/lightning/content/suite-overlay-addons.xhtml
calendar/lightning/content/suite-overlay-preferences.xhtml
calendar/lightning/jar.mn
calendar/resources/content/publish.js
calendar/resources/content/publishDialog.js
calendar/test/browser/eventDialog/browser_eventDialogSize.js
calendar/test/browser/preferences/browser_categoryColors.js
calendar/test/modules/ItemEditingHelpers.jsm
chat/content/jar.mn
chat/modules/OTRUI.jsm
common/src/viewSource.js
editor/ui/composer/content/ComposerCommands.js
editor/ui/composer/content/composerOverlay.xhtml
editor/ui/composer/content/editingOverlay.xhtml
editor/ui/composer/content/editor.js
editor/ui/composer/content/editor.xhtml
editor/ui/composer/content/editorMailOverlay.xhtml
editor/ui/composer/content/editorNavigatorOverlay.xhtml
editor/ui/composer/content/editorOverlay.xhtml
editor/ui/composer/content/editorPrefsOverlay.xhtml
editor/ui/composer/content/pref-editing.js
editor/ui/dialogs/content/EdColorProps.js
editor/ui/dialogs/content/EdDialogCommon.js
editor/ui/dialogs/content/EdDialogTemplate.xhtml
editor/ui/dialogs/content/EdImageProps.js
editor/ui/dialogs/content/EdImageProps.xhtml
editor/ui/dialogs/content/EdInputImage.xhtml
editor/ui/dialogs/content/EdInputProps.js
editor/ui/dialogs/content/EdInsertTOC.js
editor/ui/dialogs/content/EdSpellCheck.js
editor/ui/dialogs/content/EdTableProps.js
editor/ui/dialogs/content/EditorPublish.xhtml
editor/ui/dialogs/content/EditorPublishSettings.xhtml
editor/ui/jar.mn
editor/ui/locales/en-US/chrome/composer/pref-composer.dtd
editor/ui/locales/en-US/chrome/dialogs/EditorReplace.dtd
mail/app/profile/all-thunderbird.js
mail/base/content/ABSearchDialog.xhtml
mail/base/content/FilterListDialog.js
mail/base/content/SearchDialog.js
mail/base/content/SearchDialog.xhtml
mail/base/content/aboutDialog-appUpdater.js
mail/base/content/aboutDialog.js
mail/base/content/editContactPanel.js
mail/base/content/folderPane.js
mail/base/content/glodaFacetTab.js
mail/base/content/hiddenWindow.xhtml
mail/base/content/macMessengerMenu.js
mail/base/content/mail-offline.js
mail/base/content/mailCommands.js
mail/base/content/mailContextMenus.js
mail/base/content/mailCore.js
mail/base/content/mailWidgets.js
mail/base/content/mailWindow.js
mail/base/content/mailWindowOverlay.js
mail/base/content/mainNavigationToolbox.inc.xhtml
mail/base/content/messageWindow.js
mail/base/content/messageWindow.xhtml
mail/base/content/messenger.xhtml
mail/base/content/msgHdrPopup.inc.xhtml
mail/base/content/msgHdrView.js
mail/base/content/msgMail3PaneWindow.js
mail/base/content/sanitize.js
mail/base/content/tabmail.js
mail/base/content/threadTree.inc.xhtml
mail/base/content/utilityOverlay.js
mail/base/jar.mn
mail/base/modules/MailMigrator.jsm
mail/base/modules/MailUtils.jsm
mail/base/modules/SessionStoreManager.jsm
mail/base/test/browser/browser.ini
mail/base/test/browser/browser_menulist.js
mail/components/AboutRedirector.jsm
mail/components/MailGlue.jsm
mail/components/MessengerContentHandler.jsm
mail/components/accountcreation/content/emailWizard.js
mail/components/accountcreation/jar.mn
mail/components/activity/ActivityManagerUI.jsm
mail/components/activity/jar.mn
mail/components/addrbook/content/abCommon.js
mail/components/addrbook/content/abEditCardDialog.xhtml
mail/components/addrbook/content/abNewCardDialog.xhtml
mail/components/addrbook/content/addressbook.js
mail/components/addrbook/content/addressbook.xhtml
mail/components/addrbook/jar.mn
mail/components/cloudfile/jar.mn
mail/components/cloudfile/test/browser/browser_repeat_upload.js
mail/components/compose/content/ComposerCommands.js
mail/components/compose/content/MsgComposeCommands.js
mail/components/compose/content/bigFileObserver.js
mail/components/compose/content/dialogs/EdColorProps.js
mail/components/compose/content/dialogs/EdDialogCommon.js
mail/components/compose/content/dialogs/EdImageProps.js
mail/components/compose/content/dialogs/EdImageProps.xhtml
mail/components/compose/content/dialogs/EdInsertTOC.js
mail/components/compose/content/dialogs/EdSpellCheck.js
mail/components/compose/content/dialogs/EdTableProps.js
mail/components/compose/content/editFormatButtons.inc.xhtml
mail/components/compose/content/editor.js
mail/components/compose/content/messengercompose.xhtml
mail/components/compose/jar.mn
mail/components/customizableui/content/panelUI.inc.xhtml
mail/components/customizableui/content/panelUI.js
mail/components/downloads/jar.mn
mail/components/enterprisepolicies/tests/browser/disable_app_update/browser_policy_disable_app_update.js
mail/components/extensions/parent/ext-addressBook.js
mail/components/extensions/parent/ext-browserAction.js
mail/components/extensions/parent/ext-composeAction.js
mail/components/extensions/parent/ext-messageDisplayAction.js
mail/components/extensions/parent/ext-windows.js
mail/components/extensions/test/browser/browser_ext_browserAction.js
mail/components/extensions/test/browser/browser_ext_composeAction.js
mail/components/extensions/test/browser/head.js
mail/components/im/IMIncomingServer.jsm
mail/components/im/content/am-im.js
mail/components/im/content/am-im.xhtml
mail/components/im/content/chat-messenger.js
mail/components/im/content/imAccounts.js
mail/components/im/content/imContextMenu.js
mail/components/im/jar.mn
mail/components/im/modules/chatHandler.jsm
mail/components/im/modules/chatNotifications.jsm
mail/components/migration/jar.mn
mail/components/migration/src/nsProfileMigrator.cpp
mail/components/newmailaccount/content/accountProvisioner.js
mail/components/preferences/privacy.js
mail/confvars.sh
mail/extensions/mailviews/content/mailViewList.js
mail/extensions/mailviews/content/mailViewSetup.xhtml
mail/extensions/mailviews/content/msgViewPickerOverlay.js
mail/extensions/mailviews/jar.mn
mail/extensions/openpgp/content/am-enigprefs.xhtml
mail/extensions/openpgp/content/modules/commandLine.jsm
mail/extensions/openpgp/content/modules/configure.jsm
mail/extensions/openpgp/content/modules/constants.jsm
mail/extensions/openpgp/content/modules/dialog.jsm
mail/extensions/openpgp/content/modules/pgpmimeHandler.jsm
mail/extensions/openpgp/content/modules/protocolHandler.jsm
mail/extensions/openpgp/content/modules/rules.jsm
mail/extensions/openpgp/content/modules/windows.jsm
mail/extensions/openpgp/content/strings/enigmail.properties
mail/extensions/openpgp/content/ui/enigmailEditIdentity.js
mail/extensions/openpgp/content/ui/enigmailKeyManager.js
mail/extensions/openpgp/content/ui/enigmailKeyManager.xhtml
mail/extensions/openpgp/content/ui/enigmailKeygen.xhtml
mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js
mail/extensions/openpgp/content/ui/enigmailMsgComposeOverlay.js
mail/extensions/openpgp/content/ui/keyDetailsDlg.js
mail/extensions/openpgp/jar.mn
mail/extensions/smime/content/msgCompSMIMEOverlay.js
mail/extensions/smime/jar.mn
mail/locales/en-US/chrome/messenger/AccountManager.dtd
mail/locales/en-US/chrome/messenger/SearchDialog.dtd
mail/locales/en-US/chrome/messenger/am-addressing.dtd
mail/locales/en-US/chrome/messenger/am-advanced.dtd
mail/locales/en-US/chrome/messenger/am-archiveoptions.dtd
mail/locales/en-US/chrome/messenger/am-copies.dtd
mail/locales/en-US/chrome/messenger/am-main.dtd
mail/locales/en-US/chrome/messenger/messenger.properties
mail/locales/en-US/chrome/messenger/messengercompose/EditorReplace.dtd
mail/locales/en-US/chrome/messenger/messengercompose/messengercompose.dtd
mail/locales/en-US/chrome/messenger/msgPrintEngine.dtd
mail/locales/en-US/chrome/messenger/msgSynchronize.dtd
mail/locales/en-US/chrome/messenger/viewSource.dtd
mail/test/browser/account/browser_abWhitelist.js
mail/test/browser/account/browser_archiveOptions.js
mail/test/browser/account/browser_portSetting.js
mail/test/browser/account/browser_settingsInfrastructure.js
mail/test/browser/account/browser_tree.js
mail/test/browser/account/browser_values.js
mail/test/browser/composition/browser_sendButton.js
mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js
mail/test/browser/notification/browser_notification.js
mail/test/browser/search-window/browser_searchWindow.js
mail/test/browser/session-store/browser_sessionStore.js
mail/test/browser/shared-modules/AccountManagerHelpers.jsm
mail/test/browser/shared-modules/CustomizationHelpers.jsm
mail/test/browser/shared-modules/FolderDisplayHelpers.jsm
mail/test/browser/shared-modules/PrefTabHelpers.jsm
mail/test/browser/shared-modules/WindowHelpers.jsm
mail/test/browser/tabmail/browser_dragndrop.js
mail/test/browser/utils/browser_extensionSupport.js
mail/test/mozmill/account/test-ab-whitelist.js
mail/test/mozmill/account/test-account-port-setting.js
mail/test/mozmill/account/test-account-settings-infrastructure.js
mail/test/mozmill/account/test-account-tree.js
mail/test/mozmill/account/test-account-values.js
mail/test/mozmill/account/test-archive-options.js
mail/test/mozmill/composition/test-send-button.js
mail/test/mozmill/folder-tree-modes/test-extension/bootstrap.js
mail/test/mozmill/notification/test-notification.js
mail/test/mozmill/search-window/test-search-window.js
mail/test/mozmill/session-store/test-session-store.js
mail/test/mozmill/tabmail/test-tabmail-dragndrop.js
mail/test/mozmill/utils/test-extensionSupport.js
mail/test/resources/jsbridge/jsbridge/extension/bootstrap.js
mail/test/resources/jsbridge/setup.py
mail/test/resources/mozmill/mozmill/extension/bootstrap.js
mail/test/resources/mozmill/mozmill/extension/manifest.json
mail/test/resources/mozmill/setup.py
mail/themes/shared/mail/compacttheme.css
mailnews/addrbook/content/abResultsPane.js
mailnews/addrbook/jsaddrbook/AddrBookDirectory.jsm
mailnews/addrbook/jsaddrbook/AddrBookMailingList.jsm
mailnews/addrbook/src/nsAbContentHandler.cpp
mailnews/addrbook/src/nsAbDirProperty.cpp
mailnews/addrbook/src/nsAbLDAPDirectory.cpp
mailnews/addrbook/src/nsAbManager.cpp
mailnews/addrbook/test/browser/browser_mailing_lists.js
mailnews/addrbook/test/browser/head.js
mailnews/addrbook/test/unit/head_addrbook.js
mailnews/base/content/msgAccountCentral.js
mailnews/base/content/msgAccountCentral.xhtml
mailnews/base/content/msgPrintEngine.js
mailnews/base/content/msgSynchronize.js
mailnews/base/content/virtualFolderProperties.js
mailnews/base/content/virtualFolderProperties.xhtml
mailnews/base/prefs/content/AccountManager.js
mailnews/base/prefs/content/accountUtils.js
mailnews/base/prefs/content/am-addressing.js
mailnews/base/prefs/content/am-addressing.xhtml
mailnews/base/prefs/content/am-copies.js
mailnews/base/prefs/content/am-copies.xhtml
mailnews/base/prefs/content/am-help.js
mailnews/base/prefs/content/am-identities-list.js
mailnews/base/prefs/content/am-identity-edit.js
mailnews/base/prefs/content/am-identity-edit.xhtml
mailnews/base/prefs/content/am-junk.xhtml
mailnews/base/prefs/content/am-main.js
mailnews/base/prefs/content/am-main.xhtml
mailnews/base/prefs/content/am-offline.js
mailnews/base/prefs/content/am-offline.xhtml
mailnews/base/prefs/content/am-server.js
mailnews/base/prefs/content/am-server.xhtml
mailnews/base/prefs/content/am-serverwithnoidentities.xhtml
mailnews/base/prefs/content/am-smtp.js
mailnews/base/prefs/content/amUtils.js
mailnews/base/prefs/content/aw-done.js
mailnews/base/public/nsIMsgAccountManager.idl
mailnews/base/search/content/FilterEditor.xhtml
mailnews/base/search/content/searchWidgets.js
mailnews/base/src/MailNewsCommandLineHandler.jsm
mailnews/base/src/nsMessengerBootstrap.cpp
mailnews/base/src/nsMessengerContentHandler.cpp
mailnews/base/src/nsMessengerOSXIntegration.mm
mailnews/base/src/nsMessengerUnixIntegration.cpp
mailnews/base/src/nsMessengerWinIntegration.cpp
mailnews/base/src/nsMsgMailSession.cpp
mailnews/base/util/OAuth2.jsm
mailnews/base/util/nsMsgIncomingServer.cpp
mailnews/compose/content/sendProgress.js
mailnews/compose/src/nsMsgCompose.cpp
mailnews/compose/src/nsMsgComposeService.cpp
mailnews/extensions/dsn/content/am-dsn.xhtml
mailnews/extensions/dsn/jar.mn
mailnews/extensions/mdn/content/am-mdn.xhtml
mailnews/extensions/mdn/jar.mn
mailnews/extensions/newsblog/content/FeedUtils.jsm
mailnews/extensions/newsblog/content/am-newsblog.xhtml
mailnews/extensions/newsblog/content/newsblogOverlay.js
mailnews/extensions/newsblog/jar.mn
mailnews/extensions/smime/content/am-smime.xhtml
mailnews/extensions/smime/content/msgCompSecurityInfo.js
mailnews/extensions/smime/content/msgReadSMIMEOverlay.js
mailnews/extensions/smime/src/nsCertPicker.cpp
mailnews/import/content/import-test.html
mailnews/import/content/importDialog.js
mailnews/jar.mn
mailnews/local/src/nsMovemailIncomingServer.cpp
mailnews/local/src/nsNoIncomingServer.cpp
mailnews/local/src/nsRssIncomingServer.cpp
mailnews/news/public/nsINewsDownloadDialogArgs.idl
mailnews/news/src/nsNntpService.cpp
mailnews/test/resources/abSetup.js
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,8 +1,11 @@
+# Temporarily disabled, see bug 1605845
+*.xhtml
+
 # Always ignore node_modules.
 **/node_modules/**/*.*
 
 # lint eslint config files which are excluded by default
 !**/.eslintrc.js
 
 # Exclude expected objdirs.
 obj*/**
--- a/calendar/base/content/calendar-chrome-startup.js
+++ b/calendar/base/content/calendar-chrome-startup.js
@@ -231,17 +231,17 @@ function migrateCalendarUI() {
       let taskbar = document.getElementById("task-toolbar2");
       taskbar.insertItem("task-appmenu-button");
     }
     if (currentUIVersion < 2) {
       // If the user has customized the event/task window dialog toolbar,
       // we copy that custom set of toolbar items to the event/task tab
       // toolbar and add the app menu button and a spring for alignment.
       let xulStore = Services.xulStore;
-      let uri = "chrome://calendar/content/calendar-event-dialog.xul";
+      let uri = "chrome://calendar/content/calendar-event-dialog.xhtml";
 
       if (xulStore.hasValue(uri, "event-toolbar", "currentset")) {
         let windowSet = xulStore.getValue(uri, "event-toolbar", "currentset");
         let items = "calendar-item-appmenu-button";
         if (!windowSet.includes("spring")) {
           items = "spring," + items;
         }
         let previousSet = windowSet == "__empty" ? "" : windowSet + ",";
@@ -255,18 +255,18 @@ function migrateCalendarUI() {
         // attribute does not yet match the new currentSet.
         tabBar.setAttribute("currentset", tabSet);
       }
     }
     if (currentUIVersion < 3) {
       // Rename toolbar button id "button-save" to
       // "button-saveandclose" in customized toolbars
       let xulStore = Services.xulStore;
-      let windowUri = "chrome://calendar/content/calendar-event-dialog.xul";
-      let tabUri = "chrome://messenger/content/messenger.xul";
+      let windowUri = "chrome://calendar/content/calendar-event-dialog.xhtml";
+      let tabUri = "chrome://messenger/content/messenger.xhtml";
 
       if (xulStore.hasValue(windowUri, "event-toolbar", "currentset")) {
         let windowSet = xulStore.getValue(windowUri, "event-toolbar", "currentset");
         let newSet = windowSet.replace("button-save", "button-saveandclose");
         xulStore.setValue(windowUri, "event-toolbar", "currentset", newSet);
       }
       if (xulStore.hasValue(tabUri, "event-tab-toolbar", "currentset")) {
         let tabSet = xulStore.getValue(tabUri, "event-tab-toolbar", "currentset");
--- a/calendar/base/content/calendar-clipboard.js
+++ b/calendar/base/content/calendar-clipboard.js
@@ -263,17 +263,17 @@ function pasteFromClipboard() {
             };
           } else {
             args.onOk = aCal => {
               destCal = aCal;
             };
           }
 
           window.openDialog(
-            "chrome://calendar/content/chooseCalendarDialog.xul",
+            "chrome://calendar/content/chooseCalendarDialog.xhtml",
             "_blank",
             "chrome,titlebar,modal,resizable",
             args
           );
         } else if (calendars.length == 1) {
           destCal = calendars[0];
         }
       }
--- a/calendar/base/content/calendar-extract.js
+++ b/calendar/base/content/calendar-extract.js
@@ -214,17 +214,17 @@ var calendarExtract = {
     cal.LOG(
       "[calExtract] Total time spent for conversion (including loading of dictionaries): " +
         timeSpent +
         "ms"
     );
   },
 
   addListeners: function() {
-    if (window.top.document.location == "chrome://messenger/content/messenger.xul") {
+    if (window.top.document.location == "chrome://messenger/content/messenger.xhtml") {
       // covers initial load and folder change
       let folderTree = document.getElementById("folderTree");
       folderTree.addEventListener("select", this.setState);
 
       // covers selection change in a folder
       let msgTree = window.top.GetThreadTree();
       msgTree.addEventListener("select", this.setState);
 
--- a/calendar/base/content/calendar-invitations-manager.js
+++ b/calendar/base/content/calendar-invitations-manager.js
@@ -236,17 +236,17 @@ InvitationsManager.prototype = {
     args.queue = [];
     args.finishedCallBack = finishedCallBack;
     args.requestManager = gInvitationsRequestManager;
     args.invitationsManager = this;
     // the dialog will reset this to auto when it is done loading
     window.setCursor("wait");
     // open the dialog
     window.openDialog(
-      "chrome://calendar/content/calendar-invitations-dialog.xul",
+      "chrome://calendar/content/calendar-invitations-dialog.xhtml",
       "_blank",
       "chrome,titlebar,resizable",
       args
     );
   },
 
   /**
    * Process the passed job queue. A job is an object that consists of an
--- a/calendar/base/content/calendar-item-editing.js
+++ b/calendar/base/content/calendar-item-editing.js
@@ -513,22 +513,22 @@ function openEventDialog(
 
   // open the dialog modeless
   let url;
   let isEditable = mode == "modify" && !isInvitation && cal.acl.userCanModifyItem(calendarItem);
   if (cal.acl.isCalendarWritable(calendar) && (mode == "new" || isEditable)) {
     if (args.inTab) {
       url = args.useNewItemUI
         ? "chrome://lightning/content/html-item-editing/lightning-item-iframe.html"
-        : "chrome://lightning/content/lightning-item-iframe.xul";
+        : "chrome://lightning/content/lightning-item-iframe.xhtml";
     } else {
-      url = "chrome://calendar/content/calendar-event-dialog.xul";
+      url = "chrome://calendar/content/calendar-event-dialog.xhtml";
     }
   } else {
-    url = "chrome://calendar/content/calendar-summary-dialog.xul";
+    url = "chrome://calendar/content/calendar-summary-dialog.xhtml";
     args.inTab = false;
   }
 
   if (args.inTab) {
     // open in a tab, currently the read-only summary dialog is
     // never opened in a tab
     args.url = url;
     let tabmail = document.getElementById("tabmail");
@@ -606,17 +606,17 @@ function promptOccurrenceModification(aI
   // Check if this actually is an instance of a recurring event
   if (items.every(item => item == item.parentItem)) {
     type = MODIFY_PARENT;
   } else if (aItem && items.length) {
     // Prompt the user. Setting modal blocks the dialog until it is closed. We
     // use rv to pass our return value.
     let rv = { value: CANCEL, items: items, action: aAction };
     window.openDialog(
-      "chrome://calendar/content/calendar-occurrence-prompt.xul",
+      "chrome://calendar/content/calendar-occurrence-prompt.xhtml",
       "PromptOccurrenceModification",
       "centerscreen,chrome,modal,titlebar",
       rv
     );
     type = rv.value;
   }
 
   switch (type) {
--- a/calendar/base/content/calendar-management.js
+++ b/calendar/base/content/calendar-management.js
@@ -650,17 +650,17 @@ var compositeObserver = {
  * Opens the subscriptions dialog modally.
  */
 function openCalendarSubscriptionsDialog() {
   // the dialog will reset this to auto when it is done loading
   window.setCursor("wait");
 
   // open the dialog modally
   window.openDialog(
-    "chrome://calendar/content/calendar-subscriptions-dialog.xul",
+    "chrome://calendar/content/calendar-subscriptions-dialog.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable"
   );
 }
 
 /**
  * Calendar Offline Manager
  */
--- a/calendar/base/content/dialogs/calendar-dialog-utils.js
+++ b/calendar/base/content/dialogs/calendar-dialog-utils.js
@@ -150,17 +150,17 @@ function editReminder() {
   args.onCancel = function() {
     document.getElementById("item-alarm").selectedIndex = gLastAlarmSelection;
   };
 
   window.setCursor("wait");
 
   // open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-reminder.xul",
+    "chrome://calendar/content/calendar-event-dialog-reminder.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * Update the reminder details from the selected alarm. This shows a string
--- a/calendar/base/content/dialogs/calendar-event-dialog-attendees.js
+++ b/calendar/base/content/dialogs/calendar-event-dialog-attendees.js
@@ -432,17 +432,17 @@ function editStartTimezone() {
     if (equalTimezones) {
       gEndTimezone = datetime.timezone;
     }
     self.propagateDateTime();
   };
 
   // Open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-timezone.xul",
+    "chrome://calendar/content/calendar-event-dialog-timezone.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * Prompts the user to pick a new timezone for the endtime. The dialog is
@@ -463,17 +463,17 @@ function editEndTimezone() {
       gStartTimezone = datetime.timezone;
     }
     gEndTimezone = datetime.timezone;
     self.propagateDateTime();
   };
 
   // Open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-timezone.xul",
+    "chrome://calendar/content/calendar-event-dialog-timezone.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * Updates the dialog controls in case the window's event is an allday event, or
--- a/calendar/base/content/dialogs/calendar-event-dialog.xhtml
+++ b/calendar/base/content/dialogs/calendar-event-dialog.xhtml
@@ -562,17 +562,17 @@
             </menupopup>
           </menu>
         </menupopup>
       </menu>
     </menubar>
     </toolbar>
 
     <toolbarpalette id="event-toolbarpalette">
-#include ../../../lightning/content/lightning-item-toolbar.inc.xul
+#include ../../../lightning/content/lightning-item-toolbar.inc.xhtml
     </toolbarpalette>
 
     <!-- toolboxid is set here since we move the toolbar around in tabs -->
     <toolbar is="customizable-toolbar" id="event-toolbar"
              toolboxid="event-toolbox"
              class="chromeclass-toolbar"
              customizable="true"
              labelalign="end"
--- a/calendar/base/content/dialogs/calendar-invitations-dialog.js
+++ b/calendar/base/content/dialogs/calendar-invitations-dialog.js
@@ -1,15 +1,15 @@
 /* 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/. */
 
 /* exported onLoad, onUnload */
 
-/* globals invitationsText, MozXULElement, MozElements */ // From calendar-invitations-dialog.xul.
+/* globals invitationsText, MozXULElement, MozElements */ // From calendar-invitations-dialog.xhtml.
 
 var { cal } = ChromeUtils.import("resource://calendar/modules/calUtils.jsm");
 
 // Wrap in a block to prevent leaking to window scope.
 {
   const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
   class MozCalendarInvitationsRichlistitem extends MozElements.MozRichlistitem {
--- a/calendar/base/content/dialogs/calendar-migration-dialog.js
+++ b/calendar/base/content/dialogs/calendar-migration-dialog.js
@@ -183,17 +183,17 @@ var gDataMigrator = {
     }
 
     if (DMs.length == 0) {
       // No migration available
       return;
     }
     migLOG("DMs: " + DMs.length);
 
-    let url = "chrome://calendar/content/calendar-migration-dialog.xul";
+    let url = "chrome://calendar/content/calendar-migration-dialog.xhtml";
     if (AppConstants.platform == "macosx") {
       let win = Services.wm.getMostRecentWindow("Calendar:MigrationWizard");
       if (win) {
         win.focus();
       } else {
         openDialog(url, "migration", "centerscreen,chrome,resizable=no,width=500,height=400", DMs);
       }
     } else {
--- a/calendar/base/content/dialogs/calendar-print-dialog.js
+++ b/calendar/base/content/dialogs/calendar-print-dialog.js
@@ -266,17 +266,17 @@ document.addEventListener("dialogaccept"
     // Evicts "about:blank" header
     printSettings.docURL = " ";
 
     // we don't do anything with statusFeedback, msgPrintEngine requires it
     let statusFeedback = Cc["@mozilla.org/messenger/statusfeedback;1"].createInstance();
     statusFeedback = statusFeedback.QueryInterface(Ci.nsIMsgStatusFeedback);
 
     let printWindow = window.openDialog(
-      "chrome://messenger/content/msgPrintEngine.xul",
+      "chrome://messenger/content/msgPrintEngine.xhtml",
       "",
       "chrome,dialog=no,all",
       1,
       [printContent],
       statusFeedback,
       false,
       0
     );
--- a/calendar/base/content/import-export.js
+++ b/calendar/base/content/import-export.js
@@ -114,17 +114,17 @@ function loadEventsFromFile(aCalendar) {
         let args = {};
         args.onOk = async aCal => {
           await putItemsIntoCal(aCal, items, filePath);
           resolve();
         };
         args.calendars = calendars;
         args.promptText = cal.l10n.getCalString("importPrompt");
         openDialog(
-          "chrome://calendar/content/chooseCalendarDialog.xul",
+          "chrome://calendar/content/chooseCalendarDialog.xhtml",
           "_blank",
           "chrome,titlebar,modal,resizable",
           args
         );
       }
     });
   });
 }
@@ -329,16 +329,16 @@ function exportEntireCalendar(aCalendar)
       // the user wants to import into.
       getItemsFromCal(calendars[0]);
     } else {
       // Ask what calendar to import into
       let args = {};
       args.onOk = getItemsFromCal;
       args.promptText = cal.l10n.getCalString("exportPrompt");
       openDialog(
-        "chrome://calendar/content/chooseCalendarDialog.xul",
+        "chrome://calendar/content/chooseCalendarDialog.xhtml",
         "_blank",
         "chrome,titlebar,modal,resizable",
         args
       );
     }
   }
 }
--- a/calendar/base/content/preferences/categories.js
+++ b/calendar/base/content/preferences/categories.js
@@ -1,16 +1,16 @@
 /* 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/. */
 
 /* exported gCategoriesPane */
 
 /* import-globals-from ../../../lightning/content/messenger-overlay-preferences.js */
-// From categories.xul.
+// From categories.xhtml.
 /* globals noneLabel, newTitle, editTitle, overwrite, overwriteTitle, noBlankCategories */
 
 var { cal } = ChromeUtils.import("resource://calendar/modules/calUtils.jsm");
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 var { AppConstants } = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 
 Preferences.add({ id: "calendar.categories.names", type: "string" });
 
@@ -46,17 +46,17 @@ var gCategoriesPane = {
     if (!("backupPrefList" in parent)) {
       parent.backupPrefList = [];
     }
 
     gCategoryList = cal.category.fromPrefs();
 
     this.updateCategoryList();
 
-    this.mCategoryDialog = "chrome://calendar/content/preferences/editCategory.xul";
+    this.mCategoryDialog = "chrome://calendar/content/preferences/editCategory.xhtml";
 
     // Workaround for Bug 1151440 - the HTML color picker won't work
     // in linux when opened from modal dialog
     this.mWinProp = "centerscreen, chrome, resizable=no";
     if (AppConstants.platform != "linux") {
       this.mWinProp += ", modal";
     }
   },
--- a/calendar/base/content/preferences/general.js
+++ b/calendar/base/content/preferences/general.js
@@ -1,16 +1,16 @@
 /* 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/. */
 
 /* exported gCalendarGeneralPane */
 
 /* import-globals-from ../../../lightning/content/messenger-overlay-preferences.js */
-/* globals labelLong, labelShort */ // From general.xul.
+/* globals labelLong, labelShort */ // From general.xhtml.
 
 var { cal } = ChromeUtils.import("resource://calendar/modules/calUtils.jsm");
 
 Preferences.addAll([
   { id: "calendar.date.format", type: "int" },
   { id: "calendar.event.defaultlength", type: "int" },
   { id: "calendar.timezone.local", type: "string" },
   { id: "calendar.task.defaultstart", type: "string" },
--- a/calendar/base/jar.mn
+++ b/calendar/base/jar.mn
@@ -34,76 +34,76 @@ calendar.jar:
     content/calendar-task-tree.js                               (content/calendar-task-tree.js)
     content/calendar-task-view.js                               (content/calendar-task-view.js)
     content/calendar-ui-utils.js                                (content/calendar-ui-utils.js)
     content/calendar-unifinder.js                               (content/calendar-unifinder.js)
     content/calendar-views-utils.js                             (content/calendar-views-utils.js)
     content/calendar-views.js                                   (content/calendar-views.js)
     content/calendar-editable-item.js                           (content/calendar-editable-item.js)
     content/calendar-alarm-dialog.js                            (content/dialogs/calendar-alarm-dialog.js)
-    content/calendar-alarm-dialog.xul                           (content/dialogs/calendar-alarm-dialog.xul)
-    content/calendar-conflicts-dialog.xul                       (content/dialogs/calendar-conflicts-dialog.xul)
+    content/calendar-alarm-dialog.xhtml                         (content/dialogs/calendar-alarm-dialog.xhtml)
+    content/calendar-conflicts-dialog.xhtml                     (content/dialogs/calendar-conflicts-dialog.xhtml)
     content/calendar-creation.js                                (content/dialogs/calendar-creation.js)
     content/calendar-dialog-utils.js                            (content/dialogs/calendar-dialog-utils.js)
-    content/calendar-error-prompt.xul                           (content/dialogs/calendar-error-prompt.xul)
+    content/calendar-error-prompt.xhtml                         (content/dialogs/calendar-error-prompt.xhtml)
     content/calendar-error-prompt.js                            (content/dialogs/calendar-error-prompt.js)
     content/calendar-event-dialog-attendees-custom-elements.js  (content/dialogs/calendar-event-dialog-attendees-custom-elements.js)
     content/calendar-event-dialog-attendees.js                  (content/dialogs/calendar-event-dialog-attendees.js)
-    content/calendar-event-dialog-attendees.xul                 (content/dialogs/calendar-event-dialog-attendees.xul)
+    content/calendar-event-dialog-attendees.xhtml               (content/dialogs/calendar-event-dialog-attendees.xhtml)
     content/calendar-event-dialog-recurrence.js                 (content/dialogs/calendar-event-dialog-recurrence.js)
-    content/calendar-event-dialog-recurrence.xul                (content/dialogs/calendar-event-dialog-recurrence.xul)
+    content/calendar-event-dialog-recurrence.xhtml              (content/dialogs/calendar-event-dialog-recurrence.xhtml)
     content/calendar-event-dialog-reminder.js                   (content/dialogs/calendar-event-dialog-reminder.js)
-    content/calendar-event-dialog-reminder.xul                  (content/dialogs/calendar-event-dialog-reminder.xul)
+    content/calendar-event-dialog-reminder.xhtml                (content/dialogs/calendar-event-dialog-reminder.xhtml)
     content/calendar-event-dialog-timezone.js                   (content/dialogs/calendar-event-dialog-timezone.js)
-    content/calendar-event-dialog-timezone.xul                  (content/dialogs/calendar-event-dialog-timezone.xul)
+    content/calendar-event-dialog-timezone.xhtml                (content/dialogs/calendar-event-dialog-timezone.xhtml)
     content/calendar-event-dialog.css                           (content/dialogs/calendar-event-dialog.css)
-*   content/calendar-event-dialog.xul                           (content/dialogs/calendar-event-dialog.xul)
+*   content/calendar-event-dialog.xhtml                         (content/dialogs/calendar-event-dialog.xhtml)
     content/calendar-invitations-dialog.css                     (content/dialogs/calendar-invitations-dialog.css)
     content/calendar-invitations-dialog.js                      (content/dialogs/calendar-invitations-dialog.js)
-    content/calendar-invitations-dialog.xul                     (content/dialogs/calendar-invitations-dialog.xul)
+    content/calendar-invitations-dialog.xhtml                   (content/dialogs/calendar-invitations-dialog.xhtml)
     content/calendar-migration-dialog.js                        (content/dialogs/calendar-migration-dialog.js)
-    content/calendar-migration-dialog.xul                       (content/dialogs/calendar-migration-dialog.xul)
-    content/calendar-occurrence-prompt.xul                      (content/dialogs/calendar-occurrence-prompt.xul)
+    content/calendar-migration-dialog.xhtml                     (content/dialogs/calendar-migration-dialog.xhtml)
+    content/calendar-occurrence-prompt.xhtml                    (content/dialogs/calendar-occurrence-prompt.xhtml)
     content/calendar-print-dialog.js                            (content/dialogs/calendar-print-dialog.js)
-    content/calendar-print-dialog.xul                           (content/dialogs/calendar-print-dialog.xul)
+    content/calendar-print-dialog.xhtml                         (content/dialogs/calendar-print-dialog.xhtml)
     content/calendar-print-dialog.css                           (content/dialogs/calendar-print-dialog.css)
     content/calendar-properties-dialog.js                       (content/dialogs/calendar-properties-dialog.js)
-    content/calendar-properties-dialog.xul                      (content/dialogs/calendar-properties-dialog.xul)
+    content/calendar-properties-dialog.xhtml                    (content/dialogs/calendar-properties-dialog.xhtml)
     content/calendar-providerUninstall-dialog.js                (content/dialogs/calendar-providerUninstall-dialog.js)
-    content/calendar-providerUninstall-dialog.xul               (content/dialogs/calendar-providerUninstall-dialog.xul)
+    content/calendar-providerUninstall-dialog.xhtml             (content/dialogs/calendar-providerUninstall-dialog.xhtml)
     content/calendar-subscriptions-dialog.css                   (content/dialogs/calendar-subscriptions-dialog.css)
     content/calendar-subscriptions-dialog.js                    (content/dialogs/calendar-subscriptions-dialog.js)
-    content/calendar-subscriptions-dialog.xul                   (content/dialogs/calendar-subscriptions-dialog.xul)
+    content/calendar-subscriptions-dialog.xhtml                 (content/dialogs/calendar-subscriptions-dialog.xhtml)
     content/calendar-summary-dialog.js                          (content/dialogs/calendar-summary-dialog.js)
-    content/calendar-summary-dialog.xul                         (content/dialogs/calendar-summary-dialog.xul)
+    content/calendar-summary-dialog.xhtml                       (content/dialogs/calendar-summary-dialog.xhtml)
     content/calendar-summary-dialog.css                         (content/dialogs/calendar-summary-dialog.css)
     content/chooseCalendarDialog.js                             (content/dialogs/chooseCalendarDialog.js)
-    content/chooseCalendarDialog.xul                            (content/dialogs/chooseCalendarDialog.xul)
+    content/chooseCalendarDialog.xhtml                          (content/dialogs/chooseCalendarDialog.xhtml)
     content/import-export.js                                    (content/import-export.js)
     content/preferences/alarms.js                               (content/preferences/alarms.js)
     content/preferences/categories.js                           (content/preferences/categories.js)
     content/preferences/editCategory.js                         (content/preferences/editCategory.js)
-    content/preferences/editCategory.xul                        (content/preferences/editCategory.xul)
+    content/preferences/editCategory.xhtml                      (content/preferences/editCategory.xhtml)
     content/preferences/general.js                              (content/preferences/general.js)
     content/preferences/views.js                                (content/preferences/views.js)
     content/today-pane.js                                       (content/today-pane.js)
     content/widgets/calendar-alarm-widget.js                    (content/widgets/calendar-alarm-widget.js)
     content/widgets/calendar-dnd-widgets.js                     (content/widgets/calendar-dnd-widgets.js)
     content/widgets/calendar-minimonth.js                       (content/widgets/calendar-minimonth.js)
     content/widgets/calendar-modebox.js                         (content/widgets/calendar-modebox.js)
     content/calendar-subscriptions-list.js                      (content/widgets/calendar-subscriptions-list.js)
     content/calApplicationUtils.js                              (src/calApplicationUtils.js)
     content/calFilter.js                                        (src/calFilter.js)
     content/WindowsNTToZoneInfoTZId.properties                  (src/WindowsNTToZoneInfoTZId.properties)
 % skin calendar classic/1.0 %skin/linux/
 % skin calendar classic/1.0 %skin/osx/ os=Darwin
 % skin calendar classic/1.0 %skin/windows/ os=WINNT
 % skin calendar-common classic/1.0 %skin/common/
-% style chrome://messenger/content/customizeToolbar.xul chrome://calendar/skin/calendar-task-view.css
-% style chrome://messenger/content/customizeToolbar.xul chrome://calendar-common/skin/dialogs/calendar-event-dialog.css
+% style chrome://messenger/content/customizeToolbar.xhtml chrome://calendar/skin/calendar-task-view.css
+% style chrome://messenger/content/customizeToolbar.xhtml chrome://calendar-common/skin/dialogs/calendar-event-dialog.css
     skin/common/calendar-alarms.css                             (themes/common/calendar-alarms.css)
     skin/common/calendar-attendees.css                          (themes/common/calendar-attendees.css)
     skin/common/calendar-creation-wizard.css                    (themes/common/calendar-creation-wizard.css)
     skin/common/calendar-daypicker.css                          (themes/common/calendar-daypicker.css)
     skin/common/calendar-itip-icons.svg                         (themes/common/calendar-itip-icons.svg)
     skin/common/calendar-occurrence-prompt.css                  (themes/common/calendar-occurrence-prompt.css)
     skin/common/calendar-occurrence.svg                         (themes/common/calendar-occurrence.svg)
     skin/common/calendar-preferences.css                        (themes/common/calendar-preferences.css)
--- a/calendar/base/modules/utils/calItipUtils.jsm
+++ b/calendar/base/modules/utils/calItipUtils.jsm
@@ -626,17 +626,17 @@ var calitip = {
         // Ask what calendar to import into
         let args = {};
         args.calendars = calendars;
         args.onOk = aCal => {
           targetCalendar = aCal;
         };
         args.promptText = cal.l10n.getCalString("importPrompt");
         aWindow.openDialog(
-          "chrome://calendar/content/chooseCalendarDialog.xul",
+          "chrome://calendar/content/chooseCalendarDialog.xhtml",
           "_blank",
           "chrome,titlebar,modal,resizable",
           args
         );
       }
 
       if (targetCalendar) {
         aItipItem.targetCalendar = targetCalendar;
--- a/calendar/base/modules/utils/calProviderUtils.jsm
+++ b/calendar/base/modules/utils/calProviderUtils.jsm
@@ -330,17 +330,17 @@ var calprovider = {
     let window = cal.window.getCalendarWindow();
     let args = {
       item: aItem,
       mode: aMode,
       overwrite: false,
     };
 
     window.openDialog(
-      "chrome://calendar/content/calendar-conflicts-dialog.xul",
+      "chrome://calendar/content/calendar-conflicts-dialog.xhtml",
       "calendarConflictsDialog",
       "chrome,titlebar,modal",
       args
     );
 
     return args.overwrite;
   },
 
--- a/calendar/base/modules/utils/calWindowUtils.jsm
+++ b/calendar/base/modules/utils/calWindowUtils.jsm
@@ -19,17 +19,17 @@ var calwindow = {
    * Opens the Create Calendar wizard
    *
    * @param aWindow    the window to open the dialog on, or null for the main calendar window
    * @param aCallback  a function to be performed after calendar creation
    */
   openCalendarWizard: function(aWindow, aCallback) {
     let window = aWindow || calwindow.getCalendarWindow();
     window.openDialog(
-      "chrome://calendar/content/calendarCreation.xul",
+      "chrome://calendar/content/calendarCreation.xhtml",
       "caEditServer",
       // Workaround for Bug 1151440 - the HTML color picker won't work
       // in linux when opened from modal dialog
       AppConstants.platform == "linux"
         ? "chrome,titlebar,resizable"
         : "modal,chrome,titlebar,resizable",
       aCallback
     );
@@ -39,32 +39,32 @@ var calwindow = {
    * Opens the calendar properties window for aCalendar
    *
    * @param aWindow    the window to open the dialog on, or null for the main calendar window
    * @param aCalendar  the calendar whose properties should be displayed
    */
   openCalendarProperties: function(aWindow, aCalendar) {
     let window = aWindow || calwindow.getCalendarWindow();
     window.openDialog(
-      "chrome://calendar/content/calendar-properties-dialog.xul",
+      "chrome://calendar/content/calendar-properties-dialog.xhtml",
       "CalendarPropertiesDialog",
       "modal,chrome,titlebar,resizable",
       { calendar: aCalendar }
     );
   },
 
   /**
    * Opens the print dialog
    *
    * @param aWindow    the window to open the dialog on, or null for the main calendar window
    */
   openPrintDialog: function(aWindow = null) {
     let window = aWindow || calwindow.getCalendarWindow();
     window.openDialog(
-      "chrome://calendar/content/calendar-print-dialog.xul",
+      "chrome://calendar/content/calendar-print-dialog.xhtml",
       "Print",
       "centerscreen,chrome,resizable"
     );
   },
 
   /**
    * Returns the most recent calendar window in an application independent way
    */
--- a/calendar/base/src/calAlarmMonitor.js
+++ b/calendar/base/src/calAlarmMonitor.js
@@ -116,17 +116,17 @@ calAlarmMonitor.prototype = {
     if (!Services.prefs.getBoolPref("calendar.alarms.show", true)) {
       return;
     }
 
     let calAlarmWindow = peekAlarmWindow();
     if (!calAlarmWindow && (!this.mWindowOpening || this.mWindowOpening.closed)) {
       this.mWindowOpening = Services.ww.openWindow(
         null,
-        "chrome://calendar/content/calendar-alarm-dialog.xul",
+        "chrome://calendar/content/calendar-alarm-dialog.xhtml",
         "_blank",
         "chrome,dialog=yes,all,resizable",
         this
       );
     }
     if (!this.mWindowOpening) {
       calAlarmWindow.addWidgetFor(aItem, aAlarm);
     }
--- a/calendar/base/src/calCalendarManager.js
+++ b/calendar/base/src/calCalendarManager.js
@@ -251,17 +251,17 @@ calCalendarManager.prototype = {
         Ci.nsIDialogParamBlock
       );
       paramBlock.SetNumberStrings(3);
       paramBlock.SetString(0, uiMessage);
       paramBlock.SetString(1, "0x" + rc.toString(0x10));
       paramBlock.SetString(2, ex);
       Services.ww.openWindow(
         null,
-        "chrome://calendar/content/calendar-error-prompt.xul",
+        "chrome://calendar/content/calendar-error-prompt.xhtml",
         "_blank",
         "chrome,dialog=yes,alwaysRaised=yes",
         paramBlock
       );
       return null;
     }
   },
 
@@ -797,17 +797,17 @@ calMgrCalendarObserver.prototype = {
     // the message for future reference.
     this.announcedMessages.push(paramBlock);
 
     // Will remove paramBlock from announced messages when promptWindow is
     // closed.  (Closing fires unloaded event, but promptWindow is also
     // unloaded [to clean it?] before loading, so wait for detected load
     // event before detecting unload event that signifies user closed this
     // prompt window.)
-    let promptUrl = "chrome://calendar/content/calendar-error-prompt.xul";
+    let promptUrl = "chrome://calendar/content/calendar-error-prompt.xhtml";
     let features = "chrome,dialog=yes,alwaysRaised=yes";
     let promptWindow = Services.ww.openWindow(null, promptUrl, "_blank", features, paramBlock);
     promptWindow.addEventListener("load", awaitLoad, { capture: false, once: true });
   },
 };
 
 function calDummyCalendar(type) {
   this.initProviderBase();
@@ -864,17 +864,17 @@ var gCalendarManagerAddonListener = {
   onUninstalling: function(aAddon, aNeedsRestart) {
     if (!this.queryUninstallProvider(aAddon)) {
       // If the addon should not be uninstalled, then cancel the uninstall.
       aAddon.cancelUninstall();
     }
   },
 
   queryUninstallProvider: function(aAddon) {
-    const uri = "chrome://calendar/content/calendar-providerUninstall-dialog.xul";
+    const uri = "chrome://calendar/content/calendar-providerUninstall-dialog.xhtml";
     const features = "chrome,titlebar,resizable,modal";
     let calMgr = cal.getCalendarManager();
     let affectedCalendars = calMgr
       .getCalendars()
       .filter(calendar => calendar.providerID == aAddon.id);
     if (!affectedCalendars.length) {
       // If no calendars are affected, then everything is fine.
       return true;
--- a/calendar/base/themes/common/widgets/calendar-widgets.css
+++ b/calendar/base/themes/common/widgets/calendar-widgets.css
@@ -119,18 +119,18 @@ checkbox.treenode-checkbox > .checkbox-l
 .categories-textbox {
   -moz-appearance: textfield;
 }
 
 /*
  * Note that #calendar-list is used for 2 separate lists that look similar,
  * but are otherwise independent:
  *
- * - calendar-providerUninstall-dialog.xul
- * - messenger-overlay-sidebar.xul
+ * - calendar-providerUninstall-dialog.xhtml
+ * - messenger-overlay-sidebar.xhtml
  *
  * Please be careful when changing the following CSS.
  */
 
 #calendar-list-inner-pane > #calendar-list {
   -moz-appearance: none;
   margin: 0;
   border-style: none;
--- a/calendar/itip/calItipEmailTransport.js
+++ b/calendar/itip/calItipEmailTransport.js
@@ -281,17 +281,17 @@ calItipEmailTransport.prototype = {
             validRecipients = cal.email.validateRecipientList(identity.doBccList);
             if (validRecipients != "") {
               composeFields.bcc = validRecipients;
             }
           }
 
           // xxx todo: add send/progress UI, maybe recycle
           //           "@mozilla.org/messengercompose/composesendlistener;1"
-          //           and/or "chrome://messenger/content/messengercompose/sendProgress.xul"
+          //           and/or "chrome://messenger/content/messengercompose/sendProgress.xhtml"
           // i.e. bug 432662
           let msgSend = Cc["@mozilla.org/messengercompose/send;1"].createInstance(Ci.nsIMsgSend);
           msgSend.sendMessageFile(
             identity,
             account.key,
             composeFields,
             mailFile,
             true, // deleteSendFileOnCompletion
--- a/calendar/lightning/content/lightning-item-iframe.js
+++ b/calendar/lightning/content/lightning-item-iframe.js
@@ -2041,17 +2041,17 @@ function editAttendees() {
   args.organizer = window.organizer && window.organizer.clone();
   args.calendar = calendar;
   args.item = window.calendarItem;
   args.onOk = callback;
   args.fbWrapper = window.fbWrapper;
 
   // open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-attendees.xul",
+    "chrome://calendar/content/calendar-event-dialog-attendees.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * Updates the UI outside of the iframe (toolbar, menu, statusbar, etc.)
@@ -2755,17 +2755,17 @@ function editRepeat() {
   args.onOk = function(recurrenceInfo) {
     savedWindow.recurrenceInfo = recurrenceInfo;
   };
 
   window.setCursor("wait");
 
   // open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-recurrence.xul",
+    "chrome://calendar/content/calendar-event-dialog-recurrence.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * This function is responsible for propagating UI state to controls
@@ -3494,17 +3494,17 @@ function editTimezone(aElementId, aDateT
   args.calendar = getCurrentCalendar();
   args.onOk = function(datetime) {
     cal.dtz.saveRecentTimezone(datetime.timezone.tzid);
     return aCallback(datetime);
   };
 
   // open the dialog modally
   openDialog(
-    "chrome://calendar/content/calendar-event-dialog-timezone.xul",
+    "chrome://calendar/content/calendar-event-dialog-timezone.xhtml",
     "_blank",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * This function initializes the following controls:
--- a/calendar/lightning/content/lightning-item-panel.js
+++ b/calendar/lightning/content/lightning-item-panel.js
@@ -227,17 +227,17 @@ function onLoadLightningItemPanel(aIfram
 
     // Add a listener to detect close events, prompt user about saving changes.
     window.addEventListener("close", windowCloseListener);
   } else {
     // window dialog case
     iframe = document.createXULElement("iframe");
     iframeSrc = window.arguments[0].useNewItemUI
       ? "chrome://lightning/content/html-item-editing/lightning-item-iframe.html"
-      : "chrome://lightning/content/lightning-item-iframe.xul";
+      : "chrome://lightning/content/lightning-item-iframe.xhtml";
 
     iframe.setAttribute("id", "lightning-item-panel-iframe");
     iframe.setAttribute("flex", "1");
 
     let statusbar = document.getElementById("status-bar");
 
     // Note: iframe.contentWindow is undefined before the iframe is inserted here.
     dialog.insertBefore(iframe, statusbar);
@@ -478,17 +478,17 @@ function openNewMessage() {
   );
 }
 
 /**
  * Open a new addressbook window
  */
 function openNewCardDialog() {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abNewCardDialog.xul",
+    "chrome://messenger/content/addressbook/abNewCardDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen"
   );
 }
 
 /**
  * Handler for edit attendees command.
  */
@@ -1001,17 +1001,17 @@ function onCommandCustomize() {
 
   // Disable the toolbar context menu items
   document.getElementById("cmd_customize").setAttribute("disabled", "true");
 
   let wintype = document.documentElement.getAttribute("windowtype");
   wintype = wintype.replace(/:/g, "");
 
   window.openDialog(
-    "chrome://messenger/content/customizeToolbar.xul",
+    "chrome://messenger/content/customizeToolbar.xhtml",
     "CustomizeToolbar" + wintype,
     "chrome,all,dependent",
     document.getElementById(toolboxId), // toolbox dom node
     false, // is mode toolbar yes/no?
     null, // callback function
     "dialog"
   ); // name of this mode
 }
--- a/calendar/lightning/content/lightning-item-panel.xhtml
+++ b/calendar/lightning/content/lightning-item-panel.xhtml
@@ -120,17 +120,17 @@
                  class="mail-toolbox"
                  mode="full"
                  defaultmode="full"
                  iconsize="small"
                  defaulticonsize="small"
                  labelalign="end"
                  defaultlabelalign="end">
           <toolbarpalette id="event-toolbarpalette">
-#include lightning-item-toolbar.inc.xul
+#include lightning-item-toolbar.inc.xhtml
             <toolbarbutton id="calendar-item-appmenu-button"
                            type="menu"
                            class="toolbarbutton-1 button-appmenu"
                            label="&lightning.toolbar.appmenuButton.label;"
                            tooltiptext="&lightning.toolbar.appmenuButton1.tooltip;"/>
           </toolbarpalette>
           <!-- toolboxid is set here since we move the toolbar around for tabs -->
           <toolbar is="customizable-toolbar" id="event-tab-toolbar"
--- a/calendar/lightning/content/messenger-overlay-preferences.xhtml
+++ b/calendar/lightning/content/messenger-overlay-preferences.xhtml
@@ -34,30 +34,30 @@
               insertbefore="paneAdvanced"
               label="&lightning.preferencesLabel;">
 
     <hbox id="calendarPaneCategory"
           class="subcategory"
           data-category="paneCalendar">
       <html:h1>&panelHeader.title;</html:h1>
     </hbox>
-#include ../../base/content/preferences/views.inc.xul
-#include ../../base/content/preferences/general.inc.xul
+#include ../../base/content/preferences/views.inc.xhtml
+#include ../../base/content/preferences/general.inc.xhtml
     <hbox id="chatPaneCategory"
           class="subcategory"
           data-category="paneCalendar">
       <html:h1>&panelReminder.title;</html:h1>
     </hbox>
-#include ../../base/content/preferences/alarms.inc.xul
+#include ../../base/content/preferences/alarms.inc.xhtml
     <hbox id="chatPaneCategory"
           class="subcategory"
           data-category="paneCalendar">
       <html:h1>&panelCatecory.title;</html:h1>
     </hbox>
-#include ../../base/content/preferences/categories.inc.xul
+#include ../../base/content/preferences/categories.inc.xhtml
     </prefpane>
 
     <script src="chrome://calendar/content/calendar-ui-utils.js"/>
     <script src="chrome://calendar/content/calendar-dialog-utils.js"/>
 
     <!-- Get the localized text for use in the .js -->
     <script>
         var labelLong  = "&pref.dateformat.long;";
--- a/calendar/lightning/content/suite-overlay-addons.xhtml
+++ b/calendar/lightning/content/suite-overlay-addons.xhtml
@@ -20,17 +20,17 @@
       showPreferences: function() {
         var win = Services.wm.getMostRecentWindow("mozilla:preferences");
         if (win) {
           win.focus();
           var doc = win.document;
           var pane = doc.getElementById("paneLightning");
           doc.querySelector("dialog").syncTreeWithPane(pane, true);
         } else {
-          openDialog("chrome://communicator/content/pref/preferences.xul",
+          openDialog("chrome://communicator/content/pref/preferences.xhtml",
                      "PrefWindow",
                      "non-private,chrome,titlebar,dialog=no,resizable",
                      "paneLightning");
         }
       },
     };
 
     window.addEventListener("ViewChanged", lightningPrefs, false);
--- a/calendar/lightning/content/suite-overlay-preferences.xhtml
+++ b/calendar/lightning/content/suite-overlay-preferences.xhtml
@@ -1,20 +1,20 @@
 <?xml version="1.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/. -->
 
 <?xml-stylesheet href="chrome://lightning/skin/lightning.css"?>
 
-<?xul-overlay href="chrome://calendar/content/preferences/general.xul"?>
-<?xul-overlay href="chrome://calendar/content/preferences/alarms.xul"?>
-<?xul-overlay href="chrome://calendar/content/preferences/categories.xul"?>
-<?xul-overlay href="chrome://calendar/content/preferences/views.xul"?>
+<?xul-overlay href="chrome://calendar/content/preferences/general.xhtml"?>
+<?xul-overlay href="chrome://calendar/content/preferences/alarms.xhtml"?>
+<?xul-overlay href="chrome://calendar/content/preferences/categories.xhtml"?>
+<?xul-overlay href="chrome://calendar/content/preferences/views.xhtml"?>
 
 <!DOCTYPE overlay [
     <!ENTITY % lightningDTD SYSTEM "chrome://lightning/locale/lightning.dtd">
     %lightningDTD;
     <!ENTITY % preferencesDTD SYSTEM "chrome://calendar/locale/preferences/preferences.dtd">
     %preferencesDTD;
 ]>
 
--- a/calendar/lightning/jar.mn
+++ b/calendar/lightning/jar.mn
@@ -1,65 +1,65 @@
 #filter substitution
 # 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/.
 
 lightning.jar:
 % override chrome://messagebody/skin/imip.css chrome://lightning/skin/imip.css
 % override chrome://messagebody/skin/calendar-event-dialog-attendees.png chrome://calendar-common/skin/calendar-event-dialog-attendees.png
-% overlay chrome://messenger/content/messenger.xul chrome://lightning/content/lightning-item-panel.xul
-% overlay chrome://messenger/content/msgAccountCentral.xul chrome://lightning/content/messenger-overlay-accountCentral.xul
-% overlay chrome://messenger/content/messenger.xul chrome://lightning/content/messenger-overlay-sidebar.xul
-% overlay chrome://messenger/content/messageWindow.xul chrome://lightning/content/imip-bar-overlay.xul
-% overlay chrome://messenger/content/messageWindow.xul chrome://lightning/content/messenger-overlay-messageWindow.xul
-% overlay chrome://lightning/content/messenger-overlay-sidebar.xul chrome://lightning/content/imip-bar-overlay.xul
-% overlay chrome://communicator/content/pref/preferences.xul chrome://lightning/content/suite-overlay-preferences.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-% overlay about:addons chrome://lightning/content/suite-overlay-addons.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-% overlay chrome://mozapps/content/extensions/extensions.xul chrome://lightning/content/suite-overlay-addons.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-% overlay chrome://messenger/content/preferences/preferences.xul chrome://lightning/content/messenger-overlay-preferences.xul
-% overlay about:preferences chrome://lightning/content/messenger-overlay-preferences.xul
-% overlay chrome://lightning/content/messenger-overlay-sidebar.xul chrome://lightning/content/suite-overlay-sidebar.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% overlay chrome://messenger/content/messenger.xhtml chrome://lightning/content/lightning-item-panel.xhtml
+% overlay chrome://messenger/content/msgAccountCentral.xhtml chrome://lightning/content/messenger-overlay-accountCentral.xhtml
+% overlay chrome://messenger/content/messenger.xhtml chrome://lightning/content/messenger-overlay-sidebar.xhtml
+% overlay chrome://messenger/content/messageWindow.xhtml chrome://lightning/content/imip-bar-overlay.xhtml
+% overlay chrome://messenger/content/messageWindow.xhtml chrome://lightning/content/messenger-overlay-messageWindow.xhtml
+% overlay chrome://lightning/content/messenger-overlay-sidebar.xhtml chrome://lightning/content/imip-bar-overlay.xhtml
+% overlay chrome://communicator/content/pref/preferences.xhtml chrome://lightning/content/suite-overlay-preferences.xhtml application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% overlay about:addons chrome://lightning/content/suite-overlay-addons.xhtml application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% overlay chrome://mozapps/content/extensions/extensions.xhtml chrome://lightning/content/suite-overlay-addons.xhtml application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% overlay chrome://messenger/content/preferences/preferences.xhtml chrome://lightning/content/messenger-overlay-preferences.xhtml
+% overlay about:preferences chrome://lightning/content/messenger-overlay-preferences.xhtml
+% overlay chrome://lightning/content/messenger-overlay-sidebar.xhtml chrome://lightning/content/suite-overlay-sidebar.xhtml application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
 % override chrome://lightning-common/skin/accountCentral.css chrome://lightning-common/skin/suite-accountCentral.css application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
 % content lightning %content/
     content/html-item-editing/lightning-item-iframe.html   (content/html-item-editing/lightning-item-iframe.html)
     content/html-item-editing/react-code.js                (content/html-item-editing/react-code.js)
     content/imip-bar.js                                    (content/imip-bar.js)
-    content/imip-bar-overlay.xul                           (content/imip-bar-overlay.xul)
+    content/imip-bar-overlay.xhtml                         (content/imip-bar-overlay.xhtml)
     content/lightning-calendar-creation.js                 (content/lightning-calendar-creation.js)
     content/lightning-calendar-properties.js               (content/lightning-calendar-properties.js)
     content/lightning-invitation.xhtml                     (content/lightning-invitation.xhtml)
-*   content/lightning-item-panel.xul                       (content/lightning-item-panel.xul)
+*   content/lightning-item-panel.xhtml                     (content/lightning-item-panel.xhtml)
     content/lightning-item-panel.js                        (content/lightning-item-panel.js)
-    content/lightning-item-iframe.xul                      (content/lightning-item-iframe.xul)
+    content/lightning-item-iframe.xhtml                    (content/lightning-item-iframe.xhtml)
     content/lightning-item-iframe.js                       (content/lightning-item-iframe.js)
     content/lightning-utils.js                             (content/lightning-utils.js)
-    content/messenger-overlay-accountCentral.xul           (content/messenger-overlay-accountCentral.xul)
-    content/messenger-overlay-messageWindow.xul            (content/messenger-overlay-messageWindow.xul)
+    content/messenger-overlay-accountCentral.xhtml         (content/messenger-overlay-accountCentral.xhtml)
+    content/messenger-overlay-messageWindow.xhtml          (content/messenger-overlay-messageWindow.xhtml)
     content/messenger-overlay-sidebar.js                   (content/messenger-overlay-sidebar.js)
-    content/messenger-overlay-sidebar.xul                  (content/messenger-overlay-sidebar.xul)
+    content/messenger-overlay-sidebar.xhtml                (content/messenger-overlay-sidebar.xhtml)
     content/messenger-overlay-preferences.js               (content/messenger-overlay-preferences.js)
-*   content/messenger-overlay-preferences.xul              (content/messenger-overlay-preferences.xul)
+*   content/messenger-overlay-preferences.xhtml            (content/messenger-overlay-preferences.xhtml)
 #ifdef MOZ_SUITE
-    content/suite-overlay-addons.xul                       (content/suite-overlay-addons.xul)
-    content/suite-overlay-preferences.xul                  (content/suite-overlay-preferences.xul)
+    content/suite-overlay-addons.xhtml                     (content/suite-overlay-addons.xhtml)
+    content/suite-overlay-preferences.xhtml                (content/suite-overlay-preferences.xhtml)
     content/suite-overlay-sidebar.js                       (content/suite-overlay-sidebar.js)
-    content/suite-overlay-sidebar.xul                      (content/suite-overlay-sidebar.xul)
+    content/suite-overlay-sidebar.xhtml                    (content/suite-overlay-sidebar.xhtml)
 #endif
     content/caldav-lightning-calendar-creation.js          (../providers/caldav/content/caldav-lightning-calendar-creation.js)
     content/caldav-lightning-calendar-properties.js        (../providers/caldav/content/caldav-lightning-calendar-properties.js)
     content/caldav-lightning-utils.js                      (../providers/caldav/content/caldav-lightning-utils.js)
 
 % skin lightning classic/1.0 %skin/linux/
 % skin lightning classic/1.0 %skin/osx/ os=Darwin
 % skin lightning classic/1.0 %skin/windows/ os=WINNT
 % skin lightning-common classic/1.0 %skin/lightning-common/
-% style chrome://messenger/content/customizeToolbar.xul chrome://lightning/skin/lightning-toolbar.css
-% style chrome://messenger/content/customizeToolbar.xul chrome://lightning-common/skin/lightning.css application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
-% style chrome://messenger/content/customizeToolbar.xul chrome://calendar-common/skin/dialogs/calendar-event-dialog.css application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% style chrome://messenger/content/customizeToolbar.xhtml chrome://lightning/skin/lightning-toolbar.css
+% style chrome://messenger/content/customizeToolbar.xhtml chrome://lightning-common/skin/lightning.css application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
+% style chrome://messenger/content/customizeToolbar.xhtml chrome://calendar-common/skin/dialogs/calendar-event-dialog.css application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
     skin/lightning-common/accountCentral.css               (themes/common/accountCentral.css)
     skin/lightning-common/html-item-editing.css            (themes/common/html-item-editing.css)
     skin/lightning-common/todayButton-arrow.svg            (themes/common/images/todayButton-arrow.svg)
     skin/lightning-common/imip.css                         (themes/common/imip.css)
     skin/lightning-common/lightning.css                    (themes/common/lightning.css)
     skin/lightning-common/lightning-toolbar.css            (themes/common/lightning-toolbar.css)
     skin/lightning-common/suite-accountCentral.css         (themes/common/suite-accountCentral.css)
     skin/lightning-common/datetimepickers.css              (../resources/skin/datetimepickers.css)
@@ -77,15 +77,15 @@ lightning.jar:
 
 # Windows theme files
     skin/windows/imip.css                                  (themes/windows/imip.css)
     skin/windows/lightning.css                             (themes/windows/lightning.css)
     skin/windows/lightning-toolbar.css                     (themes/windows/lightning-toolbar.css)
 
 calendar.jar:
     content/calendarCreation.js                   (../resources/content/calendarCreation.js)
-    content/calendarCreation.xul                  (../resources/content/calendarCreation.xul)
+    content/calendarCreation.xhtml                (../resources/content/calendarCreation.xhtml)
     content/datetimepickers/datetimepickers.js    (../resources/content/datetimepickers/datetimepickers.js)
     content/mouseoverPreviews.js                  (../resources/content/mouseoverPreviews.js)
     content/publish.js                            (../resources/content/publish.js)
     content/publishDialog.js                      (../resources/content/publishDialog.js)
-    content/publishDialog.xul                     (../resources/content/publishDialog.xul)
+    content/publishDialog.xhtml                   (../resources/content/publishDialog.xhtml)
     content/sound.wav                             (../resources/content/sound.wav)
--- a/calendar/resources/content/publish.js
+++ b/calendar/resources/content/publish.js
@@ -16,17 +16,17 @@ var { Services } = ChromeUtils.import("r
  * Show publish dialog, ask for URL and publish all selected items.
  */
 function publishCalendarData() {
   let args = {};
 
   args.onOk = self.publishCalendarDataDialogResponse;
 
   openDialog(
-    "chrome://calendar/content/publishDialog.xul",
+    "chrome://calendar/content/publishDialog.xhtml",
     "caPublishEvents",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * publishCalendarDataDialogResponse
@@ -59,17 +59,17 @@ function publishEntireCalendar(aCalendar
       // Ask user to select the calendar that should be published.
       // publishEntireCalendar() will be called again if OK is pressed
       // in the dialog and the selected calendar will be passed in.
       // Therefore return after openDialog().
       let args = {};
       args.onOk = publishEntireCalendar;
       args.promptText = cal.l10n.getCalString("publishPrompt");
       openDialog(
-        "chrome://calendar/content/chooseCalendarDialog.xul",
+        "chrome://calendar/content/chooseCalendarDialog.xhtml",
         "_blank",
         "chrome,titlebar,modal,resizable",
         args
       );
       return;
     }
   }
 
@@ -83,17 +83,17 @@ function publishEntireCalendar(aCalendar
   // restore the remote ics path preference from the calendar passed in
   let remotePath = aCalendar.getProperty("remote-ics-path");
   if (remotePath && remotePath.length && remotePath.length > 0) {
     publishObject.remotePath = remotePath;
   }
 
   args.publishObject = publishObject;
   openDialog(
-    "chrome://calendar/content/publishDialog.xul",
+    "chrome://calendar/content/publishDialog.xhtml",
     "caPublishEvents",
     "chrome,titlebar,modal,resizable",
     args
   );
 }
 
 /**
  * publishEntireCalendarDialogResponse
--- a/calendar/resources/content/publishDialog.js
+++ b/calendar/resources/content/publishDialog.js
@@ -1,15 +1,15 @@
 /* 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/. */
 
 /* exported loadCalendarPublishDialog, closeDialog */
 
-/* globals publishButtonLabel, closeButtonLabel */ // From publishDialog.xul
+/* globals publishButtonLabel, closeButtonLabel */ // From publishDialog.xhtml
 
 var gOnOkFunction; // function to be called when user clicks OK
 var gPublishObject;
 
 /**
  * Called when the dialog is loaded.
  */
 function loadCalendarPublishDialog() {
--- a/calendar/test/browser/eventDialog/browser_eventDialogSize.js
+++ b/calendar/test/browser/eventDialog/browser_eventDialogSize.js
@@ -143,17 +143,17 @@ function checkLargeEnough(outer, inner) 
       iframeNode.clientHeight + SMALL_TOLERANCE >= scrollHeight
     );
   });
   dump(`Dialog is ${outer.window.outerWidth} by ${outer.window.outerHeight}\n`);
 }
 
 function getPersistedValue(which) {
   return Services.xulStore.getValue(
-    "chrome://calendar/content/calendar-event-dialog.xul",
+    "chrome://calendar/content/calendar-event-dialog.xhtml",
     "calendar-event-window",
     which
   );
 }
 
 function checkWithinTolerance(value, expected, tolerance = 1) {
   if (controller.window.devicePixelRatio == 1) {
     controller.assert(() => value == expected);
--- a/calendar/test/browser/preferences/browser_categoryColors.js
+++ b/calendar/test/browser/preferences/browser_categoryColors.js
@@ -30,17 +30,17 @@ add_task(function testCategoryColors() {
       Assert.ok(item.lastElementChild.style.backgroundColor);
     }
 
     controller.click(content_tab_eid(tab, "categorieslist"), 5, 5);
     controller.click(content_tab_eid(tab, "editCButton"));
 
     let editFrame = wait_for_frame_load(
       tab.browser.contentDocument.getElementById("dialogOverlay-0").querySelector("browser"),
-      "chrome://calendar/content/preferences/editCategory.xul"
+      "chrome://calendar/content/preferences/editCategory.xhtml"
     );
     let { replaceText, lookup } = helpersForController(editFrame);
     let categoryName = editFrame.eid("categoryName");
     replaceText(categoryName, "ZZZ Mozmill");
     editFrame.e("categoryColor").value = "#00CC00";
     editFrame.click(
       lookup(`
             id("editCategoryWindow")/id("editCategory")/shadow/{"class":"dialog-button-box"}/{"dlgtype":"accept"}
--- a/calendar/test/modules/ItemEditingHelpers.jsm
+++ b/calendar/test/modules/ItemEditingHelpers.jsm
@@ -509,17 +509,17 @@ async function addAttendees(dialogWindow
   let attendees = attendeesString.split(",");
   for (let attendee of attendees) {
     let calAttendee = iframeWindow.attendees.find(aAtt => aAtt.id == `mailto:${attendee}`);
     // Only add if not already present.
     if (!calAttendee) {
       synthesizeMouseAtCenter(dialogDocument.getElementById("button-attendees"), {}, dialogWindow);
       await BrowserTestUtils.promiseAlertDialog(
         undefined,
-        "chrome://calendar/content/calendar-event-dialog-attendees.xul",
+        "chrome://calendar/content/calendar-event-dialog-attendees.xhtml",
         async attendeesWindow => {
           await sleep(attendeesWindow);
           let attendeesDocument = attendeesWindow.document;
 
           // As starting point is always the last entered Attendee, we have
           // to advance to not overwrite it.
           await sleep(attendeesWindow);
           Assert.equal(attendeesDocument.activeElement.getAttribute("is"), "autocomplete-input");
@@ -593,17 +593,17 @@ async function setTimezone(dialogWindow,
 
   Assert.ok(BrowserTestUtils.is_visible(label));
   synthesizeMouseAtCenter(label, {}, iframeWindow);
   await BrowserTestUtils.waitForEvent(menupopup, "popupshown");
   synthesizeMouseAtCenter(customMenuitem, {}, iframeWindow);
 
   await BrowserTestUtils.promiseAlertDialog(
     undefined,
-    "chrome://calendar/content/calendar-event-dialog-timezone.xul",
+    "chrome://calendar/content/calendar-event-dialog-timezone.xhtml",
     async timezoneWindow => {
       let timezoneDocument = timezoneWindow.document;
       let timezoneMenulist = timezoneDocument.getElementById("timezone-menulist");
       let timezoneMenuitem = timezoneMenulist.querySelector(`[value="${timezone}"]`);
 
       synthesizeMouseAtCenter(timezoneMenulist, {}, timezoneWindow);
       await BrowserTestUtils.waitForEvent(timezoneMenulist, "popupshown");
       timezoneMenuitem.scrollIntoView();
--- a/chat/content/jar.mn
+++ b/chat/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/.
 
 chat.jar:
 % content chat %content/chat/
 	content/chat/accounts.css
 	content/chat/browserRequest.js
-	content/chat/browserRequest.xul
+	content/chat/browserRequest.xhtml
 	content/chat/imAccountOptionsHelper.js
 	content/chat/chat-account-richlistitem.js
 	content/chat/chat-tooltip.js
 	content/chat/conversation-browser.js
 	content/chat/conv.html
 	content/chat/otr-add-fingerprint.js
-	content/chat/otr-add-fingerprint.xul
+	content/chat/otr-add-fingerprint.xhtml
 	content/chat/otr-auth.js
-	content/chat/otr-auth.xul
+	content/chat/otr-auth.xhtml
 	content/chat/otr-finger.js
-	content/chat/otr-finger.xul
+	content/chat/otr-finger.xhtml
 	content/chat/otrWorker.js
--- a/chat/modules/OTRUI.jsm
+++ b/chat/modules/OTRUI.jsm
@@ -15,19 +15,19 @@ const syncL10n = new Localization(["mess
 function _str(id) {
   return syncL10n.formatValueSync(id);
 }
 
 function _strArgs(id, args) {
   return syncL10n.formatValueSync(id, args);
 }
 
-const OTR_AUTH_DIALOG_URL = "chrome://chat/content/otr-auth.xul";
+const OTR_AUTH_DIALOG_URL = "chrome://chat/content/otr-auth.xhtml";
 const OTR_ADD_FINGER_DIALOG_URL =
-  "chrome://chat/content/otr-add-fingerprint.xul";
+  "chrome://chat/content/otr-add-fingerprint.xhtml";
 
 const AUTH_STATUS_UNVERIFIED = "otr-auth-unverified";
 var authLabelMap;
 var authTitleMap;
 var trustMap;
 
 function initStrings() {
   authLabelMap = new Map([
--- a/common/src/viewSource.js
+++ b/common/src/viewSource.js
@@ -254,19 +254,19 @@ ViewSourceChrome.prototype = {
   },
 
   /**
    * This should be called once when the DOM has finished loading. Here we
    * set the state of various menu items, and add event listeners to
    * DOM nodes.
    *
    * This is also the place where we handle any arguments that have been
-   * passed to viewSource.xul.
+   * passed to viewSource.xhtml.
    *
-   * Modern consumers should pass a single object argument to viewSource.xul:
+   * Modern consumers should pass a single object argument to viewSource.xhtml:
    *
    *   URL (required):
    *     A string URL for the page we'd like to view the source of.
    *   browser:
    *     The browser containing the document that we would like to view the
    *     source of. This argument is optional if outerWindowID is not passed.
    *   outerWindowID (optional):
    *     The outerWindowID of the content window containing the document that
@@ -332,38 +332,38 @@ ViewSourceChrome.prototype = {
     if (!args.partial) {
       this.loadViewSource(args);
     }
 
     return undefined;
   },
 
   /**
-   * This is the deprecated API for viewSource.xul, for old-timer consumers.
+   * This is the deprecated API for viewSource.xhtml, for old-timer consumers.
    * This API might eventually go away.
    */
   // NOT WORKING ANYMORE AFTER REMOVAL OF THE "ViewSource:LoadSourceDeprecated" MESSAGE IN BUG 1443371.
   _loadViewSourceDeprecated(aArguments) {
     Deprecated.warning(
-      "The arguments you're passing to viewSource.xul " +
+      "The arguments you're passing to viewSource.xhtml " +
         "are using an out-of-date API.",
       "https://developer.mozilla.org/en-US/Add-ons/Code_snippets/View_Source_for_XUL_Applications"
     );
     // Parse the 'arguments' supplied with the dialog.
     //    arg[0] - URL string.
     //    arg[1] - Charset value in the form 'charset=xxx'.
     //    arg[2] - Page descriptor used to load content from the cache.
     //    arg[3] - Line number to go to.
     //    arg[4] - Whether charset was forced by the user
 
     if (aArguments[2]) {
       let pageDescriptor = aArguments[2];
       if (Cu.isCrossProcessWrapper(pageDescriptor)) {
         throw new Error(
-          "Cannot pass a CPOW as the page descriptor to viewSource.xul."
+          "Cannot pass a CPOW as the page descriptor to viewSource.xhtml."
         );
       }
     }
 
     if (this.browser.isRemoteBrowser) {
       throw new Error(
         "Deprecated view source API should not use a remote browser."
       );
--- a/editor/ui/composer/content/ComposerCommands.js
+++ b/editor/ui/composer/content/ComposerCommands.js
@@ -645,17 +645,17 @@ var nsSaveAndChangeEncodingCommand = {
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     SetEditMode(gPreviousNonSourceDisplayMode);
     window.ok = false;
     window.exportToText = false;
     var oldTitle = GetDocumentTitle();
     window.openDialog(
-      "chrome://editor/content/EditorSaveAsCharset.xul",
+      "chrome://editor/content/EditorSaveAsCharset.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable=yes"
     );
 
     if (GetDocumentTitle() != oldTitle) {
       UpdateWindowTitle();
     }
 
@@ -715,17 +715,17 @@ var nsPublishCommand = {
       }
 
       if (showPublishDialog || !publishData) {
         // Show the publish dialog
         publishData = {};
         window.ok = false;
         let oldTitle = GetDocumentTitle();
         window.openDialog(
-          "chrome://editor/content/EditorPublish.xul",
+          "chrome://editor/content/EditorPublish.xhtml",
           "_blank",
           "chrome,close,titlebar,modal",
           "",
           "",
           publishData
         );
         if (GetDocumentTitle() != oldTitle) {
           UpdateWindowTitle();
@@ -755,17 +755,17 @@ var nsPublishAsCommand = {
   doCommand(aCommand) {
     if (GetCurrentEditor()) {
       SetEditMode(gPreviousNonSourceDisplayMode);
 
       window.ok = false;
       var publishData = {};
       var oldTitle = GetDocumentTitle();
       window.openDialog(
-        "chrome://editor/content/EditorPublish.xul",
+        "chrome://editor/content/EditorPublish.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         "",
         "",
         publishData
       );
       if (GetDocumentTitle() != oldTitle) {
         UpdateWindowTitle();
@@ -2088,17 +2088,17 @@ function Publish(publishData) {
 
   try {
     // We launch dialog as a dependent
     // Don't allow editing document!
     SetDocumentEditable(false);
 
     // Start progress monitoring
     gProgressDialog = window.openDialog(
-      "chrome://editor/content/EditorPublishProgress.xul",
+      "chrome://editor/content/EditorPublishProgress.xhtml",
       "_blank",
       "chrome,dependent,titlebar",
       gPublishData,
       gPersistObj
     );
   } catch (e) {}
 
   // Network transfer is often too quick for the progress dialog to be initialized
@@ -2253,17 +2253,17 @@ var nsPublishSettingsCommand = {
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     if (GetCurrentEditor()) {
       // Launch Publish Settings dialog
 
       window.ok = window.openDialog(
-        "chrome://editor/content/EditorPublishSettings.xul",
+        "chrome://editor/content/EditorPublishSettings.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         ""
       );
       return window.ok;
     }
     return false;
   },
@@ -2347,17 +2347,17 @@ var nsOpenRemoteCommand = {
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     var params = { action: "2", url: "" };
     openDialog(
-      "chrome://communicator/content/openLocation.xul",
+      "chrome://communicator/content/openLocation.xhtml",
       "_blank",
       "chrome,modal,titlebar",
       params
     );
     var win = getTopWin();
     switch (params.action) {
       case "0": // current window
         win.focus();
@@ -2540,17 +2540,17 @@ var nsFindReplaceCommand = {
     return editorElement.getEditor(editorElement.contentWindow) != null;
   },
 
   getCommandStateParams(aCommand, aParams, editorElement) {},
   doCommandParams(aCommand, aParams, editorElement) {},
 
   doCommand(aCommand, editorElement) {
     window.openDialog(
-      "chrome://editor/content/EdReplace.xul",
+      "chrome://editor/content/EdReplace.xhtml",
       "_blank",
       "chrome,modal,titlebar",
       editorElement
     );
   },
 };
 
 var nsFindCommand = {
@@ -2613,17 +2613,17 @@ var nsSpellingCommand = {
 
   doCommand(aCommand) {
     window.cancelSendMessage = false;
     try {
       var skipBlockQuotes =
         window.document.documentElement.getAttribute("windowtype") ==
         "msgcompose";
       window.openDialog(
-        "chrome://editor/content/EdSpellCheck.xul",
+        "chrome://editor/content/EdSpellCheck.xhtml",
         "_blank",
         "dialog,close,titlebar,modal,resizable",
         false,
         skipBlockQuotes,
         true
       );
     } catch (ex) {}
   },
@@ -2690,102 +2690,102 @@ var nsFormCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdFormProps.xul",
+      "chrome://editor/content/EdFormProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsInputTagCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdInputProps.xul",
+      "chrome://editor/content/EdInputProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsInputImageCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdInputImage.xul",
+      "chrome://editor/content/EdInputImage.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsTextAreaCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdTextAreaProps.xul",
+      "chrome://editor/content/EdTextAreaProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsSelectCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdSelectProps.xul",
+      "chrome://editor/content/EdSelectProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsButtonCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdButtonProps.xul",
+      "chrome://editor/content/EdButtonProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsLabelCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -2811,17 +2811,17 @@ var nsLabelCommand = {
         labelElement = editor.getElementOrParentByTagName(
           tagName,
           editor.selection.focusNode
         );
       }
       if (labelElement) {
         // We only open the dialog for an existing label
         window.openDialog(
-          "chrome://editor/content/EdLabelProps.xul",
+          "chrome://editor/content/EdLabelProps.xhtml",
           "_blank",
           "chrome,close,titlebar,modal",
           labelElement
         );
       } else {
         EditorSetTextProperty(tagName, "", "");
       }
     } catch (e) {}
@@ -2833,17 +2833,17 @@ var nsFieldSetCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdFieldSetProps.xul",
+      "chrome://editor/content/EdFieldSetProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsIsIndexCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -2871,17 +2871,17 @@ var nsImageCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdImageProps.xul",
+      "chrome://editor/content/EdImageProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsHLineCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -2904,17 +2904,17 @@ var nsHLineCommand = {
       hLine = editor.getSelectedElement(tagName);
     } catch (e) {
       return;
     }
 
     if (hLine) {
       // We only open the dialog for an existing HRule
       window.openDialog(
-        "chrome://editor/content/EdHLineProps.xul",
+        "chrome://editor/content/EdHLineProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     } else {
       try {
         hLine = editor.createElementWithDefaults(tagName);
 
         // We change the default attributes to those saved in the user prefs
@@ -2958,25 +2958,25 @@ var nsLinkCommand = {
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     // If selected element is an image, launch that dialog instead
     // since last tab panel handles link around an image
     var element = GetObjectForProperties();
     if (element && element.nodeName.toLowerCase() == "img") {
       window.openDialog(
-        "chrome://editor/content/EdImageProps.xul",
+        "chrome://editor/content/EdImageProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         null,
         true
       );
     } else {
       window.openDialog(
-        "chrome://editor/content/EdLinkProps.xul",
+        "chrome://editor/content/EdLinkProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     }
   },
 };
 
 var nsAnchorCommand = {
@@ -2984,17 +2984,17 @@ var nsAnchorCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdNamedAnchorProps.xul",
+      "chrome://editor/content/EdNamedAnchorProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       ""
     );
   },
 };
 
 var nsInsertHTMLWithDialogCommand = {
@@ -3002,17 +3002,17 @@ var nsInsertHTMLWithDialogCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdInsSrc.xul",
+      "chrome://editor/content/EdInsSrc.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable",
       ""
     );
   },
 };
 
 var nsInsertMathWithDialogCommand = {
@@ -3020,17 +3020,17 @@ var nsInsertMathWithDialogCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdInsertMath.xul",
+      "chrome://editor/content/EdInsertMath.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable",
       ""
     );
   },
 };
 
 var nsInsertCharsCommand = {
@@ -3081,34 +3081,34 @@ var nsGridCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdSnapToGrid.xul",
+      "chrome://editor/content/EdSnapToGrid.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsListPropertiesCommand = {
   isCommandEnabled(aCommand, dummy) {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdListProps.xul",
+      "chrome://editor/content/EdListProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsPagePropertiesCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -3116,17 +3116,17 @@ var nsPagePropertiesCommand = {
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     var oldTitle = GetDocumentTitle();
     window.openDialog(
-      "chrome://editor/content/EdPageProps.xul",
+      "chrome://editor/content/EdPageProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       ""
     );
 
     // Update main window title and
     // recent menu data in prefs if doc title changed
     if (GetDocumentTitle() != oldTitle) {
@@ -3325,17 +3325,17 @@ var nsSetSmiley = {
   },
   // This is now deprecated in favor of "doCommandParams"
   doCommand(aCommand) {},
 };
 
 function doAdvancedProperties(element) {
   if (element) {
     window.openDialog(
-      "chrome://editor/content/EdAdvancedEdit.xul",
+      "chrome://editor/content/EdAdvancedEdit.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable=yes",
       "",
       element
     );
   }
 }
 
@@ -3361,17 +3361,17 @@ var nsColorPropertiesCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://editor/content/EdColorProps.xul",
+      "chrome://editor/content/EdColorProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       ""
     );
     UpdateDefaultColors();
   },
 };
 
@@ -4052,15 +4052,15 @@ var nsConvertToTable = {
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     if (this.isCommandEnabled()) {
       window.openDialog(
-        "chrome://editor/content/EdConvertToTable.xul",
+        "chrome://editor/content/EdConvertToTable.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     }
   },
 };
--- a/editor/ui/composer/content/composerOverlay.xhtml
+++ b/editor/ui/composer/content/composerOverlay.xhtml
@@ -16,13 +16,13 @@
     <menuitem id="fileExportToText"
               insertafter="sep_print"
               command="cmd_exportToText"/>
     <menuitem id="previewInBrowser"
               label="&previewCmd.label;"
               accesskey="&previewCmd.accesskey;"
               insertafter="fileExportToText"
               command="cmd_preview"/>
-    <!-- menuitem id="menu_SendPage" is merged here from mailEditorOverlay.xul,
+    <!-- menuitem id="menu_SendPage" is merged here from mailEditorOverlay.xhtml,
          where "position" is assumed to be just after 'previewInBrowser' -->
   </menupopup>
 
 </overlay>
--- a/editor/ui/composer/content/editingOverlay.xhtml
+++ b/editor/ui/composer/content/editingOverlay.xhtml
@@ -1,14 +1,14 @@
 <?xml version="1.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/. -->
 
-<?xul-overlay href="chrome://communicator/content/viewZoomOverlay.xul"?>
+<?xul-overlay href="chrome://communicator/content/viewZoomOverlay.xhtml"?>
 
 <!DOCTYPE overlay SYSTEM "chrome://editor/locale/editingOverlay.dtd">
 
 <overlay id="editingOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml">
 
   <script src="chrome://editor/content/editingOverlay.js"/>
 
@@ -125,21 +125,21 @@
                 accesskey="&publishAsCmd.accesskey;"
                 command="cmd_publishAs"/>
       <menuseparator id="sep_publishAs"/>
       <menuitem id="menu_fileRevert"
                 label="&fileRevert.label;"
                 accesskey="&fileRevert.accesskey;"
                 command="cmd_revert"/>
       <menuseparator id="sep_print"/>
-      <!-- menuitems are merged in here from composerOverlay.xul -->
+      <!-- menuitems are merged in here from composerOverlay.xhtml -->
       <menuitem id="menu_printSetup"/>
       <menuitem id="menu_printPreview" class="menuitem-iconic"/>
       <menuitem id="menu_print" class="menuitem-iconic"/>
-      <!-- The Exit/Quit item is merged from platformGlobalOverlay.xul -->
+      <!-- The Exit/Quit item is merged from platformGlobalOverlay.xhtml -->
     </menupopup>
   </menu>
 
   <!-- Edit menu items -->
   <menupopup id="menu_EditPopup">
     <menuitem id="menu_inlineSpellCheck"
               oncommand="InlineSpellCheckerUI.enabled = !InlineSpellCheckerUI.enabled"
               class="menuitem-iconic"/>
--- a/editor/ui/composer/content/editor.js
+++ b/editor/ui/composer/content/editor.js
@@ -1523,17 +1523,17 @@ function EditorSelectColor(colorType, mo
 
   if (!useLastColor) {
     // Avoid the JS warning
     gColorObj.NoDefault = false;
 
     // Launch the ColorPicker dialog
     // TODO: Figure out how to position this under the color buttons on the toolbar
     window.openDialog(
-      "chrome://editor/content/EdColorPicker.xul",
+      "chrome://editor/content/EdColorPicker.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       "",
       gColorObj
     );
 
     // User canceled the dialog
     if (gColorObj.Cancel) {
@@ -2922,17 +2922,17 @@ function IsSelectionInOneCell() {
 }
 
 // Call this with insertAllowed = true to allow inserting if not in existing table,
 //   else use false to do nothing if not in a table
 function EditorInsertOrEditTable(insertAllowed) {
   if (IsInTable()) {
     // Edit properties of existing table
     window.openDialog(
-      "chrome://editor/content/EdTableProps.xul",
+      "chrome://editor/content/EdTableProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       "",
       "TablePanel"
     );
     gContentWindow.focus();
   } else if (insertAllowed) {
     try {
@@ -2945,17 +2945,17 @@ function EditorInsertOrEditTable(insertA
       }
     } catch (e) {}
   }
 }
 
 function EditorInsertTable() {
   // Insert a new table
   window.openDialog(
-    "chrome://editor/content/EdInsertTable.xul",
+    "chrome://editor/content/EdInsertTable.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     ""
   );
   gContentWindow.focus();
 }
 
 function EditorTableCellProperties() {
@@ -2963,17 +2963,17 @@ function EditorTableCellProperties() {
     return;
   }
 
   try {
     var cell = GetCurrentEditor().getElementOrParentByTagName("td", null);
     if (cell) {
       // Start Table Properties dialog on the "Cell" panel
       window.openDialog(
-        "chrome://editor/content/EdTableProps.xul",
+        "chrome://editor/content/EdTableProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         "",
         "CellPanel"
       );
       gContentWindow.focus();
     }
   } catch (e) {}
@@ -3114,17 +3114,17 @@ function EditorFindOrCreateInsertCharWin
     // Since we switch the dialog during EditorOnFocus(),
     //   this should really never be found, but it's good to be sure
     var windowWithDialog = FindEditorWithInsertCharDialog();
     if (windowWithDialog) {
       SwitchInsertCharToThisWindow(windowWithDialog);
     } else {
       // The dialog will set window.InsertCharWindow to itself
       window.openDialog(
-        "chrome://editor/content/EdInsertChars.xul",
+        "chrome://editor/content/EdInsertChars.xhtml",
         "_blank",
         "chrome,close,titlebar",
         ""
       );
     }
   }
 }
 
@@ -3390,17 +3390,17 @@ function FillInHTMLTooltipEditor(tooltip
       }
     }
   }
   return false;
 }
 
 function UpdateTOC() {
   window.openDialog(
-    "chrome://editor/content/EdInsertTOC.xul",
+    "chrome://editor/content/EdInsertTOC.xhtml",
     "_blank",
     "chrome,close,modal,titlebar"
   );
   window.content.focus();
 }
 
 function InitTOCMenu() {
   var elt = GetCurrentEditor().document.getElementById("mozToc");
--- a/editor/ui/composer/content/editor.xhtml
+++ b/editor/ui/composer/content/editor.xhtml
@@ -4,25 +4,25 @@
    - 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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/" type="text/css"?>
 
 <?xml-stylesheet href="chrome://editor/skin/editorPrimaryToolbar.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/editorFormatToolbar.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/editorModeToolbar.css" type="text/css"?>
-<?xul-overlay href="chrome://editor/content/editorOverlay.xul"?>
-<?xul-overlay href="chrome://editor/content/editingOverlay.xul"?>
-<?xul-overlay href="chrome://editor/content/composerOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/contentAreaContextOverlay.xul"?>
-<?xul-overlay href="chrome://editor/content/EditorContextMenuOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/charsetOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/utilityOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/tasksOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/sidebar/sidebarOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/editorOverlay.xhtml"?>
+<?xul-overlay href="chrome://editor/content/editingOverlay.xhtml"?>
+<?xul-overlay href="chrome://editor/content/composerOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/contentAreaContextOverlay.xhtml"?>
+<?xul-overlay href="chrome://editor/content/EditorContextMenuOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/charsetOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/utilityOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/tasksOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/sidebar/sidebarOverlay.xhtml"?>
 
 <!DOCTYPE window [
 <!ENTITY % editorDTD SYSTEM "chrome://editor/locale/editor.dtd" >
 %editorDTD;
 <!ENTITY % editorOverlayDTD SYSTEM "chrome://editor/locale/editorOverlay.dtd" >
 %editorOverlayDTD;
 <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
 %brandDTD;
@@ -298,17 +298,17 @@
 
 
     <spacer flex="1"/>
   </toolbar>
 </toolbox>
 
 <!-- sidebar/toolbar/content/status -->
 <hbox id="sidebar-parent" flex="1">
-  <!-- From sidebarOverlay.xul -->
+  <!-- From sidebarOverlay.xhtml -->
   <vbox id="sidebar-box" class="chromeclass-extrachrome" hidden="true"/>
   <splitter id="sidebar-splitter" class="chromeclass-extrachrome" hidden="true"/>
 
   <vbox id="appcontent" flex="1">
     <deck id="ContentWindowDeck" selectedIndex="0" flex="1">
       <vbox>
         <findbar id="FindToolbar" browserid="content-frame"/>
         <editor editortype="html"
@@ -359,17 +359,17 @@
              tooltiptext="&PreviewMode.tooltip;"
              command="cmd_PreviewMode"/>
       </tabs>
     </tabbox>
 
   </vbox> <!-- appcontent -->
 </hbox><!-- sidebar-parent -->
 
-    <!-- Some of this is from globalOverlay.xul -->
+    <!-- Some of this is from globalOverlay.xhtml -->
     <hbox class="statusbar chromeclass-status" id="status-bar">
       <statusbarpanel id="component-bar"/>
       <hbox id="structToolbar" class="statusbarpanel" flex="1" pack="end">
         <label id="structSpacer" value="" flex="1"/>
       </hbox>
       <statusbarpanel id="offline-status" class="statusbarpanel-iconic"/>
     </hbox>
 </window>
--- a/editor/ui/composer/content/editorMailOverlay.xhtml
+++ b/editor/ui/composer/content/editorMailOverlay.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.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/. -->
 
 
 <!-- retrieve generic commands -->
-<?xul-overlay href="chrome://messenger/content/mailOverlay.xul"?>
+<?xul-overlay href="chrome://messenger/content/mailOverlay.xhtml"?>
 
 <overlay id="editorMailOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml">
 
   <!-- navigator specific commands -->
   <commandset id="tasksCommands">
     <!-- XXX insert commands here -->
   </commandset>
--- a/editor/ui/composer/content/editorNavigatorOverlay.xhtml
+++ b/editor/ui/composer/content/editorNavigatorOverlay.xhtml
@@ -1,16 +1,16 @@
 <?xml version="1.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/. -->
 
 
 <!-- retrieve generic commands -->
-<!-- <?xul-overlay href="chrome://messenger/content/mailOverlay.xul"?> -->
+<!-- <?xul-overlay href="chrome://messenger/content/mailOverlay.xhtml"?> -->
 
 <overlay id="editorNavigatorOverlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml">
 
   <!-- navigator specific commands -->
   <commandset id="tasksCommands">
     <!-- XXX insert commands here -->
   </commandset>
--- a/editor/ui/composer/content/editorOverlay.xhtml
+++ b/editor/ui/composer/content/editorOverlay.xhtml
@@ -290,17 +290,17 @@
     <command id="cmd_newEditorDraft"/>
     <!-- view menu -->
     <command id="cmd_viewCompToolbar"     oncommand="goToggleToolbar('EditToolbar','cmd_viewCompToolbar');"         checked="true"/>
     <command id="cmd_viewFormatToolbar"   oncommand="goToggleToolbar('FormatToolbar','cmd_viewFormatToolbar');"     checked="true"/>
   </commandset>
 
   <menu id="menu_Edit">
     <menupopup id="menu_EditPopup">
-      <!-- from utilityOverlay.xul -->
+      <!-- from utilityOverlay.xhtml -->
       <menuitem id="menu_undo"/>
       <menuitem id="menu_redo"/>
       <menuseparator id="sep_cut"/>
       <menuitem id="menu_cut"/>
       <menuitem id="menu_copy"/>
       <menuitem id="menu_paste"/>
       <menuitem id="menu_pasteNoFormatting"
                 key="pastenoformattingkb"
@@ -810,17 +810,17 @@
   <menuitem id="colorsAndBackground"
             label="&colorsAndBackground.label;"
             accesskey="&colorsAndBackground.accesskey;"
             oncommand="goDoCommand('cmd_colorProperties')"
             observes="cmd_renderedHTMLEnabler"/>
 
   <menu id="tableMenu" label="&tableMenu.label;" accesskey="&tableMenu.accesskey;">
     <menupopup id="tableMenuPopup" onpopupshowing="EditorInitTableMenu()">
-      <!-- From EditorCommandOverlay.xul (shared with context popup) -->
+      <!-- From EditorCommandOverlay.xhtml (shared with context popup) -->
       <menu id="tableInsertMenu" label="&tableInsertMenu.label;" accesskey="&tableInsertMenu.accesskey;">
         <menupopup id="tableInsertMenuPopup">
           <menuitem id="menu_insertTable"
                     label="&insertTableCmd.label;"
                     accesskey="&insertTableCmd.accesskey;"
                     command="cmd_InsertTable"/>
           <menuseparator id="tableMenuAfterInsertTableSeparator"/>
           <menuitem id="menu_tableRowAbove"
@@ -990,17 +990,17 @@
                  tooltiptext="&copyToolbarCmd.tooltip;"/>
   <toolbarbutton id="pasteButton" class="toolbarbutton-1"
                  command="cmd_paste"
                  tooltiptext="&pasteToolbarCmd.tooltip;"/>
 
   <toolbarbutton id="print-button"
                  label="&printToolbarCmd.label;"
                  tooltiptext="&printToolbarCmd.tooltip;"/>
-      <!-- 'printSetupToolbar' is merged in here from platformGlobalOverlay.xul -->
+      <!-- 'printSetupToolbar' is merged in here from platformGlobalOverlay.xhtml -->
 
   <toolbarbutton id="findButton"
                  class="toolbarbutton-1"
                  label="&findToolbarCmd.label;"
                  command="cmd_find"
                  tooltiptext="&findToolbarCmd.tooltip;"/>
   <toolbarbutton id="spellingButton"
                  class="toolbarbutton-1"
--- a/editor/ui/composer/content/editorPrefsOverlay.xhtml
+++ b/editor/ui/composer/content/editorPrefsOverlay.xhtml
@@ -30,26 +30,26 @@
   </groupbox>
   <!-- category tree entries for editor -->
   <treechildren id="prefsPanelChildren">
     <treeitem container="true"
               id="composerItem"
               insertbefore="securityItem"
               label="&compose.label;"
               prefpane="composer_pane"
-              url="chrome://editor/content/pref-composer.xul"
+              url="chrome://editor/content/pref-composer.xhtml"
               helpTopic="composer_prefs_general">
       <treechildren id="composerChildren">
         <treeitem id="editingItem"
                   label="&editing.label;"
                   prefpane="editing_pane"
-                  url="chrome://editor/content/pref-editing.xul"
+                  url="chrome://editor/content/pref-editing.xhtml"
                   helpTopic="composer_prefs_newpage"/>
         <treeitem id="toolbarsItem"
                   label="&toolbars.label;"
                   prefpane="toolbars_pane"
-                  url="chrome://editor/content/pref-toolbars.xul"
+                  url="chrome://editor/content/pref-toolbars.xhtml"
                   helpTopic="composer_prefs_toolbars"/>
       </treechildren>
     </treeitem>
   </treechildren>
 
 </overlay>
--- a/editor/ui/composer/content/pref-editing.js
+++ b/editor/ui/composer/content/pref-editing.js
@@ -49,17 +49,17 @@ function GetColorAndUpdatePref(aType, aB
 
   if (aButtonID == "background")
     colorObj.PageColor = preference.value;
   else
     colorObj.TextColor = preference.value;
 
   colorObj.Type = aType;
 
-  window.openDialog("chrome://editor/content/EdColorPicker.xul", "_blank", "chrome,close,titlebar,modal", "", colorObj);
+  window.openDialog("chrome://editor/content/EdColorPicker.xhtml", "_blank", "chrome,close,titlebar,modal", "", colorObj);
 
   // User canceled the dialog
   if (colorObj.Cancel)
     return;
 
   // Update preference with picked color
   if (aType == "Page")
     preference.value = colorObj.BackgroundColor;
--- a/editor/ui/dialogs/content/EdColorProps.js
+++ b/editor/ui/dialogs/content/EdColorProps.js
@@ -215,17 +215,17 @@ function GetColorAndUpdate(ColorWellID) 
       break;
     case "backgroundCW":
       colorObj.Type = "Page";
       colorObj.PageColor = customBackgroundColor;
       break;
   }
 
   window.openDialog(
-    "chrome://editor/content/EdColorPicker.xul",
+    "chrome://editor/content/EdColorPicker.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     colorObj
   );
 
   // User canceled the dialog
   if (colorObj.Cancel) {
--- a/editor/ui/dialogs/content/EdDialogCommon.js
+++ b/editor/ui/dialogs/content/EdDialogCommon.js
@@ -316,17 +316,17 @@ function InitPixelOrPercentMenulist(
 function onAdvancedEdit() {
   // First validate data from widgets in the "simpler" property dialog
   if (ValidateData()) {
     // Set true if OK is clicked in the Advanced Edit dialog
     window.AdvancedEditOK = false;
     // Open the AdvancedEdit dialog, passing in the element to be edited
     //  (the copy named "globalElement")
     window.openDialog(
-      "chrome://editor/content/EdAdvancedEdit.xul",
+      "chrome://editor/content/EdAdvancedEdit.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable=yes",
       "",
       globalElement
     );
     window.focus();
     if (window.AdvancedEditOK) {
       // Copy edited attributes to the dialog widgets:
@@ -625,17 +625,17 @@ function SetRelativeCheckbox(checkbox) {
       //  to be ok to try to make absolute
       enable = true;
     }
   }
 
   SetElementEnabled(checkbox, enable);
 }
 
-// oncommand handler for the Relativize checkbox in EditorOverlay.xul
+// oncommand handler for the Relativize checkbox in EditorOverlay.xhtml
 function MakeInputValueRelativeOrAbsolute(checkbox) {
   var input = document.getElementById(checkbox.getAttribute("for"));
   if (!input) {
     return;
   }
 
   var docUrl = GetDocumentBaseUrl();
   if (!docUrl) {
--- a/editor/ui/dialogs/content/EdDialogTemplate.xhtml
+++ b/editor/ui/dialogs/content/EdDialogTemplate.xhtml
@@ -1,17 +1,17 @@
 <?xml version="1.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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EdDialogOverlay.xhtml"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/Ed?????????.dtd">
 <!-- dialog containing a control requiring initial setup -->
 <dialog title="&windowTitle.label;"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml"
     onload="Startup()">
 
   <!-- Methods common to all editor dialogs -->
--- a/editor/ui/dialogs/content/EdImageProps.js
+++ b/editor/ui/dialogs/content/EdImageProps.js
@@ -275,17 +275,17 @@ function onAccept(event) {
   gDoAltTextError = false;
 
   event.preventDefault();
 }
 
 function onLinkAdvancedEdit() {
   window.AdvancedEditOK = false;
   window.openDialog(
-    "chrome://editor/content/EdAdvancedEdit.xul",
+    "chrome://editor/content/EdAdvancedEdit.xhtml",
     "_blank",
     "chrome,close,titlebar,modal,resizable=yes",
     "",
     gLinkElement
   );
   window.focus();
   if (window.AdvancedEditOK) {
     gDialog.hrefInput.value = gLinkElement.getAttribute("href");
--- a/editor/ui/dialogs/content/EdImageProps.xhtml
+++ b/editor/ui/dialogs/content/EdImageProps.xhtml
@@ -32,17 +32,17 @@
   <tabbox id="TabBox">
     <tabs flex="1">
       <tab id="imageLocationTab" label="&imageLocationTab.label;"/>
       <tab id="imageDimensionsTab" label="&imageDimensionsTab.label;"/>
       <tab id="imageAppearanceTab" label="&imageAppearanceTab.label;"/>
       <tab id="imageLinkTab" label="&imageLinkTab.label;"/>
     </tabs>
     <tabpanels>
-#include edImage.inc.xul
+#include edImage.inc.xhtml
       <vbox>
         <spacer class="spacer"/>
         <vbox id="LinkLocationBox">
           <label control="hrefInput"
                  accesskey="&LinkURLEditField2.accessKey;"
                  width="1">&LinkURLEditField2.label;</label>
           <textbox id="hrefInput" type="text"
                    class="uri-element padded" oninput="ChangeLinkLocation();"/>
--- a/editor/ui/dialogs/content/EdInputImage.xhtml
+++ b/editor/ui/dialogs/content/EdInputImage.xhtml
@@ -54,17 +54,17 @@
               <label value="&tabIndex.label;"/>
               <hbox>
                 <textbox id="InputTabIndex" class="narrow" oninput="forceInteger(this.id);"/>
               </hbox>
             </row>
           </rows>
         </grid>
       </groupbox>
-#include edImage.inc.xul
+#include edImage.inc.xhtml
     </tabpanels>
   </tabbox>
 
   <hbox align="end">
     <groupbox id="imagePreview" orient="horizontal" flex="1">
       <hbox class="groupbox-title">
         <label class="header">&previewBox.label;</label>
       </hbox>
--- a/editor/ui/dialogs/content/EdInputProps.js
+++ b/editor/ui/dialogs/content/EdInputProps.js
@@ -227,17 +227,17 @@ function onInput() {
   if (gDialog.accept.disabled != disabled) {
     gDialog.accept.disabled = disabled;
     gDialog.AdvancedEditButton.disabled = disabled;
   }
 }
 
 function doImageProperties() {
   window.openDialog(
-    "chrome://editor/content/EdImageProps.xul",
+    "chrome://editor/content/EdImageProps.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     globalElement
   );
   window.focus();
   onInput();
 }
 
--- a/editor/ui/dialogs/content/EdInsertTOC.js
+++ b/editor/ui/dialogs/content/EdInsertTOC.js
@@ -23,17 +23,17 @@ const kMozToc = "mozToc";
 const kMozTocLength = 6;
 const kMozTocIdPrefix = "mozTocId";
 const kMozTocIdPrefixLength = 8;
 const kMozTocClassPrefix = "mozToc";
 const kMozTocClassPrefixLength = 6;
 
 document.addEventListener("dialogaccept", () => BuildTOC(true));
 
-// Startup() is called when EdInsertTOC.xul is opened
+// Startup() is called when EdInsertTOC.xhtml is opened
 function Startup() {
   // early way out if if we have no editor
   if (!GetCurrentEditor()) {
     window.close();
     return;
   }
 
   var i;
--- a/editor/ui/dialogs/content/EdSpellCheck.js
+++ b/editor/ui/dialogs/content/EdSpellCheck.js
@@ -334,17 +334,17 @@ function AddToDictionary() {
   if (gMisspelledWord) {
     gSpellChecker.AddWordToDictionary(gMisspelledWord);
   }
   NextWord();
 }
 
 function EditDictionary() {
   window.openDialog(
-    "chrome://editor/content/EdDictionary.xul",
+    "chrome://editor/content/EdDictionary.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     gMisspelledWord
   );
 }
 
 function SelectLanguage() {
--- a/editor/ui/dialogs/content/EdTableProps.js
+++ b/editor/ui/dialogs/content/EdTableProps.js
@@ -523,17 +523,17 @@ function GetColorAndUpdate(ColorWellID) 
       colorObj.TableColor = gTableColor;
       break;
     case "cellBackgroundCW":
       colorObj.Type = "Cell";
       colorObj.CellColor = gCellColor;
       break;
   }
   window.openDialog(
-    "chrome://editor/content/EdColorPicker.xul",
+    "chrome://editor/content/EdColorPicker.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     colorObj
   );
 
   // User canceled the dialog
   if (colorObj.Cancel) {
--- a/editor/ui/dialogs/content/EditorPublish.xhtml
+++ b/editor/ui/dialogs/content/EditorPublish.xhtml
@@ -3,17 +3,17 @@
 <!-- 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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 <?xml-stylesheet href="chrome://messenger/skin/menulist.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xhtml"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPublish.dtd">
 
 <dialog title="&windowTitle.label;"
         id="publishDlg"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml"
         onload="Startup()"
         buttons="accept,cancel"
@@ -119,14 +119,14 @@
                       oninput="onInputSettings();"/>
           </hbox>
         </groupbox>
         <spacer flex="1"/>
       </vbox><!-- Publish Panel -->
 
       <!-- SETTINGS PANEL -->
       <hbox id="SettingsPanel">
-        <!-- from EditorPublishOverlay.xul -->
+        <!-- from EditorPublishOverlay.xhtml -->
         <vbox id="PublishSettingsInputs" flex="1"/>
       </hbox><!-- Settings Panel -->
     </tabpanels>
   </tabbox>
 </dialog>
--- a/editor/ui/dialogs/content/EditorPublishSettings.xhtml
+++ b/editor/ui/dialogs/content/EditorPublishSettings.xhtml
@@ -2,17 +2,17 @@
 
 <!-- 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/. -->
 
 <?xml-stylesheet href="chrome://editor/skin/editor.css" type="text/css"?>
 <?xml-stylesheet href="chrome://editor/skin/EditorDialog.css" type="text/css"?>
 
-<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/EditorPublishOverlay.xhtml"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://editor/locale/EditorPublish.dtd">
 
 <dialog title="&windowTitleSettings.label;"
         id="publishSettingsDlg"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml"
         onload="Startup()"
         buttons="accept,cancel">
@@ -38,13 +38,13 @@
                   accesskey="&newSiteButton.accesskey;" oncommand="AddNewSite();"/>
           <button id="SetDefaultButton" label="&setDefaultButton.label;"
                   accesskey="&setDefaultButton.accesskey;" oncommand="SetDefault();"/>
           <button id="RemoveSiteButton" label="&removeButton.label;"
                   accesskey="&removeButton.accesskey;" oncommand="RemoveSite();"/>
         </vbox>
       </hbox>
     </groupbox>
-    <!-- from EditorPublishOverlay.xul -->
+    <!-- from EditorPublishOverlay.xhtml -->
     <vbox id="PublishSettingsInputs"/>
   </hbox>
   <spacer class="spacer"/>
 </dialog>
--- a/editor/ui/jar.mn
+++ b/editor/ui/jar.mn
@@ -1,108 +1,108 @@
 # 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/.
 
 comm.jar:
 % content editor %content/editor/
 #ifdef MOZ_SUITE
-% overlay chrome://communicator/content/tasksOverlay.xul chrome://editor/content/editorTasksOverlay.xul
-% overlay chrome://messenger/content/mailWindowOverlay.xul chrome://editor/content/editorMailOverlay.xul
-% overlay chrome://communicator/content/pref/preferences.xul chrome://editor/content/editorPrefsOverlay.xul
-% overlay chrome://communicator/content/pref/pref-appearance.xul chrome://editor/content/editorPrefsOverlay.xul
-% overlay chrome://navigator/content/navigatorOverlay.xul chrome://editor/content/editorNavigatorOverlay.xul
+% overlay chrome://communicator/content/tasksOverlay.xhtml chrome://editor/content/editorTasksOverlay.xhtml
+% overlay chrome://messenger/content/mailWindowOverlay.xhtml chrome://editor/content/editorMailOverlay.xhtml
+% overlay chrome://communicator/content/pref/preferences.xhtml chrome://editor/content/editorPrefsOverlay.xhtml
+% overlay chrome://communicator/content/pref/pref-appearance.xhtml chrome://editor/content/editorPrefsOverlay.xhtml
+% overlay chrome://navigator/content/navigatorOverlay.xhtml chrome://editor/content/editorNavigatorOverlay.xhtml
 % content editor-region %content/editor-region/
 #endif
       content/editor/editor.js                                 (composer/content/editor.js)
       content/editor/editorUtilities.js                        (composer/content/editorUtilities.js)
       content/editor/ComposerCommands.js                       (composer/content/ComposerCommands.js)
       content/editor/EditorContent.css                         (composer/content/EditorContent.css)
       content/editor/images/tag-anchor.gif                     (composer/content/images/tag-anchor.gif)
       content/editor/EdDialogCommon.js                         (dialogs/content/EdDialogCommon.js)
-      content/editor/EdLinkProps.xul                           (dialogs/content/EdLinkProps.xul)
+      content/editor/EdLinkProps.xhtml                         (dialogs/content/EdLinkProps.xhtml)
       content/editor/EdLinkProps.js                            (dialogs/content/EdLinkProps.js)
-*     content/editor/EdImageProps.xul                          (dialogs/content/EdImageProps.xul)
+*     content/editor/EdImageProps.xhtml                        (dialogs/content/EdImageProps.xhtml)
       content/editor/EdImageProps.js                           (dialogs/content/EdImageProps.js)
       content/editor/EdImageLinkLoader.js                      (dialogs/content/EdImageLinkLoader.js)
       content/editor/EdImageDialog.js                          (dialogs/content/EdImageDialog.js)
-      content/editor/EdHLineProps.xul                          (dialogs/content/EdHLineProps.xul)
+      content/editor/EdHLineProps.xhtml                        (dialogs/content/EdHLineProps.xhtml)
       content/editor/EdHLineProps.js                           (dialogs/content/EdHLineProps.js)
-      content/editor/EdReplace.xul                             (dialogs/content/EdReplace.xul)
+      content/editor/EdReplace.xhtml                           (dialogs/content/EdReplace.xhtml)
       content/editor/EdReplace.js                              (dialogs/content/EdReplace.js)
-      content/editor/EdSpellCheck.xul                          (dialogs/content/EdSpellCheck.xul)
+      content/editor/EdSpellCheck.xhtml                        (dialogs/content/EdSpellCheck.xhtml)
       content/editor/EdSpellCheck.js                           (dialogs/content/EdSpellCheck.js)
-      content/editor/EdDictionary.xul                          (dialogs/content/EdDictionary.xul)
+      content/editor/EdDictionary.xhtml                        (dialogs/content/EdDictionary.xhtml)
       content/editor/EdDictionary.js                           (dialogs/content/EdDictionary.js)
-      content/editor/EdNamedAnchorProps.xul                    (dialogs/content/EdNamedAnchorProps.xul)
+      content/editor/EdNamedAnchorProps.xhtml                  (dialogs/content/EdNamedAnchorProps.xhtml)
       content/editor/EdNamedAnchorProps.js                     (dialogs/content/EdNamedAnchorProps.js)
-      content/editor/EdInsertTOC.xul                           (dialogs/content/EdInsertTOC.xul)
+      content/editor/EdInsertTOC.xhtml                         (dialogs/content/EdInsertTOC.xhtml)
       content/editor/EdInsertTOC.js                            (dialogs/content/EdInsertTOC.js)
-      content/editor/EdInsertTable.xul                         (dialogs/content/EdInsertTable.xul)
+      content/editor/EdInsertTable.xhtml                       (dialogs/content/EdInsertTable.xhtml)
       content/editor/EdInsertTable.js                          (dialogs/content/EdInsertTable.js)
-      content/editor/EdInsertMath.xul                          (dialogs/content/EdInsertMath.xul)
+      content/editor/EdInsertMath.xhtml                        (dialogs/content/EdInsertMath.xhtml)
       content/editor/EdInsertMath.js                           (dialogs/content/EdInsertMath.js)
-      content/editor/EdTableProps.xul                          (dialogs/content/EdTableProps.xul)
+      content/editor/EdTableProps.xhtml                        (dialogs/content/EdTableProps.xhtml)
       content/editor/EdTableProps.js                           (dialogs/content/EdTableProps.js)
-      content/editor/EdFormProps.xul                           (dialogs/content/EdFormProps.xul)
+      content/editor/EdFormProps.xhtml                         (dialogs/content/EdFormProps.xhtml)
       content/editor/EdFormProps.js                            (dialogs/content/EdFormProps.js)
-      content/editor/EdInputProps.xul                          (dialogs/content/EdInputProps.xul)
+      content/editor/EdInputProps.xhtml                        (dialogs/content/EdInputProps.xhtml)
       content/editor/EdInputProps.js                           (dialogs/content/EdInputProps.js)
-*     content/editor/EdInputImage.xul                          (dialogs/content/EdInputImage.xul)
+*     content/editor/EdInputImage.xhtml                        (dialogs/content/EdInputImage.xhtml)
       content/editor/EdInputImage.js                           (dialogs/content/EdInputImage.js)
-      content/editor/EdTextAreaProps.xul                       (dialogs/content/EdTextAreaProps.xul)
+      content/editor/EdTextAreaProps.xhtml                     (dialogs/content/EdTextAreaProps.xhtml)
       content/editor/EdTextAreaProps.js                        (dialogs/content/EdTextAreaProps.js)
-      content/editor/EdSelectProps.xul                         (dialogs/content/EdSelectProps.xul)
+      content/editor/EdSelectProps.xhtml                       (dialogs/content/EdSelectProps.xhtml)
       content/editor/EdSelectProps.js                          (dialogs/content/EdSelectProps.js)
-      content/editor/EdButtonProps.xul                         (dialogs/content/EdButtonProps.xul)
+      content/editor/EdButtonProps.xhtml                       (dialogs/content/EdButtonProps.xhtml)
       content/editor/EdButtonProps.js                          (dialogs/content/EdButtonProps.js)
-      content/editor/EdLabelProps.xul                          (dialogs/content/EdLabelProps.xul)
+      content/editor/EdLabelProps.xhtml                        (dialogs/content/EdLabelProps.xhtml)
       content/editor/EdLabelProps.js                           (dialogs/content/EdLabelProps.js)
-      content/editor/EdFieldSetProps.xul                       (dialogs/content/EdFieldSetProps.xul)
+      content/editor/EdFieldSetProps.xhtml                     (dialogs/content/EdFieldSetProps.xhtml)
       content/editor/EdFieldSetProps.js                        (dialogs/content/EdFieldSetProps.js)
-      content/editor/EdInsSrc.xul                              (dialogs/content/EdInsSrc.xul)
+      content/editor/EdInsSrc.xhtml                            (dialogs/content/EdInsSrc.xhtml)
       content/editor/EdInsSrc.js                               (dialogs/content/EdInsSrc.js)
-      content/editor/EdInsertChars.xul                         (dialogs/content/EdInsertChars.xul)
+      content/editor/EdInsertChars.xhtml                       (dialogs/content/EdInsertChars.xhtml)
       content/editor/EdInsertChars.js                          (dialogs/content/EdInsertChars.js)
-      content/editor/EdAdvancedEdit.xul                        (dialogs/content/EdAdvancedEdit.xul)
+      content/editor/EdAdvancedEdit.xhtml                      (dialogs/content/EdAdvancedEdit.xhtml)
       content/editor/EdAdvancedEdit.js                         (dialogs/content/EdAdvancedEdit.js)
-      content/editor/EdListProps.xul                           (dialogs/content/EdListProps.xul)
+      content/editor/EdListProps.xhtml                         (dialogs/content/EdListProps.xhtml)
       content/editor/EdListProps.js                            (dialogs/content/EdListProps.js)
-      content/editor/EdPageProps.xul                           (dialogs/content/EdPageProps.xul)
+      content/editor/EdPageProps.xhtml                         (dialogs/content/EdPageProps.xhtml)
       content/editor/EdPageProps.js                            (dialogs/content/EdPageProps.js)
-      content/editor/EdColorProps.xul                          (dialogs/content/EdColorProps.xul)
+      content/editor/EdColorProps.xhtml                        (dialogs/content/EdColorProps.xhtml)
       content/editor/EdColorProps.js                           (dialogs/content/EdColorProps.js)
-      content/editor/EdColorPicker.xul                         (dialogs/content/EdColorPicker.xul)
+      content/editor/EdColorPicker.xhtml                       (dialogs/content/EdColorPicker.xhtml)
       content/editor/EdColorPicker.js                          (dialogs/content/EdColorPicker.js)
       content/editor/EdAECSSAttributes.js                      (dialogs/content/EdAECSSAttributes.js)
       content/editor/EdAEHTMLAttributes.js                     (dialogs/content/EdAEHTMLAttributes.js)
       content/editor/EdAEJSEAttributes.js                      (dialogs/content/EdAEJSEAttributes.js)
       content/editor/EdAEAttributes.js                         (dialogs/content/EdAEAttributes.js)
-      content/editor/EdConvertToTable.xul                      (dialogs/content/EdConvertToTable.xul)
+      content/editor/EdConvertToTable.xhtml                    (dialogs/content/EdConvertToTable.xhtml)
       content/editor/EdConvertToTable.js                       (dialogs/content/EdConvertToTable.js)
 #ifdef MOZ_SUITE
-      content/editor/editor.xul                                (composer/content/editor.xul)
+      content/editor/editor.xhtml                              (composer/content/editor.xhtml)
       content/editor/editingOverlay.js                         (composer/content/editingOverlay.js)
-      content/editor/editorSmileyOverlay.xul                   (composer/content/editorSmileyOverlay.xul)
+      content/editor/editorSmileyOverlay.xhtml                 (composer/content/editorSmileyOverlay.xhtml)
       content/editor/editorApplicationOverlay.js               (composer/content/editorApplicationOverlay.js)
       content/editor/publishprefs.js                           (composer/content/publishprefs.js)
       content/editor/EditorContextMenu.js                      (composer/content/EditorContextMenu.js)
-      content/editor/EditorContextMenuOverlay.xul              (composer/content/EditorContextMenuOverlay.xul)
+      content/editor/EditorContextMenuOverlay.xhtml            (composer/content/EditorContextMenuOverlay.xhtml)
       content/editor/EditorAllTags.css                         (composer/content/EditorAllTags.css)
-      content/editor/editorNavigatorOverlay.xul                (composer/content/editorNavigatorOverlay.xul)
-      content/editor/editorMailOverlay.xul                     (composer/content/editorMailOverlay.xul)
-      content/editor/editorTasksOverlay.xul                    (composer/content/editorTasksOverlay.xul)
-      content/editor/editorOverlay.xul                         (composer/content/editorOverlay.xul)
-      content/editor/editingOverlay.xul                        (composer/content/editingOverlay.xul)
-      content/editor/composerOverlay.xul                       (composer/content/composerOverlay.xul)
-      content/editor/pref-toolbars.xul                         (composer/content/pref-toolbars.xul)
-      content/editor/pref-editing.xul                          (composer/content/pref-editing.xul)
+      content/editor/editorNavigatorOverlay.xhtml              (composer/content/editorNavigatorOverlay.xhtml)
+      content/editor/editorMailOverlay.xhtml                   (composer/content/editorMailOverlay.xhtml)
+      content/editor/editorTasksOverlay.xhtml                  (composer/content/editorTasksOverlay.xhtml)
+      content/editor/editorOverlay.xhtml                       (composer/content/editorOverlay.xhtml)
+      content/editor/editingOverlay.xhtml                      (composer/content/editingOverlay.xhtml)
+      content/editor/composerOverlay.xhtml                     (composer/content/composerOverlay.xhtml)
+      content/editor/pref-toolbars.xhtml                       (composer/content/pref-toolbars.xhtml)
+      content/editor/pref-editing.xhtml                        (composer/content/pref-editing.xhtml)
       content/editor/pref-editing.js                           (composer/content/pref-editing.js)
-      content/editor/pref-composer.xul                         (composer/content/pref-composer.xul)
-      content/editor/editorPrefsOverlay.xul                    (composer/content/editorPrefsOverlay.xul)
+      content/editor/pref-composer.xhtml                       (composer/content/pref-composer.xhtml)
+      content/editor/editorPrefsOverlay.xhtml                  (composer/content/editorPrefsOverlay.xhtml)
       content/editor/StructBarContextMenu.js                   (composer/content/StructBarContextMenu.js)
       content/editor/images/sendtoback.gif                     (composer/content/images/sendtoback.gif)
       content/editor/images/sendtoback-disabled.gif            (composer/content/images/sendtoback-disabled.gif)
       content/editor/images/bringtofront.gif                   (composer/content/images/bringtofront.gif)
       content/editor/images/bringtofront-disabled.gif          (composer/content/images/bringtofront-disabled.gif)
       content/editor/images/tag-abr.gif                        (composer/content/images/tag-abr.gif)
       content/editor/images/tag-acr.gif                        (composer/content/images/tag-acr.gif)
       content/editor/images/tag-adr.gif                        (composer/content/images/tag-adr.gif)
@@ -194,23 +194,23 @@ comm.jar:
       content/editor/images/tag-td.gif                         (composer/content/images/tag-td.gif)
       content/editor/images/tag-th.gif                         (composer/content/images/tag-th.gif)
       content/editor/images/tag-tr.gif                         (composer/content/images/tag-tr.gif)
       content/editor/images/tag-tt.gif                         (composer/content/images/tag-tt.gif)
       content/editor/images/tag-u.gif                          (composer/content/images/tag-u.gif)
       content/editor/images/tag-ul.gif                         (composer/content/images/tag-ul.gif)
       content/editor/images/tag-var.gif                        (composer/content/images/tag-var.gif)
       content/editor/images/tag-userdefined.gif                (composer/content/images/tag-userdefined.gif)
-      content/editor/EdSnapToGrid.xul                          (dialogs/content/EdSnapToGrid.xul)
+      content/editor/EdSnapToGrid.xhtml                        (dialogs/content/EdSnapToGrid.xhtml)
       content/editor/EdSnapToGrid.js                           (dialogs/content/EdSnapToGrid.js)
-      content/editor/EditConflict.xul                          (dialogs/content/EditConflict.xul)
+      content/editor/EditConflict.xhtml                        (dialogs/content/EditConflict.xhtml)
       content/editor/EditConflict.js                           (dialogs/content/EditConflict.js)
-      content/editor/EditorSaveAsCharset.xul                   (dialogs/content/EditorSaveAsCharset.xul)
+      content/editor/EditorSaveAsCharset.xhtml                 (dialogs/content/EditorSaveAsCharset.xhtml)
       content/editor/EditorSaveAsCharset.js                    (dialogs/content/EditorSaveAsCharset.js)
-      content/editor/EditorPublish.xul                         (dialogs/content/EditorPublish.xul)
+      content/editor/EditorPublish.xhtml                       (dialogs/content/EditorPublish.xhtml)
       content/editor/EditorPublish.js                          (dialogs/content/EditorPublish.js)
-      content/editor/EditorPublishSettings.xul                 (dialogs/content/EditorPublishSettings.xul)
+      content/editor/EditorPublishSettings.xhtml               (dialogs/content/EditorPublishSettings.xhtml)
       content/editor/EditorPublishSettings.js                  (dialogs/content/EditorPublishSettings.js)
-      content/editor/EditorPublishOverlay.xul                  (dialogs/content/EditorPublishOverlay.xul)
-      content/editor/EditorPublishProgress.xul                 (dialogs/content/EditorPublishProgress.xul)
+      content/editor/EditorPublishOverlay.xhtml                (dialogs/content/EditorPublishOverlay.xhtml)
+      content/editor/EditorPublishProgress.xhtml               (dialogs/content/EditorPublishProgress.xhtml)
       content/editor/EditorPublishProgress.js                  (dialogs/content/EditorPublishProgress.js)
 #endif
       content/editor/TeXZilla.js                               (texzilla/content/TeXZilla.js)
--- a/editor/ui/locales/en-US/chrome/composer/pref-composer.dtd
+++ b/editor/ui/locales/en-US/chrome/composer/pref-composer.dtd
@@ -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/. -->
 
-<!-- extracted from content/pref-composer.xul -->
+<!-- extracted from content/pref-composer.xhtml -->
 
 <!--LOCALIZATION NOTE : FILE 'Composer' prefs dialog. Similar to Communcator 4.x Document Properties/Colors and Background -->
 
 <!--LOCALIZATION NOTE (pref.composer.title): DONT_TRANSLATE -->
 <!ENTITY  pref.composer.title           "Composer">
 <!ENTITY  recentFiles.title             "Recent Pages Menu">
 <!ENTITY  documentsInMenu.label         "Maximum number of pages listed:">
 <!ENTITY  documentsInMenu.accesskey     "n">
--- a/editor/ui/locales/en-US/chrome/dialogs/EditorReplace.dtd
+++ b/editor/ui/locales/en-US/chrome/dialogs/EditorReplace.dtd
@@ -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/. -->
 
-<!-- extracted from EdReplace.xul -->
+<!-- extracted from EdReplace.xhtml -->
 
 <!ENTITY replaceDialog.title "Find and Replace">
 <!ENTITY findField.label "Find text:">
 <!ENTITY findField.accesskey "n">
 <!ENTITY replaceField.label "Replace with:">
 <!ENTITY replaceField.accesskey "e">
 <!ENTITY caseSensitiveCheckbox.label "Match exact case">
 <!ENTITY caseSensitiveCheckbox.accesskey "M">
--- a/mail/app/profile/all-thunderbird.js
+++ b/mail/app/profile/all-thunderbird.js
@@ -298,17 +298,17 @@ pref("mail.default_html_action", 3);
 /////////////////////////////////////////////////////////////////
 // End core mailnews.js pref overrides
 /////////////////////////////////////////////////////////////////
 
 /////////////////////////////////////////////////////////////////
 // Overrides for generic app behavior from the core all.js
 /////////////////////////////////////////////////////////////////
 
-pref("browser.hiddenWindowChromeURL", "chrome://messenger/content/hiddenWindow.xul");
+pref("browser.hiddenWindowChromeURL", "chrome://messenger/content/hiddenWindow.xhtml");
 
 pref("offline.startup_state",            2);
 // 0 Ask before sending unsent messages when going online
 // 1 Always send unsent messages when going online
 // 2 Never send unsent messages when going online
 pref("offline.send.unsent_messages",            0);
 
 // 0 Ask before synchronizing the offline mail store when going offline
--- a/mail/base/content/ABSearchDialog.xhtml
+++ b/mail/base/content/ABSearchDialog.xhtml
@@ -70,17 +70,17 @@
         <hbox align="center">
           <spacer flex="1"/>
           <button label="&resetButton.label;" oncommand="onAbSearchReset(event);" accesskey="&resetButton.accesskey;"/>
         </hbox>
       </vbox>
 
       <hbox flex="1">
         <vbox id="searchTermListBox" flex="1">
-#include ../../../mailnews/base/search/content/searchTerm.inc.xul
+#include ../../../mailnews/base/search/content/searchTerm.inc.xhtml
       </hbox>
     </vbox>
 
     <splitter id="gray_horizontal_splitter" collapse="after" persist="state" orient="vertical"/>
 
     <vbox id="searchResults" flex="4" persist="height">
       <vbox id="searchResultListBox" flex="1" >
         <tree id="abResultsTree" flex="1" enableColumnDrag="true" class="plain"
--- a/mail/base/content/FilterListDialog.js
+++ b/mail/base/content/FilterListDialog.js
@@ -383,17 +383,17 @@ function onEditFilter() {
   let selectedFilter = currentFilter();
   if (!selectedFilter) {
     return;
   }
 
   let args = { filter: selectedFilter, filterList: gCurrentFilterList };
 
   window.openDialog(
-    "chrome://messenger/content/FilterEditor.xul",
+    "chrome://messenger/content/FilterEditor.xhtml",
     "FilterEditor",
     "chrome,modal,titlebar,resizable,centerscreen",
     args
   );
 
   if ("refresh" in args && args.refresh) {
     // reset search if edit was okay (name change might lead to hidden entry!)
     resetSearchBox(selectedFilter);
@@ -452,17 +452,17 @@ function calculatePositionAndShowCreateF
       }
     }
   }
   args.filterPosition = position;
 
   args.filterList = gCurrentFilterList;
 
   window.openDialog(
-    "chrome://messenger/content/FilterEditor.xul",
+    "chrome://messenger/content/FilterEditor.xhtml",
     "FilterEditor",
     "chrome,modal,titlebar,resizable,centerscreen",
     args
   );
 
   if ("refresh" in args && args.refresh) {
     // On success: reset the search box if necessary!
     resetSearchBox(args.newFilter);
@@ -644,17 +644,17 @@ function moveFilter(motion) {
 
   rebuildFilterList();
 }
 
 function viewLog() {
   var args = { filterList: gCurrentFilterList };
 
   window.openDialog(
-    "chrome://messenger/content/viewLog.xul",
+    "chrome://messenger/content/viewLog.xhtml",
     "FilterLog",
     "chrome,modal,titlebar,resizable,centerscreen",
     args
   );
 }
 
 function onFilterUnload() {
   gCurrentFilterList.saveToDefaultFile();
--- a/mail/base/content/SearchDialog.js
+++ b/mail/base/content/SearchDialog.js
@@ -599,17 +599,17 @@ function saveAsVirtualFolder() {
       searchFolderURIs += "|" + subFolderURIs;
     }
   }
 
   var searchOnline = document.getElementById("checkSearchOnline");
   var doOnlineSearch = searchOnline.checked && !searchOnline.disabled;
 
   window.openDialog(
-    "chrome://messenger/content/virtualFolderProperties.xul",
+    "chrome://messenger/content/virtualFolderProperties.xhtml",
     "",
     "chrome,titlebar,modal,centerscreen",
     {
       folder: window.arguments[0].folder,
       searchTerms: getSearchTerms(),
       searchFolderURIs,
       searchOnline: doOnlineSearch,
     }
--- a/mail/base/content/SearchDialog.xhtml
+++ b/mail/base/content/SearchDialog.xhtml
@@ -112,25 +112,25 @@
                     accesskey="&searchOnServer.accesskey;"
                     oncommand="updateSearchLocalSystem();"
                     persist="checked"/>
         </hbox>
       </vbox>
 
       <hbox flex="1">
         <vbox id="searchTermListBox" flex="1">
-#include ../../../mailnews/base/search/content/searchTerm.inc.xul
+#include ../../../mailnews/base/search/content/searchTerm.inc.xhtml
       </hbox>
     </vbox>
 
     <splitter id="gray_horizontal_splitter" persist="state" orient="vertical"/>
 
     <vbox id="searchResults" flex="4" persist="height">
       <vbox id="searchResultListBox" flex="1">
-#include threadTree.inc.xul
+#include threadTree.inc.xhtml
       </vbox>
       <hbox align="start">
         <button label="&openButton.label;" id="openButton" command="cmd_open" accesskey="&openButton.accesskey;"/>
         <button id="fileMessageButton" type="menu" label="&moveButton.label;"
                 accesskey="&moveButton.accesskey;"
                 command="file_message_button">
           <menupopup is="folder-menupopup" showFileHereLabel="true" mode="filing"/>
         </button>
--- a/mail/base/content/aboutDialog-appUpdater.js
+++ b/mail/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.xhtml and preferences/advanced.xhtml
 // if MOZ_UPDATER is defined.
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 var { XPCOMUtils } = ChromeUtils.import(
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 var { DownloadUtils } = ChromeUtils.import(
   "resource://gre/modules/DownloadUtils.jsm"
--- a/mail/base/content/aboutDialog.js
+++ b/mail/base/content/aboutDialog.js
@@ -113,17 +113,17 @@ function openAboutTab(url) {
       contentPage: url,
       clickHandler: "specialTabs.aboutClickHandler(event);",
     });
     return;
   }
 
   // No existing windows.
   window.openDialog(
-    "chrome://messenger/content/",
+    "chrome://messenger/content/messenger.xhtml",
     "_blank",
     "chrome,dialog=no,all",
     null,
     {
       tabType: "contentTab",
       tabParams: {
         contentPage: url,
         clickHandler: "specialTabs.aboutClickHandler(event);",
--- a/mail/base/content/editContactPanel.js
+++ b/mail/base/content/editContactPanel.js
@@ -180,17 +180,17 @@ var editContactInlineUI = {
 
     this.panel.openPopup(aAnchorElement, aPosition, -1, -1);
   },
 
   editDetails() {
     this.saveChanges();
 
     window.openDialog(
-      "chrome://messenger/content/addressbook/abEditCardDialog.xul",
+      "chrome://messenger/content/addressbook/abEditCardDialog.xhtml",
       "",
       "chrome,modal,resizable=no,centerscreen",
       { abURI: this._cardDetails.book.URI, card: this._cardDetails.card }
     );
   },
 
   deleteContact() {
     if (this._cardDetails.book.readOnly) {
--- a/mail/base/content/folderPane.js
+++ b/mail/base/content/folderPane.js
@@ -2886,17 +2886,17 @@ var gFolderTreeController = {
       // TODO: Rewrite this logic and also move the opening of alert dialogs from
       // nsMsgLocalMailFolder::CreateSubfolderInternal to here (bug 831190#c16).
       if (aName) {
         aFolder.createSubfolder(aName, msgWindow);
       }
     }
 
     window.openDialog(
-      "chrome://messenger/content/newFolderDialog.xul",
+      "chrome://messenger/content/newFolderDialog.xhtml",
       "",
       "chrome,modal,resizable=no,centerscreen",
       { folder, dualUseFolders, okCallback: newFolderCallback }
     );
   },
 
   /**
    * Opens the dialog to edit the properties for a folder
@@ -2970,17 +2970,17 @@ var gFolderTreeController = {
       }
       folder.updateFolder(msgWindow);
       if (sameFolder) {
         gFolderDisplay.show(folder);
       }
     }
 
     window.openDialog(
-      "chrome://messenger/content/folderProps.xul",
+      "chrome://messenger/content/folderProps.xhtml",
       "",
       "chrome,modal,centerscreen",
       {
         folder,
         serverType: folder.server.type,
         msgWindow,
         title,
         okCallback: editFolderCallback,
@@ -3009,17 +3009,17 @@ var gFolderTreeController = {
       }
 
       controller._tree.view.selection.clearSelection();
 
       // Actually do the rename
       folder.rename(aName, msgWindow);
     }
     window.openDialog(
-      "chrome://messenger/content/renameFolderDialog.xul",
+      "chrome://messenger/content/renameFolderDialog.xhtml",
       "",
       "chrome,modal,centerscreen",
       {
         preselectedURI: folder.URI,
         okCallback: renameCallback,
         name: folder.prettyName,
       }
     );
@@ -3211,17 +3211,17 @@ var gFolderTreeController = {
     }
 
     let name = folder.prettyName;
     if (aName) {
       name += "-" + aName;
     }
 
     window.openDialog(
-      "chrome://messenger/content/virtualFolderProperties.xul",
+      "chrome://messenger/content/virtualFolderProperties.xhtml",
       "",
       "chrome,modal,centerscreen",
       { folder, searchTerms: aSearchTerms, newFolderName: name }
     );
   },
 
   editVirtualFolder(aFolder) {
     let folder = aFolder || gFolderTreeView.getSelectedFolders()[0];
@@ -3232,17 +3232,17 @@ var gFolderTreeController = {
       if (
         gFolderDisplay.displayedFolder &&
         aURI == gFolderDisplay.displayedFolder.URI
       ) {
         FolderPaneSelectionChange();
       }
     }
     window.openDialog(
-      "chrome://messenger/content/virtualFolderProperties.xul",
+      "chrome://messenger/content/virtualFolderProperties.xhtml",
       "",
       "chrome,modal,centerscreen",
       {
         folder,
         editExistingFolder: true,
         onOKCallback: editVirtualCallback,
         msgWindow,
       }
--- a/mail/base/content/glodaFacetTab.js
+++ b/mail/base/content/glodaFacetTab.js
@@ -76,17 +76,17 @@ var glodaFacetTabType = {
     }
 
     aTab.iframe.contentWindow.addEventListener("load", xulLoadHandler, {
       capture: false,
       once: true,
     });
     aTab.iframe.setAttribute(
       "src",
-      "chrome://messenger/content/glodaFacetViewWrapper.xul"
+      "chrome://messenger/content/glodaFacetViewWrapper.xhtml"
     );
 
     this.lastTabId++;
   },
   closeTab(aTab) {},
   saveTabState(aTab) {
     // nothing to do; we are not multiplexed
   },
--- a/mail/base/content/hiddenWindow.xhtml
+++ b/mail/base/content/hiddenWindow.xhtml
@@ -67,27 +67,27 @@
 <stringbundle id="bundle_messenger" src="chrome://messenger/locale/messenger.properties"/>
 <stringbundle id="bundle_brand" src="chrome://branding/locale/brand.properties"/>
 <stringbundle id="bundle_search" src="chrome://messenger/locale/search.properties"/>
 <stringbundle id="bundle_offlinePrompts" src="chrome://messenger/locale/offline.properties"/>
 <stringbundle id="charsetBundle" src="chrome://communicator/content/labelsencodings.properties"/>
 
 <!-- keys are appended from the overlay -->
 <keyset id="mailKeys">
-#include mainKeySet.inc.xul
+#include mainKeySet.inc.xhtml
   <keyset id="tasksKeys">
     <key id="key_newMessage" key="&newMessageCmd.key;" command="cmd_newMessage"
          modifiers="accel,shift"/>
     <key id="key_newMessage2" key="&newMessageCmd2.key;" command="cmd_newMessage"
          modifiers="accel"/>
   </keyset>
 </keyset>
 
 <commandset id="mailCommands">
-#include mainCommandSet.inc.xul
+#include mainCommandSet.inc.xhtml
   <commandset id="mailSearchMenuItems"/>
   <commandset id="globalEditMenuItems"
               commandupdater="true"
               events="create-menu-edit"
               oncommandupdate="goUpdateGlobalEditMenuItems()"/>
   <commandset id="selectEditMenuItems"
               commandupdater="true"
               events="create-menu-edit"
@@ -97,22 +97,22 @@
               events="clipboard"
               oncommandupdate="goUpdatePasteMenuItems()"/>
   <commandset id="tasksCommands">
     <command id="cmd_newMessage" oncommand="goOpenNewMessage();"/>
     <command id="cmd_newCard" oncommand="openNewCardDialog()"/>
   </commandset>
 </commandset>
 
-  <!-- it's the whole mailWindowOverlay.xul menubar! hidden windows need to
+  <!-- it's the whole mailWindowOverlay.xhtml menubar! hidden windows need to
        have a menubar for situations where they're the only window remaining
        on a platform that wants to leave the app running, like the Mac.
   -->
 
-#include mainNavigationToolbox.inc.xul
+#include mainNavigationToolbox.inc.xhtml
   </toolbox>
-#include mainMailToolbox.inc.xul
+#include mainMailToolbox.inc.xhtml
 
 <browser id="hiddenBrowser" disablehistory="true"/>
 
 </window>
 
 #endif
--- a/mail/base/content/macMessengerMenu.js
+++ b/mail/base/content/macMessengerMenu.js
@@ -96,15 +96,15 @@ function writeNewMessageDock() {
  */
 function openAddressBookDock() {
   let win = Services.wm.getMostRecentWindow("mail:addressbook");
   if (win) {
     win.focus();
   } else {
     Services.ww.openWindow(
       null,
-      "chrome://messenger/content/addressbook/addressbook.xul",
+      "chrome://messenger/content/addressbook/addressbook.xhtml",
       null,
       "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar",
       null
     );
   }
 }
--- a/mail/base/content/mail-offline.js
+++ b/mail/base/content/mail-offline.js
@@ -87,17 +87,17 @@ var MailOfflineMgr = {
       .hasUnsentMessages();
   },
 
   /**
    * open the offline panel in the account manager for the currently loaded
    * account.
    */
   openOfflineAccountSettings() {
-    window.parent.MsgAccountManager("am-offline.xul");
+    window.parent.MsgAccountManager("am-offline.xhtml");
   },
 
   /**
    * Prompt the user about going online to send unsent messages, and then send them
    * if appropriate. Puts the app back into online mode.
    *
    * @param aMsgWindow the msg window to be used when going online
    */
--- a/mail/base/content/mailCommands.js
+++ b/mail/base/content/mailCommands.js
@@ -308,17 +308,17 @@ function NewMessageToSelectedAddresses(t
       params.composeFields = composeFields;
       MailServices.compose.OpenComposeWindowWithParams(null, params);
     }
   }
 }
 
 function Subscribe(preselectedMsgFolder) {
   window.openDialog(
-    "chrome://messenger/content/subscribe.xul",
+    "chrome://messenger/content/subscribe.xhtml",
     "subscribe",
     "chrome,modal,titlebar,resizable=yes",
     {
       folder: preselectedMsgFolder,
       okCallback: SubscribeOKCallback,
     }
   );
 }
@@ -487,17 +487,17 @@ function ViewPageSource(messages) {
         messages[i],
         msgWindow
       );
 
       // Strip out the message-display parameter to ensure that attached emails
       // display the message source, not the processed HTML.
       url = url.replace(/type=application\/x-message-display&/, "");
       window.openDialog(
-        "chrome://messenger/content/viewSource.xul",
+        "chrome://messenger/content/viewSource.xhtml",
         "_blank",
         "all,dialog=no",
         { URL: url, browser, outerWindowID: browser.outerWindowID }
       );
     }
     return true;
   } catch (e) {
     // Couldn't get mail session
--- a/mail/base/content/mailContextMenus.js
+++ b/mail/base/content/mailContextMenus.js
@@ -239,17 +239,17 @@ function OpenMessageForMessageId(message
 }
 
 function OpenMessageByHeader(messageHeader, openInNewWindow) {
   var folder = messageHeader.folder;
   var folderURI = folder.URI;
 
   if (openInNewWindow) {
     window.openDialog(
-      "chrome://messenger/content/messageWindow.xul",
+      "chrome://messenger/content/messageWindow.xhtml",
       "_blank",
       "all,chrome,dialog=no,status,toolbar",
       messageHeader
     );
   } else {
     if (msgWindow.openFolder != folderURI) {
       gFolderTreeView.selectFolder(folder);
     }
@@ -702,17 +702,17 @@ function IsMenuItemShowing(menuID) {
   return false;
 }
 
 // message pane context menu helper methods
 function addEmail() {
   var url = gContextMenu.linkURL;
   var addresses = getEmail(url);
   window.openDialog(
-    "chrome://messenger/content/addressbook/abNewCardDialog.xul",
+    "chrome://messenger/content/addressbook/abNewCardDialog.xhtml",
     "",
     "chrome,resizable=no,titlebar,modal,centerscreen",
     { primaryEmail: addresses }
   );
 }
 
 function composeEmailTo() {
   let fields = Cc[
--- a/mail/base/content/mailCore.js
+++ b/mail/base/content/mailCore.js
@@ -41,17 +41,17 @@ XPCOMUtils.defineLazyGetter(this, "gView
     if (Services.prefs.getBoolPref("view_source.editor.external")) {
       try {
         await this.openInExternalEditor(aArgs);
         return;
       } catch (ex) {}
     }
 
     window.openDialog(
-      "chrome://messenger/content/viewSource.xul",
+      "chrome://messenger/content/viewSource.xhtml",
       "_blank",
       "all,dialog=no",
       aArgs
     );
   };
   return scope.gViewSourceUtils;
 });
 
@@ -76,17 +76,17 @@ Services.obs.addObserver(
                 if (Services.prefs.getBoolPref("view_source.editor.external")) {
                   try {
                     await this.openInExternalEditor(aArgs);
                     return;
                   } catch (ex) {}
                 }
 
                 window.openDialog(
-                  "chrome://messenger/content/viewSource.xul",
+                  "chrome://messenger/content/viewSource.xhtml",
                   "_blank",
                   "all,dialog=no",
                   aArgs
                 );
               },
             };
           });
         },
@@ -220,17 +220,17 @@ function CustomizeMailToolbar(toolboxId,
     menubar.children[i].setAttribute("disabled", true);
   }
 
   var customizePopup = document.getElementById(customizePopupId);
   customizePopup.setAttribute("disabled", "true");
 
   var toolbox = document.getElementById(toolboxId);
 
-  var customizeURL = "chrome://messenger/content/customizeToolbar.xul";
+  var customizeURL = "chrome://messenger/content/customizeToolbar.xhtml";
   gCustomizeSheet = Services.prefs.getBoolPref(
     "toolbar.customization.usesheet"
   );
 
   let externalToolbars = [];
   if (toolbox.getAttribute("id") == "mail-toolbox") {
     if (document.getElementById("tabbar-toolbar")) {
       externalToolbars.push(document.getElementById("tabbar-toolbar"));
@@ -484,57 +484,60 @@ function toOpenWindowByType(inType, uri)
       uri,
       "_blank",
       "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"
     );
   }
 }
 
 function toMessengerWindow() {
-  toOpenWindowByType("mail:3pane", "chrome://messenger/content/messenger.xul");
+  toOpenWindowByType(
+    "mail:3pane",
+    "chrome://messenger/content/messenger.xhtml"
+  );
 }
 
 function focusOnMail(tabNo, event) {
   // this is invoked by accel-<number>
   // if the window isn't visible or focused, make it so
   var topWindow = Services.wm.getMostRecentWindow("mail:3pane");
   if (topWindow) {
     if (topWindow != window) {
       topWindow.focus();
     } else {
       document.getElementById("tabmail").selectTabByIndex(event, tabNo);
     }
   } else {
     window.open(
-      "chrome://messenger/content/messenger.xul",
+      "chrome://messenger/content/messenger.xhtml",
       "_blank",
       "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"
     );
   }
 }
 
 function toAddressBook() {
   toOpenWindowByType(
     "mail:addressbook",
-    "chrome://messenger/content/addressbook/addressbook.xul"
+    "chrome://messenger/content/addressbook/addressbook.xhtml"
   );
 }
 
 function showChatTab() {
   let tabmail = document.getElementById("tabmail");
   if (gChatTab) {
     tabmail.switchToTab(gChatTab);
   } else {
     tabmail.openTab("chat", {});
   }
 }
 
 function toImport() {
   window.openDialog(
-    "chrome://messenger/content/importDialog.xul",
+    "chrome://messenger/content/importDialog.xhtml",
     "importDialog",
     "chrome, modal, titlebar, centerscreen"
   );
 }
 
 function toSanitize() {
   Cc["@mozilla.org/mail/mailglue;1"]
     .getService(Ci.nsIMailGlue)
@@ -629,28 +632,28 @@ function openActivityMgr() {
 
 function openIMAccountMgr() {
   var win = Services.wm.getMostRecentWindow("Messenger:Accounts");
   if (win) {
     win.focus();
   } else {
     win = Services.ww.openWindow(
       null,
-      "chrome://messenger/content/chat/imAccounts.xul",
+      "chrome://messenger/content/chat/imAccounts.xhtml",
       "Accounts",
       "chrome,resizable,centerscreen",
       null
     );
   }
   return win;
 }
 
 function openIMAccountWizard() {
   const kFeatures = "chrome,centerscreen,modal,titlebar";
-  const kUrl = "chrome://messenger/content/chat/imAccountWizard.xul";
+  const kUrl = "chrome://messenger/content/chat/imAccountWizard.xhtml";
   const kName = "IMAccountWizard";
 
   if (AppConstants.platform == "macosx") {
     // On Mac, avoid using the hidden window as a parent as that would
     // make it visible.
     let hiddenWindowUrl = Services.prefs.getCharPref(
       "browser.hiddenWindowChromeURL"
     );
@@ -709,17 +712,17 @@ function openAboutDialog() {
     features = "chrome,centerscreen,dependent";
   } else if (AppConstants.platform == "macosx") {
     features = "chrome,resizable=no,minimizable=no";
   } else {
     features = "chrome,centerscreen,dependent,dialog=no";
   }
 
   window.openDialog(
-    "chrome://messenger/content/aboutDialog.xul",
+    "chrome://messenger/content/aboutDialog.xhtml",
     "About",
     features
   );
 }
 
 /**
  * Opens the support page based on the app.support.baseURL pref.
  */
--- a/mail/base/content/mailWidgets.js
+++ b/mail/base/content/mailWidgets.js
@@ -1752,17 +1752,17 @@
   }
 
   customElements.define("attachment-list", MozAttachmentlist, {
     extends: "richlistbox",
   });
 
   /**
    * The MailAddressPill widget is used to display the email addresses in the
-   * messengercompose.xul window.
+   * messengercompose.xhtml window.
    *
    * @extends {MozXULElement}
    */
   class MailAddressPill extends MozXULElement {
     static get inheritedAttributes() {
       return {
         ".pill-label": "crop,value=label",
       };
--- a/mail/base/content/mailWindow.js
+++ b/mail/base/content/mailWindow.js
@@ -42,19 +42,19 @@ var gContextMenu;
 var gMailWindowLog = Log4Moz.getConfiguredLogger(
   "mailWindow",
   Log4Moz.Level.Debug,
   Log4Moz.Level.Debug,
   Log4Moz.Level.Debug
 );
 
 /**
- * Called by messageWindow.xul:onunload,  the 'single message display window'.
+ * Called by messageWindow.xhtml:onunload,  the 'single message display window'.
  *
- * Also called by messenger.xul:onunload's (the 3-pane window inside of tabs
+ * Also called by messenger.xhtml:onunload's (the 3-pane window inside of tabs
  *  window) unload function, OnUnloadMessenger.
  */
 function OnMailWindowUnload() {
   MailOfflineMgr.uninit();
   ClearPendingReadTimer();
 
   // all dbview closing is handled by OnUnloadMessenger for the 3-pane (it closes
   //  the tabs which close their views) and OnUnloadMessageWindow for the
--- a/mail/base/content/mailWindowOverlay.js
+++ b/mail/base/content/mailWindowOverlay.js
@@ -2206,32 +2206,32 @@ function MsgSaveAsTemplate() {
   if (gFolderDisplay.selectedCount == 1) {
     SaveAsTemplate(gFolderDisplay.selectedMessageUris[0]);
   }
 }
 
 function MsgOpenNewWindowForFolder(folderURI, msgKeyToSelect) {
   if (folderURI) {
     window.openDialog(
-      "chrome://messenger/content/",
+      "chrome://messenger/content/messenger.xhtml",
       "_blank",
       "chrome,all,dialog=no",
       folderURI,
       msgKeyToSelect
     );
     return;
   }
 
   // If there is a right-click happening, gFolderTreeView.getSelectedFolders()
   // will tell us about it (while the selection's currentIndex would reflect
   // the node that was selected/displayed before the right-click.)
   let selectedFolders = gFolderTreeView.getSelectedFolders();
   for (let i = 0; i < selectedFolders.length; i++) {
     window.openDialog(
-      "chrome://messenger/content/",
+      "chrome://messenger/content/messenger.xhtml",
       "_blank",
       "chrome,all,dialog=no",
       selectedFolders[i].URI,
       msgKeyToSelect
     );
   }
 }
 
@@ -2312,17 +2312,17 @@ function MsgOpenFromFile() {
     }
     let uri = fp.fileURL.QueryInterface(Ci.nsIURL);
     uri = uri
       .mutate()
       .setQuery("type=application/x-message-display")
       .finalize();
 
     window.openDialog(
-      "chrome://messenger/content/messageWindow.xul",
+      "chrome://messenger/content/messageWindow.xhtml",
       "_blank",
       "all,chrome,dialog=no,status,toolbar",
       uri
     );
   });
 }
 
 function MsgOpenNewWindowForMessage(aMsgHdr) {
@@ -2332,17 +2332,17 @@ function MsgOpenNewWindowForMessage(aMsg
     aMsgHdr = gFolderDisplay.selectedMessage;
   }
 
   // (there might not have been a selected message, so check...)
   if (aMsgHdr) {
     // we also need to tell the window about our current view so that it can
     //  clone it.  This enables advancing through the messages, etc.
     window.openDialog(
-      "chrome://messenger/content/messageWindow.xul",
+      "chrome://messenger/content/messageWindow.xhtml",
       "_blank",
       "all,chrome,dialog=no,status,toolbar",
       aMsgHdr,
       gFolderDisplay.view
     );
   }
 }
 
@@ -2442,17 +2442,17 @@ function MsgMarkMsgAsRead(read) {
 }
 
 function MsgMarkAsFlagged() {
   MarkSelectedMessagesFlagged(!SelectedMessagesAreFlagged());
 }
 
 function MsgMarkReadByDate() {
   window.openDialog(
-    "chrome://messenger/content/markByDate.xul",
+    "chrome://messenger/content/markByDate.xhtml",
     "",
     "chrome,modal,titlebar,centerscreen",
     gFolderDisplay.displayedFolder
   );
 }
 
 function MsgMarkAllRead() {
   let folders = gFolderTreeView.getSelectedFolders();
@@ -2528,17 +2528,17 @@ function MsgFilters(emailAddress, folder
       filterName: emailAddress,
     };
     // Set the field name to prefill in the filter, if one was specified.
     if (fieldName) {
       args.fieldName = fieldName;
     }
 
     window.openDialog(
-      "chrome://messenger/content/FilterEditor.xul",
+      "chrome://messenger/content/FilterEditor.xhtml",
       "",
       "chrome, modal, resizable,centerscreen,dialog=yes",
       args
     );
 
     // If the user hits OK in the filterEditor dialog we set args.refresh=true
     // there and we check this here in args to show filterList dialog.
     // We also received the filter created via args.newFilter.
@@ -2691,17 +2691,17 @@ function ToggleInlineAttachment(target) 
 function PrintEnginePrintInternal(doPrintPreview, msgType) {
   var messageList = gFolderDisplay.selectedMessageUris;
   if (!messageList) {
     dump("PrintEnginePrintInternal(): No messages selected.\n");
     return;
   }
 
   window.openDialog(
-    "chrome://messenger/content/msgPrintEngine.xul",
+    "chrome://messenger/content/msgPrintEngine.xhtml",
     "",
     "chrome,dialog=no,all,centerscreen",
     messageList.length,
     messageList,
     statusFeedback,
     doPrintPreview,
     msgType
   );
@@ -2765,17 +2765,17 @@ function IsGetNextNMessagesEnabled() {
   if (appMenuItem) {
     appMenuItem.setAttribute("hidden", "true");
   }
   return false;
 }
 
 function MsgSynchronizeOffline() {
   window.openDialog(
-    "chrome://messenger/content/msgSynchronize.xul",
+    "chrome://messenger/content/msgSynchronize.xhtml",
     "",
     "centerscreen,chrome,modal,titlebar,resizable=yes",
     { msgWindow }
   );
 }
 
 function SpaceHit(event) {
   // If focus is in chrome, we want to scroll the content window, unless
@@ -3842,17 +3842,17 @@ function QuickSearchFocus() {
  * chosen.
  *
  * @param [aFolder] the folder to open the search window for, if different from
  *                  the displayed one
  */
 function MsgSearchMessages(aFolder) {
   // We always open a new search dialog for each search command
   window.openDialog(
-    "chrome://messenger/content/SearchDialog.xul",
+    "chrome://messenger/content/SearchDialog.xhtml",
     "_blank",
     "chrome,resizable,status,centerscreen,dialog=no",
     { folder: aFolder || gFolderDisplay.displayedFolder }
   );
 }
 
 function MsgJunkMailInfo(aCheckFirstUse) {
   if (aCheckFirstUse) {
@@ -3869,38 +3869,38 @@ function MsgJunkMailInfo(aCheckFirstUse)
   }
 
   var desiredWindow = Services.wm.getMostRecentWindow("mailnews:junkmailinfo");
 
   if (desiredWindow) {
     desiredWindow.focus();
   } else {
     window.openDialog(
-      "chrome://messenger/content/junkMailInfo.xul",
+      "chrome://messenger/content/junkMailInfo.xhtml",
       "mailnews:junkmailinfo",
       "centerscreen,resizable=no,titlebar,chrome,modal",
       null
     );
   }
 }
 
 function MsgSearchAddresses() {
   var args = { directory: null };
   OpenOrFocusWindow(
     args,
     "mailnews:absearch",
-    "chrome://messenger/content/ABSearchDialog.xul"
+    "chrome://messenger/content/ABSearchDialog.xhtml"
   );
 }
 
 function MsgFilterList(args) {
   OpenOrFocusWindow(
     args,
     "mailnews:filterlist",
-    "chrome://messenger/content/FilterListDialog.xul"
+    "chrome://messenger/content/FilterListDialog.xhtml"
   );
 }
 
 function OpenOrFocusWindow(args, windowType, chromeURL) {
   var desiredWindow = Services.wm.getMostRecentWindow(windowType);
 
   if (desiredWindow) {
     desiredWindow.focus();
@@ -4026,13 +4026,13 @@ async function initAddonPrefsMenu(
   } else {
     // Only show message that there are no addons with prefs.
     noPrefsElem.setAttribute("collapsed", "false");
   }
 }
 
 function openNewCardDialog() {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abNewCardDialog.xul",
+    "chrome://messenger/content/addressbook/abNewCardDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen"
   );
 }
--- a/mail/base/content/mainNavigationToolbox.inc.xhtml
+++ b/mail/base/content/mainNavigationToolbox.inc.xhtml
@@ -932,17 +932,17 @@
       <menupopup id="taskPopup" onpopupshowing="document.commandDispatcher.updateCommands('create-menu-tasks')">
 #ifndef XP_MACOSX
         <menuitem hidden="true" accesskey="&messengerCmd.accesskey;" label="&messengerCmd.label;"
                   key="key_mail" oncommand="toMessengerWindow();" id="tasksMenuMail" class="menuitem-iconic menu-iconic"/>
         <menuitem id="addressBook"
                   label="&addressBookCmd.label;"
                   accesskey="&addressBookCmd.accesskey;"
                   key="key_addressbook"
-                  oncommand="toOpenWindowByType('mail:addressbook', 'chrome://messenger/content/addressbook/addressbook.xul');"
+                  oncommand="toOpenWindowByType('mail:addressbook', 'chrome://messenger/content/addressbook/addressbook.xhtml');"
                   class="menuitem-iconic"/>
         <menuseparator id="devToolsSeparator"/>
 #endif
         <menuitem id="menu_openSavedFilesWnd" label="&savedFiles.label;"
                   accesskey="&savedFiles.accesskey;"
                   key="key_savedFiles"
                   oncommand="openSavedFilesWnd();"/>
         <menuitem id="addonsManager" label="&addons.label;" accesskey="&addons.accesskey;"
@@ -1079,21 +1079,21 @@
         <menuitem id="menu_mac_show_all"
                   label="&showAllAppsCmdMac.label;"/>
 #endif
 #endif
        </menupopup>
       </menu>
 
 #ifdef XP_MACOSX
-#include macWindowMenu.inc.xul
+#include macWindowMenu.inc.xhtml
 #endif
 
       <!-- Help -->
-#include helpMenu.inc.xul
+#include helpMenu.inc.xhtml
 
       <spacer id="menubar_spacer" flex="100%"/>
       </menubar>
     </toolbaritem>
 #ifndef XP_MACOSX
     <hbox class="titlebar-placeholder" type="caption-buttons"/>
 #endif
   </toolbar>
--- a/mail/base/content/messageWindow.js
+++ b/mail/base/content/messageWindow.js
@@ -1473,17 +1473,17 @@ var MessageWindowController = {
         break;
       case "cmd_chat":
         let win = Services.wm.getMostRecentWindow("mail:3pane");
         if (win) {
           win.focus();
           win.showChatTab();
         } else {
           window.openDialog(
-            "chrome://messenger/content/",
+            "chrome://messenger/content/messenger.xhtml",
             "_blank",
             "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar",
             null,
             { tabType: "chat", tabParams: {} }
           );
         }
         break;
     }
--- a/mail/base/content/messageWindow.xhtml
+++ b/mail/base/content/messageWindow.xhtml
@@ -126,17 +126,17 @@
   <script src="chrome://messenger/content/messenger-customization.js"/>
 #ifdef XP_MACOSX
   <script src="chrome://global/content/macWindowMenu.js"/>
 #endif
   <script src="chrome://messenger/content/newmailaccount/uriListener.js"/>
   <script src="chrome://messenger/content/customizable-toolbar.js"/>
 
   <commandset id="mailCommands">
-#include mainCommandSet.inc.xul
+#include mainCommandSet.inc.xhtml
     <commandset id="mailSearchMenuItems"/>
     <commandset id="attachmentCommands">
       <command id="cmd_openAllAttachments"
                oncommand="goDoCommand('cmd_openAllAttachments');"
                disabled="true"/>
       <command id="cmd_saveAllAttachments"
                oncommand="goDoCommand('cmd_saveAllAttachments');"
                disabled="true"/>
@@ -152,42 +152,42 @@
       <command id="cmd_newCard" oncommand="openNewCardDialog()"/>
     </commandset>
     <commandset id="commandKeys"/>
     <command id="cmd_close" oncommand="window.close();"/>
   </commandset>
 
   <keyset id="mailKeys">
     <key keycode="VK_ESCAPE" oncommand="window.close();"/>
-#include mainKeySet.inc.xul
+#include mainKeySet.inc.xhtml
     <keyset id="tasksKeys">
 #ifdef XP_MACOSX
       <key id="key_newMessage" key="&newMessageCmd.key;" command="cmd_newMessage"
            modifiers="accel,shift"/>
       <key id="key_newMessage2" key="&newMessageCmd2.key;" command="cmd_newMessage"
            modifiers="accel"/>
 #else
       <key id="key_newMessage"  key="&newMessageCmd.key;" command="cmd_newMessage"
            modifiers="accel"/>
       <key id="key_newMessage2" key="&newMessageCmd2.key;" command="cmd_newMessage"
            modifiers="accel"/>
 #endif
     </keyset>
   </keyset>
 
-  <!-- Popup menus provided by mailWindowOverlay.xul -->
+  <!-- Popup menus provided by mailWindowOverlay.xhtml -->
   <popupset id="mainPopupSet">
-#include mainPopupSet.inc.xul
+#include mainPopupSet.inc.xhtml
 
 <!-- The panelUI is for the appmenu. -->
-#include ../../components/customizableui/content/panelUI.inc.xul
+#include ../../components/customizableui/content/panelUI.inc.xhtml
 
-#include msgHdrPopup.inc.xul
+#include msgHdrPopup.inc.xhtml
   </popupset>
-#include editContactPanel.inc.xul
+#include editContactPanel.inc.xhtml
 
 #ifdef XP_MACOSX
   <vbox id="titlebar">
     <hbox id="titlebar-content">
       <spacer id="titlebar-spacer" flex="1"/>
       <hbox id="titlebar-buttonbox-container" align="start">
         <hbox id="titlebar-buttonbox">
           <toolbarbutton class="titlebar-button" id="titlebar-min" oncommand="window.minimize();"/>
@@ -196,56 +196,56 @@
         </hbox>
       </hbox>
       <hbox id="titlebar-fullscreen-button"/>
     </hbox>
   </vbox>
 #endif
 
   <!-- navigation-toolbox with the main menubar -->
-#include mainNavigationToolbox.inc.xul
+#include mainNavigationToolbox.inc.xhtml
   </toolbox>
 
   <!-- mail-toolbox with the main toolbarbuttons -->
-#include mainMailToolbox.inc.xul
+#include mainMailToolbox.inc.xhtml
 
   <tooltip id="aHTMLTooltip" page="true"/>
 
   <!-- msg header view -->
   <!-- a convenience box for ease of extension overlaying -->
   <hbox id="messagepaneboxwrapper" flex="1">
     <vbox id="messagepanebox" flex="3"
           ondragover="nsDragAndDrop.dragOver(event, messagepaneObserver);"
           ondrop="nsDragAndDrop.drop(event, messagepaneObserver);"
           ondragexit="nsDragAndDrop.dragExit(event, messagepaneObserver);">
 
       <hbox id="msgHeaderView" collapsed="true" class="main-header-area">
-#include msgHdrView.inc.xul
+#include msgHdrView.inc.xhtml
       </hbox>
       <!-- The msgNotificationBar appears on top of the message and displays
            information like: junk, mdn, remote content and phishing warnings -->
       <hbox id="mail-notification-top">
         <!-- notificationbox will be added here lazily. -->
       </hbox>
 
       <!-- message view -->
       <browser id="messagepane" context="mailContext" tooltip="aHTMLTooltip"
                style="height: 0px; min-height: 1px" flex="1" name="messagepane"
                disablesecurity="true" disablehistory="true" type="content" primary="true"
                onresize="return messagePaneOnResize(event);" autofind="false"
                src="about:blank" onclick="return contentAreaClick(event);" />
       <splitter id="attachment-splitter" collapse="after" resizebefore="closest" resizeafter="closest" collapsed="true"/>
       <vbox id="attachmentView" collapsed="true">
-#include msgAttachmentView.inc.xul
+#include msgAttachmentView.inc.xhtml
       </vbox>
       <findbar id="FindToolbar" browserid="messagepane"/>
     </vbox>
   </hbox>
   <panel id="customizeToolbarSheetPopup" noautohide="true">
     <iframe id="customizeToolbarSheetIFrame"
             style="&dialog.dimensions;"
             hidden="true"/>
   </panel>
 
   <hbox id="status-bar" class="statusbar chromeclass-status">
-#include mainStatusbar.inc.xul
+#include mainStatusbar.inc.xhtml
   </hbox>
 </window>
--- a/mail/base/content/messenger.xhtml
+++ b/mail/base/content/messenger.xhtml
@@ -177,17 +177,17 @@
 <script src="chrome://messenger/content/macMessengerMenu.js"/>
 <script src="chrome://global/content/macWindowMenu.js"/>
 #endif
 
 <!-- move needed functions into a single js file -->
 <script src="chrome://messenger/content/threadPane.js"/>
 
 <commandset id="mailCommands">
-#include mainCommandSet.inc.xul
+#include mainCommandSet.inc.xhtml
   <commandset id="mailSearchMenuItems"/>
   <commandset id="globalEditMenuItems"
               commandupdater="true"
               events="create-menu-edit"
               oncommandupdate="goUpdateGlobalEditMenuItems()"/>
   <commandset id="selectEditMenuItems"
               commandupdater="true"
               events="create-menu-edit"
@@ -229,40 +229,40 @@
 <keyset id="mailKeys">
   <!-- Tab/F6 Keys -->
   <key keycode="VK_TAB" oncommand="SwitchPaneFocus(event);" modifiers="control,shift"/>
   <key keycode="VK_TAB" oncommand="SwitchPaneFocus(event);" modifiers="control"/>
   <key keycode="VK_F6" oncommand="SwitchPaneFocus(event);" modifiers="control,shift"/>
   <key keycode="VK_F6" oncommand="SwitchPaneFocus(event);" modifiers="control"/>
   <key keycode="VK_F6" oncommand="SwitchPaneFocus(event);" modifiers="shift"/>
   <key keycode="VK_F6" oncommand="SwitchPaneFocus(event);"/>
-#include mainKeySet.inc.xul
+#include mainKeySet.inc.xhtml
   <keyset id="tasksKeys">
 #ifdef XP_MACOSX
     <key id="key_newMessage" key="&newMessageCmd.key;" command="cmd_newMessage"
          modifiers="accel,shift"/>
     <key id="key_newMessage2" key="&newMessageCmd2.key;" command="cmd_newMessage"
          modifiers="accel"/>
 #else
     <key id="key_newMessage"  key="&newMessageCmd.key;" command="cmd_newMessage"
          modifiers="accel"/>
     <key id="key_newMessage2" key="&newMessageCmd2.key;" command="cmd_newMessage"
          modifiers="accel"/>
 #endif
   </keyset>
 </keyset>
 
-<!-- Popup menus provided by mailWindowOverlay.xul -->
+<!-- Popup menus provided by mailWindowOverlay.xhtml -->
 <popupset id="mainPopupSet">
-#include mainPopupSet.inc.xul
+#include mainPopupSet.inc.xhtml
 
 <!-- The panelUI is for the appmenu. -->
-#include ../../components/customizableui/content/panelUI.inc.xul
+#include ../../components/customizableui/content/panelUI.inc.xhtml
 
-#include msgHdrPopup.inc.xul
+#include msgHdrPopup.inc.xhtml
   <panel is="glodacomplete-rich-result-popup"
          id="PopupGlodaAutocomplete"
          noautofocus="true"/>
   <panel type="autocomplete"
          id="PopupAutoComplete"
          noautofocus="true"/>
 
   <tooltip id="attachmentListTooltip"/>
@@ -373,18 +373,18 @@
 #ifdef MOZ_UPDATER
   <popupnotification id="app-update-notification" hidden="true">
     <popupnotificationcontent class="app-update-notification-content" orient="vertical">
       <description id="app-update-text" class="app-update-text"/>
     </popupnotificationcontent>
   </popupnotification>
 #endif
 
-#include editContactPanel.inc.xul
-#include ../../components/im/content/chat-menu.inc.xul
+#include editContactPanel.inc.xhtml
+#include ../../components/im/content/chat-menu.inc.xhtml
 </popupset>
 #ifdef XP_MACOSX
 <popupset>
   <menupopup id="menu_mac_dockmenu">
     <menuitem label="&writeNewMessageDock.label;" id="tasksWriteNewMessage"
               oncommand="writeNewMessageDock();"/>
     <menuitem label="&openAddressBookDock.label;" id="tasksOpenAddressBook"
               oncommand="openAddressBookDock();"/>
@@ -406,17 +406,17 @@
     </hbox>
 #ifdef XP_MACOSX
     <hbox id="titlebar-fullscreen-button"/>
 #endif
   </hbox>
 </vbox>
 
   <!-- navigation-toolbox with main menubar and tabs toolbar -->
-#include mainNavigationToolbox.inc.xul
+#include mainNavigationToolbox.inc.xhtml
 
     <toolbar id="tabs-toolbar" class="chromeclass-toolbar">
       <tabs is="tabmail-tabs" id="tabmail-tabs"
             flex="1"
             align="end"
             setfocus="false"
             onclick="document.getElementById('tabmail').onTabClick(event);"
             tooltip="tabmail-tabs-tooltip"
@@ -499,17 +499,17 @@
         <!-- mailContent is the container used for the "wide" layout. Normally,
              all it contains is the "messengerBox" box.  However, in "wide" mode
              the message pane and its splitter transplant themselves into the box
              (respectively, messagepanebox and threadpane-splitter).  This gives us
              the folder pane next to the thread view, with the message pane/reader
              beneath both of them. -->
         <box id="mailContent" orient="vertical" flex="1">
           <!-- mail-toolbox with the main toolbarbuttons -->
-#include mainMailToolbox.inc.xul
+#include mainMailToolbox.inc.xhtml
 
           <box id="messengerBox" orient="horizontal" flex="1" minheight="100" height="100" persist="height">
             <vbox id="folderPaneBox" minwidth="125" width="200" persist="width">
               <vbox id="folderPane-toolbox">
                 <hbox id="folderPane-toolbar"
                       class="inline-toolbar toolbar"
                       toolboxid="mail-toolbox"
                       toolbarname="&folderPaneBar.label;"
@@ -583,17 +583,17 @@
                 <treechildren tooltip="folderpopup"/>
               </tree>
             </vbox>
 
             <splitter id="folderpane_splitter" collapse="before"/>
 
             <vbox flex="1">
               <box orient="vertical" id="messagesBox" flex="1">
-#include quickFilterBar.inc.xul
+#include quickFilterBar.inc.xhtml
                 <deck id="displayDeck" flex="1" selectedIndex="0"
                       minheight="100" height="100" persist="height"
                       >
                   <!-- first panel in displayDeck is Account Central -->
                   <vbox id="accountCentralBox" flex="1">
                     <iframe name="accountCentralPane"
                             contextmenu="pageContextMenu"
                             tooltip="aHTMLTooltip"
@@ -605,17 +605,17 @@
                        end up being: threadPaneBox, threadpane-splitter, messagepanebox)
                     -->
                   <!-- second panel is the threadPane -->
                   <hbox id="threadPaneBox">
                     <!-- The threadContentArea was specially created to be a place for
                          things that want to be above/below the thread pane, regardless
                          of where the message reader ("messagepane") gets off to. -->
                     <vbox id="threadContentArea" flex="1" persist="width">
-#include threadTree.inc.xul
+#include threadTree.inc.xhtml
                     </vbox>
                   </hbox>
                 <!-- extensions may overlay in additional panels; don't assume that there are only 2! -->
                 </deck> <!-- displayDeck -->
 
                 <!-- if you change this id, please change GetThreadAndMessagePaneSplitter() and MsgToggleMessagePane() -->
                 <splitter id="threadpane-splitter"
                           collapse="after"
@@ -636,17 +636,17 @@
                              flex="1" name="multimessage"
                              hidden="true"
                              disablesecurity="true" disablehistory="true"
                              tooltip="aHTMLTooltip"
                              src="chrome://messenger/content/multimessageview.xhtml"
                              autofind="false"/>
                     <vbox id="singlemessage" flex="1">
                       <hbox id="msgHeaderView" collapsed="true" class="main-header-area">
-#include msgHdrView.inc.xul
+#include msgHdrView.inc.xhtml
                       </hbox>
                       <!-- The msgNotificationBar appears on top of the message
                            and displays information like: junk, contains remote
                            images, or is a suspected phishing URL. -->
                       <hbox id="mail-notification-top">
                         <!-- notificationbox will be added here lazily. -->
                       </hbox>
                       <!-- The messagepanewrapper hbox exists to allow
@@ -663,30 +663,30 @@
                                    disablesecurity="true"
                                    onclick="return contentAreaClick(event);"/>
                         </stack>
                       </hbox>
                       <splitter id="attachment-splitter" collapse="after"
                                 resizebefore="closest" resizeafter="closest"
                                 collapsed="true"/>
                       <vbox id="attachmentView" collapsed="true">
-#include msgAttachmentView.inc.xul
+#include msgAttachmentView.inc.xhtml
                       </vbox>
                       <findbar id="FindToolbar" browserid="messagepane"/>
                     </vbox>
                   </vbox>
                 </hbox>
                 <hbox id="messenger-notification-footer">
                   <!-- notificationbox will be added here lazily. -->
                 </hbox>
               </box>
             </vbox>
           </box>
         </box> <!-- end of mailContent -->
-#include ../../components/im/content/chat-messenger.inc.xul
+#include ../../components/im/content/chat-messenger.inc.xhtml
       </tabpanels>
      </tabbox>
     </tabmail>
     <vbox id="contentTab" collapsed="true">
       <vbox flex="1" class="contentTabInstance">
         <vbox id="dummycontenttoolbox" class="contentTabToolbox">
           <hbox id="dummycontenttoolbar" class="contentTabToolbar">
             <toolbarbutton class="back-btn nav-button"
@@ -767,14 +767,14 @@
             hidden="true"/>
   </panel>
 
   <hbox id="messenger-notification-bottom">
       <!-- notificationbox will be added here lazily. -->
   </hbox>
   <statuspanel id="statusbar-display"/>
   <hbox id="status-bar" class="statusbar chromeclass-status">
-#include mainStatusbar.inc.xul
+#include mainStatusbar.inc.xhtml
     <label id="unreadMessageCount" class="statusbarpanel"/>
     <label id="totalMessageCount" class="statusbarpanel"/>
   </hbox>
 </window>
 
--- a/mail/base/content/msgHdrPopup.inc.xhtml
+++ b/mail/base/content/msgHdrPopup.inc.xhtml
@@ -54,17 +54,17 @@
               label="&detachedAttachmentFolder.showMac.label;"
               accesskey="&detachedAttachmentFolder.showMac.accesskey;"
 #else
               label="&detachedAttachmentFolder.show.label;"
               accesskey="&detachedAttachmentFolder.show.accesskey;"
 #endif
               oncommand="HandleMultipleAttachments(this.parentNode.attachments, 'openFolder');"/>
 #ifdef MOZ_OPENPGP
-#include ../../extensions/openpgp/content/ui/attachmentItemContext.inc.xul
+#include ../../extensions/openpgp/content/ui/attachmentItemContext.inc.xhtml
 #endif
   </menupopup>
 
   <menupopup id="attachmentListContext"
              onpopupshowing="goUpdateAttachmentCommands();">
     <menuitem id="context-openAllAttachments"
               label="&openAllAttachmentsCmd.label;"
               accesskey="&openAllAttachmentsCmd.accesskey;"
--- a/mail/base/content/msgHdrView.js
+++ b/mail/base/content/msgHdrView.js
@@ -1643,17 +1643,17 @@ function onClickEmailPresence(event, ema
 
   let win = window;
   if (!("focusConversation" in chatHandler)) {
     win = Services.wm.getMostRecentWindow("mail:3pane");
     if (win) {
       win.focus();
     } else {
       window.openDialog(
-        "chrome://messenger/content/",
+        "chrome://messenger/content/messenger.xhtml",
         "_blank",
         "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar",
         null,
         { tabType: "chat", tabParams: { convType: "focus", conv: uiConv } }
       );
       return;
     }
   }
--- a/mail/base/content/msgMail3PaneWindow.js
+++ b/mail/base/content/msgMail3PaneWindow.js
@@ -774,17 +774,17 @@ function FindOther3PaneWindow() {
     if (win != window) {
       return win;
     }
   }
   return null;
 }
 
 /**
- * Called by messenger.xul:onunload, the 3-pane window inside of tabs window.
+ * Called by messenger.xhtml:onunload, the 3-pane window inside of tabs window.
  *  It's being unloaded!  Right now!
  */
 function OnUnloadMessenger() {
   Services.obs.notifyObservers(window, "mail-unloading-messenger");
   accountManager.removeIncomingServerListener(gThreePaneIncomingServerListener);
   Services.prefs.removeObserver("mail.pane_config.dynamic", MailPrefObserver);
   Services.prefs.removeObserver(
     "mail.showCondensedAddresses",
--- a/mail/base/content/sanitize.js
+++ b/mail/base/content/sanitize.js
@@ -245,17 +245,17 @@ Sanitizer.__defineGetter__("prefs", func
     ? Sanitizer._prefs
     : (Sanitizer._prefs = Services.prefs.getBranch(Sanitizer.prefDomain));
 });
 
 // Shows sanitization UI
 Sanitizer.showUI = function(aParentWindow) {
   Services.ww.openWindow(
     AppConstants.platform == "macosx" ? null : aParentWindow,
-    "chrome://messenger/content/sanitize.xul",
+    "chrome://messenger/content/sanitize.xhtml",
     "Sanitize",
     "chrome,titlebar,dialog,centerscreen,modal",
     null
   );
 };
 
 /**
  * Deletes privacy sensitive data in a batch, optionally showing the
--- a/mail/base/content/tabmail.js
+++ b/mail/base/content/tabmail.js
@@ -1299,17 +1299,17 @@
           "close"
         );
       } else {
         features.push("dialog=no", "all", "status", "toolbar");
       }
 
       return window
         .openDialog(
-          "chrome://messenger/content/",
+          "chrome://messenger/content/messenger.xhtml",
           "_blank",
           features.join(","),
           null,
           { action: "restore", tabs: [tab] }
         )
         .focus();
     }
 
--- a/mail/base/content/threadTree.inc.xhtml
+++ b/mail/base/content/threadTree.inc.xhtml
@@ -1,14 +1,14 @@
 # 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/.
 
-                    <!-- The threadTree is shared with messenger.xul (MAIN_WINDOW)
-                         and SearchDialog.xul (SEARCH_WINDOW). -->
+                    <!-- The threadTree is shared with messenger.xhtml (MAIN_WINDOW)
+                         and SearchDialog.xhtml (SEARCH_WINDOW). -->
                     <tree id="threadTree"
                           class="plain"
                           persist="lastfoldersent width"
                           flex="2"
                           treelines="true"
                           enableColumnDrag="true"
                           _selectDelay="250"
                           lastfoldersent="false"
--- a/mail/base/content/utilityOverlay.js
+++ b/mail/base/content/utilityOverlay.js
@@ -264,17 +264,17 @@ function openTab(tabType, tabParams, whe
     if (tabmail) {
       return tabmail.openTab(tabType, tabParams);
     }
   }
 
   // Either we explicitly wanted to open in a new window, or we fell through to
   // here because there's no 3pane.
   return window.openDialog(
-    "chrome://messenger/content/",
+    "chrome://messenger/content/messenger.xhtml",
     "_blank",
     "chrome,dialog=no,all",
     null,
     { tabType, tabParams }
   );
 }
 
 /**
--- a/mail/base/jar.mn
+++ b/mail/base/jar.mn
@@ -10,57 +10,57 @@ messenger.jar:
 % override chrome://browser/content/browser-development-helpers.js chrome://messenger/content/browser-development-helpers.js
   content/messenger/browser-development-helpers.js (../../common/src/browser-development-helpers.js)
 #endif
     content/messenger/mailWindow.js                 (content/mailWindow.js)
     content/messenger/messageDisplay.js             (content/messageDisplay.js)
     content/messenger/folderDisplay.js              (content/folderDisplay.js)
     content/messenger/foldersummary.js              (content/foldersummary.js)
     content/messenger/mailWindowOverlay.js          (content/mailWindowOverlay.js)
-*   content/messenger/messageWindow.xul             (content/messageWindow.xul)
+*   content/messenger/messageWindow.xhtml           (content/messageWindow.xhtml)
     content/messenger/messageWindow.js              (content/messageWindow.js)
     content/messenger/mailContextMenus.js           (content/mailContextMenus.js)
     content/messenger/nsContextMenu.js              (content/nsContextMenu.js)
-*   content/messenger/messenger.xul                 (content/messenger.xul)
-*   content/messenger/hiddenWindow.xul              (content/hiddenWindow.xul)
+*   content/messenger/messenger.xhtml               (content/messenger.xhtml)
+*   content/messenger/hiddenWindow.xhtml            (content/hiddenWindow.xhtml)
     content/messenger/hiddenWindow.js               (content/hiddenWindow.js)
     content/messenger/msgHdrView.js                 (content/msgHdrView.js)
     content/messenger/msgViewNavigation.js          (content/msgViewNavigation.js)
     content/messenger/mailWidgets.js                (content/mailWidgets.js)
     content/messenger/button-menu-button.js         (content/button-menu-button.js)
     content/messenger/toolbarbutton-menu-button.js  (content/toolbarbutton-menu-button.js)
     content/messenger/customElements.js             (content/customElements.js)
     content/messenger/customizeToolbar.css          (../../common/src/customizeToolbar.css)
     content/messenger/customizeToolbar.js           (../../common/src/customizeToolbar.js)
-*   content/messenger/customizeToolbar.xul          (../../common/src/customizeToolbar.xul)
+*   content/messenger/customizeToolbar.xhtml        (../../common/src/customizeToolbar.xhtml)
     content/messenger/viewSource.js                 (../../common/src/viewSource.js)
-*   content/messenger/viewSource.xul                (../../common/src/viewSource.xul)
+*   content/messenger/viewSource.xhtml              (../../common/src/viewSource.xhtml)
     content/messenger/viewZoomOverlay.js            (../../common/src/viewZoomOverlay.js)
     content/messenger/customizable-toolbar.js       (../../common/bindings/customizable-toolbar.js)
     content/messenger/attachmentList.css            (content/attachmentList.css)
     content/messenger/menulist.css                  (content/menulist.css)
     content/messenger/nsDragAndDrop.js              (content/nsDragAndDrop.js)
     content/messenger/editContactPanel.js           (content/editContactPanel.js)
     content/messenger/msgMail3PaneWindow.js         (content/msgMail3PaneWindow.js)
     content/messenger/mail3PaneWindowCommands.js    (content/mail3PaneWindowCommands.js)
     content/messenger/mailCommands.js               (content/mailCommands.js)
     content/messenger/mailCore.js                   (content/mailCore.js)
     content/messenger/mailTabs.js                   (content/mailTabs.js)
     content/messenger/commandglue.js                (content/commandglue.js)
-*   content/messenger/SearchDialog.xul              (content/SearchDialog.xul)
+*   content/messenger/SearchDialog.xhtml            (content/SearchDialog.xhtml)
     content/messenger/SearchDialog.js               (content/SearchDialog.js)
-*   content/messenger/ABSearchDialog.xul            (content/ABSearchDialog.xul)
+*   content/messenger/ABSearchDialog.xhtml          (content/ABSearchDialog.xhtml)
     content/messenger/ABSearchDialog.js             (content/ABSearchDialog.js)
-    content/messenger/FilterListDialog.xul          (content/FilterListDialog.xul)
+    content/messenger/FilterListDialog.xhtml        (content/FilterListDialog.xhtml)
     content/messenger/FilterListDialog.js           (content/FilterListDialog.js)
     content/messenger/specialTabs.js                (content/specialTabs.js)
     content/messenger/aboutAddonsExtra.css          (content/aboutAddonsExtra.css)
     content/messenger/aboutAddonsExtra.js           (content/aboutAddonsExtra.js)
     content/messenger/aboutDialog-appUpdater.js     (content/aboutDialog-appUpdater.js)
-*   content/messenger/aboutDialog.xul               (content/aboutDialog.xul)
+*   content/messenger/aboutDialog.xhtml             (content/aboutDialog.xhtml)
     content/messenger/aboutDialog.js                (content/aboutDialog.js)
 *   content/messenger/aboutRights.xhtml             (content/aboutRights.xhtml)
 *   content/messenger/systemIntegrationDialog.xhtml (content/systemIntegrationDialog.xhtml)
     content/messenger/systemIntegrationDialog.js    (content/systemIntegrationDialog.js)
     content/messenger/folderPane.js                 (content/folderPane.js)
     content/messenger/messenger-customization.js    (content/messenger-customization.js)
     content/messenger/searchBar.js                  (content/searchBar.js)
     content/messenger/phishingDetector.js           (content/phishingDetector.js)
@@ -85,29 +85,29 @@ messenger.jar:
 #endif
     content/messenger/selectionsummaries.js         (content/selectionsummaries.js)
     content/messenger/multimessageview.css          (content/multimessageview.css)
     content/messenger/multimessageview_print.css    (content/multimessageview_print.css)
     content/messenger/sharedsummary.css             (content/sharedsummary.css)
     content/messenger/multimessageview.xhtml        (content/multimessageview.xhtml)
     content/messenger/multimessageview.js           (content/multimessageview.js)
     content/messenger/glodaFacetTab.js              (content/glodaFacetTab.js)
-    content/messenger/glodaFacetViewWrapper.xul     (content/glodaFacetViewWrapper.xul)
+    content/messenger/glodaFacetViewWrapper.xhtml   (content/glodaFacetViewWrapper.xhtml)
     content/messenger/glodaFacetView.xhtml          (content/glodaFacetView.xhtml)
     content/messenger/glodaFacetView.js             (content/glodaFacetView.js)
     content/messenger/glodaFacetView.css            (content/glodaFacetView.css)
     content/messenger/glodaFacetVis.js              (content/glodaFacetVis.js)
     content/messenger/glodaFacet.js                 (content/glodaFacet.js)
     content/messenger/quickFilterBar.js             (content/quickFilterBar.js)
     content/messenger/quickFilterBar.css            (content/quickFilterBar.css)
     content/messenger/browserRequest.js             (content/browserRequest.js)
-    content/messenger/browserRequest.xul            (content/browserRequest.xul)
-*   content/messenger/safeMode.xul                  (content/safeMode.xul)
+    content/messenger/browserRequest.xhtml          (content/browserRequest.xhtml)
+*   content/messenger/safeMode.xhtml                (content/safeMode.xhtml)
     content/messenger/safeMode.js                   (content/safeMode.js)
-    content/messenger/sanitize.xul                  (content/sanitize.xul)
+    content/messenger/sanitize.xhtml                (content/sanitize.xhtml)
     content/messenger/sanitize.js                   (content/sanitize.js)
     content/messenger/sanitizeDialog.css            (content/sanitizeDialog.css)
     content/messenger/sanitizeDialog.js             (content/sanitizeDialog.js)
     content/messenger/toolbarIconColor.js           (content/toolbarIconColor.js)
 
 # the following files are mail-specific overrides
 *   content/messenger/license.html                  (/@mozreltopsrcdir@/toolkit/content/license.html)
 % override chrome://global/content/license.html chrome://messenger/content/license.html
--- a/mail/base/modules/MailMigrator.jsm
+++ b/mail/base/modules/MailMigrator.jsm
@@ -101,19 +101,19 @@ var MailMigrator = {
   /**
    * Determine if the UI has been upgraded in a way that requires us to reset
    * some user configuration.  If so, performs the resets.
    */
   _migrateUI() {
     // The code for this was ported from
     // mozilla/browser/components/nsBrowserGlue.js
     const UI_VERSION = 17;
-    const MESSENGER_DOCURL = "chrome://messenger/content/messenger.xul";
+    const MESSENGER_DOCURL = "chrome://messenger/content/messenger.xhtml";
     const MESSENGERCOMPOSE_DOCURL =
-      "chrome://messenger/content/messengercompose/messengercompose.xul";
+      "chrome://messenger/content/messengercompose/messengercompose.xhtml";
     const UI_VERSION_PREF = "mail.ui-rdf.version";
     let currentUIVersion = Services.prefs.getIntPref(UI_VERSION_PREF, 0);
 
     if (currentUIVersion >= UI_VERSION) {
       return;
     }
 
     let xulStore = Services.xulStore;
@@ -283,17 +283,17 @@ var MailMigrator = {
                 Services.scriptSecurityManager.createContentPrincipal(
                   Services.io.newURI(origin),
                   {}
                 ),
                 "image"
               );
               origin = origin.replace(
                 "chrome://messenger/content/?",
-                "chrome://messenger/content/"
+                "chrome://messenger/content/messenger.xhtml"
               );
               Services.perms.addFromPrincipal(
                 Services.scriptSecurityManager.createContentPrincipal(
                   Services.io.newURI(origin),
                   {}
                 ),
                 "image",
                 permission
--- a/mail/base/modules/MailUtils.jsm
+++ b/mail/base/modules/MailUtils.jsm
@@ -248,17 +248,17 @@ var MailUtils = {
    */
   openMessageInNewWindow(aMsgHdr, aViewWrapperToClone) {
     // It sucks that we have to go through XPCOM for this
     let args = { msgHdr: aMsgHdr, viewWrapperToClone: aViewWrapperToClone };
     args.wrappedJSObject = args;
 
     Services.ww.openWindow(
       null,
-      "chrome://messenger/content/messageWindow.xul",
+      "chrome://messenger/content/messageWindow.xhtml",
       "",
       "all,chrome,dialog=no,status,toolbar",
       args
     );
   },
 
   /**
    * Open new standalone message windows for these headers. This will prompt
@@ -298,17 +298,17 @@ var MailUtils = {
     let mail3PaneWindow = Services.wm.getMostRecentWindow("mail:3pane");
     if (mail3PaneWindow) {
       mail3PaneWindow.MsgDisplayMessageInFolderTab(aMsgHdr);
     } else {
       let args = { msgHdr: aMsgHdr };
       args.wrappedJSObject = args;
       Services.ww.openWindow(
         null,
-        "chrome://messenger/content/",
+        "chrome://messenger/content/messenger.xhtml",
         "",
         "all,chrome,dialog=no,status,toolbar",
         args
       );
     }
   },
 
   /**
--- a/mail/base/modules/SessionStoreManager.jsm
+++ b/mail/base/modules/SessionStoreManager.jsm
@@ -105,17 +105,17 @@ var SessionStoreManager = {
     // whether to restore the other windows, just like Firefox does.
 
     if (!this._initialState || !this._initialState.windows || !aWindow) {
       return;
     }
 
     for (var i = 0; i < this._initialState.windows.length; ++i) {
       aWindow.open(
-        "chrome://messenger/content/messenger.xul",
+        "chrome://messenger/content/messenger.xhtml",
         "_blank",
         "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"
       );
     }
   },
 
   /**
    * Writes the state object to disk.
--- a/mail/base/test/browser/browser.ini
+++ b/mail/base/test/browser/browser.ini
@@ -7,9 +7,9 @@ prefs =
   mail.spotlight.firstRunDone=true
   mail.winsearch.firstRunDone=true
   mailnews.start_page.override_url=about:blank
   mailnews.start_page.url=about:blank
 subsuite = thunderbird
 
 [browser_menulist.js]
 skip-if = os == 'mac'
-support-files = files/menulist.xul
+support-files = files/menulist.xhtml
--- a/mail/base/test/browser/browser_menulist.js
+++ b/mail/base/test/browser/browser_menulist.js
@@ -1,12 +1,12 @@
 /* import-globals-from ../../content/utilityOverlay.js */
 
 add_task(async () => {
-  let TEST_DOCUMENT_URL = getRootDirectory(gTestPath) + "files/menulist.xul";
+  let TEST_DOCUMENT_URL = getRootDirectory(gTestPath) + "files/menulist.xhtml";
   let testDocument = await new Promise(resolve => {
     Services.obs.addObserver(function documentLoaded(subject) {
       if (subject.URL == TEST_DOCUMENT_URL) {
         Services.obs.removeObserver(documentLoaded, "chrome-document-loaded");
         resolve(subject);
       }
     }, "chrome-document-loaded");
     openContentTab(TEST_DOCUMENT_URL);
--- a/mail/components/AboutRedirector.jsm
+++ b/mail/components/AboutRedirector.jsm
@@ -28,17 +28,17 @@ AboutRedirector.prototype = {
       url: "chrome://messenger/content/about-support/aboutSupport.xhtml",
       flags: Ci.nsIAboutModule.ALLOW_SCRIPT,
     },
     preferences: {
       url: "chrome://messenger/content/preferences/aboutPreferences.xhtml",
       flags: Ci.nsIAboutModule.ALLOW_SCRIPT,
     },
     downloads: {
-      url: "chrome://messenger/content/downloads/aboutDownloads.xul",
+      url: "chrome://messenger/content/downloads/aboutDownloads.xhtml",
       flags: Ci.nsIAboutModule.ALLOW_SCRIPT,
     },
     policies: {
       url: "chrome://messenger/content/policies/aboutPolicies.xhtml",
       flags: Ci.nsIAboutModule.ALLOW_SCRIPT,
     },
   },
 
--- a/mail/components/MailGlue.jsm
+++ b/mail/components/MailGlue.jsm
@@ -104,17 +104,17 @@ MailGlue.prototype = {
       Services.scriptloader.loadSubScript(
         "chrome://communicator/content/contentAreaClick.js",
         domWindow
       );
     }
 
     ExtensionSupport.registerWindowListener("Thunderbird-internal-Toolbox", {
       chromeURLs: [
-        "chrome://devtools/content/framework/toolbox-process-window.xul",
+        "chrome://devtools/content/framework/toolbox-process-window.xhtml",
       ],
       onLoadWindow: _setupToolbox,
     });
 
     ActorManagerParent.addActors(ACTORS);
     ActorManagerParent.flush();
   },
 
@@ -157,17 +157,17 @@ MailGlue.prototype = {
       case "mail-startup-done":
         this._onMailStartupDone();
         break;
       case "handle-xul-text-link":
         this._handleLink(aSubject, aData);
         break;
       case "chrome-document-global-created":
         // Set up lwt, but only if the "lightweightthemes" attr is set on the root
-        // (i.e. in messenger.xul).
+        // (i.e. in messenger.xhtml).
         aSubject.addEventListener(
           "DOMContentLoaded",
           () => {
             if (
               aSubject.document.documentElement.hasAttribute(
                 "lightweightthemes"
               )
             ) {
@@ -176,17 +176,17 @@ MailGlue.prototype = {
           },
           { once: true }
         );
         break;
       case "document-element-inserted":
         let doc = aSubject;
         if (
           doc.nodePrincipal.isSystemPrincipal &&
-          (doc.contentType == "application/vnd.mozilla.xul+xml" ||
+          (doc.contentType == "application/vnd.mozilla.xhtml+xml" ||
             doc.contentType == "application/xhtml+xml" ||
             doc.contentType == "text/html") &&
           // People shouldn't be using our built-in custom elements in
           // system-principal about:blank anyway, and trying to support that
           // causes responsiveness regressions.  So let's not support it.
           doc.URL != "about:blank"
         ) {
           Services.scriptloader.loadSubScript(
@@ -208,17 +208,17 @@ MailGlue.prototype = {
 
     // handle any migration work that has to happen at profile startup
     await MailMigrator.migrateAtProfileStartup();
 
     // check if we're in safe mode
     if (Services.appinfo.inSafeMode) {
       Services.ww.openWindow(
         null,
-        "chrome://messenger/content/safeMode.xul",
+        "chrome://messenger/content/safeMode.xhtml",
         "_blank",
         "chrome,centerscreen,modal,resizable=no",
         null
       );
     }
 
     AddonManager.maybeInstallBuiltinAddon(
       "thunderbird-compact-light@mozilla.org",
@@ -277,17 +277,17 @@ MailGlue.prototype = {
           linkHandled.data = true;
           return;
         }
       }
 
       // If we didn't have an open 3 pane window, try and open one.
       Services.ww.openWindow(
         null,
-        "chrome://messenger/content/",
+        "chrome://messenger/content/messenger.xhtml",
         "_blank",
         "chrome,dialog=no,all",
         { type: "contentTab", tabParams }
       );
       linkHandled.data = true;
     }
   },
 
--- a/mail/components/MessengerContentHandler.jsm
+++ b/mail/components/MessengerContentHandler.jsm
@@ -194,33 +194,33 @@ MailDefaultHandler.prototype = {
                 } else {
                   // Bug 277798 - we have to pass an argument to openWindow(), or
                   // else it won't honor the dialog=no instruction.
                   let argstring = Cc[
                     "@mozilla.org/supports-string;1"
                   ].createInstance(Ci.nsISupportsString);
                   Services.ww.openWindow(
                     null,
-                    "chrome://messenger/content/",
+                    "chrome://messenger/content/messenger.xhtml",
                     "_blank",
                     "chrome,dialog=no,all",
                     argstring
                   );
                 }
                 break;
               }
               case "composemessage": {
                 let argstring = Cc[
                   "@mozilla.org/supports-string;1"
                 ].createInstance(Ci.nsISupportsString);
                 remoteParams.shift();
                 argstring.data = remoteParams.join(",");
                 Services.ww.openWindow(
                   null,
-                  "chrome://messenger/content/messengercompose/messengercompose.xul",
+                  "chrome://messenger/content/messengercompose/messengercompose.xhtml",
                   "_blank",
                   "chrome,dialog=no,all",
                   argstring
                 );
                 break;
               }
               default:
                 throw Cr.NS_ERROR_ABORT;
@@ -280,17 +280,17 @@ MailDefaultHandler.prototype = {
       let instantApply = Services.prefs.getBoolPref(
         "browser.preferences.instantApply"
       );
       let features =
         "chrome,titlebar,toolbar" + (instantApply ? ",dialog=no" : ",modal");
 
       Services.ww.openWindow(
         null,
-        "chrome://messenger/content/preferences/preferences.xul",
+        "chrome://messenger/content/preferences/preferences.xhtml",
         "_blank",
         features,
         null
       );
     }
 
     // The URI might be passed as the argument to the file parameter
     uri = cmdLine.handleFlagWithParam("file", false);
@@ -367,17 +367,17 @@ MailDefaultHandler.prototype = {
             .QueryInterface(Ci.nsIFileURL);
           fileURL = fileURL
             .mutate()
             .setQuery("type=application/x-message-display")
             .finalize();
 
           Services.ww.openWindow(
             null,
-            "chrome://messenger/content/messageWindow.xul",
+            "chrome://messenger/content/messageWindow.xhtml",
             "_blank",
             "all,chrome,dialog=no,status,toolbar",
             fileURL
           );
           cmdLine.preventDefault = true;
         } else {
           let bundle = Services.strings.createBundle(
             "chrome://messenger/locale/messenger.properties"
@@ -410,17 +410,17 @@ MailDefaultHandler.prototype = {
 
               let data = NetUtil.readInputStreamToString(
                 inputStream,
                 inputStream.available()
               );
               let card = MailServices.ab.escapedVCardToAbCard(data);
               Services.ww.openWindow(
                 null,
-                "chrome://messenger/content/addressbook/abNewCardDialog.xul",
+                "chrome://messenger/content/addressbook/abNewCardDialog.xhtml",
                 "_blank",
                 "chrome,resizable=no,titlebar,modal,centerscreen",
                 card
               );
             }
           );
         }
       } else {
@@ -458,17 +458,17 @@ MailDefaultHandler.prototype = {
       }
     } else {
       var argstring = Cc["@mozilla.org/supports-string;1"].createInstance(
         Ci.nsISupportsString
       );
 
       Services.ww.openWindow(
         null,
-        "chrome://messenger/content/",
+        "chrome://messenger/content/messenger.xhtml",
         "_blank",
         "chrome,dialog=no,all",
         argstring
       );
     }
   },
   /* eslint-enable complexity */
 
--- a/mail/components/accountcreation/content/emailWizard.js
+++ b/mail/components/accountcreation/content/emailWizard.js
@@ -1788,20 +1788,20 @@ EmailConfigWizard.prototype = {
 
     let existingAccountManager = Services.wm.getMostRecentWindow(
       "mailnews:accountmanager"
     );
     if (existingAccountManager) {
       existingAccountManager.focus();
     } else {
       window.openDialog(
-        "chrome://messenger/content/AccountManager.xul",
+        "chrome://messenger/content/AccountManager.xhtml",
         "AccountManager",
         "chrome,centerscreen,modal,titlebar",
-        { server: newAccount.incomingServer, selectPage: "am-server.xul" }
+        { server: newAccount.incomingServer, selectPage: "am-server.xhtml" }
       );
     }
     window.close();
   },
 
   /**
    * [Re-test] button click handler.
    * Restarts the config guessing process after a person editing the server
--- a/mail/components/accountcreation/jar.mn
+++ b/mail/components/accountcreation/jar.mn
@@ -1,17 +1,17 @@
 # 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/.
 
 messenger.jar:
   content/messenger/accountcreation/accountConfig.js      (content/accountConfig.js)
   content/messenger/accountcreation/createInBackend.js    (content/createInBackend.js)
   content/messenger/accountcreation/emailWizard.js        (content/emailWizard.js)
-  content/messenger/accountcreation/emailWizard.xul       (content/emailWizard.xul)
+  content/messenger/accountcreation/emailWizard.xhtml     (content/emailWizard.xhtml)
   content/messenger/accountcreation/exchangeAutoDiscover.js        (content/exchangeAutoDiscover.js)
   content/messenger/accountcreation/fetchConfig.js        (content/fetchConfig.js)
   content/messenger/accountcreation/fetchhttp.js          (content/fetchhttp.js)
   content/messenger/accountcreation/guessConfig.js        (content/guessConfig.js)
   content/messenger/accountcreation/readFromXML.js        (content/readFromXML.js)
   content/messenger/accountcreation/sanitizeDatatypes.js  (content/sanitizeDatatypes.js)
   content/messenger/accountcreation/util.js               (content/util.js)
   content/messenger/accountcreation/verifyConfig.js       (content/verifyConfig.js)
--- a/mail/components/activity/ActivityManagerUI.jsm
+++ b/mail/components/activity/ActivityManagerUI.jsm
@@ -1,17 +1,17 @@
 /* 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/. */
 
 var EXPORTED_SYMBOLS = ["ActivityManagerUI"];
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 
-const ACTIVITY_MANAGER_URL = "chrome://messenger/content/activity.xul";
+const ACTIVITY_MANAGER_URL = "chrome://messenger/content/activity.xhtml";
 
 function ActivityManagerUI() {}
 
 ActivityManagerUI.prototype = {
   show(aWindowContext, aID) {
     // First we see if it is already visible
     let window = this.recentWindow;
     if (window) {
--- a/mail/components/activity/jar.mn
+++ b/mail/components/activity/jar.mn
@@ -1,8 +1,8 @@
 # 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/.
 
 messenger.jar:
   content/messenger/activity.js (content/activity.js)
   content/messenger/activity-widgets.js (content/activity-widgets.js)
-* content/messenger/activity.xul (content/activity.xul)
+* content/messenger/activity.xhtml (content/activity.xhtml)
--- a/mail/components/addrbook/content/abCommon.js
+++ b/mail/components/addrbook/content/abCommon.js
@@ -208,26 +208,26 @@ function SendCommandToResultsPane(comman
 
   // if we are sending the command so the results pane
   // we should focus the results pane
   gAbResultsTree.focus();
 }
 
 function AbNewLDAPDirectory() {
   window.docShell.rootTreeItem.domWindow.openDialog(
-    "chrome://messenger/content/addressbook/pref-directory-add.xul",
+    "chrome://messenger/content/addressbook/pref-directory-add.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     null
   );
 }
 
 function AbNewAddressBook() {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abAddressBookNameDialog.xul",
+    "chrome://messenger/content/addressbook/abAddressBookNameDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     null
   );
 }
 
 function AbEditSelectedDirectory() {
   let selectedDir = getSelectedDirectory();
@@ -755,52 +755,52 @@ function ChangeDirectoryByURI(uri = kPer
 }
 
 function AbNewList() {
   goNewListDialog(getSelectedDirectoryURI());
 }
 
 function goNewListDialog(selectedAB) {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abMailListDialog.xul",
+    "chrome://messenger/content/addressbook/abMailListDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     { selectedAB }
   );
 }
 
 function goEditListDialog(abCard, listURI) {
   let params = {
     abCard,
     listURI,
     refresh: false, // This is an out param, true if OK in dialog is clicked.
   };
   window.openDialog(
-    "chrome://messenger/content/addressbook/abEditListDialog.xul",
+    "chrome://messenger/content/addressbook/abEditListDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     params
   );
   if (params.refresh) {
     ChangeDirectoryByURI(listURI); // force refresh
   }
 }
 
 function goNewCardDialog(selectedAB) {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abNewCardDialog.xul",
+    "chrome://messenger/content/addressbook/abNewCardDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     { selectedAB }
   );
 }
 
 function goEditCardDialog(abURI, card) {
   window.openDialog(
-    "chrome://messenger/content/addressbook/abEditCardDialog.xul",
+    "chrome://messenger/content/addressbook/abEditCardDialog.xhtml",
     "",
     "chrome,modal,resizable=no,centerscreen",
     { abURI, card }
   );
 }
 
 function setSortByMenuItemCheckState(id, value) {
   var menuitem = document.getElementById(id);
--- a/mail/components/addrbook/content/abEditCardDialog.xhtml
+++ b/mail/components/addrbook/content/abEditCardDialog.xhtml
@@ -19,12 +19,12 @@
   <stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
 
   <script src="chrome://messenger/content/addressbook/abCommon.js"/>
   <script src="chrome://messenger/content/addressbook/abCard.js"/>
   <script><![CDATA[
     document.addEventListener("dialogcancel", EditCardCancelButton);
   ]]></script>
 
-#include abCard.inc.xul
+#include abCard.inc.xhtml
 
 </dialog>
 </window>
--- a/mail/components/addrbook/content/abNewCardDialog.xhtml
+++ b/mail/components/addrbook/content/abNewCardDialog.xhtml
@@ -32,12 +32,12 @@
 
   <hbox align="center">
     <label id="abPopupLabel" control="abPopup" value="&chooseAddressBook.label;" accesskey="&chooseAddressBook.accesskey;"/>
     <menulist is="menulist-addrbooks" id="abPopup" writable="true"/>
   </hbox>
 
   <spacer style="height:1em"/>
 
-#include abCard.inc.xul
+#include abCard.inc.xhtml
 
 </dialog>
 </window>
--- a/mail/components/addrbook/content/addressbook.js
+++ b/mail/components/addrbook/content/addressbook.js
@@ -368,17 +368,17 @@ function AbPrintCardInternal(doPrintPrev
     let card = selectedItems[i];
     let printCardUrl = CreatePrintCardUrl(card);
     if (printCardUrl) {
       selectionArray.push(printCardUrl);
     }
   }
 
   window.openDialog(
-    "chrome://messenger/content/msgPrintEngine.xul",
+    "chrome://messenger/content/msgPrintEngine.xhtml",
     "",
     "chrome,dialog=no,all",
     selectionArray.length,
     selectionArray,
     statusFeedback,
     doPrintPreview,
     msgType
   );
@@ -413,17 +413,17 @@ function AbPrintAddressBookInternal(doPr
     "addbook://jsaddrbook/abook.sqlite?action=print"
    */
 
   var abURIArr = uri.split("://");
   var printUrl =
     "addbook://" + abURIArr[0] + "/" + abURIArr[1] + "?action=print";
 
   window.openDialog(
-    "chrome://messenger/content/msgPrintEngine.xul",
+    "chrome://messenger/content/msgPrintEngine.xhtml",
     "",
     "chrome,dialog=no,all",
     1,
     [printUrl],
     statusFeedback,
     doPrintPreview,
     msgType
   );
@@ -567,17 +567,17 @@ function onAdvancedAbSearch() {
 
   let existingSearchWindow = Services.wm.getMostRecentWindow(
     "mailnews:absearch"
   );
   if (existingSearchWindow) {
     existingSearchWindow.focus();
   } else {
     window.openDialog(
-      "chrome://messenger/content/ABSearchDialog.xul",
+      "chrome://messenger/content/ABSearchDialog.xhtml",
       "",
       "chrome,resizable,status,centerscreen,dialog=no",
       { directory: selectedDirURI }
     );
   }
 }
 
 function onEnterInSearchBar() {
@@ -812,17 +812,17 @@ function AbIMSelected() {
     let win = Services.wm.getMostRecentWindow("mail:3pane");
 
     if (win) {
       win.focus();
       win.showChatTab();
       win.chatHandler.focusConversation(uiConv);
     } else {
       window.openDialog(
-        "chrome://messenger/content/",
+        "chrome://messenger/content/messenger.xhtml",
         "_blank",
         "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar",
         null,
         { tabType: "chat", tabParams: { convType: "focus", conv: uiConv } }
       );
     }
 
     return;
--- a/mail/components/addrbook/content/addressbook.xhtml
+++ b/mail/components/addrbook/content/addressbook.xhtml
@@ -627,21 +627,21 @@
                       accesskey="&preferencesCmd2.accesskey;"
                       command="cmd_preferences"/>
 #endif
 #endif
           </menupopup>
         </menu>
 
 #ifdef XP_MACOSX
-#include ../../../base/content/macWindowMenu.inc.xul
+#include ../../../base/content/macWindowMenu.inc.xhtml
 #endif
 
       <!-- Help -->
-#include ../../../base/content/helpMenu.inc.xul
+#include ../../../base/content/helpMenu.inc.xhtml
     </menubar>
    </toolbaritem>
   </toolbar>
 
   <toolbarpalette id="AddressBookToolbarPalette">
       <toolbarbutton class="toolbarbutton-1" id="button-newcard"
                      label="&newContactButton.label;" command="cmd_newCard"
                      tooltiptext="&newContactButton.tooltip;"/>
--- a/mail/components/addrbook/jar.mn
+++ b/mail/components/addrbook/jar.mn
@@ -1,18 +1,18 @@
 # 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/.
 
 messenger.jar:
     content/messenger/addressbook/abCardView.js                 (content/abCardView.js)
     content/messenger/addressbook/addressbook.js                (content/addressbook.js)
-*   content/messenger/addressbook/addressbook.xul               (content/addressbook.xul)
+*   content/messenger/addressbook/addressbook.xhtml             (content/addressbook.xhtml)
     content/messenger/addressbook/abCommon.js                   (content/abCommon.js)
     content/messenger/addressbook/abCard.js                     (content/abCard.js)
-*   content/messenger/addressbook/abEditCardDialog.xul          (content/abEditCardDialog.xul)
-    content/messenger/addressbook/abEditListDialog.xul          (content/abEditListDialog.xul)
-    content/messenger/addressbook/abMailListDialog.xul          (content/abMailListDialog.xul)
-*   content/messenger/addressbook/abNewCardDialog.xul           (content/abNewCardDialog.xul)
-    content/messenger/addressbook/abContactsPanel.xul           (content/abContactsPanel.xul)
+*   content/messenger/addressbook/abEditCardDialog.xhtml        (content/abEditCardDialog.xhtml)
+    content/messenger/addressbook/abEditListDialog.xhtml        (content/abEditListDialog.xhtml)
+    content/messenger/addressbook/abMailListDialog.xhtml        (content/abMailListDialog.xhtml)
+*   content/messenger/addressbook/abNewCardDialog.xhtml         (content/abNewCardDialog.xhtml)
+    content/messenger/addressbook/abContactsPanel.xhtml         (content/abContactsPanel.xhtml)
     content/messenger/addressbook/abContactsPanel.js            (content/abContactsPanel.js)
     content/messenger/addressbook/abTrees.js                    (content/abTrees.js)
     content/messenger/addressbook/menulist-addrbooks.js         (content/menulist-addrbooks.js)
--- a/mail/components/cloudfile/jar.mn
+++ b/mail/components/cloudfile/jar.mn
@@ -1,8 +1,8 @@
 # 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/.
 
 messenger.jar:
     content/messenger/cloudfile/selectDialog.css              (content/selectDialog.css)
     content/messenger/cloudfile/selectDialog.js               (content/selectDialog.js)
-    content/messenger/cloudfile/selectDialog.xul              (content/selectDialog.xul)
+    content/messenger/cloudfile/selectDialog.xhtml            (content/selectDialog.xhtml)
--- a/mail/components/cloudfile/test/browser/browser_repeat_upload.js
+++ b/mail/components/cloudfile/test/browser/browser_repeat_upload.js
@@ -71,17 +71,17 @@ add_task(async () => {
         { once: true }
       );
     }
     Services.ww.registerNotification(onWindowOpen);
     composeMsgByType(Ci.nsIMsgCompType.New);
   });
   is(
     composeWindow.location.href,
-    "chrome://messenger/content/messengercompose/messengercompose.xul"
+    "chrome://messenger/content/messengercompose/messengercompose.xhtml"
   );
   let composeDocument = composeWindow.document;
 
   // Compose window loaded.
   // Check the attach dropdown has our account as a <menuitem>.
 
   let toolbarButton = composeDocument.getElementById("button-attach");
   let rect = toolbarButton.getBoundingClientRect();
--- a/mail/components/compose/content/ComposerCommands.js
+++ b/mail/components/compose/content/ComposerCommands.js
@@ -1888,17 +1888,17 @@ function Publish(publishData) {
 
   try {
     // We launch dialog as a dependent
     // Don't allow editing document!
     SetDocumentEditable(false);
 
     // Start progress monitoring
     gProgressDialog = window.openDialog(
-      "chrome://messenger/content/messengercompose/EditorPublishProgress.xul",
+      "chrome://messenger/content/messengercompose/EditorPublishProgress.xhtml",
       "_blank",
       "chrome,dependent,titlebar",
       gPublishData,
       gPersistObj
     );
   } catch (e) {}
 
   // Network transfer is often too quick for the progress dialog to be initialized
@@ -2119,17 +2119,17 @@ var nsFindReplaceCommand = {
     return editorElement.getEditor(editorElement.contentWindow) != null;
   },
 
   getCommandStateParams(aCommand, aParams, editorElement) {},
   doCommandParams(aCommand, aParams, editorElement) {},
 
   doCommand(aCommand, editorElement) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdReplace.xul",
+      "chrome://messenger/content/messengercompose/EdReplace.xhtml",
       "_blank",
       "chrome,modal,titlebar",
       editorElement
     );
   },
 };
 
 var nsFindCommand = {
@@ -2192,17 +2192,17 @@ var nsSpellingCommand = {
 
   doCommand(aCommand) {
     window.cancelSendMessage = false;
     try {
       var skipBlockQuotes =
         window.document.documentElement.getAttribute("windowtype") ==
         "msgcompose";
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdSpellCheck.xul",
+        "chrome://messenger/content/messengercompose/EdSpellCheck.xhtml",
         "_blank",
         "dialog,close,titlebar,modal,resizable",
         false,
         skipBlockQuotes,
         true
       );
     } catch (ex) {}
   },
@@ -2213,17 +2213,17 @@ var nsImageCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdImageProps.xul",
+      "chrome://messenger/content/messengercompose/EdImageProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsHLineCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -2246,17 +2246,17 @@ var nsHLineCommand = {
       hLine = editor.getSelectedElement(tagName);
     } catch (e) {
       return;
     }
 
     if (hLine) {
       // We only open the dialog for an existing HRule
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdHLineProps.xul",
+        "chrome://messenger/content/messengercompose/EdHLineProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     } else {
       try {
         hLine = editor.createElementWithDefaults(tagName);
 
         // We change the default attributes to those saved in the user prefs
@@ -2300,25 +2300,25 @@ var nsLinkCommand = {
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     // If selected element is an image, launch that dialog instead
     // since last tab panel handles link around an image
     var element = GetObjectForProperties();
     if (element && element.nodeName.toLowerCase() == "img") {
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdImageProps.xul",
+        "chrome://messenger/content/messengercompose/EdImageProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         null,
         true
       );
     } else {
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdLinkProps.xul",
+        "chrome://messenger/content/messengercompose/EdLinkProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     }
   },
 };
 
 var nsAnchorCommand = {
@@ -2326,17 +2326,17 @@ var nsAnchorCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdNamedAnchorProps.xul",
+      "chrome://messenger/content/messengercompose/EdNamedAnchorProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       ""
     );
   },
 };
 
 var nsInsertHTMLWithDialogCommand = {
@@ -2344,17 +2344,17 @@ var nsInsertHTMLWithDialogCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdInsSrc.xul",
+      "chrome://messenger/content/messengercompose/EdInsSrc.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable",
       ""
     );
   },
 };
 
 var nsInsertMathWithDialogCommand = {
@@ -2362,17 +2362,17 @@ var nsInsertMathWithDialogCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdInsertMath.xul",
+      "chrome://messenger/content/messengercompose/EdInsertMath.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable",
       ""
     );
   },
 };
 
 var nsInsertCharsCommand = {
@@ -2423,17 +2423,17 @@ var nsListPropertiesCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdListProps.xul",
+      "chrome://messenger/content/messengercompose/EdListProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal"
     );
   },
 };
 
 var nsObjectPropertiesCommand = {
   isCommandEnabled(aCommand, dummy) {
@@ -2599,17 +2599,17 @@ var nsSetSmiley = {
   },
   // This is now deprecated in favor of "doCommandParams"
   doCommand(aCommand) {},
 };
 
 function doAdvancedProperties(element) {
   if (element) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdAdvancedEdit.xul",
+      "chrome://messenger/content/messengercompose/EdAdvancedEdit.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable=yes",
       "",
       element
     );
   }
 }
 
@@ -2618,17 +2618,17 @@ var nsColorPropertiesCommand = {
     return IsDocumentEditable() && IsEditingRenderedHTML();
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdColorProps.xul",
+      "chrome://messenger/content/messengercompose/EdColorProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       ""
     );
     UpdateDefaultColors();
   },
 };
 
@@ -3179,15 +3179,15 @@ var nsConvertToTable = {
   },
 
   getCommandStateParams(aCommand, aParams, aRefCon) {},
   doCommandParams(aCommand, aParams, aRefCon) {},
 
   doCommand(aCommand) {
     if (this.isCommandEnabled()) {
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdConvertToTable.xul",
+        "chrome://messenger/content/messengercompose/EdConvertToTable.xhtml",
         "_blank",
         "chrome,close,titlebar,modal"
       );
     }
   },
 };
--- a/mail/components/compose/content/MsgComposeCommands.js
+++ b/mail/components/compose/content/MsgComposeCommands.js
@@ -982,17 +982,17 @@ var defaultController = {
         return true;
       },
       doCommand() {
         window.cancelSendMessage = false;
         var skipBlockQuotes =
           window.document.documentElement.getAttribute("windowtype") ==
           "msgcompose";
         window.openDialog(
-          "chrome://messenger/content/messengercompose/EdSpellCheck.xul",
+          "chrome://messenger/content/messengercompose/EdSpellCheck.xhtml",
           "_blank",
           "dialog,close,titlebar,modal,resizable",
           false,
           skipBlockQuotes,
           true
         );
       },
     },
@@ -3710,17 +3710,17 @@ function GenericSendMessage(msgType) {
     // Do we need to check the spelling?
     if (DoSpellCheckBeforeSend()) {
       // We disable spellcheck for the following -subject line, attachment
       // pane, identity and addressing widget therefore we need to explicitly
       // focus on the mail body when we have to do a spellcheck.
       SetMsgBodyFrameFocus();
       window.cancelSendMessage = false;
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdSpellCheck.xul",
+        "chrome://messenger/content/messengercompose/EdSpellCheck.xhtml",
         "_blank",
         "dialog,close,titlebar,modal,resizable",
         true,
         true,
         false
       );
 
       if (window.cancelSendMessage) {
@@ -3851,17 +3851,17 @@ function GenericSendMessage(msgType) {
           ? Ci.nsIMsgCompSendFormat.AskUser
           : Ci.nsIMsgCompSendFormat.PlainText;
       var result2 = {
         action: recommAction,
         convertible: convert,
         abort: false,
       };
       window.openDialog(
-        "chrome://messenger/content/messengercompose/askSendFormat.xul",
+        "chrome://messenger/content/messengercompose/askSendFormat.xhtml",
         "askSendFormatDialog",
         "chrome,modal,titlebar,centerscreen",
         result2
       );
       if (result2.abort) {
         return;
       }
       action = result2.action;
@@ -7083,21 +7083,21 @@ function GetMsgAttachmentElement() {
 
 /**
  * Get an element by ID in the current sidebar browser document.
  *
  * @param aId {string}       the ID of the element to get
  * @param aWindowId {string} the ID of a <window> in the sidebar <browser>;
  *                           only return the element if the window exists.
  *                           Assuming unique window ids and that there there can
- *                           only ever be one <window> in a <browser>'s src.xul
+ *                           only ever be one <window> in a <browser>'s src.xhtml
  *                           (documentation is pretty poor), that means that the
  *                           element will only be returned if it is found in the
- *                           same src.xul as the window (as opposed to any
- *                           src.xul / window currently displayed in the sidebar
+ *                           same src.xhtml as the window (as opposed to any
+ *                           src.xhtml / window currently displayed in the sidebar
  *                           browser).
  */
 function sidebarDocumentGetElementById(aId, aWindowId) {
   let sidebarDocument = document.getElementById("sidebar").contentDocument;
   if (aWindowId) {
     if (sidebarDocument.getElementById(aWindowId)) {
       return sidebarDocument.getElementById(aId);
     }
@@ -7245,17 +7245,17 @@ function sidebarCloseButtonOnCommand() {
  * and optionally focus peopleSearchInput when shown.
  *
  * @param {Boolean} aFocus  Whether to focus peopleSearchInput after the sidebar
  *                          is shown. If omitted, defaults to true.
  */
 function toggleAddressPicker(aFocus = true) {
   // Caveat: This function erroneously assumes that only abContactsPanel can
   // be shown in the sidebar browser, so it will fail if any other src is shown
-  // as we do not reliably enforce abContactsPanel.xul as src of the sidebar
+  // as we do not reliably enforce abContactsPanel.xhtml as src of the sidebar
   // <browser>. Currently we don't show anything else in the sidebar, but
   // add-ons might.
   let sidebarBox = document.getElementById("sidebar-box");
   let sidebarSplitter = document.getElementById("sidebar-splitter");
   let sidebar = document.getElementById("sidebar");
   let sidebarAddrMenu = document.getElementById("menu_AddressSidebar");
   let contactsButton = document.getElementById("button-contacts");
 
@@ -7276,17 +7276,17 @@ function toggleAddressPicker(aFocus = tr
     // opens it, do we set and load the src URL for contacts sidebar.
     if (sidebarUrl == "") {
       // sidebarUrl not yet set, load contacts side bar and focus the search
       // input if applicable: We pass "?focus" as a URL querystring, then via
       // onload event of <window id="abContactsPanel">, in AbPanelLoad() of
       // abContactsPanel.js, we do the focusing first thing to avoid timing
       // issues when trying to focus from here while contacts side bar is still
       // loading.
-      let url = "chrome://messenger/content/addressbook/abContactsPanel.xul";
+      let url = "chrome://messenger/content/addressbook/abContactsPanel.xhtml";
       if (aFocus) {
         url += "?focus";
       }
       sidebar.setAttribute("src", url);
     } else if (aFocus) {
       // sidebarUrl already set, so we can focus immediately if applicable.
       focusContactsSidebarSearchInput();
     }
--- a/mail/components/compose/content/bigFileObserver.js
+++ b/mail/components/compose/content/bigFileObserver.js
@@ -230,17 +230,17 @@ var gBigFileObserver = {
         list: names,
         icons,
         selected: -1,
         ok: false,
       };
 
       let propBag = PromptUtils.objectToPropBag(args);
       openDialog(
-        "chrome://messenger/content/cloudfile/selectDialog.xul",
+        "chrome://messenger/content/cloudfile/selectDialog.xhtml",
         "_blank",
         "centerscreen,chrome,modal,titlebar",
         propBag
       );
       PromptUtils.propBagToObject(propBag, args);
 
       if (args.ok) {
         account = accounts[args.selected];
--- a/mail/components/compose/content/dialogs/EdColorProps.js
+++ b/mail/components/compose/content/dialogs/EdColorProps.js
@@ -215,17 +215,17 @@ function GetColorAndUpdate(ColorWellID) 
       break;
     case "backgroundCW":
       colorObj.Type = "Page";
       colorObj.PageColor = customBackgroundColor;
       break;
   }
 
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdColorPicker.xul",
+    "chrome://messenger/content/messengercompose/EdColorPicker.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     colorObj
   );
 
   // User canceled the dialog
   if (colorObj.Cancel) {
--- a/mail/components/compose/content/dialogs/EdDialogCommon.js
+++ b/mail/components/compose/content/dialogs/EdDialogCommon.js
@@ -307,17 +307,17 @@ function InitPixelOrPercentMenulist(
 function onAdvancedEdit() {
   // First validate data from widgets in the "simpler" property dialog
   if (ValidateData()) {
     // Set true if OK is clicked in the Advanced Edit dialog
     window.AdvancedEditOK = false;
     // Open the AdvancedEdit dialog, passing in the element to be edited
     //  (the copy named "globalElement")
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdAdvancedEdit.xul",
+      "chrome://messenger/content/messengercompose/EdAdvancedEdit.xhtml",
       "_blank",
       "chrome,close,titlebar,modal,resizable=yes",
       "",
       globalElement
     );
     window.focus();
     if (window.AdvancedEditOK) {
       // Copy edited attributes to the dialog widgets:
@@ -509,17 +509,17 @@ function SetRelativeCheckbox(checkbox) {
       //  to be ok to try to make absolute
       enable = true;
     }
   }
 
   SetElementEnabled(checkbox, enable);
 }
 
-// oncommand handler for the Relativize checkbox in EditorOverlay.xul
+// oncommand handler for the Relativize checkbox in EditorOverlay.xhtml
 function MakeInputValueRelativeOrAbsolute(checkbox) {
   var input = document.getElementById(checkbox.getAttribute("for"));
   if (!input) {
     return;
   }
 
   var docUrl = GetDocumentBaseUrl();
   if (!docUrl) {
--- a/mail/components/compose/content/dialogs/EdImageProps.js
+++ b/mail/components/compose/content/dialogs/EdImageProps.js
@@ -275,17 +275,17 @@ function onAccept(event) {
   gDoAltTextError = false;
 
   event.preventDefault();
 }
 
 function onLinkAdvancedEdit() {
   window.AdvancedEditOK = false;
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdAdvancedEdit.xul",
+    "chrome://messenger/content/messengercompose/EdAdvancedEdit.xhtml",
     "_blank",
     "chrome,close,titlebar,modal,resizable=yes",
     "",
     gLinkElement
   );
   window.focus();
   if (window.AdvancedEditOK) {
     gDialog.hrefInput.value = gLinkElement.getAttribute("href");
--- a/mail/components/compose/content/dialogs/EdImageProps.xhtml
+++ b/mail/components/compose/content/dialogs/EdImageProps.xhtml
@@ -37,17 +37,17 @@
   <tabbox id="TabBox">
     <tabs flex="1">
       <tab id="imageLocationTab" label="&imageLocationTab.label;"/>
       <tab id="imageDimensionsTab" label="&imageDimensionsTab.label;"/>
       <tab id="imageAppearanceTab" label="&imageAppearanceTab.label;"/>
       <tab id="imageLinkTab" label="&imageLinkTab.label;"/>
     </tabs>
     <tabpanels>
-#include edImage.inc.xul
+#include edImage.inc.xhtml
       <vbox>
         <spacer class="spacer"/>
         <vbox id="LinkLocationBox">
           <label id="hrefLabel"
                  control="hrefInput"
                  accesskey="&LinkURLEditField2.accessKey;"
                  width="1">&LinkURLEditField2.label;</label>
           <html:input id="hrefInput" type="text"
--- a/mail/components/compose/content/dialogs/EdInsertTOC.js
+++ b/mail/components/compose/content/dialogs/EdInsertTOC.js
@@ -23,17 +23,17 @@ const kMozToc = "mozToc";
 const kMozTocLength = 6;
 const kMozTocIdPrefix = "mozTocId";
 const kMozTocIdPrefixLength = 8;
 const kMozTocClassPrefix = "mozToc";
 const kMozTocClassPrefixLength = 6;
 
 document.addEventListener("dialogaccept", () => BuildTOC(true));
 
-// Startup() is called when EdInsertTOC.xul is opened
+// Startup() is called when EdInsertTOC.xhtml is opened
 function Startup() {
   // early way out if if we have no editor
   if (!GetCurrentEditor()) {
     window.close();
     return;
   }
 
   var i;
--- a/mail/components/compose/content/dialogs/EdSpellCheck.js
+++ b/mail/components/compose/content/dialogs/EdSpellCheck.js
@@ -334,17 +334,17 @@ function AddToDictionary() {
   if (gMisspelledWord) {
     gSpellChecker.AddWordToDictionary(gMisspelledWord);
   }
   NextWord();
 }
 
 function EditDictionary() {
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdDictionary.xul",
+    "chrome://messenger/content/messengercompose/EdDictionary.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     gMisspelledWord
   );
 }
 
 function SelectLanguage() {
--- a/mail/components/compose/content/dialogs/EdTableProps.js
+++ b/mail/components/compose/content/dialogs/EdTableProps.js
@@ -523,17 +523,17 @@ function GetColorAndUpdate(ColorWellID) 
       colorObj.TableColor = gTableColor;
       break;
     case "cellBackgroundCW":
       colorObj.Type = "Cell";
       colorObj.CellColor = gCellColor;
       break;
   }
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdColorPicker.xul",
+    "chrome://messenger/content/messengercompose/EdColorPicker.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     "",
     colorObj
   );
 
   // User canceled the dialog
   if (colorObj.Cancel) {
--- a/mail/components/compose/content/editFormatButtons.inc.xhtml
+++ b/mail/components/compose/content/editFormatButtons.inc.xhtml
@@ -191,17 +191,17 @@
                       oncommand="doStatefulCommand('cmd_align', 'right')"
                       tooltiptext="&alignRightButton.tooltip;"   />
             <menuitem id="AlignJustifyItem" class="menuitem-iconic" label="&alignJustify.label;"
                       oncommand="doStatefulCommand('cmd_align', 'justify')"
                       tooltiptext="&alignJustifyButton.tooltip;" />
           </menupopup>
         </toolbarbutton>
 
-        <!-- InsertPopupButton is used by messengercompose.xul -->
+        <!-- InsertPopupButton is used by messengercompose.xhtml -->
         <toolbarbutton id="InsertPopupButton"
                        class="formatting-button"
                        tooltiptext="&InsertPopupButton.tooltip;"
                        type="menu"
                        observes="cmd_renderedHTMLEnabler">
           <menupopup id="InsertPopup">
             <menuitem id="InsertLinkItem" class="menuitem-iconic" observes="cmd_link"
                       oncommand="goDoCommand('cmd_link')" label="&linkToolbarCmd.label;"
--- a/mail/components/compose/content/editor.js
+++ b/mail/components/compose/content/editor.js
@@ -1205,17 +1205,17 @@ function EditorSelectColor(colorType, mo
 
   if (!useLastColor) {
     // Avoid the JS warning
     gColorObj.NoDefault = false;
 
     // Launch the ColorPicker dialog
     // TODO: Figure out how to position this under the color buttons on the toolbar
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdColorPicker.xul",
+      "chrome://messenger/content/messengercompose/EdColorPicker.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       "",
       gColorObj
     );
 
     // User canceled the dialog
     if (gColorObj.Cancel) {
@@ -2229,17 +2229,17 @@ function IsSelectionInOneCell() {
 }
 
 // Call this with insertAllowed = true to allow inserting if not in existing table,
 //   else use false to do nothing if not in a table
 function EditorInsertOrEditTable(insertAllowed) {
   if (IsInTable()) {
     // Edit properties of existing table
     window.openDialog(
-      "chrome://messenger/content/messengercompose/EdTableProps.xul",
+      "chrome://messenger/content/messengercompose/EdTableProps.xhtml",
       "_blank",
       "chrome,close,titlebar,modal",
       "",
       "TablePanel"
     );
     gContentWindow.focus();
   } else if (insertAllowed) {
     try {
@@ -2252,17 +2252,17 @@ function EditorInsertOrEditTable(insertA
       }
     } catch (e) {}
   }
 }
 
 function EditorInsertTable() {
   // Insert a new table
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdInsertTable.xul",
+    "chrome://messenger/content/messengercompose/EdInsertTable.xhtml",
     "_blank",
     "chrome,close,titlebar,modal",
     ""
   );
   gContentWindow.focus();
 }
 
 function EditorTableCellProperties() {
@@ -2270,17 +2270,17 @@ function EditorTableCellProperties() {
     return;
   }
 
   try {
     var cell = GetCurrentEditor().getElementOrParentByTagName("td", null);
     if (cell) {
       // Start Table Properties dialog on the "Cell" panel
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdTableProps.xul",
+        "chrome://messenger/content/messengercompose/EdTableProps.xhtml",
         "_blank",
         "chrome,close,titlebar,modal",
         "",
         "CellPanel"
       );
       gContentWindow.focus();
     }
   } catch (e) {}
@@ -2421,17 +2421,17 @@ function EditorFindOrCreateInsertCharWin
     // Since we switch the dialog during EditorOnFocus(),
     //   this should really never be found, but it's good to be sure
     var windowWithDialog = FindEditorWithInsertCharDialog();
     if (windowWithDialog) {
       SwitchInsertCharToThisWindow(windowWithDialog);
     } else {
       // The dialog will set window.InsertCharWindow to itself
       window.openDialog(
-        "chrome://messenger/content/messengercompose/EdInsertChars.xul",
+        "chrome://messenger/content/messengercompose/EdInsertChars.xhtml",
         "_blank",
         "chrome,close,titlebar",
         ""
       );
     }
   }
 }
 
@@ -2466,17 +2466,17 @@ function SwitchInsertCharToAnotherEditor
     }
     // Didn't find another editor - close the dialog
     window.InsertCharWindow.close();
   }
 }
 
 function UpdateTOC() {
   window.openDialog(
-    "chrome://messenger/content/messengercompose/EdInsertTOC.xul",
+    "chrome://messenger/content/messengercompose/EdInsertTOC.xhtml",
     "_blank",
     "chrome,close,modal,titlebar"
   );
   window.content.focus();
 }
 
 function InitTOCMenu() {
   var elt = GetCurrentEditor().document.getElementById("mozToc");
--- a/mail/components/compose/content/messengercompose.xhtml
+++ b/mail/components/compose/content/messengercompose.xhtml
@@ -811,17 +811,17 @@
                 label="&newMenu.label;" accesskey="&newMenu.accesskey;">
             <menupopup id="menu_NewPopup">
               <menuitem id="menu_NewMessage" class="menuitem-iconic"
                         label="&newMessage.label;" accesskey="&newMessage.accesskey;"
                         key="key_newMessage2" oncommand="goOpenNewMessage(event);"/>
               <menuseparator/>
               <menuitem id="menu_NewContact" label="&newContact.label;"
                         accesskey="&newContact.accesskey;" class="menuitem-iconic"
-                        oncommand="window.openDialog('chrome://messenger/content/addressbook/abNewCardDialog.xul', '', 'chrome,modal,resizable=no,centerscreen');"/>
+                        oncommand="window.openDialog('chrome://messenger/content/addressbook/abNewCardDialog.xhtml', '', 'chrome,modal,resizable=no,centerscreen');"/>
             </menupopup>
           </menu>
           <menu id="menu_Attach" label="&attachMenu.label;" accesskey="&attachMenu.accesskey;">
             <menupopup id="menu_AttachPopup" onpopupshowing="updateAttachmentItems();">
               <menuitem label="&attachFileCmd.label;" accesskey="&attachFileCmd.accesskey;"
                         key="key_attachFile" command="cmd_attachFile"/>
               <menu label="&attachCloudCmd.label;" accesskey="&attachCloudCmd.accesskey;"
                     command="cmd_attachCloud">
@@ -1748,21 +1748,21 @@
                       accesskey="&preferencesCmd2.accesskey;"
                       oncommand="openOptionsDialog('paneCompose');"/>
 #endif
 #endif
          </menupopup>
       </menu>
 
 #ifdef XP_MACOSX
-#include ../../../base/content/macWindowMenu.inc.xul
+#include ../../../base/content/macWindowMenu.inc.xhtml
 #endif
 
       <!-- Help -->
-#include ../../../base/content/helpMenu.inc.xul
+#include ../../../base/content/helpMenu.inc.xhtml
     </menubar>
    </toolbaritem>
   </toolbar>
 
   <toolbarpalette id="MsgComposeToolbarPalette">
 
     <toolbarbutton class="toolbarbutton-1"
                id="button-send" label="&sendButton.label;"
@@ -2339,17 +2339,17 @@
       </hbox>
     </toolbar>
 
     <toolbox id="FormatToolbox" mode="icons">
       <toolbar is="customizable-toolbar" id="FormatToolbar"
                class="chromeclass-toolbar"
                persist="collapsed"
                customizable="true" nowindowdrag="true">
-#include editFormatButtons.inc.xul
+#include editFormatButtons.inc.xhtml
         <spacer flex="1"/>
       </toolbar>
     </toolbox>
   </toolbox>
 
   <splitter id="compose-toolbar-sizer" onmousedown="awSizerListen()" orient="vertical"/>
 
   <!-- The mail message body frame -->
--- a/mail/components/compose/jar.mn
+++ b/mail/components/compose/jar.mn
@@ -1,59 +1,59 @@
 # 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/.
 
 messenger.jar:
-*   content/messenger/messengercompose/messengercompose.xul          (content/messengercompose.xul)
+*   content/messenger/messengercompose/messengercompose.xhtml        (content/messengercompose.xhtml)
     content/messenger/messengercompose/MsgComposeCommands.js         (content/MsgComposeCommands.js)
     content/messenger/messengercompose/bigFileObserver.js            (content/bigFileObserver.js)
     content/messenger/messengercompose/cloudAttachmentLinkManager.js (content/cloudAttachmentLinkManager.js)
     content/messenger/messengercompose/addressingWidgetOverlay.js    (content/addressingWidgetOverlay.js)
     content/messenger/messengercompose/editor.js                     (content/editor.js)
     content/messenger/messengercompose/editorUtilities.js            (content/editorUtilities.js)
     content/messenger/messengercompose/ComposerCommands.js           (content/ComposerCommands.js)
     content/messenger/messengercompose/EditorContent.css             (content/EditorContent.css)
     content/messenger/messengercompose/images/tag-anchor.gif         (content/images/tag-anchor.gif)
     content/messenger/messengercompose/EdDialogCommon.js             (content/dialogs/EdDialogCommon.js)
-    content/messenger/messengercompose/EdLinkProps.xul               (content/dialogs/EdLinkProps.xul)
+    content/messenger/messengercompose/EdLinkProps.xhtml             (content/dialogs/EdLinkProps.xhtml)
     content/messenger/messengercompose/EdLinkProps.js                (content/dialogs/EdLinkProps.js)
-*   content/messenger/messengercompose/EdImageProps.xul              (content/dialogs/EdImageProps.xul)
+*   content/messenger/messengercompose/EdImageProps.xhtml            (content/dialogs/EdImageProps.xhtml)
     content/messenger/messengercompose/EdImageProps.js               (content/dialogs/EdImageProps.js)
     content/messenger/messengercompose/EdImageLinkLoader.js          (content/dialogs/EdImageLinkLoader.js)
     content/messenger/messengercompose/EdImageDialog.js              (content/dialogs/EdImageDialog.js)
-    content/messenger/messengercompose/EdHLineProps.xul              (content/dialogs/EdHLineProps.xul)
+    content/messenger/messengercompose/EdHLineProps.xhtml            (content/dialogs/EdHLineProps.xhtml)
     content/messenger/messengercompose/EdHLineProps.js               (content/dialogs/EdHLineProps.js)
-    content/messenger/messengercompose/EdReplace.xul                 (content/dialogs/EdReplace.xul)
+    content/messenger/messengercompose/EdReplace.xhtml               (content/dialogs/EdReplace.xhtml)
     content/messenger/messengercompose/EdReplace.js                  (content/dialogs/EdReplace.js)
-    content/messenger/messengercompose/EdSpellCheck.xul              (content/dialogs/EdSpellCheck.xul)
+    content/messenger/messengercompose/EdSpellCheck.xhtml            (content/dialogs/EdSpellCheck.xhtml)
     content/messenger/messengercompose/EdSpellCheck.js               (content/dialogs/EdSpellCheck.js)
-    content/messenger/messengercompose/EdDictionary.xul              (content/dialogs/EdDictionary.xul)
+    content/messenger/messengercompose/EdDictionary.xhtml            (content/dialogs/EdDictionary.xhtml)
     content/messenger/messengercompose/EdDictionary.js               (content/dialogs/EdDictionary.js)
-    content/messenger/messengercompose/EdNamedAnchorProps.xul        (content/dialogs/EdNamedAnchorProps.xul)
+    content/messenger/messengercompose/EdNamedAnchorProps.xhtml      (content/dialogs/EdNamedAnchorProps.xhtml)
     content/messenger/messengercompose/EdNamedAnchorProps.js         (content/dialogs/EdNamedAnchorProps.js)
-    content/messenger/messengercompose/EdInsertTOC.xul               (content/dialogs/EdInsertTOC.xul)
+    content/messenger/messengercompose/EdInsertTOC.xhtml             (content/dialogs/EdInsertTOC.xhtml)
     content/messenger/messengercompose/EdInsertTOC.js                (content/dialogs/EdInsertTOC.js)
-    content/messenger/messengercompose/EdInsertTable.xul             (content/dialogs/EdInsertTable.xul)
+    content/messenger/messengercompose/EdInsertTable.xhtml           (content/dialogs/EdInsertTable.xhtml)
     content/messenger/messengercompose/EdInsertTable.js              (content/dialogs/EdInsertTable.js)
-    content/messenger/messengercompose/EdInsertMath.xul              (content/dialogs/EdInsertMath.xul)
+    content/messenger/messengercompose/EdInsertMath.xhtml            (content/dialogs/EdInsertMath.xhtml)
     content/messenger/messengercompose/EdInsertMath.js               (content/dialogs/EdInsertMath.js)
-    content/messenger/messengercompose/EdTableProps.xul              (content/dialogs/EdTableProps.xul)
+    content/messenger/messengercompose/EdTableProps.xhtml            (content/dialogs/EdTableProps.xhtml)
     content/messenger/messengercompose/EdTableProps.js               (content/dialogs/EdTableProps.js)
-    content/messenger/messengercompose/EdInsSrc.xul                  (content/dialogs/EdInsSrc.xul)
+    content/messenger/messengercompose/EdInsSrc.xhtml                (content/dialogs/EdInsSrc.xhtml)
     content/messenger/messengercompose/EdInsSrc.js                   (content/dialogs/EdInsSrc.js)
-    content/messenger/messengercompose/EdInsertChars.xul             (content/dialogs/EdInsertChars.xul)
+    content/messenger/messengercompose/EdInsertChars.xhtml           (content/dialogs/EdInsertChars.xhtml)
     content/messenger/messengercompose/EdInsertChars.js              (content/dialogs/EdInsertChars.js)
-    content/messenger/messengercompose/EdAdvancedEdit.xul            (content/dialogs/EdAdvancedEdit.xul)
+    content/messenger/messengercompose/EdAdvancedEdit.xhtml          (content/dialogs/EdAdvancedEdit.xhtml)
     content/messenger/messengercompose/EdAdvancedEdit.js             (content/dialogs/EdAdvancedEdit.js)
-    content/messenger/messengercompose/EdListProps.xul               (content/dialogs/EdListProps.xul)
+    content/messenger/messengercompose/EdListProps.xhtml             (content/dialogs/EdListProps.xhtml)
     content/messenger/messengercompose/EdListProps.js                (content/dialogs/EdListProps.js)
-    content/messenger/messengercompose/EdColorProps.xul              (content/dialogs/EdColorProps.xul)
+    content/messenger/messengercompose/EdColorProps.xhtml            (content/dialogs/EdColorProps.xhtml)
     content/messenger/messengercompose/EdColorProps.js               (content/dialogs/EdColorProps.js)
-    content/messenger/messengercompose/EdColorPicker.xul             (content/dialogs/EdColorPicker.xul)
+    content/messenger/messengercompose/EdColorPicker.xhtml           (content/dialogs/EdColorPicker.xhtml)
     content/messenger/messengercompose/EdColorPicker.js              (content/dialogs/EdColorPicker.js)
     content/messenger/messengercompose/EdAECSSAttributes.js          (content/dialogs/EdAECSSAttributes.js)
     content/messenger/messengercompose/EdAEHTMLAttributes.js         (content/dialogs/EdAEHTMLAttributes.js)
     content/messenger/messengercompose/EdAEJSEAttributes.js          (content/dialogs/EdAEJSEAttributes.js)
     content/messenger/messengercompose/EdAEAttributes.js             (content/dialogs/EdAEAttributes.js)
-    content/messenger/messengercompose/EdConvertToTable.xul          (content/dialogs/EdConvertToTable.xul)
+    content/messenger/messengercompose/EdConvertToTable.xhtml        (content/dialogs/EdConvertToTable.xhtml)
     content/messenger/messengercompose/EdConvertToTable.js           (content/dialogs/EdConvertToTable.js)
     content/messenger/messengercompose/TeXZilla.js                   (texzilla/TeXZilla.js)
--- a/mail/components/customizableui/content/panelUI.inc.xhtml
+++ b/mail/components/customizableui/content/panelUI.inc.xhtml
@@ -1571,17 +1571,17 @@
                        class="subviewbutton subviewbutton-iconic"
                        label="&messengerCmd.label;"
                        key="key_mail"
                        oncommand="toMessengerWindow();"/>
         <toolbarbutton id="appmenu_addressBook"
                        class="subviewbutton subviewbutton-iconic"
                        label="&addressBookCmd.label;"
                        key="key_addressbook"
-                       oncommand="toOpenWindowByType('mail:addressbook', 'chrome://messenger/content/addressbook/addressbook.xul');"/>
+                       oncommand="toOpenWindowByType('mail:addressbook', 'chrome://messenger/content/addressbook/addressbook.xhtml');"/>
         <toolbarseparator id="devToolsSeparator"/>
         <toolbarbutton id="appmenu_openSavedFilesWnd"
                        class="subviewbutton subviewbutton-iconic"
                        label="&savedFiles.label;"
                        key="key_savedFiles"
                        oncommand="openSavedFilesWnd();"/>
         <toolbarbutton id="appmenu_imAccountsStatus"
                        class="subviewbutton subviewbutton-nav"
--- a/mail/components/customizableui/content/panelUI.js
+++ b/mail/components/customizableui/content/panelUI.js
@@ -128,17 +128,17 @@ const PanelUI = {
 
   _initialized: false,
   _notifications: null,
 
   init() {
     this._initElements();
 
     [this.menuButtonMail, this.menuButtonChat].forEach(button => {
-      // There's no chat button in the messageWindow.xul context.
+      // There's no chat button in the messageWindow.xhtml context.
       if (button) {
         button.addEventListener("mousedown", this);
         button.addEventListener("keypress", this);
       }
     });
 
     this.menuButton = this.menuButtonMail;
 
@@ -232,17 +232,17 @@ const PanelUI = {
     Services.obs.removeObserver(this, "appMenu-notifications");
 
     window.removeEventListener("MozDOMFullscreen:Entered", this);
     window.removeEventListener("MozDOMFullscreen:Exited", this);
     window.removeEventListener("fullscreen", this);
     window.removeEventListener("activate", this);
 
     [this.menuButtonMail, this.menuButtonChat].forEach(button => {
-      // There's no chat button in the messageWindow.xul context.
+      // There's no chat button in the messageWindow.xhtml context.
       if (button) {
         button.removeEventListener("mousedown", this);
         button.removeEventListener("keypress", this);
       }
     });
 
     CustomizableUI.removeListener(this);
   },
--- a/mail/components/downloads/jar.mn
+++ b/mail/components/downloads/jar.mn
@@ -1,8 +1,8 @@
 # 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/.
 
 messenger.jar:
     content/messenger/downloads/aboutDownloads.js      (content/aboutDownloads.js)
-*   content/messenger/downloads/aboutDownloads.xul     (content/aboutDownloads.xul)
+*   content/messenger/downloads/aboutDownloads.xhtml   (content/aboutDownloads.xhtml)
     content/messenger/downloads/aboutDownloads.css     (content/aboutDownloads.css)
--- a/mail/components/enterprisepolicies/tests/browser/disable_app_update/browser_policy_disable_app_update.js
+++ b/mail/components/enterprisepolicies/tests/browser/disable_app_update/browser_policy_disable_app_update.js
@@ -82,17 +82,17 @@ add_task(async function test_update_abou
 function waitForAboutDialog() {
   return new Promise(resolve => {
     var listener = {
       onOpenWindow: aAppWindow => {
         Services.wm.removeListener(listener);
 
         async function aboutDialogOnLoad() {
           domwindow.removeEventListener("load", aboutDialogOnLoad, true);
-          let chromeURI = "chrome://messenger/content/aboutDialog.xul";
+          let chromeURI = "chrome://messenger/content/aboutDialog.xhtml";
           is(
             domwindow.document.location.href,
             chromeURI,
             "About dialog appeared"
           );
           resolve(domwindow);
         }
 
--- a/mail/components/extensions/parent/ext-addressBook.js
+++ b/mail/components/extensions/parent/ext-addressBook.js
@@ -3,17 +3,18 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 var { MailServices } = ChromeUtils.import(
   "resource:///modules/MailServices.jsm"
 );
 
 const AB_WINDOW_TYPE = "mail:addressbook";
-const AB_WINDOW_URI = "chrome://messenger/content/addressbook/addressbook.xul";
+const AB_WINDOW_URI =
+  "chrome://messenger/content/addressbook/addressbook.xhtml";
 
 const kJSDirectory = 101; // defined in nsDirPrefs.h
 
 // nsIAbCard.idl contains a list of properties that Thunderbird uses. Extensions are not
 // restricted to using only these properties, but the following properties cannot
 // be modified by an extension.
 const hiddenProperties = [
   "DbRowID",
--- a/mail/components/extensions/parent/ext-browserAction.js
+++ b/mail/components/extensions/parent/ext-browserAction.js
@@ -24,17 +24,17 @@ this.browserAction = class extends Toolb
     super.close();
     browserActionMap.delete(this.extension);
   }
 
   static onUninstall(extensionId) {
     let widgetId = makeWidgetId(extensionId);
     let id = `${widgetId}-browserAction-toolbarbutton`;
 
-    let windowURL = "chrome://messenger/content/messenger.xul";
+    let windowURL = "chrome://messenger/content/messenger.xhtml";
     let currentSet = Services.xulStore.getValue(
       windowURL,
       "mail-bar3",
       "currentset"
     );
     currentSet = currentSet.split(",");
     let index = currentSet.indexOf(id);
     if (index >= 0) {
@@ -47,16 +47,16 @@ this.browserAction = class extends Toolb
       );
     }
   }
 
   constructor(extension) {
     super(extension);
     this.manifest_name = "browser_action";
     this.manifestName = "browserAction";
-    this.windowURLs = ["chrome://messenger/content/messenger.xul"];
+    this.windowURLs = ["chrome://messenger/content/messenger.xhtml"];
     this.toolboxId = "mail-toolbox";
     this.toolbarId = "mail-bar3";
     this.global = global;
   }
 };
 
 global.browserActionFor = this.browserAction.for;
--- a/mail/components/extensions/parent/ext-composeAction.js
+++ b/mail/components/extensions/parent/ext-composeAction.js
@@ -9,17 +9,17 @@ ChromeUtils.defineModuleGetter(
 );
 
 this.composeAction = class extends ToolbarButtonAPI {
   constructor(extension) {
     super(extension);
     this.manifest_name = "compose_action";
     this.manifestName = "composeAction";
     this.windowURLs = [
-      "chrome://messenger/content/messengercompose/messengercompose.xul",
+      "chrome://messenger/content/messengercompose/messengercompose.xhtml",
     ];
 
     let format =
       extension.manifest.compose_action.default_area == "formattoolbar";
     this.toolboxId = format ? "FormatToolbox" : "compose-toolbox";
     this.toolbarId = format ? "FormatToolbar" : "composeToolbar2";
 
     if (format) {
@@ -44,17 +44,17 @@ this.composeAction = class extends Toolb
     toolbar.insertBefore(button, before.nextElementSibling);
   }
 
   static onUninstall(extensionId) {
     let widgetId = makeWidgetId(extensionId);
     let id = `${widgetId}-composeAction-toolbarbutton`;
 
     let windowURL =
-      "chrome://messenger/content/messengercompose/messengercompose.xul";
+      "chrome://messenger/content/messengercompose/messengercompose.xhtml";
     let currentSet = Services.xulStore.getValue(
       windowURL,
       "composeToolbar2",
       "currentset"
     );
     currentSet = currentSet.split(",");
     let index = currentSet.indexOf(id);
     if (index >= 0) {
--- a/mail/components/extensions/parent/ext-messageDisplayAction.js
+++ b/mail/components/extensions/parent/ext-messageDisplayAction.js
@@ -27,18 +27,18 @@ this.messageDisplayAction = class extend
     messageDisplayActionMap.delete(this.extension);
   }
 
   constructor(extension) {
     super(extension);
     this.manifest_name = "message_display_action";
     this.manifestName = "messageDisplayAction";
     this.windowURLs = [
-      "chrome://messenger/content/messenger.xul",
-      "chrome://messenger/content/messageWindow.xul",
+      "chrome://messenger/content/messenger.xhtml",
+      "chrome://messenger/content/messageWindow.xhtml",
     ];
     this.toolboxId = "header-view-toolbox";
     this.toolbarId = "header-view-toolbar";
   }
 
   makeButton(window) {
     let button = super.makeButton(window);
     button.classList.add("msgHeaderView-button");
--- a/mail/components/extensions/parent/ext-windows.js
+++ b/mail/components/extensions/parent/ext-windows.js
@@ -226,29 +226,29 @@ this.windows = class extends ExtensionAP
             window = tabmail.replaceTabWithWindow(nativeTabInfo, targetType)[0];
           } else if (createData.url) {
             let uris = Array.isArray(createData.url)
               ? createData.url
               : [createData.url];
             let args = createWindowArgs(uris);
             window = Services.ww.openWindow(
               null,
-              "chrome://messenger/content/",
+              "chrome://messenger/content/messenger.xhtml",
               "_blank",
               features.join(","),
               args
             );
           } else {
             let args = null;
             if (!wantNormalWindow) {
               args = createWindowArgs(["about:blank"]);
             }
             window = Services.ww.openWindow(
               null,
-              "chrome://messenger/content/",
+              "chrome://messenger/content/messenger.xhtml",
               "_blank",
               features.join(","),
               args
             );
           }
 
           let win = windowManager.getWrapper(window);
           win.updateGeometry(createData);
--- a/mail/components/extensions/test/browser/browser_ext_browserAction.js
+++ b/mail/components/extensions/test/browser/browser_ext_browserAction.js
@@ -114,10 +114,12 @@ add_task(async () => {
   let extension = ExtensionTestUtils.loadExtension(extensionDetails);
   await test_it(extension);
 
   extensionDetails.background = background_popup;
   extensionDetails.manifest.browser_action.default_popup = "popup.html";
   extension = ExtensionTestUtils.loadExtension(extensionDetails);
   await test_it(extension);
 
-  Services.xulStore.removeDocument("chrome://messenger/content/messenger.xul");
+  Services.xulStore.removeDocument(
+    "chrome://messenger/content/messenger.xhtml"
+  );
 });
--- a/mail/components/extensions/test/browser/browser_ext_composeAction.js
+++ b/mail/components/extensions/test/browser/browser_ext_composeAction.js
@@ -192,11 +192,11 @@ add_task(async function the_test() {
   delete extensionDetails.manifest.compose_action.default_popup;
   await test_it(extensionDetails, "FormatToolbar");
 
   extensionDetails.background = background_popup;
   extensionDetails.manifest.compose_action.default_popup = "popup.html";
   await test_it(extensionDetails, "FormatToolbar");
 
   Services.xulStore.removeDocument(
-    "chrome://messenger/content/messengercompose/messengercompose.xul"
+    "chrome://messenger/content/messengercompose/messengercompose.xhtml"
   );
 });
--- a/mail/components/extensions/test/browser/head.js
+++ b/mail/components/extensions/test/browser/head.js
@@ -154,17 +154,17 @@ async function openNewMailWindow(options
   if (!options.newAccountWizard) {
     Services.prefs.setBoolPref(
       "mail.provider.suppress_dialog_on_startup",
       true
     );
   }
 
   let win = window.openDialog(
-    "chrome://messenger/content/",
+    "chrome://messenger/content/messenger.xhtml",
     "_blank",
     "chrome,all,dialog=no"
   );
   await Promise.all([
     BrowserTestUtils.waitForEvent(win, "focus", true),
     BrowserTestUtils.waitForEvent(win, "activate", true),
   ]);
 
--- a/mail/components/im/IMIncomingServer.jsm
+++ b/mail/components/im/IMIncomingServer.jsm
@@ -97,17 +97,17 @@ IMIncomingServer.prototype = {
     return "constructedPrettyName FIXME";
   },
   get realHostName() {
     return this.hostName;
   },
   set realHostName(aValue) {},
 
   port: -1,
-  accountManagerChrome: "am-im.xul",
+  accountManagerChrome: "am-im.xhtml",
 
   // FIXME need a new imIIncomingService iface + classinfo for these 3 properties :(
   get password() {
     return this.imAccount.password;
   },
   set password(aPassword) {
     this.imAccount.password = aPassword;
   },
--- a/mail/components/im/content/am-im.js
+++ b/mail/components/im/content/am-im.js
@@ -136,15 +136,15 @@ var account = {
       document.getElementById("protoSpecific").getBoundingClientRect();
     } else if (!haveOptions) {
       advanced.hidden = true;
     }
   },
 
   viewFingerprintKeys() {
     window.openDialog(
-      "chrome://chat/content/otr-finger.xul",
+      "chrome://chat/content/otr-finger.xhtml",
       "",
       "chrome,modal,titlebar,centerscreen",
       this.account
     );
   },
 };
--- a/mail/components/im/content/am-im.xhtml
+++ b/mail/components/im/content/am-im.xhtml
@@ -13,17 +13,17 @@
   %brandDTD;
 ]>
 
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml"
         id="account"
         title="&accountWindow.title;"
         buttons="accept,cancel"
-        onload="parent.onPanelLoaded('am-im.xul');">
+        onload="parent.onPanelLoaded('am-im.xhtml');">
 
   <script src="chrome://global/content/globalOverlay.js"/>
   <script src="chrome://global/content/editMenuOverlay.js"/>
   <script src="chrome://chat/content/imAccountOptionsHelper.js"/>
   <script src="chrome://messenger/content/am-im.js"/>
 
   <linkset>
     <html:link rel="localization" href="branding/brand.ftl"/>
--- a/mail/components/im/content/chat-messenger.js
+++ b/mail/components/im/content/chat-messenger.js
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* global MozElements MozXULElement */
 /* import-globals-from ../../../../../toolkit/content/globalOverlay.js */
 
-// This file is loaded in messenger.xul.
+// This file is loaded in messenger.xhtml.
 /* globals fixIterator, MailToolboxCustomizeDone, openIMAccountMgr,
    PROTO_TREE_VIEW, Services, Status, statusSelector, ZoomManager */
 
 var { Notifications } = ChromeUtils.import(
   "resource:///modules/chatNotifications.jsm"
 );
 var { Services: imServices } = ChromeUtils.import(
   "resource:///modules/imServices.jsm"
@@ -1025,17 +1025,17 @@ var chatHandler = {
     if (newconv) {
       this.focusConversation(newconv);
     }
   },
 
   _openDialog(aType) {
     let features = "chrome,modal,titlebar,centerscreen";
     window.openDialog(
-      "chrome://messenger/content/chat/" + aType + ".xul",
+      "chrome://messenger/content/chat/" + aType + ".xhtml",
       "",
       features
     );
   },
   addBuddy() {
     this._openDialog("addbuddy");
   },
   joinChat() {
--- a/mail/components/im/content/imAccounts.js
+++ b/mail/components/im/content/imAccounts.js
@@ -354,17 +354,17 @@ var gAccountManager = {
         aItem.setFocus();
       },
       this._disabledDelay,
       this.accountList.selectedItem
     );
   },
 
   new() {
-    this.openDialog("chrome://messenger/content/chat/imAccountWizard.xul");
+    this.openDialog("chrome://messenger/content/chat/imAccountWizard.xhtml");
   },
   edit() {
     // Find the nsIIncomingServer for the current imIAccount.
     let server = null;
     let imAccountId = this.accountList.selectedItem.account.numericId;
     let mgr = MailServices.accounts;
     for (let account of fixIterator(mgr.accounts, Ci.nsIMsgAccount)) {
       let incomingServer = account.incomingServer;
@@ -378,17 +378,17 @@ var gAccountManager = {
     }
 
     let win = Services.wm.getMostRecentWindow("mailnews:accountmanager");
     if (win) {
       win.focus();
       win.selectServer(server);
     } else {
       window.openDialog(
-        "chrome://messenger/content/AccountManager.xul",
+        "chrome://messenger/content/AccountManager.xhtml",
         "AccountManager",
         "chrome,centerscreen,modal,titlebar,resizable",
         { server, selectPage: null }
       );
     }
   },
   autologin() {
     var elt = this.accountList.selectedItem;
--- a/mail/components/im/content/imContextMenu.js
+++ b/mail/components/im/content/imContextMenu.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/. */
 
-// This file is loaded in messenger.xul.
+// This file is loaded in messenger.xhtml.
 /* globals gatherTextUnder, goUpdateGlobalEditMenuItems, makeURLAbsolute, Services */
 
 var gChatContextMenu = null;
 
 function imContextMenu(aXulMenu) {
   this.target = null;
   this.menu = null;
   this.onLink = false;
--- a/mail/components/im/jar.mn
+++ b/mail/components/im/jar.mn
@@ -1,25 +1,25 @@
 # 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/.
 
 messenger.jar:
     content/messenger/chat/chat-messenger.js             (content/chat-messenger.js)
     content/messenger/chat/chat.css                      (content/chat.css)
     content/messenger/am-im.js                           (content/am-im.js)
-    content/messenger/am-im.xul                          (content/am-im.xul)
+    content/messenger/am-im.xhtml                        (content/am-im.xhtml)
     content/messenger/chat/addbuddy.js                   (content/addbuddy.js)
-    content/messenger/chat/addbuddy.xul                  (content/addbuddy.xul)
+    content/messenger/chat/addbuddy.xhtml                (content/addbuddy.xhtml)
     content/messenger/chat/joinchat.js                   (content/joinchat.js)
-    content/messenger/chat/joinchat.xul                  (content/joinchat.xul)
+    content/messenger/chat/joinchat.xhtml                (content/joinchat.xhtml)
     content/messenger/chat/imAccounts.css                (content/imAccounts.css)
     content/messenger/chat/imAccounts.js                 (content/imAccounts.js)
-    content/messenger/chat/imAccounts.xul                (content/imAccounts.xul)
-    content/messenger/chat/imAccountWizard.xul           (content/imAccountWizard.xul)
+    content/messenger/chat/imAccounts.xhtml              (content/imAccounts.xhtml)
+    content/messenger/chat/imAccountWizard.xhtml         (content/imAccountWizard.xhtml)
     content/messenger/chat/imAccountWizard.js            (content/imAccountWizard.js)
     content/messenger/chat/imContextMenu.js              (content/imContextMenu.js)
     content/messenger/chat/chat-conversation.js          (content/chat-conversation.js)
     content/messenger/chat/imStatusSelector.js           (content/imStatusSelector.js)
     content/messenger/chat/chat-contact.js               (content/chat-contact.js)
     content/messenger/chat/chat-group.js                 (content/chat-group.js)
     content/messenger/chat/chat-imconv.js                (content/chat-imconv.js)
     content/messenger/chat/chat-conversation-info.js     (content/chat-conversation-info.js)
--- a/mail/components/im/modules/chatHandler.jsm
+++ b/mail/components/im/modules/chatHandler.jsm
@@ -94,17 +94,17 @@ var ChatCore = {
         onPromptAuthAvailable() {},
         onPromptCanceled() {},
       });
   },
   observe(aSubject, aTopic, aData) {
     if (aTopic == "browser-request") {
       Services.ww.openWindow(
         null,
-        "chrome://chat/content/browserRequest.xul",
+        "chrome://chat/content/browserRequest.xhtml",
         null,
         "chrome",
         aSubject
       );
       return;
     }
 
     if (aTopic == "contact-signed-on") {
--- a/mail/components/im/modules/chatNotifications.jsm
+++ b/mail/components/im/modules/chatNotifications.jsm
@@ -161,17 +161,17 @@ var Notifications = {
           );
           let mainWindow = Services.wm.getMostRecentWindow("mail:3pane");
           if (mainWindow) {
             mainWindow.focus();
             mainWindow.showChatTab();
             mainWindow.chatHandler.focusConversation(uiConv);
           } else {
             Services.appShell.hiddenDOMWindow.openDialog(
-              "chrome://messenger/content/",
+              "chrome://messenger/content/messenger.xhtml",
               "_blank",
               "chrome,dialog=no,all",
               null,
               {
                 tabType: "chat",
                 tabParams: { convType: "focus", conv: uiConv },
               }
             );
--- a/mail/components/migration/jar.mn
+++ b/mail/components/migration/jar.mn
@@ -1,7 +1,7 @@
 # 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/.
 
 messenger.jar:
-*  content/messenger/migration/migration.xul                 (content/migration.xul)
+*  content/messenger/migration/migration.xhtml               (content/migration.xhtml)
    content/messenger/migration/migration.js                  (content/migration.js)
--- a/mail/components/migration/src/nsProfileMigrator.cpp
+++ b/mail/components/migration/src/nsProfileMigrator.cpp
@@ -24,17 +24,17 @@
 #  include <windows.h>
 #else
 #  include <limits.h>
 #endif
 
 NS_IMPL_ISUPPORTS(nsProfileMigrator, nsIProfileMigrator)
 
 #define MIGRATION_WIZARD_FE_URL \
-  "chrome://messenger/content/migration/migration.xul"
+  "chrome://messenger/content/migration/migration.xhtml"
 #define MIGRATION_WIZARD_FE_FEATURES "chrome,dialog,modal,centerscreen"
 
 NS_IMETHODIMP
 nsProfileMigrator::Migrate(nsIProfileStartup* aStartup, const nsACString& aKey,
                            const nsACString& aProfileName) {
   nsAutoCString key;
   nsCOMPtr<nsIMailProfileMigrator> mailMigrator;
   nsresult rv = GetDefaultMailMigratorKey(key, mailMigrator);
--- a/mail/components/newmailaccount/content/accountProvisioner.js
+++ b/mail/components/newmailaccount/content/accountProvisioner.js
@@ -212,17 +212,17 @@ var EmailAccountProvisioner = {
         var existingAccountManager = Services.wm.getMostRecentWindow(
           "mailnews:accountmanager"
         );
 
         if (existingAccountManager) {
           existingAccountManager.focus();
         } else {
           window.openDialog(
-            "chrome://messenger/content/AccountManager.xul",
+            "chrome://messenger/content/AccountManager.xhtml",
             "AccountManager",
             "chrome,centerscreen,modal,titlebar",
             { server: account.incomingServer }
           );
         }
       });
 
     document.getElementById("window").style.display = "none";
--- a/mail/components/preferences/privacy.js
+++ b/mail/components/preferences/privacy.js
@@ -223,17 +223,17 @@ var gPrivacyPane = {
     document.getElementById("manualMarkMode").disabled = !aEnableRadioGroup;
   },
 
   updateJunkLogButton(aEnableButton) {
     document.getElementById("openJunkLogButton").disabled = !aEnableButton;
   },
 
   openJunkLog() {
-    gSubDialog.open("chrome://messenger/content/junkLog.xul");
+    gSubDialog.open("chrome://messenger/content/junkLog.xhtml");
   },
 
   resetTrainingData() {
     // make sure the user really wants to do this
     var bundle = document.getElementById("bundlePreferences");
     var title = bundle.getString("confirmResetJunkTrainingTitle");
     var text = bundle.getString("confirmResetJunkTrainingText");
 
--- a/mail/confvars.sh
+++ b/mail/confvars.sh
@@ -8,17 +8,17 @@ MOZ_APP_NAME=thunderbird
 MOZ_UPDATER=1
 
 if test "$OS_ARCH" = "WINNT"; then
   if ! test "$HAVE_64BIT_BUILD"; then
     MOZ_VERIFY_MAR_SIGNATURE=1
   fi
 fi
 
-BROWSER_CHROME_URL=chrome://messenger/content/messengercompose/messengercompose.xul
+BROWSER_CHROME_URL=chrome://messenger/content/messengercompose/messengercompose.xhtml
 
 MOZ_BRANDING_DIRECTORY=$commreltopsrcdir/mail/branding/nightly
 MOZ_OFFICIAL_BRANDING_DIRECTORY=$commreltopsrcdir/mail/branding/thunderbird
 
 MOZ_APP_ID={3550f703-e582-4d05-9a08-453d09bdfdc6}
 
 MOZ_PROFILE_MIGRATOR=1
 MOZ_BINARY_EXTENSIONS=1
--- a/mail/extensions/mailviews/content/mailViewList.js
+++ b/mail/extensions/mailviews/content/mailViewList.js
@@ -41,17 +41,17 @@ function refreshListView(aSelectedMailVi
     ) {
       gListBox.selectedIndex = index;
     }
   }
 }
 
 function onNewMailView() {
   window.openDialog(
-    "chrome://messenger/content/mailViewSetup.xul",
+    "chrome://messenger/content/mailViewSetup.xhtml",
     "",
     "centerscreen,resizable,modal,titlebar,chrome",
     { onOkCallback: refreshListView }
   );
 }
 
 function onDeleteMailView() {
   var bundle = Services.strings.createBundle(
@@ -94,17 +94,17 @@ function onEditMailView() {
   var selectedIndex = gListBox.selectedIndex;
   if (selectedIndex >= 0) {
     var selMailView = gMailListView.getMailViewAt(selectedIndex);
     // open up the mail view setup dialog passing in the mail view as an argument....
 
     var args = { mailView: selMailView, onOkCallback: refreshListView };
 
     window.openDialog(
-      "chrome://messenger/content/mailViewSetup.xul",
+      "chrome://messenger/content/mailViewSetup.xhtml",
       "",
       "centerscreen,modal,resizable,titlebar,chrome",
       args
     );
   }
 }
 
 function onMailViewSelect(event) {
--- a/mail/extensions/mailviews/content/mailViewSetup.xhtml
+++ b/mail/extensions/mailviews/content/mailViewSetup.xhtml
@@ -46,14 +46,14 @@
                     oninput="doEnabling();"/>
       </hbox>
     </vbox>
 
     <separator/>
     <label value="&searchTermCaption.label;"/>
     <hbox flex="1">
       <vbox id="searchTermListBox" flex="1">
-#include ../../../../mailnews/base/search/content/searchTerm.inc.xul
+#include ../../../../mailnews/base/search/content/searchTerm.inc.xhtml
     </hbox>
   </vbox>
 
 </dialog>
 </window>
--- a/mail/extensions/mailviews/content/msgViewPickerOverlay.js
+++ b/mail/extensions/mailviews/content/msgViewPickerOverlay.js
@@ -134,17 +134,17 @@ var ViewPickerBinding = {
   },
 };
 ViewPickerBinding._init();
 
 function LaunchCustomizeDialog() {
   OpenOrFocusWindow(
     {},
     "mailnews:mailviewlist",
-    "chrome://messenger/content/mailViewList.xul"
+    "chrome://messenger/content/mailViewList.xhtml"
   );
 }
 
 /**
  * All of these Refresh*ViewPopup* methods have to deal with several menu
  * instances. For example, the "View... Messages" menu, the view picker menu
  * list in the toolbar, in appmenu/View/Messages, etc.
  *
--- a/mail/extensions/mailviews/jar.mn
+++ b/mail/extensions/mailviews/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/.
 
 messenger.jar:
     content/messenger/msgViewPickerOverlay.js    (content/msgViewPickerOverlay.js)
     content/messenger/mailViewSetup.js           (content/mailViewSetup.js)
-*   content/messenger/mailViewSetup.xul          (content/mailViewSetup.xul)
-    content/messenger/mailViewList.xul           (content/mailViewList.xul)
+*   content/messenger/mailViewSetup.xhtml        (content/mailViewSetup.xhtml)
+    content/messenger/mailViewList.xhtml         (content/mailViewList.xhtml)
     content/messenger/mailViewList.js            (content/mailViewList.js)
--- a/mail/extensions/openpgp/content/am-enigprefs.xhtml
+++ b/mail/extensions/openpgp/content/am-enigprefs.xhtml
@@ -9,17 +9,17 @@
 <?xml-stylesheet href="chrome://messenger/skin/accountManage.css" type="text/css"?>
 
 <!DOCTYPE page SYSTEM "chrome://openpgp/content/strings/enigmail.dtd">
 
 <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       xmlns:html="http://www.w3.org/1999/xhtml"
       class="color-dialog"
       title="&enigmail.amPrefTitle.label;"
-      onload="parent.onPanelLoaded('am-enigprefs.xul');"
+      onload="parent.onPanelLoaded('am-enigprefs.xhtml');"
       orient="vertical">
 
   <script type="application/x-javascript" src="chrome://messenger/content/AccountManager.js"/>
   <script type="application/x-javascript" src="chrome://openpgp/content/ui/enigmailEditIdentity.js"/>
   <script type="application/x-javascript" src="chrome://openpgp/content/ui/am-enigprefs.js"/>
 
   <broadcasterset>
     <broadcaster id="enigmail_bcEnablePgp" disabled="false"/>
--- a/mail/extensions/openpgp/content/modules/commandLine.jsm
+++ b/mail/extensions/openpgp/content/modules/commandLine.jsm
@@ -23,17 +23,17 @@ Handler.prototype = {
   QueryInterface: EnigmailCompat.generateQI(["nsICommandLineHandler", "nsIFactory"]),
 
   // nsICommandLineHandler
   handle: function(cmdLine) {
     if (cmdLine.handleFlag("pgpkeyman", false)) {
       cmdLine.preventDefault = true; // do not open main app window
 
       const wwatch = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
-      wwatch.openWindow(null, "chrome://openpgp/content/ui/enigmailKeyManager.xul", "_blank", "chrome,dialog=no,all", cmdLine);
+      wwatch.openWindow(null, "chrome://openpgp/content/ui/enigmailKeyManager.xhtml", "_blank", "chrome,dialog=no,all", cmdLine);
     }
   },
 
   helpInfo: "  -pgpkeyman         Open the OpenPGP key management.\n",
 
   lockFactory: function(lock) {}
 };
 
--- a/mail/extensions/openpgp/content/modules/configure.jsm
+++ b/mail/extensions/openpgp/content/modules/configure.jsm
@@ -252,17 +252,17 @@ var EnigmailConfigure = {
               EnigmailLocale.getString("enigmailCommon.checkPreferences"),
               EnigmailLocale.getString("dlg.button.close"));
             if (!startingPreferences && doIt) {
               // same as:
               // - EnigmailWindows.openPrefWindow(window, true, 'sendingTab');
               // but
               // - without starting the service again because we do that right now
               // - and modal (waiting for its end)
-              win.openDialog("chrome://openpgp/content/ui/pref-enigmail.xul",
+              win.openDialog("chrome://openpgp/content/ui/pref-enigmail.xhtml",
                 "_blank", "chrome,resizable=yes,modal", {
                   'showBasic': true,
                   'clientType': 'thunderbird',
                   'selectTab': 'sendingTab'
                 });
             }
           }, 100);
       }
--- a/mail/extensions/openpgp/content/modules/constants.jsm
+++ b/mail/extensions/openpgp/content/modules/constants.jsm
@@ -12,17 +12,17 @@ var EXPORTED_SYMBOLS = ["EnigmailConstan
 var EnigmailConstants = {
   POSSIBLE_PGPMIME: -2081,
 
   // possible values for
   // - encryptByRule, signByRules, pgpmimeByRules
   // - encryptForced, signForced, pgpmimeForced (except CONFLICT)
   // NOTE:
   // - values 0/1/2 are used with this fixed semantics in the persistent rules
-  // - see also enigmailEncryptionDlg.xul
+  // - see also enigmailEncryptionDlg.xhtml
   ENIG_NEVER: 0,
   ENIG_UNDEF: 1,
   ENIG_ALWAYS: 2,
   ENIG_FORCE_SMIME: 3,
   ENIG_AUTO_ALWAYS: 22,
   ENIG_CONFLICT: 99,
 
   ENIG_FINAL_UNDEF: -1,
--- a/mail/extensions/openpgp/content/modules/dialog.jsm
+++ b/mail/extensions/openpgp/content/modules/dialog.jsm
@@ -106,17 +106,17 @@ var EnigmailDialog = {
       value: -1,
       checked: false
     };
 
     if (!win) {
       win = EnigmailWindows.getBestParentWin();
     }
 
-    win.openDialog("chrome://openpgp/content/ui/enigmailMsgBox.xul", "_blank",
+    win.openDialog("chrome://openpgp/content/ui/enigmailMsgBox.xhtml", "_blank",
       "chrome,dialog,modal,centerscreen,resizable,titlebar", {
         msgtext: mesg,
         checkboxLabel: checkboxLabel,
         iconType: EnigmailConstants.ICONTYPE_ALERT,
         button1: okLabel,
         button2: labelButton2,
         button3: labelButton3
       },
@@ -157,17 +157,17 @@ var EnigmailDialog = {
       value: -1,
       checked: false
     };
 
     if (!win) {
       win = EnigmailWindows.getBestParentWin();
     }
 
-    win.openDialog("chrome://openpgp/content/ui/enigmailMsgBox.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailMsgBox.xhtml", "",
       "chrome,dialog,modal,centerscreen,resizable", argsObj, result);
 
     if (argsObj.checkboxLabel) {
       checkedObj.value = result.checked;
     }
     return result.value;
   },
 
@@ -424,17 +424,17 @@ var EnigmailDialog = {
       value: -1,
       checked: false
     };
 
     if (!win) {
       win = EnigmailWindows.getBestParentWin();
     }
 
-    win.openDialog("chrome://openpgp/content/ui/enigmailKeyImportInfo.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailKeyImportInfo.xhtml", "",
       "chrome,dialog,modal,centerscreen,resizable", {
         keyList: keyList
       },
       result);
 
     return result.value;
   },
   /**
--- a/mail/extensions/openpgp/content/modules/pgpmimeHandler.jsm
+++ b/mail/extensions/openpgp/content/modules/pgpmimeHandler.jsm
@@ -244,17 +244,17 @@ PgpMimeHandler.prototype = {
 
   getMessengerWindow: function() {
     let windowManager = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
 
     let winEnum = windowManager.getEnumerator(null);
 
     while (winEnum.hasMoreElements()) {
       let thisWin = winEnum.getNext();
-      if (thisWin.location.href.search(/\/messenger.xul$/) > 0) {
+      if (thisWin.location.href.search(/\/messenger.xhtml$/) > 0) {
         return thisWin;
       }
     }
 
     return null;
   }
 };
 
--- a/mail/extensions/openpgp/content/modules/protocolHandler.jsm
+++ b/mail/extensions/openpgp/content/modules/protocolHandler.jsm
@@ -136,32 +136,32 @@ EnigmailProtocolHandler.prototype = {
       return EnigmailStreams.newStringChannel(aURI, "message/rfc822", "", gDummyPKCS7, loadInfo);
     }
 
     var winName, spec;
     if (aURI.spec == "about:" + aURI.scheme) {
       // About Enigmail
       //            winName = "about:"+enigmail;
       winName = "about:enigmail";
-      spec = "chrome://openpgp/content/ui/enigmailAbout.xul";
+      spec = "chrome://openpgp/content/ui/enigmailAbout.xhtml";
 
     } else if (aURI.spec == aURI.scheme + ":console") {
       // Display enigmail console messages
       winName = "enigmail:console";
-      spec = "chrome://openpgp/content/ui/enigmailConsole.xul";
+      spec = "chrome://openpgp/content/ui/enigmailConsole.xhtml";
 
     } else if (aURI.spec == aURI.scheme + ":keygen") {
       // Display enigmail key generation console
       winName = "enigmail:keygen";
-      spec = "chrome://openpgp/content/ui/enigmailKeygen.xul";
+      spec = "chrome://openpgp/content/ui/enigmailKeygen.xhtml";
 
     } else {
       // Display Enigmail about page
       winName = "about:enigmail";
-      spec = "chrome://openpgp/content/ui/enigmailAbout.xul";
+      spec = "chrome://openpgp/content/ui/enigmailAbout.xhtml";
     }
 
     var windowManager = Cc[WMEDIATOR_CONTRACTID].getService(Ci.nsIWindowMediator);
 
     var winEnum = windowManager.getEnumerator(null);
     var recentWin = null;
     while (winEnum.hasMoreElements() && !recentWin) {
       var thisWin = winEnum.getNext();
--- a/mail/extensions/openpgp/content/modules/rules.jsm
+++ b/mail/extensions/openpgp/content/modules/rules.jsm
@@ -412,17 +412,17 @@ var EnigmailRules = {
       for (let i = 0; i < openList.length; i++) {
         let theAddr = openList[i].addr;
         // start dialog only if the email address contains a @ or no 0x at the beginning:
         // - reason: newsgroups have neither @ nor 0x
         if (theAddr.indexOf("@") != -1 || theAddr.indexOf("0x") !== 0) {
           inputObj.toAddress = "{" + theAddr + "}";
           inputObj.options = "";
           inputObj.command = "add";
-          window.openDialog("chrome://openpgp/content/ui/enigmailSingleRcptSettings.xul", "",
+          window.openDialog("chrome://openpgp/content/ui/enigmailSingleRcptSettings.xhtml", "",
             "dialog,modal,centerscreen,resizable", inputObj, resultObj);
           if (resultObj.cancelled === true) {
             return false;
           }
 
           if (!resultObj.negate) {
             this.mapRuleToKeys(resultObj,
               openList, flags, addrKeysList, addrNoKeyList, false);
--- a/mail/extensions/openpgp/content/modules/windows.jsm
+++ b/mail/extensions/openpgp/content/modules/windows.jsm
@@ -35,25 +35,25 @@ var EnigmailWindows = {
   openSetupWizard: function(win, setupType) {
     EnigmailLog.DEBUG("windows.jsm: openSetupWizard()\n");
 
     if (!EnigmailStdlib.hasConfiguredAccounts()) {
       EnigmailLog.DEBUG("windows.jsm: openSetupWizard: no configured accounts\n");
       return;
     }
 
-    win.open("chrome://openpgp/content/ui/setupWizard2.xul",
+    win.open("chrome://openpgp/content/ui/setupWizard2.xhtml",
       "", "chrome,centerscreen,resizable");
   },
 
   /**
    * Open a window, or focus it if it is already open
    *
    * @winName   : String - name of the window; used to identify if it is already open
-   * @spec      : String - window URL (e.g. chrome://openpgp/content/ui/test.xul)
+   * @spec      : String - window URL (e.g. chrome://openpgp/content/ui/test.xhtml)
    * @winOptions: String - window options as defined in nsIWindow.open
    * @optObj    : any    - an Object, Array, String, etc. that is passed as parameter
    *                       to the window
    */
   openWin: function(winName, spec, winOptions, optObj) {
     var windowManager = Cc[APPSHELL_MEDIATOR_CONTRACTID].getService(Ci.nsIWindowMediator);
 
     var winEnum = windowManager.getEnumerator(null);
@@ -95,20 +95,20 @@ var EnigmailWindows = {
   getBestParentWin: function() {
     var windowManager = Cc[APPSHELL_MEDIATOR_CONTRACTID].getService(Ci.nsIWindowMediator);
 
     var bestFit = null;
     var winEnum = windowManager.getEnumerator(null);
 
     while (winEnum.hasMoreElements()) {
       var thisWin = winEnum.getNext();
-      if (thisWin.location.href.search(/\/messenger.xul$/) > 0) {
+      if (thisWin.location.href.search(/\/messenger.xhtml$/) > 0) {
         bestFit = thisWin;
       }
-      if (!bestFit && thisWin.location.href.search(/\/messengercompose.xul$/) > 0) {
+      if (!bestFit && thisWin.location.href.search(/\/messengercompose.xhtml$/) > 0) {
         bestFit = thisWin;
       }
     }
 
     if (!bestFit) {
       winEnum = windowManager.getEnumerator(null);
       bestFit = winEnum.getNext();
     }
@@ -146,17 +146,17 @@ var EnigmailWindows = {
    *
    * @source - |string| containing the name of the file to display
    *
    * no return value
    */
 
   openHelpWindow: function(source) {
     EnigmailWindows.openWin("enigmail:help",
-      "chrome://openpgp/content/ui/enigmailHelp.xul?src=" + source,
+      "chrome://openpgp/content/ui/enigmailHelp.xhtml?src=" + source,
       "centerscreen,resizable");
   },
 
   /**
    * Display the "About Enigmail" window
    *
    * no return value
    */
@@ -179,55 +179,55 @@ var EnigmailWindows = {
 
   /**
    * Display the Per-Recipient Rules editor window
    *
    * no return value
    */
   openRulesEditor: function() {
     EnigmailWindows.openWin("enigmail:rulesEditor",
-      "chrome://openpgp/content/ui/enigmailRulesEditor.xul",
+      "chrome://openpgp/content/ui/enigmailRulesEditor.xhtml",
       "dialog,centerscreen,resizable");
   },
 
   /**
    * Display the OpenPGP key manager window
    *
    * no return value
    */
   openKeyManager: function(win) {
     EnigmailCore.getService(win);
 
     EnigmailWindows.openWin("enigmail:KeyManager",
-      "chrome://openpgp/content/ui/enigmailKeyManager.xul",
+      "chrome://openpgp/content/ui/enigmailKeyManager.xhtml",
       "resizable");
   },
 
   /**
    * Display the OpenPGP key manager window
    *
    * no return value
    */
   openImportSettings: function(win) {
     EnigmailCore.getService(win);
 
     EnigmailWindows.openWin("",
-      "chrome://openpgp/content/ui/importSettings.xul",
+      "chrome://openpgp/content/ui/importSettings.xhtml",
       "chrome,dialog,centerscreen,resizable,modal");
   },
 
   /**
    * If the Key Manager is open, dispatch an event to tell the key
    * manager to refresh the displayed keys
    */
 
   keyManReloadKeys: function() {
     let windowManager = Cc[APPSHELL_MEDIATOR_CONTRACTID].getService(Ci.nsIWindowMediator);
     const winName = "enigmail:KeyManager";
-    const spec = "chrome://openpgp/content/ui/enigmailKeygen.xul";
+    const spec = "chrome://openpgp/content/ui/enigmailKeygen.xhtml";
 
     let winEnum = windowManager.getEnumerator(null);
     let recentWin = null;
     while (winEnum.hasMoreElements() && !recentWin) {
       let thisWin = winEnum.getNext();
       if (thisWin.location.href == spec) {
         recentWin = thisWin;
         break;
@@ -245,55 +245,55 @@ var EnigmailWindows = {
 
   /**
    * Display the key creation window
    *
    * no return value
    */
   openKeyGen: function() {
     EnigmailWindows.openWin("enigmail:generateKey",
-      "chrome://openpgp/content/ui/enigmailKeygen.xul",
+      "chrome://openpgp/content/ui/enigmailKeygen.xhtml",
       "chrome,resizable=yes");
   },
 
   /**
    * Display the card details window
    *
    * no return value
    */
   openCardDetails: function() {
     EnigmailWindows.openWin("enigmail:cardDetails",
-      "chrome://openpgp/content/ui/enigmailCardDetails.xul",
+      "chrome://openpgp/content/ui/enigmailCardDetails.xhtml",
       "centerscreen");
   },
 
 
   /**
    * Display the console log window
    *
    * @win       - |object| holding the parent window for the dialog
    *
    * no return value
    */
   openConsoleWindow: function() {
     EnigmailWindows.openWin("enigmail:console",
-      "chrome://openpgp/content/ui/enigmailConsole.xul",
+      "chrome://openpgp/content/ui/enigmailConsole.xhtml",
       "resizable,centerscreen");
   },
 
   /**
    * Display the window for the debug log file
    *
    * @win       - |object| holding the parent window for the dialog
    *
    * no return value
    */
   openDebugLog: function(win) {
     EnigmailWindows.openWin("enigmail:logFile",
-      "chrome://openpgp/content/ui/enigmailViewFile.xul?viewLog=1&title=" + escape(EnigmailLocale.getString("debugLog.title")),
+      "chrome://openpgp/content/ui/enigmailViewFile.xhtml?viewLog=1&title=" + escape(EnigmailLocale.getString("debugLog.title")),
       "centerscreen");
   },
 
   /**
    * Display the preferences dialog
    *
    * @win       - |object| holding the parent window for the dialog
    * @showBasic - |boolean| true if only the 1st page of the preferences window
@@ -304,17 +304,17 @@ var EnigmailWindows = {
    */
   openPrefWindow: function(win, showBasic, selectTab) {
     EnigmailLog.DEBUG("windows.js: openPrefWindow\n");
 
     EnigmailCore.getService(win, true); // true: starting preferences dialog
 
     let url;
 
-    url = "chrome://openpgp/content/ui/pref-enigmail.xul";
+    url = "chrome://openpgp/content/ui/pref-enigmail.xhtml";
     win.openDialog(url,
       "_blank", "chrome,resizable=yes", {
         'showBasic': showBasic,
         'clientType': 'thunderbird',
         'selectTab': selectTab
       });
   },
 
@@ -336,17 +336,17 @@ var EnigmailWindows = {
     // open rule dialog
     EnigmailRules.getRulesData({});
 
     const inputObj = {
       toAddress: "{" + emailAddress + "}",
       options: "",
       command: "add"
     };
-    win.openDialog("chrome://openpgp/content/ui/enigmailSingleRcptSettings.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailSingleRcptSettings.xhtml", "",
       "dialog,modal,centerscreen,resizable", inputObj, {});
     return true;
   },
 
   /**
    * Display the dialog for changing the expiry date of one or several keys
    *
    * @win        - |object| holding the parent window for the dialog
@@ -358,17 +358,17 @@ var EnigmailWindows = {
   editKeyExpiry: function(win, userIdArr, keyIdArr) {
     const inputObj = {
       keyId: keyIdArr,
       userId: userIdArr
     };
     const resultObj = {
       refresh: false
     };
-    win.openDialog("chrome://openpgp/content/ui/enigmailEditKeyExpiryDlg.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailEditKeyExpiryDlg.xhtml", "",
       "dialog,modal,centerscreen,resizable", inputObj, resultObj);
     return resultObj.refresh;
   },
 
   /**
    * Display the dialog for changing key trust of one or several keys
    *
    * @win        - |object| holding the parent window for the dialog
@@ -380,17 +380,17 @@ var EnigmailWindows = {
   editKeyTrust: function(win, userIdArr, keyIdArr) {
     const inputObj = {
       keyId: keyIdArr,
       userId: userIdArr
     };
     const resultObj = {
       refresh: false
     };
-    win.openDialog("chrome://openpgp/content/ui/enigmailEditKeyTrustDlg.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailEditKeyTrustDlg.xhtml", "",
       "dialog,modal,centerscreen,resizable", inputObj, resultObj);
     return resultObj.refresh;
   },
 
 
   /**
    * Display the dialog for signing a key
    *
@@ -403,17 +403,17 @@ var EnigmailWindows = {
   signKey: function(win, userId, keyId) {
     const inputObj = {
       keyId: keyId,
       userId: userId
     };
     const resultObj = {
       refresh: false
     };
-    win.openDialog("chrome://openpgp/content/ui/enigmailSignKeyDlg.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/enigmailSignKeyDlg.xhtml", "",
       "dialog,modal,centerscreen,resizable", inputObj, resultObj);
     return resultObj.refresh;
   },
 
   /**
    * Display the photo ID associated with a key
    *
    * @win        - |object| holding the parent window for the dialog
@@ -441,17 +441,17 @@ var EnigmailWindows = {
           const photoUri = Cc[IOSERVICE_CONTRACTID].getService(Ci.nsIIOService).
           newFileURI(photoFile).spec;
           const argsObj = {
             photoUri: photoUri,
             userId: userId,
             keyId: keyId
           };
 
-          win.openDialog("chrome://openpgp/content/ui/enigmailDispPhoto.xul",
+          win.openDialog("chrome://openpgp/content/ui/enigmailDispPhoto.xhtml",
             photoUri,
             "chrome,modal,resizable,dialog,centerscreen",
             argsObj);
           try {
             // delete the photo file
             photoFile.remove(false);
           }
           catch (ex) {}
@@ -487,17 +487,17 @@ var EnigmailWindows = {
     }
 
     const inputObj = {
       keyId: keyId
     };
     const resultObj = {
       refresh: false
     };
-    win.openDialog("chrome://openpgp/content/ui/keyDetailsDlg.xul", "",
+    win.openDialog("chrome://openpgp/content/ui/keyDetailsDlg.xhtml", "",
       "dialog,modal,centerscreen,resizable", inputObj, resultObj);
     if (resultObj.refresh) {
       EnigmailKeyRing.clearCache();
     }
 
     return resultObj.refresh;
   },
 
@@ -529,17 +529,17 @@ var EnigmailWindows = {
     }
 
     const keysrvObj = {};
 
     if (inputObj.searchList && inputObj.autoKeyServer) {
       keysrvObj.value = inputObj.autoKeyServer;
     }
     else {
-      win.openDialog("chrome://openpgp/content/ui/enigmailKeyserverDlg.xul",
+      win.openDialog("chrome://openpgp/content/ui/enigmailKeyserverDlg.xhtml",
         "", "dialog,modal,centerscreen", valueObj, keysrvObj);
     }
 
     if (!keysrvObj.value) {
       return;
     }
 
     inputObj.keyserver = keysrvObj.value;
@@ -565,17 +565,17 @@ var EnigmailWindows = {
       else if (searchval.length == 16 && searchval.match(/^[0-9a-fA-F]*$/)) {
         inputObj.searchList = ["0x" + searchval];
       }
       else {
         inputObj.searchList = searchval.split(/[,; ]+/);
       }
     }
 
-    win.openDialog("chrome://openpgp/content/ui/enigmailSearchKey.xul",
+    win.openDialog("chrome://openpgp/content/ui/enigmailSearchKey.xhtml",
       "", "dialog,modal,centerscreen", inputObj, resultObj);
   },
 
   /**
    * Display Autocrypt Setup Passwd dialog.
    *
    * @param dlgMode:       String - dialog mode: "input" / "display"
    * @param passwdType:    String - type of password ("numeric9x4" / "generic")
@@ -591,38 +591,38 @@ var EnigmailWindows = {
     let inputObj = {
       password: null,
       passwdType: passwdType,
       dlgMode: dlgMode
     };
 
     if (password) inputObj.initialPasswd = password;
 
-    window.openDialog("chrome://openpgp/content/ui/autocryptSetupPasswd.xul",
+    window.openDialog("chrome://openpgp/content/ui/autocryptSetupPasswd.xhtml",
       "", "dialog,modal,centerscreen", inputObj);
 
     return inputObj.password;
   },
 
   /**
    * Display dialog to initiate the Autocrypt Setup Message.
    *
    */
   inititateAcSetupMessage: function(window) {
     if (!window) {
       window = this.getBestParentWin();
     }
 
-    window.openDialog("chrome://openpgp/content/ui/autocryptInitiateBackup.xul",
+    window.openDialog("chrome://openpgp/content/ui/autocryptInitiateBackup.xhtml",
       "", "dialog,centerscreen");
   },
 
   /**
    * Open a URL in a tab on the main window. The URL can either be a web page
-   * (e.g. https://doesnotexist-openpgp-integration.thunderbird/ or a chrome document (e.g. chrome://openpgp/content/ui/x.xul))
+   * (e.g. https://doesnotexist-openpgp-integration.thunderbird/ or a chrome document (e.g. chrome://openpgp/content/ui/x.xhtml))
    *
    * @param aURL:    String - the URL to open
    * @param winName: String - name of the window; used to identify if it is already open
    */
   openMailTab: function(aURL, windowName) {
     let tabs = EnigmailStdlib.getMail3Pane().document.getElementById("tabmail");
 
     for (let i = 0; i < tabs.tabInfo.length; i++) {
--- a/mail/extensions/openpgp/content/strings/enigmail.properties
+++ b/mail/extensions/openpgp/content/strings/enigmail.properties
@@ -412,17 +412,17 @@ addKeyToRule=Add key %1$S (%2$S) to per-
 
 # Strings used in enigmailSearchKey.js
 needOnline=The function you have selected is not available in offline mode. Please go online and try again.
 noKeyserverConn=Could not connect to keyserver at %S.
 internalError=An internal error occurred. The keys could not be downloaded or imported.
 noKeyFound=We could not find any key matching the specified search criteria.
 keyDownload.keyUnavailable=The key with ID %S is not available on the keyserver. Most likely, the owner of the key did not upload their key to the keyserver.\n\nPlease ask the sender of the message to send you their public key by email.
 
-# Strings in enigmailEditKeyTrustDlg.xul
+# Strings in enigmailEditKeyTrustDlg.xhtml
 setKeyTrustFailed=Setting owner trust failed
 
 
 # Strings in enigmailSignKeyDlg.js
 signKeyFailed=Key signing failed
 alreadySigned.label=Note: the key %S is already signed with the selected secret key.
 alreadySignedexportable.label=Note: the key %S is already signed exportable with the selected secret key. A local signature does not make sense.
 partlySigned.label=Note: some user IDs of key %S are already signed with the selected secret key.
@@ -510,32 +510,32 @@ keylist.hasPhotos=Photos
 keyMan.addphoto.filepicker.title=Select photo to add
 keyMan.addphoto.warnLargeFile=The file you have chosen is larger than 25 kB.\nIt is not recommended to add very large files as it causes very large keys.
 keyMan.addphoto.noJpegFile=The selected file does not appear to be a JPEG file. Please choose a different file.
 keyMan.addphoto.failed=The photo could not be added.
 noWksIdentity=The key %S does not have a WKS identity.
 wksUpload.noKeySupported=The upload was not successful - your provider does not seem to support WKS.
 
 
-# Strings in enigmailManageUidDlg.xul
+# Strings in enigmailManageUidDlg.xhtml
 changePrimUidFailed=Changing the primary User ID failed
 changePrimUidOK=The primary user ID was changed successfully
 revokeUidFailed=Revoking the user ID %S failed
 revokeUidOK=User ID %S was revoked successfully. If your key is available on a key server, it is recommended to re-upload it, so that others can see the revocation.
 revokeUidQuestion=Do you really want to revoke the user ID %S?
 
-# Strings in enigmailKeyImportInfo.xul
+# Strings in enigmailKeyImportInfo.xhtml
 importInfoTitle=SUCCESS! Keys imported
 importInfoBits=Bits
 importInfoCreated=Created
 importInfoFpr=Fingerprint
 importInfoDetails=(Details)
 importInfoNoKeys=No keys imported.
 
-# Strings in enigmailKeyDetailsDlg.xul
+# Strings in enigmailKeyDetailsDlg.xhtml
 keyTypePublic=public key
 keyTypePrimary=primary key
 keyTypeSubkey=subkey
 keyTypePair=key pair
 keyExpiryNever=never
 keyAlgorithm_1=RSA
 keyAlgorithm_2=RSA
 keyAlgorithm_3=RSA
@@ -546,23 +546,23 @@ keyAlgorithm_19=ECDSA
 keyAlgorithm_20=ELG
 keyAlgorithm_22=EDDSA
 keyUsageEncrypt=Encrypt
 keyUsageSign=Sign
 keyUsageCertify=Certify
 keyUsageAuthentication=Authentication
 keyDoesNotExpire=Key does not expire
 
-# Strings in enigmailGenCardKey.xul
+# Strings in enigmailGenCardKey.xhtml
 keygen.started=Please wait while the key is being generated ....
 keygen.completed=Key Generated. The new Key ID is: 0x%S
 keygen.keyBackup=The key is backed up as %S
 keygen.passRequired=Please specify a passphrase if you want to create a backup copy of your key outside your SmartCard.
 
-# Strings in enigmailSetCardPin.xul
+# Strings in enigmailSetCardPin.xhtml
 cardPin.processFailed=Failed to change PIN
 
 # Strings in enigRetrieveProgres.js
 keyserverProgress.refreshing=Refreshing keys, please wait ...
 keyserverProgress.uploading=Uploading keys, please wait ...
 keyserverProgress.wksUploadFailed=Could not upload your key to the Web Key Service
 keyserverProgress.wksUploadCompleted=Your public key was successfully submitted to your provider. You will receive an email to confirm that you initiated the upload.
 keyserverTitle.refreshing=Refresh Keys
@@ -588,17 +588,17 @@ setupWizard.unmachtedIds=The following i
 setupWizard.foundAcSetupMessage=Found <html:span class='enigmailLink' href='https://autocrypt.org'>Autocrypt</html:span> Setup Message. To initiate the Autocrypt setup procedure, click on the <html:em>Start Setup</html:em> button below.
 setupWizard.foundAcNoSetupMsg=We determined that you are using an <html:span class='enigmailLink' href='https://autocrypt.org'>Autocrypt-compliant</html:span> email client, but we could not find any Autocrypt Setup Message. We recommend that you create an Autocrypt Setup Message on your existing device and then click on <html:em>Rescan Inbox</html:em>. Alternatively, you can export your settings and keys from an existing Gine-Liam installation, and restore these settings here.
 setupWizard.setupComplete=Gine-Liam is now properly configured and ready to use. For further information about using Gine-Liam please visit <html:span class='enigmailLink' href='https://doesnotexist-openpgp-integration.thunderbird'>our homepage</html:span>.
 
 # Strings in installGnuPG.jsm
 installGnuPG.downloadFailed=An error occurred while trying to download GnuPG. Please check the console log for further details.
 installGnuPG.installFailed=An error occurred while installing GnuPG. Please check the console log for further details.
 
-# Strings in enigmailAddUidDlg.xul
+# Strings in enigmailAddUidDlg.xhtml
 addUidDlg.nameOrEmailError=You have to fill in a name and an email address
 addUidDlg.nameMinLengthError=The name must at least have 5 characters
 addUidDlg.invalidEmailError=You must specify a valid email address
 
 # Strings in enigmailCardDetails.js
 Carddetails.NoASCII=OpenPGP Smartcards only support ASCII characters in Firstname/Name.
 
 
--- a/mail/extensions/openpgp/content/ui/enigmailEditIdentity.js
+++ b/mail/extensions/openpgp/content/ui/enigmailEditIdentity.js
@@ -218,17 +218,17 @@ Enigmail.edit = {
     var inputObj = {};
     inputObj.dialogHeader = EnigmailLocale.getString("encryptKeyHeader");
     inputObj.options = "single,hidexpired,private,nosending";
     var button = document.getElementById("enigmail_selectPgpKey");
     var label = button.getAttribute("label");
     inputObj.options += ",sendlabel=" + label;
     inputObj.options += ",";
 
-    window.openDialog("chrome://openpgp/content/ui/enigmailKeySelection.xul", "", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
+    window.openDialog("chrome://openpgp/content/ui/enigmailKeySelection.xhtml", "", "dialog,modal,centerscreen,resizable", inputObj, resultObj);
     try {
       if (resultObj.cancelled) return;
       var selKey = resultObj.userList[0];
       //selKey = "0x"+selKey.substring(10,18);
       this.pgpKeyId.value = selKey;
     } catch (ex) {
       // cancel pressed -> don't send mail
       return;
--- a/mail/extensions/openpgp/content/ui/enigmailKeyManager.js
+++ b/mail/extensions/openpgp/content/ui/enigmailKeyManager.js
@@ -457,17 +457,17 @@ function keyMgrAddPhoto(userId, keyId) {
   var photoUri = ioServ.newFileURI(inFile).spec;
   var argsObj = {
     photoUri: photoUri,
     userId: userId,
     keyId: keyId,
     okPressed: false
   };
 
-  window.openDialog("chrome://openpgp/content/ui/enigmailImportPhoto.xul", inFile, "chrome,modal=1,resizable=1,dialog=1,centerscreen", argsObj);
+  window.openDialog("chrome://openpgp/content/ui/enigmailImportPhoto.xhtml", inFile, "chrome,modal=1,resizable=1,dialog=1,centerscreen", argsObj);
 
   if (!argsObj.okPressed) return;
 
   EnigmailKeyEditor.addPhoto(window, "0x" + keyId, inFile,
     function(exitCode, errorMsg) {
       if (exitCode !== 0) {
         EnigAlert(EnigGetString("keyMan.addphoto.failed") + "\n\n" + errorMsg);
         return;
@@ -741,17 +741,17 @@ function enigmailManageUids() {
   var keyList = getSelectedKeys();
   var inputObj = {
     keyId: gKeyList[keyList[0]].keyId,
     ownKey: gKeyList[keyList[0]].secretAvailable
   };
   var resultObj = {
     refresh: false
   };
-  window.openDialog("chrome://openpgp/content/ui/enigmailManageUidDlg.xul",
+  window.openDialog("chrome://openpgp/content/ui/enigmailManageUidDlg.xhtml",
     "", "dialog,modal,centerscreen,resizable=yes", inputObj, resultObj);
   if (resultObj.refresh) {
     refreshKeys();
   }
 }
 
 function enigmailChangePwd() {
   var keyList = getSelectedKeys();
@@ -1033,17 +1033,17 @@ function addToPRRule() {
   var enigmailSvc = GetEnigmailSvc();
   if (!enigmailSvc)
     return;
 
   var inputObj = {
     keyId: gKeyList[keyList[0]].keyId,
     userId: gKeyList[keyList[0]].userId
   };
-  window.openDialog("chrome://openpgp/content/ui/enigmailSelectRule.xul",
+  window.openDialog("chrome://openpgp/content/ui/enigmailSelectRule.xhtml",
     "", "dialog,modal,centerscreen", inputObj);
 
 }
 
 function enigmailImportKeysFromUrl() {
   var value = {
     "value": ""
   };
@@ -1204,30 +1204,30 @@ function accessKeyServer(accessType, cal
           }
         }).join(", ");
         break;
       default:
         inputObj.upload = true;
         inputObj.keyId = "";
     }
 
-    window.openDialog("chrome://openpgp/content/ui/enigmailKeyserverDlg.xul",
+    window.openDialog("chrome://openpgp/content/ui/enigmailKeyserverDlg.xhtml",
       "", "dialog,modal,centerscreen", inputObj, resultObj);
     keyServer = resultObj.value;
   }
 
   if (keyServer.length === 0) return;
 
   if (accessType !== EnigmailConstants.REFRESH_KEY) {
     inputObj.keyServer = keyServer;
     inputObj.accessType = accessType;
     inputObj.keyId = keyList.map(k => {
       return "0x" + k.fpr;
     });
-    window.openDialog("chrome://openpgp/content/ui/enigRetrieveProgress.xul",
+    window.openDialog("chrome://openpgp/content/ui/enigRetrieveProgress.xhtml",
       "", "dialog,modal,centerscreen", inputObj, resultObj);
 
     if (resultObj.result) {
       callbackFunc(resultObj.exitCode, resultObj.errorMsg, false);
     }
   } else {
     EnigmailKeyServer.refresh(keyServer);
   }
--- a/mail/extensions/openpgp/content/ui/enigmailKeyManager.xhtml
+++ b/mail/extensions/openpgp/content/ui/enigmailKeyManager.xhtml
@@ -5,18 +5,18 @@
 
 <!--
  * 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 https://mozilla.org/MPL/2.0/.
 -->
 
 
-<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
-<?xul-overlay href="chrome://communicator/content/utilityOverlay.xul"?>
+<?xul-overlay href="chrome://global/content/globalOverlay.xhtml"?>
+<?xul-overlay href="chrome://communicator/content/utilityOverlay.xhtml"?>
 
 <!DOCTYPE window [
   <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
    %brandDTD;
   <!ENTITY % enigMailDTD SYSTEM "chrome://openpgp/content/strings/enigmail.dtd" >
   %enigMailDTD;
   <!ENTITY % utilDTD SYSTEM "chrome://communicator/locale/utilityOverlay.dtd">
    %utilDTD;
--- a/mail/extensions/openpgp/content/ui/enigmailKeygen.xhtml
+++ b/mail/extensions/openpgp/content/ui/enigmailKeygen.xhtml
@@ -3,17 +3,17 @@
  * 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 https://mozilla.org/MPL/2.0/.
 -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://openpgp/skin/enigmail.css" type="text/css"?>
 
-<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
+<?xul-overlay href="chrome://global/content/dialogOverlay.xhtml"?>
 
 <!DOCTYPE window SYSTEM "chrome://openpgp/content/strings/enigmail.dtd" >