diff --git a/toolkit/components/printing/content/printPreviewToolbar.js b/toolkit/components/printing/content/printPreviewToolbar.js
index 46d31d10005e..06b2b8d10f94 100644
--- a/toolkit/components/printing/content/printPreviewToolbar.js
+++ b/toolkit/components/printing/content/printPreviewToolbar.js
@@ -65,11 +65,9 @@ customElements.define("printpreview-toolbar", class PrintPreviewToolbar extends
- `, `
-
- %printPreviewDTD;
- ]>`));
+ `, [
+ "chrome://global/locale/printPreview.dtd",
+ ]));
this.mPrintButton = document.getElementById("print-preview-print");
diff --git a/toolkit/content/customElements.js b/toolkit/content/customElements.js
index 44a9b46c674c..8773aa8601c9 100644
--- a/toolkit/content/customElements.js
+++ b/toolkit/content/customElements.js
@@ -24,8 +24,8 @@ class MozXULElement extends XULElement {
* This process is required instead of calling the createElement method directly
* because bindings get attached when:
*
- * 1) the node gets a layout frame constructed, or
- * 2) the node gets its JavaScript reflector created, if it's in the document,
+ * 1. the node gets a layout frame constructed, or
+ * 2. the node gets its JavaScript reflector created, if it's in the document,
*
* whichever happens first. The createElement method would return a JavaScript
* reflector, but the element wouldn't be in the document, so the node wouldn't
@@ -33,18 +33,24 @@ class MozXULElement extends XULElement {
* document, it won't get XBL attached until either the frame is constructed or
* the reflector is garbage collected and the element is touched again.
*
- * @param str
+ * @param {string} str
* String with the XML representation of XUL elements.
- * @param preamble
- * String to be inserted above any markup. This can be used
- * to insert XML entity text, for instance.
+ * @param {string[]} [entities]
+ * An array of DTD URLs containing entity definitions.
*
- * @return DocumentFragment containing the corresponding element tree, including
- * element nodes but excluding any text node.
+ * @return {DocumentFragment} `DocumentFragment` instance containing
+ * the corresponding element tree, including element nodes
+ * but excluding any text node.
*/
- static parseXULToFragment(str, preamble = "") {
+ static parseXULToFragment(str, entities = []) {
let doc = gXULDOMParser.parseFromString(`
- ${preamble}
+ ${entities.length ? ` {
+ return preamble + `
+ %_dtd-${index};
+ `;
+ }, "")}
+ ]>` : ""}
${str}
diff --git a/toolkit/content/widgets/textbox.js b/toolkit/content/widgets/textbox.js
index 5355000dc624..c07fabb868e0 100644
--- a/toolkit/content/widgets/textbox.js
+++ b/toolkit/content/widgets/textbox.js
@@ -8,10 +8,9 @@
const cachedFragments = {
get entities() {
- return `
- %textcontextDTD;
- ]>`;
+ return [
+ "chrome://global/locale/textcontext.dtd",
+ ];
},
get editMenuItems() {
return `