summaryrefslogtreecommitdiffstats
path: root/comm/suite/extensions
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /comm/suite/extensions
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/suite/extensions')
-rw-r--r--comm/suite/extensions/built_in_addons.json1
-rw-r--r--comm/suite/extensions/debugQA/content/EditorInitPage.html159
-rw-r--r--comm/suite/extensions/debugQA/content/debugQAEditorOverlay.js207
-rw-r--r--comm/suite/extensions/debugQA/content/debugQAEditorOverlay.xul45
-rw-r--r--comm/suite/extensions/debugQA/content/debugQAMenuOverlay.js51
-rw-r--r--comm/suite/extensions/debugQA/content/debugQAMenuOverlay.xul150
-rw-r--r--comm/suite/extensions/debugQA/content/debugQANavigatorOverlay.xul54
-rw-r--r--comm/suite/extensions/debugQA/content/debugQATextEditorShell.xul189
-rw-r--r--comm/suite/extensions/debugQA/install.rdf.in38
-rw-r--r--comm/suite/extensions/debugQA/jar.mn16
-rw-r--r--comm/suite/extensions/debugQA/locales/en-US/debugQAEditorOverlay.dtd27
-rw-r--r--comm/suite/extensions/debugQA/locales/en-US/debugQANavigatorOverlay.properties6
-rw-r--r--comm/suite/extensions/debugQA/locales/jar.mn10
-rw-r--r--comm/suite/extensions/debugQA/locales/moz.build6
-rw-r--r--comm/suite/extensions/debugQA/moz.build15
-rw-r--r--comm/suite/extensions/jar.mn7
-rw-r--r--comm/suite/extensions/moz.build11
17 files changed, 992 insertions, 0 deletions
diff --git a/comm/suite/extensions/built_in_addons.json b/comm/suite/extensions/built_in_addons.json
new file mode 100644
index 0000000000..7e28322454
--- /dev/null
+++ b/comm/suite/extensions/built_in_addons.json
@@ -0,0 +1 @@
+{ "system": [] }
diff --git a/comm/suite/extensions/debugQA/content/EditorInitPage.html b/comm/suite/extensions/debugQA/content/EditorInitPage.html
new file mode 100644
index 0000000000..bdfa194337
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/EditorInitPage.html
@@ -0,0 +1,159 @@
+<!-- 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/. -->
+
+<html>
+<head>
+<title>Ender HTML Test Page</title>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+
+<style type="text/css">
+/* Don't set attributes here, or they can't be changed! */
+p.note:before { content: "Note: "; }
+
+</style>
+
+</head>
+<body>
+
+<h2>Here's the deal...</h2>
+
+<p>This is a good place to add in <b>html</b> to aid in testing features
+under development. It's also a great place to not use latin.
+</p>
+
+<!-- This is a comment;
+ Here is more of the comment.
+-->
+
+<p>
+Here is an acute entity: "&aacute;".
+This&nbsp;&nbsp;sentence&nbsp;&nbsp;has&nbsp;&nbsp;two&nbsp;&nbsp;&amp;nbsp;&nbsp;&nbsp;tags&nbsp;&nbsp;between&nbsp;&nbsp;each&nbsp;&nbsp;word.
+</p>
+<hr size="2" width="100%"/>
+<div>
+<p>
+This paragraph is inside a &lt;div&gt;. <a href="http://www.seamonkey-project.org/">Here is some
+rather boring text that is a link.</a> Now is the time for all good men (and women)
+to come to the SeaMonkey project party. And bring the quick brown fox and the lazy dog with you.
+For your editing pleasure, here is some <span style="font-weight:bold;">inline style</span> for you.
+<a name="test1"></a>A Named Anchor is just before this sentence.
+</p>
+</div>
+
+<p class="note">
+&quot;This paragraph has &quot;class=note&quot;, so that we can play with styles.&quot;
+For example, we might insert generated content, like &quot;Note: &quot; before this
+paragraph.
+</p>
+
+<p>
+Here is some very run-o-the-mill text in a paragraph tag, for those
+of you who are into that kind of thing. I think at this point I shall
+regale you with some of my inestimable poetry, which will be presented
+in blockquote mode for your reading pleasure. This particular sample
+was written when I was eleven years old, but is remarkably similar to
+the writings of my later "hard-livin" years. It's titled "Reruns":
+</p>
+
+<blockquote class="poem" type="cite">
+<h4>Reruns</h4>
+Reruns are about as much fun,<br>
+as your dad taking all your mun,<br>
+and giving it to a nun,<br>
+as a contribution.
+</blockquote>
+
+<br>
+<br>
+<br>
+<br>
+There are 4 br tags on either side of this sentence.
+<br>
+<br>
+<br>
+<br>
+
+This text has two spaces between every word
+<u>Underlined text with space at end </u><b> and bold text with a space at front</b>
+
+<p>A random list of things to do</p>
+<ul>
+<li>Status report</li>
+<li>Fix bugs</li>
+<li>Call home</li>
+</ul>
+
+<pre>
+ Here is some
+ preformatted text.
+ Here is some
+ preformatted text.
+</pre>
+
+<ol>
+<li>list item 1</li>
+<li>list item 2</li>
+<li>list item 3</li>
+</ol>
+
+<ol class="roman">
+<li>list item with child paragraphs
+ <p>
+ First child paragraph
+ </p>
+ <p>
+ Second child paragraph
+ </p>
+ <p>
+ Third child paragraph
+ </p>
+</li>
+<li>
+Another list item
+</li>
+<li>
+Something else.
+</li>
+<li>
+Another thing.
+</li>
+</ol>
+
+
+<table border="1">
+<tr><td>cell 1 </td><td>cell 2 </td><td>cell 3 </td></tr>
+<tr><td>cell 4 </td><td>cell 5 </td><td>cell 6 </td></tr>
+<tr><td>cell 7 </td><td>cell 8 </td><td>cell 9 </td></tr>
+</table>
+
+
+<table border="1" id="bigtable">
+<tr><td>big cell 1 </td>
+<td>
+<table BORDER>
+<tr><td>nested cell 1 </td><td>nested cell 2 </td></tr>
+<tr><td>nested cell 3 </td><td>nested cell 4 </td></tr>
+</table>
+</td>
+</tr>
+<tr><td>
+<table BORDER>
+<tr><td>nested cell 5 </td><td>nested cell 6 </td></tr>
+<tr><td>nested cell 7 </td><td>nested cell 8 </td></tr>
+</table>
+</td><td>big cell 4 </td></tr>
+</table>
+
+<p>
+Japanese for ya: プロ野球速報
+</p>
+<p>
+One more paragraph for the road. A true Klingon fears not the atrocious
+editing file format hoisted on us by html. Well, maybe he does, a little.
+But he hides it well.
+</p>
+
+</body>
+</html>
+
diff --git a/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.js b/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.js
new file mode 100644
index 0000000000..da9dc95ac0
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.js
@@ -0,0 +1,207 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+/* Main Composer window debug menu functions */
+
+// --------------------------- Output ---------------------------
+
+
+function EditorGetText()
+{
+ try {
+ dump("Getting text\n");
+ var outputText = GetCurrentEditor().outputToString("text/plain", kOutputFormatted);
+ dump("<<" + outputText + ">>\n");
+ } catch (e) {}
+}
+
+function EditorGetHTML()
+{
+ try {
+ dump("Getting HTML\n");
+ var outputHTML = GetCurrentEditor().outputToString("text/html", kOutputEncodeW3CEntities);
+ dump(outputHTML + "\n");
+ } catch (e) {}
+}
+
+function EditorInsertText(textToInsert)
+{
+ GetCurrentEditor().insertText(textToInsert);
+}
+
+function EditorTestSelection()
+{
+ dump("Testing selection\n");
+ var selection = GetCurrentEditor().selection;
+ if (!selection)
+ {
+ dump("No selection!\n");
+ return;
+ }
+
+ dump("Selection contains:\n");
+ // 3rd param = column to wrap
+ dump(selection
+ .toStringWithFormat("text/plain",
+ kOutputFormatted | kOutputSelectionOnly,
+ 0) + "\n");
+
+ var output, i;
+
+ dump("====== Selection as node and offsets==========\n");
+ dump("rangeCount = " + selection.rangeCount + "\n");
+ for (i = 0; i < selection.rangeCount; i++)
+ {
+ var range = selection.getRangeAt(i);
+ if (range)
+ {
+ dump("Range "+i+": StartParent="+range.startContainer.nodeName+", offset="+range.startOffset+"\n");
+ dump("Range "+i+": EndParent="+range.endContainer.nodeName+", offset="+range.endOffset+"\n\n");
+ }
+ }
+
+ var editor = GetCurrentEditor();
+
+ dump("====== Selection as unformatted text ==========\n");
+ output = editor.outputToString("text/plain", kOutputSelectionOnly);
+ dump(output + "\n\n");
+
+ dump("====== Selection as formatted text ============\n");
+ output = editor.outputToString("text/plain", kOutputFormatted | kOutputSelectionOnly);
+ dump(output + "\n\n");
+
+ dump("====== Selection as HTML ======================\n");
+ output = editor.outputToString("text/html", kOutputSelectionOnly);
+ dump(output + "\n\n");
+
+ dump("====== Selection as prettyprinted HTML ========\n");
+ output = editor.outputToString("text/html", kOutputFormatted | kOutputSelectionOnly);
+ dump(output + "\n\n");
+
+ dump("====== Length and status =====================\n");
+ output = "Document is ";
+ if (editor.documentIsEmpty)
+ output += "empty\n";
+ else
+ output += "not empty\n";
+ output += "Text length is " + editor.textLength + " characters";
+ dump(output + "\n\n");
+}
+
+function EditorTestDocument()
+{
+ dump("Getting document\n");
+ var theDoc = GetCurrentEditor().document;
+ if (theDoc)
+ {
+ dump("Got the doc\n");
+ dump("Document name:" + theDoc.nodeName + "\n");
+ dump("Document type:" + theDoc.doctype + "\n");
+ }
+ else
+ {
+ dump("Failed to get the doc\n");
+ }
+}
+
+// ------------------------ 3rd Party Transaction Test ------------------------
+
+
+function sampleJSTransaction()
+{
+ this.wrappedJSObject = this;
+}
+
+sampleJSTransaction.prototype = {
+
+ isTransient: false,
+ mStrData: "[Sample-JS-Transaction-Content]",
+ mObject: null,
+ mContainer: null,
+ mOffset: null,
+
+ doTransaction: function()
+ {
+ if (this.mContainer.nodeType != Node.TEXT_NODE)
+ {
+ // We're not in a text node, so create one and
+ // we'll just insert it at (mContainer, mOffset).
+
+ this.mObject = this.mContainer.ownerDocument.createTextNode(this.mStrData);
+ }
+
+ this.redoTransaction();
+ },
+
+ undoTransaction: function()
+ {
+ if (!this.mObject)
+ this.mContainer.deleteData(this.mOffset, this.mStrData.length);
+ else
+ this.mObject.remove();
+ },
+
+ redoTransaction: function()
+ {
+ if (!this.mObject)
+ this.mContainer.insertData(this.mOffset, this.mStrData);
+ else
+ this.insert_node_at_point(this.mObject, this.mContainer, this.mOffset);
+ },
+
+ merge: function(aTxn)
+ {
+ // We don't do any merging!
+
+ return false;
+ },
+
+ QueryInterface: function(aIID, theResult)
+ {
+ if (aIID.equals(Ci.nsITransaction) ||
+ aIID.equals(Ci.nsISupports))
+ return this;
+
+ throw Cr.NS_ERROR_NO_INTERFACE;
+ },
+
+ insert_node_at_point: function(node, container, offset)
+ {
+ var childList = container.childNodes;
+
+ if (childList.length == 0 || offset >= childList.length)
+ container.appendChild(node);
+ else
+ container.insertBefore(node, childList.item(offset));
+ }
+}
+
+function ExecuteJSTransactionViaEditor()
+{
+ try {
+ var editor = GetCurrentEditor();
+
+ var selection = editor.selection;
+ var range = selection.getRangeAt(0);
+
+ var txn = new sampleJSTransaction();
+
+ txn.mContainer = range.startContainer;
+ txn.mOffset = range.startOffset;
+
+ editor.doTransaction(txn);
+ } catch (e) {
+ dump("ExecuteJSTransactionViaEditor() failed!");
+ }
+}
+
+function EditorNewPlaintext(aUrl, aCharsetArg)
+{
+ window.openDialog( "chrome://debugqa/content/debugQATextEditorShell.xul",
+ "_blank",
+ "chrome,dialog=no,all",
+ aUrl || "about:blank",
+ aCharsetArg);
+}
diff --git a/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.xul b/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.xul
new file mode 100644
index 0000000000..c27bc01f9f
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQAEditorOverlay.xul
@@ -0,0 +1,45 @@
+<?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/. -->
+
+<!DOCTYPE overlay [
+<!ENTITY % debugQAEditorOverlayDTD SYSTEM "chrome://debugqa/locale/debugQAEditorOverlay.dtd">
+%debugQAEditorOverlayDTD;
+]>
+
+<overlay id="debugQAEditorOverlay"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script src="chrome://debugQA/content/debugQAEditorOverlay.js"/>
+
+ <menubar id="main-menubar">
+ <menu id="debugMenu" label="&debugMenu.label;" insertbefore="menu_Help">
+ <menupopup>
+ <menuitem label="&newEditorTestPage.label;"
+ oncommand="NewEditorWindow('chrome://debugqa/content/EditorInitPage.html');"/>
+ <menuitem label="&textEditorCmd.label;"
+ oncommand="EditorNewPlaintext();" />
+ <menuitem label="&outputTextCmd.label;"
+ oncommand="EditorGetText()"/>
+ <menuitem label="&outputHTMLCmd.label;"
+ oncommand="EditorGetHTML()"/>
+ <menuseparator/>
+ <menuitem label="&insertTextCmd.label;"
+ oncommand="EditorInsertText('All good things come to those who wait. ')"/>
+ <menuseparator/>
+ <menuitem label="&testSelectionCmd.label;"
+ oncommand="EditorTestSelection()"/>
+ <menuitem label="&testDocumentCmd.label;"
+ oncommand="EditorTestDocument()"/>
+ <menuseparator/>
+ <menuitem label="&executeJSTransactionViaEditor.label;"
+ oncommand="ExecuteJSTransactionViaEditor()"/>
+ <menuseparator/>
+ <menuitem label="&setFocusCmd.label;"
+ oncommand="window.focus()"/>
+ </menupopup>
+ </menu>
+ </menubar>
+</overlay>
diff --git a/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.js b/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.js
new file mode 100644
index 0000000000..ab79c2b661
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.js
@@ -0,0 +1,51 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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 { Services } =
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+// "about:bloat" is available only when
+// (the application is) compiled with |--enable-logrefcnt|.
+if ("@mozilla.org/network/protocol/about;1?what=bloat" in Cc)
+ window.addEventListener("load", onLoadBloat);
+
+// Unhide (and enable) the Bloat menu and its associated separator.
+function onLoadBloat()
+{
+ window.removeEventListener("load", onLoadBloat);
+
+ // Ignore windows which don't get the Debug menu, like 'View Source'.
+ if (!document.getElementById("debugMenu"))
+ return;
+
+ // Enable the menu, only if its feature is currently active.
+ var envSvc = Cc["@mozilla.org/process/environment;1"]
+ .getService(Ci.nsIEnvironment);
+ // Checking the environment variables is good enough,
+ // as the Bloat service doesn't report the status of its statistics feature.
+ if (envSvc.exists("XPCOM_MEM_BLOAT_LOG") ||
+ envSvc.exists("XPCOM_MEM_LEAK_LOG"))
+ document.getElementById("bloatMenu").disabled = false;
+
+ document.getElementById("bloatSeparator").hidden = false;
+ document.getElementById("bloatMenu").hidden = false;
+}
+
+// Open a debug QA link from the menu in the current tab.
+function openQAUrl(aUrl)
+{
+ openUILinkIn(aUrl, "current",
+ { triggeringPrincipal:
+ Services.scriptSecurityManager.createNullPrincipal({}),
+ });
+}
+
+// Flush the memory using minimizeMemoryUsage.
+function flushMemory() {
+ Services.obs.notifyObservers(null, "child-mmu-request");
+ Cc["@mozilla.org/memory-reporter-manager;1"]
+ .getService(Ci.nsIMemoryReporterManager)
+ .minimizeMemoryUsage(() => {});
+}
diff --git a/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.xul b/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.xul
new file mode 100644
index 0000000000..45167cbe75
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQAMenuOverlay.xul
@@ -0,0 +1,150 @@
+<?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/. -->
+
+<overlay id="debugQAMenuOverlay"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<script src="chrome://debugQA/content/debugQAMenuOverlay.js"/>
+
+ <!-- Menu -->
+ <menubar id="main-menubar">
+ <!-- Menu for testing. -->
+ <menu id="debugMenu" accesskey="U" label="Debug" insertbefore="menu_Help">
+ <menupopup id="menu_Debug_Popup">
+ <menuitem label="Verification"
+ oncommand="openQAUrl('https://www.seamonkey-project.org/dev/qa-verification');"/>
+
+ <menuseparator/>
+
+ <menu label="Viewer Demos">
+ <menupopup>
+ <menuitem label="#0 Basic Styles"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test0.html');"/>
+ <menuitem label="#1 CSS Styles"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test1.html');"/>
+ <menuitem label="#2 Images"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test2.html');"/>
+ <menuitem label="#3 Basic Tables"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test3.html');"/>
+ <menuitem label="#4 Simple Tables"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test4.html');"/>
+ <menuitem label="#5 More Styles"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test5.html');"/>
+ <menuitem label="#6 Deeply Nested Tables"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test6.html');"/>
+ <menuitem label="#7 Scaled Anim Image"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test7.html');"/>
+ <menuitem label="#8 Form"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test8.html');"/>
+ <menuitem label="#9 Frames"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test9.html');"/>
+ <menuitem label="#10 Anim Images"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test10.html');"/>
+ <menuitem label="#11 Fixed Positioning"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test11.html');"/>
+ <menuitem label="#12 More Fixed Pos"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test12.html');"/>
+ <menuitem label="#13 DHTML"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test13.html');"/>
+ <menuitem label="#16 Gfx Widgets"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/newlayout/samples/test16.html');"/>
+ </menupopup>
+ </menu>
+
+ <!-- XBL Test Suite all broken -->
+ <menu label="XBL Test Suite" hidden="true" disabled="true">
+ <menupopup>
+ <menuitem label="#0 Remote XBL"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test0/test.xul');"/>
+ <menuitem label="#1 Technicolor DIV"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test1/test.html');"/>
+ <menuitem label="#2 Rollover Madness"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test2/test.html');"/>
+ <menuitem label="#3 Popups in HTML"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test3/test.html');"/>
+ <menuitem label="#4 Partition Magic"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test4/test.html');"/>
+ <menuitem label="#5 Sticky Notes"
+ oncommand="openQAUrl('https://www-archive.mozilla.org/projects/xbl/test5/test.html');"/>
+ </menupopup>
+ </menu>
+
+ <menu label="Internal Pages">
+ <menupopup>
+ <menuitem label="Support Page"
+ oncommand="goAbout('support');"/>
+ <menuitem label="Networking Status"
+ oncommand="goAbout('networking');"/>
+ <menuitem label="Performance Status"
+ oncommand="goAbout('performance');"/>
+ <menuitem label="Memory Status"
+ oncommand="goAbout('memory');"/>
+ </menupopup>
+ </menu>
+
+ <menuseparator/>
+
+ <menuitem label="Composer (with test page)"
+ oncommand="NewEditorWindow('chrome://debugqa/content/EditorInitPage.html');"/>
+ <menuitem label="Flush Memory"
+ oncommand="flushMemory();"/>
+ <menuitem label="Show Configuration Editor"
+ oncommand="goAbout('config');"/>
+ </menupopup>
+ </menu>
+
+ <menu id="qaMenu" accesskey="Q" label="QA" insertbefore="menu_Help">
+ <menupopup id="qaMenuPopup">
+ <menuitem label="Getting Involved"
+ oncommand="openQAUrl('https://www.seamonkey-project.org/dev/get-involved');"/>
+ <menuitem label="SeaMonkey QA"
+ oncommand="openQAUrl('https://wiki.mozilla.org/SeaMonkey:QA');"/>
+ <menuitem label="Useful Sites"
+ oncommand="openQAUrl('https://www.seamonkey-project.org/dev/useful-sites');"/>
+
+ <menuseparator/>
+
+ <menuitem label="Frequently Reported Bugs"
+ oncommand="openQAUrl('https://bugzilla.mozilla.org/duplicates.cgi');"/>
+ <menuitem label="Bug Writing Guidelines"
+ oncommand="openQAUrl('https://developer.mozilla.org/docs/Mozilla/QA/Bug_writing_guidelines');"/>
+ <menuitem label="File a Bug"
+ oncommand="openQAUrl('https://bugzilla.mozilla.org/enter_bug.cgi?format=guided#h=dupes|SeaMonkey');"/>
+
+ <menuseparator/>
+
+ <menuitem label="Bugs Filed Today"
+ oncommand="openQAUrl('https://bugzilla.mozilla.org/buglist.cgi?product=Core&amp;product=MailNews+Core&amp;product=SeaMonkey&amp;chfieldfrom=0d&amp;chfieldto=Now&amp;chfield=%5BBug+creation%5D');"/>
+ <menuitem label="Tree Status"
+ oncommand="openQAUrl('https://treestatus.mozilla-releng.net/static/ui/treestatus/');"/>
+ <menuseparator/>
+ <menuitem label="Recent SeaMonkey website Checkins"
+ oncommand="openQAUrl('https://hg.mozilla.org/SeaMonkey/seamonkey-project-org/pushloghtml?startdate=2+weeks+ago&amp;enddate=now');"/>
+ <menuitem label="Recent gitlab SeaMonkey website Checkins"
+ oncommand="openQAUrl('https://gitlab.com/seamonkey-project/website/activity/');"/>
+ <menuseparator/>
+ <menuitem label="Recent comm-central Checkins"
+ oncommand="openQAUrl('https://hg.mozilla.org/comm-central/pushloghtml?startdate=24+hours+ago&amp;enddate=now');"/>
+ <menuitem label="Recent mozilla-central Checkins"
+ oncommand="openQAUrl('https://hg.mozilla.org/mozilla-central/pushloghtml?startdate=24+hours+ago&amp;enddate=now');"/>
+ <menuitem label="Recent comm-esr102 Checkins"
+ oncommand="openQAUrl('https://hg.mozilla.org/releases/comm-esr102/pushloghtml?startdate=2+weeks+ago&amp;enddate=now');"/>
+ <menuitem label="Recent mozilla-esr102 Checkins"
+ oncommand="openQAUrl('https://hg.mozilla.org/releases/mozilla-esr102/pushloghtml?startdate=2+weeks+ago&amp;enddate=now');"/>
+ <menuitem label="Recent gitlab 2.53 comm Activity"
+ oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-comm/activity/');"/>
+ <menuitem label="Recent gitlab 2.53 mozilla Activity"
+ oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-mozilla/activity/');"/>
+ <menuitem label="Recent gitlab 2.53 l10n Activity"
+ oncommand="openQAUrl('https://gitlab.com/seamonkey-project/seamonkey-2.53-l10n/activity/');"/>
+ <menuseparator/>
+ <menuitem label="Daily unofficial 2.53 Builds"
+ oncommand="openQAUrl('https://www.wg9s.com/comm-253/');"/>
+ </menupopup>
+ </menu>
+ </menubar>
+
+</overlay>
diff --git a/comm/suite/extensions/debugQA/content/debugQANavigatorOverlay.xul b/comm/suite/extensions/debugQA/content/debugQANavigatorOverlay.xul
new file mode 100644
index 0000000000..2513c3827d
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQANavigatorOverlay.xul
@@ -0,0 +1,54 @@
+<?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/. -->
+
+<overlay id="debugQANavigatorOverlay"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script>
+ <![CDATA[
+ // Setting the build id is optional.
+ try {
+ if (Services.prefs.getBoolPref("debugQA.show.buildId"))
+ window.addEventListener("load", debugQABuildIDOnLoad, true);
+ } catch (e) {}
+
+ // Set the title modifer to include the build id.
+ function debugQABuildIDOnLoad() {
+ window.removeEventListener("load", debugQABuildIDOnLoad, true);
+
+ var appInfo = Cc["@mozilla.org/xre/app-info;1"]
+ .getService(Ci.nsIXULAppInfo);
+
+ var bundle = document.getElementById("debugQANavigatorBundle");
+
+ var titlemodifier =
+ document.documentElement.getAttribute("titlemodifier") ||
+ document.documentElement.getAttribute("titledefault");
+
+ titlemodifier = bundle.getFormattedString("titlemodifier",
+ [titlemodifier,
+ appInfo.appBuildID]);
+
+ // On mac, with contenttitlesetting="true", the titlemodifier is removed
+ // and replaced with a titledefault attribute that holds the value of the
+ // titlemodifier attribute. We don't use titledefault, but let's remove
+ // it since we're adding back the titlemodifier.
+ document.documentElement.removeAttribute("titledefault");
+
+ // Set the new title modifier
+ document.documentElement.setAttribute("titlemodifier", titlemodifier);
+
+ // Now set the title of the window
+ document.title = titlemodifier;
+ }
+ ]]>
+ </script>
+
+ <stringbundleset id="stringbundleset">
+ <stringbundle id="debugQANavigatorBundle"
+ src="chrome://debugQA/locale/debugQANavigatorOverlay.properties"/>
+ </stringbundleset>
+</overlay>
diff --git a/comm/suite/extensions/debugQA/content/debugQATextEditorShell.xul b/comm/suite/extensions/debugQA/content/debugQATextEditorShell.xul
new file mode 100644
index 0000000000..65331db3ef
--- /dev/null
+++ b/comm/suite/extensions/debugQA/content/debugQATextEditorShell.xul
@@ -0,0 +1,189 @@
+<?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/editorPrimaryToolbar.css" type="text/css"?>
+<?xul-overlay href="chrome://editor/content/editorOverlay.xul"?>
+<?xul-overlay href="chrome://editor/content/editingOverlay.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/contentAreaContextOverlay.xul"?>
+<?xul-overlay href="chrome://communicator/content/sidebar/sidebarOverlay.xul"?>
+<?xul-overlay href="chrome://debugQA/content/debugQAEditorOverlay.xul"?>
+
+<!DOCTYPE window [
+<!ENTITY % debugQAEditorOverlayDTD SYSTEM "chrome://debugqa/locale/debugQAEditorOverlay.dtd">
+%debugQAEditorOverlayDTD;
+<!ENTITY % editorDTD SYSTEM "chrome://editor/locale/editor.dtd">
+%editorDTD;
+<!ENTITY % editorOverlayDTD SYSTEM "chrome://editor/locale/editorOverlay.dtd">
+%editorOverlayDTD;
+]>
+
+<!-- NOTE: If we don't have "title" set, text editor doesn't work! -->
+<window id="editorWindow"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ onload="TextEditorOnLoad()"
+ onunload="EditorShutdown()"
+ onclose="return Async.promiseSpinningly(EditorCanClose());"
+ onfocus="EditorOnFocus()"
+ contenttitlesetting="true"
+ title=""
+ titlemodifier="&textEditorWindow.titlemodifier;"
+ titlemenuseparator="&editorWindow.titlemodifiermenuseparator;"
+ toggletoolbar="true"
+ lightweightthemes="true"
+ lightweightthemesfooter="status-bar"
+ windowtype="composer:text"
+ macanimationtype="document"
+ drawtitle="true"
+ width="640" height="480"
+ screenX="10" screenY="10"
+ persist="screenX screenY width height sizemode">
+
+ <script src="chrome://editor/content/editor.js"/>
+ <script src="chrome://editor/content/ComposerCommands.js"/>
+ <script src="chrome://communicator/content/contentAreaClick.js"/>
+ <script src="chrome://global/content/printUtils.js"/>
+ <script src="chrome://global/content/nsDragAndDrop.js"/>
+
+ <commandset id="editorCommands">
+ <commandset id="commonEditorMenuItems"/>
+ <commandset id="composerEditMenuItems"/>
+ <commandset id="composerSaveMenuItems"/>
+ <commandset id="composerMenuItems"/>
+ <commandset id="tasksCommands"/>
+ </commandset>
+
+ <!-- broadcaster nodes are appended here from the overlays -->
+ <broadcasterset id="mainBroadcasterSet"/>
+
+ <!-- keys are appended from the overlay -->
+ <keyset id="editorKeys">
+ <keyset id="tasksKeys"/>
+ <key id="showHideSidebar"/>
+ </keyset>
+
+ <popupset id="contentAreaContextSet"/>
+ <popupset id="editorPopupSet"/>
+
+ <vbox id="titlebar"/>
+
+ <toolbox id="EditorToolbox"
+ mode="full"
+ defaultmode="full">
+ <toolbar id="toolbar-menubar"
+ type="menubar"
+ class="chromeclass-menubar"
+ persist="collapsed"
+ grippytooltiptext="&menuBar.tooltip;"
+ customizable="true"
+ defaultset="menubar-items"
+ mode="icons"
+ iconsize="small"
+ defaultmode="icons"
+ defaulticonsize="small"
+ context="toolbar-context-menu">
+ <toolbaritem id="menubar-items"
+ class="menubar-items"
+ align="center">
+ <menubar id="main-menubar" class="chromeclass-menubar">
+ <menu id="menu_File"/>
+ <menu id="menu_Edit"/>
+
+ <menu id="menu_View">
+ <!-- id pulls in "Show Sidebar" item from sidebarOverlay -->
+ <menupopup id="menu_View_Popup">
+ <menu id="menu_Toolbars">
+ <menupopup id="view_toolbars_popup"
+ onpopupshowing="onViewToolbarsPopupShowing(event);"
+ oncommand="onViewToolbarCommand(event);">
+ <menuitem id="menu_showTaskbar"/>
+ </menupopup>
+ </menu>
+ <menuseparator id="viewSep1"/>
+ <menu id="charsetMenu"
+ onpopupshowing="EditorUpdateCharsetMenu(event.target);"
+ oncommand="EditorSetCharacterSet(event);"/>
+ </menupopup>
+ </menu>
+
+ <menu id="insertMenuPlainText"
+ label="&insertMenu.label;"
+ accesskey="&insertMenu.accesskey;">
+ <menupopup id="insertMenuPlainTextPopup">
+ <menuitem id="insertPlainTextChars"
+ accesskey="&insertCharsCmd.accesskey;"
+ command="cmd_insertChars"/>
+ </menupopup>
+ </menu>
+
+ <!-- tasks and window menus filled from tasksOverlay -->
+ <menu id="tasksMenu"/>
+ <menu id="windowMenu"/>
+
+ <!-- help menu filled from globalOverlay -->
+ <menu id="menu_Help"/>
+
+ <spacer flex="1"/>
+ </menubar>
+ </toolbaritem>
+ </toolbar>
+
+
+ <!-- toolbar filled out from editorOverlay -->
+ <toolbar id="EditToolbar"
+ class="chromeclass-toolbar toolbar-primary"
+ persist="collapsed"
+ grippytooltiptext="&compositionToolbar.tooltip;"
+ toolbarname="&compositionToolbarCmd.label;"
+ accesskey="&compositionToolbarCmd.accesskey;"
+ customizable="true"
+ defaultset="newButton,openButton,saveButton,print-button,separator,spellingButton,spring,throbber-box"
+ context="toolbar-context-menu">
+ <toolbarbutton id="newButton"/>
+ <toolbarbutton id="openButton"/>
+ <toolbarbutton id="saveButton"/>
+ <toolbarbutton id="cutButton"/>
+ <toolbarbutton id="copyButton"/>
+ <toolbarbutton id="pasteButton"/>
+ <toolbarbutton id="print-button"/>
+ <toolbarbutton id="findButton"/>
+ <toolbarbutton id="spellingButton"/>
+ <toolbaritem id="throbber-box"/>
+ </toolbar>
+
+ <toolbarset id="customToolbars" context="toolbar-context-menu"/>
+
+ <toolbarpalette id="EditToolbarPalette"/>
+ </toolbox>
+
+ <hbox id="sidebar-parent" flex="1">
+ <!-- From sidebarOverlay.xul -->
+ <vbox id="sidebar-box" class="chromeclass-extrachrome" hidden="true"/>
+ <splitter id="sidebar-splitter" class="chromeclass-extrachrome" hidden="true"/>
+ <vbox id="appcontent" flex="1">
+ <findbar id="FindToolbar" browserid="content-frame"/>
+ <editor editortype="text"
+ type="content"
+ primary="true"
+ id="content-frame"
+ src="about:blank" flex="1"
+ context="contentAreaContextMenu"/>
+ </vbox> <!-- appcontent -->
+ </hbox><!-- sidebar-parent -->
+
+ <statusbar id="status-bar"
+ class="chromeclass-status">
+ <statusbarpanel id="component-bar"/>
+ <statusbarpanel id="statusText"
+ label="&statusText.label;"
+ flex="1"
+ crop="right"/>
+ <statusbarpanel id="offline-status" class="statusbarpanel-iconic"/>
+ </statusbar>
+</window>
diff --git a/comm/suite/extensions/debugQA/install.rdf.in b/comm/suite/extensions/debugQA/install.rdf.in
new file mode 100644
index 0000000000..60086476b3
--- /dev/null
+++ b/comm/suite/extensions/debugQA/install.rdf.in
@@ -0,0 +1,38 @@
+<?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/. -->
+
+
+#filter substitution
+
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+ <Description about="urn:mozilla:install-manifest">
+ <em:id>debugQA@mozilla.org</em:id>
+ <em:version>2.0.13</em:version>
+
+ <em:targetApplication>
+ <!-- Suite -->
+ <Description>
+ <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
+ <em:minVersion>2.53</em:minVersion>
+ <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
+ </Description>
+ </em:targetApplication>
+
+ <!-- EXTENSION AUTHORS!
+ DO NOT COPY THIS PROPERTY INTO YOUR INSTALL RDF FILES
+ It will cause users not to be informed of incompatibilities
+ with your extension when they are updated with Software Update
+ and your extension will become unavailable to them!
+ -->
+ <em:appManaged>true</em:appManaged>
+
+ <!-- front-end metadata -->
+ <em:name>SeaMonkey Debug and QA UI</em:name>
+ <em:description>Provides Additional Debug and QA UI for SeaMonkey development</em:description>
+ <em:creator>mozilla.org</em:creator>
+ <em:homepageURL>http://wiki.mozilla.org/SeaMonkey:Debug_And_QA_UI</em:homepageURL>
+ </Description>
+</RDF>
diff --git a/comm/suite/extensions/debugQA/jar.mn b/comm/suite/extensions/debugQA/jar.mn
new file mode 100644
index 0000000000..7f39b7ce5a
--- /dev/null
+++ b/comm/suite/extensions/debugQA/jar.mn
@@ -0,0 +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/.
+
+[extensions/debugQA@mozilla.org] debugqa.jar:
+% content debugqa %content/debugqa/
+% overlay chrome://navigator/content/navigatorOverlay.xul chrome://debugqa/content/debugQAMenuOverlay.xul
+% overlay chrome://editor/content/editor.xul chrome://debugqa/content/debugQAEditorOverlay.xul
+% overlay chrome://navigator/content/navigator.xul chrome://debugqa/content/debugQANavigatorOverlay.xul
+ content/debugqa/debugQAEditorOverlay.js (content/debugQAEditorOverlay.js)
+ content/debugqa/debugQAEditorOverlay.xul (content/debugQAEditorOverlay.xul)
+ content/debugqa/debugQAMenuOverlay.js (content/debugQAMenuOverlay.js)
+ content/debugqa/debugQAMenuOverlay.xul (content/debugQAMenuOverlay.xul)
+ content/debugqa/debugQANavigatorOverlay.xul (content/debugQANavigatorOverlay.xul)
+ content/debugqa/debugQATextEditorShell.xul (content/debugQATextEditorShell.xul)
+ content/debugqa/EditorInitPage.html (content/EditorInitPage.html)
diff --git a/comm/suite/extensions/debugQA/locales/en-US/debugQAEditorOverlay.dtd b/comm/suite/extensions/debugQA/locales/en-US/debugQAEditorOverlay.dtd
new file mode 100644
index 0000000000..559fe137b1
--- /dev/null
+++ b/comm/suite/extensions/debugQA/locales/en-US/debugQAEditorOverlay.dtd
@@ -0,0 +1,27 @@
+<!-- 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/. -->
+
+<!-- WARNING! This file contains UTF-8 encoded characters!
+ - If this ==> … <== doesn't look like an ellipsis (three dots in a row),
+ - your editor isn't using UTF-8 encoding and may munge up the document!
+ -->
+
+<!-- Debug menu items -->
+<!ENTITY debugMenu.label "Debug">
+<!ENTITY newEditorTestPage.label "Composer with Test Page">
+<!ENTITY textEditorCmd.label "Plaintext Editor">
+<!ENTITY outputTextCmd.label "Output Text">
+<!ENTITY outputHTMLCmd.label "Output HTML">
+<!ENTITY insertTextCmd.label "Insert Text">
+<!ENTITY testSelectionCmd.label "Test Selection">
+<!ENTITY testDocumentCmd.label "Test Document">
+<!-- Unused after bug 1792764 but kept for 2.53 branch. -->
+<!ENTITY executeJSTransactionViaTxmgr.label "Execute JS Transaction Via Transaction Manager">
+<!ENTITY executeJSTransactionViaEditor.label "Execute JS Transaction Via Editor">
+<!ENTITY setFocusCmd.label "Set Focus">
+
+<!-- Text editor values -->
+<!ENTITY textEditorWindow.titlemodifier "Text Editor">
+
+<!ENTITY statusText.label "Done loading page">
diff --git a/comm/suite/extensions/debugQA/locales/en-US/debugQANavigatorOverlay.properties b/comm/suite/extensions/debugQA/locales/en-US/debugQANavigatorOverlay.properties
new file mode 100644
index 0000000000..a54620256c
--- /dev/null
+++ b/comm/suite/extensions/debugQA/locales/en-US/debugQANavigatorOverlay.properties
@@ -0,0 +1,6 @@
+# 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/.
+
+# LOCALIZATION NOTE: the %S are replaced by app name and build ID respectively
+titlemodifier=%S {Build ID: %S}
diff --git a/comm/suite/extensions/debugQA/locales/jar.mn b/comm/suite/extensions/debugQA/locales/jar.mn
new file mode 100644
index 0000000000..d8f489f539
--- /dev/null
+++ b/comm/suite/extensions/debugQA/locales/jar.mn
@@ -0,0 +1,10 @@
+#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/.
+
+
+[extensions/debugQA@mozilla.org] debugqa.jar:
+% locale debugQA @AB_CD@ %locale/@AB_CD@/debugQA/
+ locale/@AB_CD@/debugQA/debugQAEditorOverlay.dtd (en-US/debugQAEditorOverlay.dtd)
+ locale/@AB_CD@/debugQA/debugQANavigatorOverlay.properties (en-US/debugQANavigatorOverlay.properties)
diff --git a/comm/suite/extensions/debugQA/locales/moz.build b/comm/suite/extensions/debugQA/locales/moz.build
new file mode 100644
index 0000000000..de5cd1bf81
--- /dev/null
+++ b/comm/suite/extensions/debugQA/locales/moz.build
@@ -0,0 +1,6 @@
+# vim: set filetype=python:
+# 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/.
+
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/comm/suite/extensions/debugQA/moz.build b/comm/suite/extensions/debugQA/moz.build
new file mode 100644
index 0000000000..c43aa55eff
--- /dev/null
+++ b/comm/suite/extensions/debugQA/moz.build
@@ -0,0 +1,15 @@
+# vim: set filetype=python:
+# 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/.
+
+DEFINES["MOZ_APP_VERSION"] = CONFIG["MOZ_APP_VERSION"]
+DEFINES["MOZ_APP_MAXVERSION"] = CONFIG["MOZ_APP_MAXVERSION"]
+
+DIRS += ["locales"]
+
+FINAL_TARGET_PP_FILES.extensions["debugQA@mozilla.org"] += [
+ "install.rdf.in"
+]
+
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/comm/suite/extensions/jar.mn b/comm/suite/extensions/jar.mn
new file mode 100644
index 0000000000..cff35a260b
--- /dev/null
+++ b/comm/suite/extensions/jar.mn
@@ -0,0 +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/.
+
+browser.jar:
+% content browser %content/
+ content/built_in_addons.json (built_in_addons.json)
diff --git a/comm/suite/extensions/moz.build b/comm/suite/extensions/moz.build
new file mode 100644
index 0000000000..8bffaa5e51
--- /dev/null
+++ b/comm/suite/extensions/moz.build
@@ -0,0 +1,11 @@
+# vim: set filetype=python:
+# 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/.
+
+if CONFIG["MOZ_DEBUGQA"]:
+ DIRS += [
+ "debugQA",
+ ]
+
+JAR_MANIFESTS += ["jar.mn"]