[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#918601: stretch-pu: package compactheader/2.1.0-3



Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian.org@packages.debian.org
Usertags: pu

Dear release team,

I'd like to update the current version of the package
xul-ext-compactheader as the version 2.1.0-3 of this  package is also
affected by the change to the add-on interface in Thunderbird >= 60.x
that make the version in stretch incompatible and useless. There exists
a bug report [1] about this circumstance.

The version in unstable/testing is fixing this and also working since
several months obviously flawless. The version for stretch would be
2.1.6-1~deb9u1.

A debdiff which shows the differences is attached. I haven't uploaded
anything to stretch-pu yet.

Regards
Carsten

[1] https://bugs.debian.org/918167

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, aarch64, arm64

Kernel: Linux 4.19.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru compactheader-2.1.0/appveyor.yml compactheader-2.1.6/appveyor.yml
--- compactheader-2.1.0/appveyor.yml	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/appveyor.yml	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,61 @@
+environment:
+  matrix:
+    - VERSION: ESR
+      PYTHON: "C:\\Python27_64"
+#     - VERSION: beta
+#       PYTHON: "C:\\Python27_64"
+#     - VERSION: nightly
+#       PYTHON: "C:\\Python27_64"
+
+install:
+  - ECHO "Filesystem root:"
+  - ps: "ls \"C:/\""
+
+  # Add Python to PATH
+  - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
+
+  - "md c:\\opt"
+  - ps: Invoke-WebRequest -Uri https://download.sysinternals.com/files/Junction.zip -OutFile C:\Junction.zip; Expand-Archive c:\Junction.zip -dest c:\opt
+  - "SET PATH=c:\\opt;%PATH%"
+
+  - cmd: choco install wget
+  
+  # Check if all required third party software is installed
+  - "python --version"
+  - "where python"
+  - "junction /?"
+  - "echo test >jtest"
+  - "junction -accepteula jtest2 jtest"
+  - "junction -d jtest2"
+  - "del jtest"
+  - "where junction"
+  - "unzip -v"
+  - "where unzip"
+  - "wget --version"
+  - "where wget"
+  - "sed --version"
+  - "where sed"
+  - "pip install bs4"
+  - "pip install lxml"
+  - "pip install requests"
+
+  - ps: choco install ant --ignore-dependencies
+#   - wget -q --no-check-certificate https://www.us.apache.org/dist//ant/binaries/apache-ant-1.10.2-bin.zip
+#   - ps: Expand-Archive apache-ant-1.10.2-bin.zip -dest c:\
+  - set PATH=C:\Program Files\Java\jdk1.8.0;c:\apache-ant-1.10.2\bin;%PATH%
+
+  - "ant -h"
+  - "where ant"
+
+  - wget -q --no-check-certificate https://downloads.sourceforge.net/project/xmltask/xmltask/1.16.1/xmltask.jar 
+  - set "CLASSPATH=%CD%\\xmltask.jar;%CLASSPATH%"
+
+build: false  # Not a C# project, build stuff at the test step instead.
+
+test_script:
+  # Build the compiled extension and run the project tests
+  - ant buildAMO
+  - cd test
+  - python ./find_beta_build.py
+  - python ./executeTests.py --version %VERSION%
+
diff -Nru compactheader-2.1.0/build.xml compactheader-2.1.6/build.xml
--- compactheader-2.1.0/build.xml	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/build.xml	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,99 @@
+<?xml version="1.0" ?>
+
+<project name="CompactHeader" default="dist">
+  <property name="src.dir" value="." />
+	<property name="mozdev.dir" value="${src.dir}/../../workspace/compactheader.mozdev.org"/>
+  <property name="dist.dir" value="${mozdev.dir}/downloads/"/>
+  <property name="AMOdist.dir" value="${src.dir}/AMO/"/>
+  <property name="www.dir" value="${mozdev.dir}/www/"/>
+  <property name="test.dir" value="${src.dir}/test/"/>
+  <property name="mccoy.cmd" value='c:/Program Files (x86)/mccoy/mccoy.exe'/>
+
+  <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
+
+  <xmltask source="./install.rdf">
+    <copy path="//em:version/text()" property="app.version"/>
+    <copy path="//em:name/text()" property="app.name"/>
+    <copy path="//em:id/text()" property="app.id"/>
+  </xmltask>
+
+  <target name="dist" depends="spreadVersion,buildAMO,buildMozdev">
+
+  </target>
+
+  <target name="clean">
+    <delete file="${dist.dir}/${app.name}-${app.version}.xpi" />
+  </target>
+
+
+  <target name="buildAMO">
+    <copy file="${src.dir}/install.rdf" tofile="${AMOdist.dir}/install.rdf"/>
+    <replaceregexp file="${AMOdist.dir}/install.rdf"
+                   byline="true"
+                   match=".*update.*"
+                   replace=""/>
+    <zip destfile="${AMOdist.dir}/${app.name}-${app.version}.xpi">
+      <fileset dir="${src.dir}">
+        <include name="chrome.manifest" />
+        <include name="defaults/**" />
+        <include name="chrome/**" />
+        <exclude name="**/.*" />
+        <exclude name="**/CVS/**" />
+      </fileset>
+      <fileset dir="${AMOdist.dir}">
+        <include name="install.rdf" />
+      </fileset>
+    </zip>
+  </target>
+
+  <target name="buildMozdev">
+    <zip destfile="${dist.dir}/${app.name}-${app.version}.xpi">
+      <fileset dir="${src.dir}">
+        <include name="chrome.manifest" />
+        <include name="install.rdf" />
+        <include name="defaults/**" />
+        <include name="chrome/**" />
+        <exclude name="**/.*" />
+        <exclude name="**/CVS/**" />
+      </fileset>
+    </zip>
+    <xmltask source="${www.dir}/update.rdf" dest="${www.dir}/update.rdf.new">
+      <replace path="/RDF:RDF/RDF:Description/@em:version" withText="${app.version}"/>
+      <replace path="/RDF:RDF/RDF:Description/@em:updateLink" withText="http://downloads.mozdev.org/compactheader/CompactHeader-${app.version}.xpi"/>
+    </xmltask>
+    <move file="${www.dir}/update.rdf.new" tofile="${www.dir}/update.rdf"/>
+    <property name="absUpdate" location="${www.dir}/update.rdf"/>
+    <property name="absXPI" location="${dist.dir}/${app.name}-${app.version}.xpi"/>
+
+    <echo message="absUpdate ${absUpdate}"/>
+    <echo message="absUpdate ${absXPI}"/>
+
+    <exec executable="${mccoy.cmd}">
+      <arg value="-command"/>
+      <arg value="update"/>
+      <arg value="-updateRDF"/>
+      <arg value="${absUpdate}"/>
+      <arg value="-key"/>
+      <arg value="compactheaderkey"/>
+      <arg value="-xpi"/>
+      <arg value="${absXPI}"/>
+    </exec>
+  </target>
+
+  <target name="spreadVersion">
+    <xmltask source="${www.dir}/availableVersion.xml" dest="${www.dir}/availableVersion.xml.new">
+      <replace path="/updates/update[1]/version" withXml="&lt;version&gt;${app.version}&lt;/version&gt;"/>
+    </xmltask>
+    <move file="${www.dir}/availableVersion.xml.new" tofile="${www.dir}/availableVersion.xml"/>
+    <xmltask source="${www.dir}/availVersion.xml" dest="${www.dir}/availVersion.xml.new">
+      <replace path="/updates/update[@server='mozdev']/@version" withText="${app.version}"/>
+    </xmltask>
+    <move file="${www.dir}/availVersion.xml.new" tofile="${www.dir}/availVersion.xml"/>
+    <replaceregexp file="${www.dir}/installation.html"
+                   byline="true"
+                   match="(.*update the version.*CompactHeader-).*(.xpi&quot;>Version ).*( of Co.*)"
+                   replace="\1${app.version}\2${app.version}\3"/>
+
+  </target>
+
+</project>
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/buttonsOverlay.js compactheader-2.1.6/chrome/CompactHeader/content/buttonsOverlay.js
--- compactheader-2.1.0/chrome/CompactHeader/content/buttonsOverlay.js	2015-01-14 06:09:44.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/buttonsOverlay.js	2018-08-18 02:45:39.000000000 +0200
@@ -52,7 +52,12 @@
                                 .getService(Components.interfaces.nsIMsgMailSession);
     var nsIFolderListener = Components.interfaces.nsIFolderListener;
     mailSession.AddFolderListener(folderListener, nsIFolderListener.propertyFlagChanged);
-    window.addEventListener("load", function(e) { pub.singlemessage_controller.onLoad(e); }, false);
+    window.addEventListener("load", function loadEventListener(e)
+    {
+      window.removeEventListener("load", loadEventListener, false);
+      pub.singlemessage_controller.onLoad(e);
+    },
+    false);
   }
 
   pub.coheToggleStar = function () {
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/compactHeaderOverlay.js compactheader-2.1.6/chrome/CompactHeader/content/compactHeaderOverlay.js
--- compactheader-2.1.0/chrome/CompactHeader/content/compactHeaderOverlay.js	2015-03-27 06:01:00.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/compactHeaderOverlay.js	2018-08-18 02:45:39.000000000 +0200
@@ -87,6 +87,9 @@
     {name:"date", outputFunction:coheUpdateDateValue}
     ];
 
+  var prefserv = Components.classes["@mozilla.org/preferences-service;1"]
+    .getService(Components.interfaces.nsIPrefBranch);
+
   var cohePrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
     .getService(Components.interfaces.nsIPrefService)
     .getBranch("extensions.CompactHeader.");
@@ -197,7 +200,7 @@
     gCoheCollapsedHeaderView = {};
     var index;
 
-    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+    if (prefserv.getBoolPref("extensions.CompactHeader.headersize.twolineview")) {
       for (index = 0; index < gCoheCollapsedHeader2LListLongAddresses.length; index++) {
         gCoheCollapsedHeaderView[gCoheCollapsedHeader2LListLongAddresses[index].name] =
           new createHeaderEntry('CompactHeader_collapsed2L', gCoheCollapsedHeader2LListLongAddresses[index]);
@@ -365,7 +368,7 @@
               .removeAddressBookListener(coheAddressBookListener);
 
     removeEventListener('messagepane-loaded',
-      pub.coheOnLoadMsgHeaderPane, true);
+    pub.coheOnLoadMsgHeaderPane, true);
     removeEventListener('messagepane-unloaded',
       pub.coheOnUnloadMsgHeaderPane, true);
   }
@@ -509,6 +512,33 @@
       }
     }
 
+    var enigmailBox = document.getElementById("enigmailBox");
+
+    if (enigmailBox != null) {
+      if (gCoheCollapsedHeaderViewMode) {
+        if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
+          var parent = document.getElementById("CompactHeader_collapsed2LHeadersBox");
+          var refElement = document.getElementById("CompactHeader_collapsed2LHeaderViewFirstLine");
+          if (parent != null && refElement != null) {
+            parent.insertBefore(enigmailBox, refElement);
+          }
+        } else {
+          var parent = document.getElementById("CompactHeader_collapsed1LHeadersBox");
+          var refElement = document.getElementById("CompactHeader_collapsed1LHeaderViewFirstLine");
+          if (parent != null && refElement != null) {
+            parent.insertBefore(enigmailBox, refElement);
+          }
+        }
+      }
+      else {
+        var parent = document.getElementById("expandedHeadersBox");
+        var refElement = document.getElementById("expandedHeadersTopBox");
+        if (parent != null && refElement != null) {
+          parent.insertBefore(enigmailBox, refElement);
+        }
+      }
+    }
+
     org_mozdev_compactHeader.messenger.loadToolboxData();
 
     if (gCoheCollapsedHeaderViewMode) {
@@ -674,6 +704,8 @@
   {
     register: function()
     {
+      org_mozdev_compactHeader.debug.log("prefObserver registration start");
+
       // First we'll need the preference services to look for preferences.
       var prefService = Components.classes["@mozilla.org/preferences-service;1"]
                                   .getService(Components.interfaces.nsIPrefService);
@@ -681,12 +713,13 @@
       // For this._branch we ask that the preferences for extensions.myextension. and children
       this._branch = prefService.getBranch("extensions.CompactHeader.");
 
-      // Now we queue the interface called nsIPrefBranch2. This interface is described as:
+      // Now we queue the interface called nsIPrefBranch. This interface is described as:
       // "nsIPrefBranch2 allows clients to observe changes to pref values."
-      this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
+      this._branch.QueryInterface(Components.interfaces.nsIPrefBranch);
 
       // Finally add the observer.
       this._branch.addObserver("", this, false);
+      org_mozdev_compactHeader.debug.log("prefObserver registration stop");
     },
 
     unregister: function()
@@ -715,7 +748,7 @@
 
       org_mozdev_compactHeader.debug.log("prefObserver stop");
     }
-  }
+  };
 
   var wasHere = false;
 
@@ -726,14 +759,19 @@
       return;
     org_mozdev_compactHeader.debug.log("preferencesUpdate 2");
     wasHere = true;
-    ReloadMessage();
-    pub.coheOnLoadMsgHeaderPane();
+    if ((typeof gDBView  != "undefined") && gDBView) {
+      gDBView.reloadMessage();
+      pub.coheOnLoadMsgHeaderPane();
+    }
     org_mozdev_compactHeader.toolbar.setCurrentToolboxPosition(gCoheCollapsedHeaderViewMode);
 //    var event = document.createEvent('Events');
 //    event.initEvent('messagepane-loaded', false, true);
 //    var headerViewElement = document.getElementById("msgHeaderView");
 //    headerViewElement.dispatchEvent(event);
-    setTimeout(clearReloadTimeout, 250);
+    setTimeout(function() {
+        clearReloadTimeout();
+        return;
+      }, 250);
     org_mozdev_compactHeader.debug.log("preferencesUpdate stop");
   }
 
@@ -785,10 +823,11 @@
 
 
   pub.coheInitializeOverlay = function() {
+    removeEventListener('load', org_mozdev_compactHeader.pane.coheInitializeOverlay, false);
     org_mozdev_compactHeader.debug.log("before register");
     coheUninstallObserver.register();
-    myPrefObserver.register();
     org_mozdev_compactHeader.debug.log("register PrefObserver");
+    myPrefObserver.register();
     org_mozdev_compactHeader.debug.log("after register");
     if ((typeof MessageDisplayWidget != "undefined") && MessageDisplayWidget) {
       org_mozdev_compactHeader.debug.log("coheInitializeOverlay found MessageDisplayWidget");
@@ -851,7 +890,11 @@
   }
 
   function darkenColor(color) {
-    var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
+    if (color === "transparent") {
+      return color;
+    }
+
+    var digits = /(.*?)rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)/.exec(color);
 
     var red = parseInt(digits[2]);
     var green = parseInt(digits[3]);
@@ -893,6 +936,11 @@
   }
 
   function multiMessageLoaded() {
+    var multiMessage = document.getElementById("multimessage");
+    if (multiMessage) {
+      multiMessage.removeEventListener("DOMContentLoaded", multiMessageLoaded, false);
+    }
+
     org_mozdev_compactHeader.debug.log("multiMessageLoaded start");
     org_mozdev_compactHeader.toolbar.setCurrentToolboxPosition(gCoheCollapsedHeaderViewMode);
     org_mozdev_compactHeader.debug.log("multiMessageLoaded stop");
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/compactHeaderOverlay.xul compactheader-2.1.6/chrome/CompactHeader/content/compactHeaderOverlay.xul
--- compactheader-2.1.0/chrome/CompactHeader/content/compactHeaderOverlay.xul	2015-01-14 06:02:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/compactHeaderOverlay.xul	2018-08-18 02:45:39.000000000 +0200
@@ -40,6 +40,7 @@
   <menupopup id="header-toolbar-context-menu">
     <menuitem id="CompactHeader_hidecohePreferencesButton"
               label="&CompactHeader_dialog.title;"
+              accesskey="&CompactHeader_dialog.accessKey;"
               oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,resizable=no,centerscreen,modal');"/>
   </menupopup>
 
@@ -99,10 +100,12 @@
                 <menuitem id="CompactHeader_hideDetailsMenu"
                           label="&CompactHeader_hideDetailsButton.label;"
                           oncommand="org_mozdev_compactHeader.pane.coheToggleHeaderView();"
-                          key="CompactHeader_hideDetailsKey"/>
+                          key="CompactHeader_hideDetailsKey"
+                          accesskey="&CompactHeader_toggleDetails.key;"/>
                 <menuitem id="CompactHeader_hidecohePreferencesButton"
                           label="&CompactHeader_dialog.title;"
-                          oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,centerscreen,dependent,all,resizable=no');"/>
+                          oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,centerscreen,dependent,all,resizable=no');"
+                          accesskey="&CompactHeader_dialog.accessKey;"/>
               </menupopup>
             </toolbarbutton>
           </toolbarpalette>
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/debug.js compactheader-2.1.6/chrome/CompactHeader/content/debug.js
--- compactheader-2.1.0/chrome/CompactHeader/content/debug.js	2015-01-14 06:09:32.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/debug.js	2018-08-18 02:45:39.000000000 +0200
@@ -46,13 +46,14 @@
 
 org_mozdev_compactHeader.debug = function() {
   var pub = {};
+  const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
+  Cu.import("resource://gre/modules/Services.jsm");
   var cohePrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
                                           .getService(Components.interfaces.nsIPrefService)
                                           .getBranch("extensions.CompactHeader.");
   var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                            .getService(Components.interfaces.nsIConsoleService);
-  const { console } = Components.utils.import("resource://gre/modules/devtools/Console.jsm", {});
 
   pub.LOGLEVEL = {"debug": 0, "info":1, "warn": 2, "error": 3};
   var gCurrentLogLevel = pub.LOGLEVEL.info; // TODO: Set to info
@@ -60,8 +61,7 @@
   pub.log = function(str, logLevel) {
     logLevel = typeof logLevel !== 'undefined' ? logLevel : pub.LOGLEVEL.debug;
     if (logLevel >= gCurrentLogLevel) {
-      aConsoleService.logStringMessage(Date() + " CH: " + str);
-      Application.console.log(Date() + " CH: " + str);
+      Services.console.logStringMessage(Date() + " CH: " + str);
 //      console.log(Date() + " CH: " + str);
     }
   };
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/preferences.xul compactheader-2.1.6/chrome/CompactHeader/content/preferences.xul
--- compactheader-2.1.0/chrome/CompactHeader/content/preferences.xul	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/preferences.xul	2018-08-18 02:45:39.000000000 +0200
@@ -1,6 +1,7 @@
 <?xml version="1.0"?>
 
 <?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
+<?xml-stylesheet type="text/css" href="chrome://messenger/skin/preferences/preferences.css"?>
 <?xml-stylesheet type="text/css" href="chrome://communicator/skin/"?>
 <?xml-stylesheet type="text/css" href="chrome://CompactHeader/skin/preferences.css"?>
 <?xml-stylesheet type="text/css" href="chrome://CompactHeader-os/skin/osdef.css"?>
@@ -42,22 +43,28 @@
 
     <checkbox id="CompactHeader_checkboxCompactTwolineView"
               preference="CompactHeader_twolineview"
-              label="&CompactHeader_checkbox.Compact.TwolineView.caption;"/>
+              label="&CompactHeader_checkbox.Compact.TwolineView.caption;"
+              accesskey="&CompactHeader_checkbox.Compact.TwolineView.accessKey;"/>
     <checkbox id="CompactHeader_checkboxLinkify"
               preference="CompactHeader_linkify"
-              label="&CompactHeader_menu.Linkify.caption;"/>
+              label="&CompactHeader_menu.Linkify.caption;"
+              accesskey="&CompactHeader_menu.Linkify.accessKey;"/>
     <checkbox id="CompactHeader_checkboxShowOnlyAddress"
               preference="CompactHeader_addressstyle"
-              label="&CompactHeader_menu.ShowOnlyAddress.caption;"/>
+              label="&CompactHeader_menu.ShowOnlyAddress.caption;"
+              accesskey="&CompactHeader_menu.ShowOnlyAddress.accessKey;"/>
     <checkbox id="CompactHeader_checkboxflatButtons"
               preference="CompactHeader_flatButtons"
-              label="&CompactHeader_menu.flatButtons.caption;"/>
+              label="&CompactHeader_menu.flatButtons.caption;"
+              accesskey="&CompactHeader_menu.flatButtons.accessKey;"/>
     <checkbox id="CompactHeader_checkbox_dblclick_header"
               preference="CompactHeader_dblclick_header"
-              label="&CompactHeader_menu.dblclick_header.caption;"/>
+              label="&CompactHeader_menu.dblclick_header.caption;"
+              accesskey="&CompactHeader_menu.dblclick_header.accessKey;"/>
     <checkbox id="CompactHeader_checkbox_darken_on_focus"
               preference="CompactHeader_darken_on_focus"
-              label="&CompactHeader_menu.darken_on_focus.caption;"/>
+              label="&CompactHeader_menu.darken_on_focus.caption;"
+              accesskey="&CompactHeader_menu.darken_on_focus.accessKey;"/>
     <groupbox id="CompactHeader_radiobox.ToolbarPosition">
       <caption label="&CompactHeader_radiobox.ToolbarPosition.caption;"/>
       <radiogroup id="CompactHeader_hdrToolbox.pos"
@@ -65,16 +72,20 @@
         <hbox>
           <radio id="CompactHeader_hdrToolbox.pos.left"
                  value="left"
-                 label="&CompactHeader_radiobox.ToolbarPosition.left;"/>
+                 label="&CompactHeader_radiobox.ToolbarPosition.left;"
+                 accesskey="&CompactHeader_radiobox.ToolbarPosition.left.accessKey;"/>
           <radio id="CompactHeader_hdrToolbox.pos.top"
                  value="top"
-                 label="&CompactHeader_radiobox.ToolbarPosition.top;"/>
+                 label="&CompactHeader_radiobox.ToolbarPosition.top;"
+                 accesskey="&CompactHeader_radiobox.ToolbarPosition.top.accessKey;"/>
           <radio id="CompactHeader_hdrToolbox.pos.right"
                  value="right"
-                 label="&CompactHeader_radiobox.ToolbarPosition.right;"/>
+                 label="&CompactHeader_radiobox.ToolbarPosition.right;"
+                 accesskey="&CompactHeader_radiobox.ToolbarPosition.right.accessKey;"/>
           <radio id="CompactHeader_hdrToolbox.pos.none"
                  value="none"
-                 label="&CompactHeader_radiobox.ToolbarPosition.none;"/>
+                 label="&CompactHeader_radiobox.ToolbarPosition.none;"
+                 accesskey="&CompactHeader_radiobox.ToolbarPosition.none.accessKey;"/>
         </hbox>
       </radiogroup>
     </groupbox>
diff -Nru compactheader-2.1.0/chrome/CompactHeader/content/toolbar.js compactheader-2.1.6/chrome/CompactHeader/content/toolbar.js
--- compactheader-2.1.0/chrome/CompactHeader/content/toolbar.js	2015-01-14 06:09:28.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/content/toolbar.js	2018-08-18 02:45:39.000000000 +0200
@@ -187,7 +187,10 @@
     var hdrToolbar = document.getElementById("header-view-toolbar");
     var hdrToolbox = document.getElementById("header-view-toolbox");
     var buttons1 = Array.prototype.slice.call(hdrToolbar.querySelectorAll("toolbarbutton"));
-    var buttons2 = Array.prototype.slice.call(hdrToolbox.palette.querySelectorAll("toolbarbutton"));
+    var buttons2 = [];
+    if (hdrToolbox && hdrToolbox.palette) {
+      buttons2 = Array.prototype.slice.call(hdrToolbox.palette.querySelectorAll("toolbarbutton"));
+    }
     var buttons = buttons1.concat(buttons2);
     for (var i=0; i<buttons.length; i++) {
       var button = buttons[i];
@@ -220,7 +223,11 @@
     org_mozdev_compactHeader.debug.log("setButtonStyle start 1");
 
     var buttons1 = Array.prototype.slice.call(hdrToolbar.querySelectorAll("toolbaritem"));
-    var buttons2 = Array.prototype.slice.call(hdrToolbox.palette.querySelectorAll("toolbaritem"));
+    var buttons2;
+    if (hdrToolbox && hdrToolbox.palette) {
+      buttons2 = Array.prototype.slice.call(hdrToolbox.palette.querySelectorAll("toolbaritem"));
+    }
+
     var buttons = buttons1.concat(buttons2);
     for (var i=0; i<buttons.length; i++) {
       var button = buttons[i];
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/cs/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/cs/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/cs/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/cs/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK *****
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader Nastavení">
+<!ENTITY CompactHeader_dialog.accessKey "N">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Zobrazit dva řádky v kompaktním zobrazení">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "Z">
 <!ENTITY CompactHeader_menu.Linkify.caption "Odkaz v předmětech RSS">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Zobrazit pouze adresu">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Jednoduché tlačítka">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "J">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Přepněte záhlaví dvojitým kliknutím">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "P">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Tmavší záhlaví, pokud je panel zpráv zaměřen">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "T">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Pozice tlačítek panelu záhlaví">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "vpravo">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "střed">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "vlevo">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "v">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "střed">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "s">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "vpravo">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "o">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "neviditelný">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Toggle header by double click">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Darken header if message pane has focus">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "n">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/da/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/da/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/da/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/da/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -38,14 +38,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader - Indstillinger">
+<!ENTITY CompactHeader_dialog.accessKey "I">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Vis to linjer i sammenfoldet visning">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "l">
 <!ENTITY CompactHeader_menu.Linkify.caption "Link i feed-emner og indlæg i nyhedsgrupper">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "n">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Vis kun adresse">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Flade knapper">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Position værktøjslinje i meddelelseshovedet">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "højre">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "øverst">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "venstre">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "usynlig">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "k">
 <!ENTITY CompactHeader_menu.dblclick_header.caption "Vis/skjul meddelelseshovedet med dobbeltklik">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "m">
 <!ENTITY CompactHeader_menu.darken_on_focus.caption "Gør headeren mørkere hvis meddelelsesruden er i fokus">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "f">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Værktøjslinjens position i meddelelseshovedet">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "venstre">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "v">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "øverst">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "ø">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "højre">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "h">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "usynlig">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "u">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/de/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/de/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/de/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/de/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** -->
 
 <!ENTITY CompactHeader_dialog.title "CompactHeader Einstellungen">
+<!ENTITY CompactHeader_dialog.accessKey "E">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Kompakte Headeranzeige mit zwei Zeilen">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "Z">
 <!ENTITY CompactHeader_menu.Linkify.caption "Link in Betreffs von RSS Feeds und Newsgroup Nachrichten">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "N">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Nur Adresse anzeigen">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "A">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Flache Schaltflächen">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "S">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Umschalten der Kopfzeilen mit Doppelklick">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "D">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Kopfzeile dunkel, falls Fokus auf Meldungsfläche">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "K">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Position der Kopfzeilenwerkzeugleiste">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "links">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "oben">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "o">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.right "rechts">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top   "oben">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.left  "links">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.none  "unsichtbar">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Umschalten der Kopfzeilen mit Doppelklick">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Kopfzeile dunkel, falls Fokus auf Meldungsfläche">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "r">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "unsichtbar">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "u">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/en-US/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/en-US/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/en-US/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/en-US/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** -->
 
 <!ENTITY CompactHeader_dialog.title "CompactHeader Preferences">
+<!ENTITY CompactHeader_dialog.accessKey "P">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Display two lines in compact view">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "c">
 <!ENTITY CompactHeader_menu.Linkify.caption "Link in subjects of RSS feeds and news group posts">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "s">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Display only address">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Flat buttons">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "b">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Toggle header by double click">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "h">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Darken header if message pane has focus">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "D">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Position of Header Toolbar">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "left">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "top">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "t">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.right "right">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top   "top">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.left  "left">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.none  "invisible">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Toggle header by double click">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Darken header if message pane has focus">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "r">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "invisible">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "i">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/es-ES/CompactHeader.dtd compactheader-2.1.6/chrome/CompactHeader/locale/es-ES/CompactHeader.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/es-ES/CompactHeader.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/es-ES/CompactHeader.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -35,9 +35,11 @@
 
  ***** END LICENSE BLOCK ***** 
 
+
+
 -->
 <!ENTITY CompactHeader_hideDetailsButton.label "Ocultar detalles">
-<!ENTITY CompactHeader_toggleDetails.key "h">
+<!ENTITY CompactHeader_toggleDetails.key "o">
 <!ENTITY CompactHeader_showDetailsButton.label "Mostrar detalles">
-<!ENTITY CompactHeader_compactMenu.label "Compact">
-<!ENTITY CompactHeader_compactMenu.accesskey "C">
+<!ENTITY CompactHeader_compactMenu.label "Compacta">
+<!ENTITY CompactHeader_compactMenu.accesskey "o">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/es-ES/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/es-ES/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/es-ES/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/es-ES/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -35,16 +35,29 @@
 
  ***** END LICENSE BLOCK *****
 
+
+
 -->
 <!ENTITY CompactHeader_dialog.title "Preferencias de CompactHeader">
-<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Usar dos filas para la vista compacta">
-<!ENTITY CompactHeader_menu.Linkify.caption "Mostrar el asunto en los canales RSS como un enlace">
-<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Mostrar sólo las direcciones de correo">
+<!ENTITY CompactHeader_dialog.accessKey "P">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Mostrar dos líneas en la vista compacta">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "M">
+<!ENTITY CompactHeader_menu.Linkify.caption "Mostrar como enlace los asuntos de canales RSS y de posts de grupos de news">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "e">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Mostrar sólo la dirección de correo del interlocutor">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "c">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Mostrar botones «planos»">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Posición de la barra de herramientas de cabeceras">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "Derecha">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "Arriba">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "b">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Alternar vista de la cabecera con doble clic">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "v">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Oscurecer cabecera si el cuerpo del mensaje recibe el foco">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "O">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Posición de la barra de herramientas de la cabecera">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "Izquierda">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "I">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "Arriba">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "A">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "Derecha">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "D">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "Invisible">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Alternar la vista de las cabeceras mediante doble clic">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Oscurecer cabeceras si el cuerpo del mensaje recibe el foco">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "n">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/fr/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/fr/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/fr/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/fr/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** -->
 
 <!ENTITY CompactHeader_dialog.title "Préférences de CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "P">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Afficher la vue compacte sur deux lignes">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "c">
 <!ENTITY CompactHeader_menu.Linkify.caption "Transformer en lien les sujets des fils RSS">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "s">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Afficher seulement les adresses des courriels">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Boutons plats">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "b">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Activer/désactiver l'en-tête avec un double clic">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "t">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Griser l'en-tête si le panneau des messages est au premier plan">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "p">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Position de la barre d'outil">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "droite">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "haut">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "gauche">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "g">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "haut">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "h">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "droite">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "d">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "invisible">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Activer/désactiver l'en-tête avec un double clic">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Griser l'en-tête si le panneau des messages est au premier plan">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "i">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/hu/CompactHeader.dtd compactheader-2.1.6/chrome/CompactHeader/locale/hu/CompactHeader.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/hu/CompactHeader.dtd	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/hu/CompactHeader.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,43 @@
+<!-- ***** BEGIN LICENSE BLOCK *****
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+ The Original Code is Mozilla Communicator client code, released
+ March 31, 1998.
+
+ The Initial Developer of the Original Code is
+ Netscape Communications Corporation.
+ Portions created by the Initial Developer are Copyright (C) 1998-1999
+ the Initial Developer. All Rights Reserved.
+
+ Contributor(s):
+ Óvári (hu)
+
+ Alternatively, the contents of this file may be used under the terms of
+ either the GNU General Public License Version 2 or later (the "GPL"), or
+ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+
+ ***** END LICENSE BLOCK ***** -->
+
+<!ENTITY CompactHeader_hideDetailsButton.label "Rejtett részletek">
+<!ENTITY CompactHeader_toggleDetails.key "R">
+<!ENTITY CompactHeader_showDetailsButton.label "Részletek mutatása">
+<!ENTITY CompactHeader_compactMenu.label "Tömörít">
+<!ENTITY CompactHeader_compactMenu.accesskey "T">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/hu/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/hu/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/hu/preferences.dtd	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/hu/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,61 @@
+<!-- ***** BEGIN LICENSE BLOCK *****
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+ The Original Code is Mozilla Communicator client code, released
+ March 31, 1998.
+
+ The Initial Developer of the Original Code is
+ Netscape Communications Corporation.
+ Portions created by the Initial Developer are Copyright (C) 1998-1999
+ the Initial Developer. All Rights Reserved.
+
+ Contributor(s):
+ Óvári (hu)
+
+ Alternatively, the contents of this file may be used under the terms of
+ either the GNU General Public License Version 2 or later (the "GPL"), or
+ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+
+ ***** END LICENSE BLOCK ***** -->
+
+<!ENTITY CompactHeader_dialog.title "Tömörített fejléc beállítások">
+<!ENTITY CompactHeader_dialog.accessKey "b">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Kétsoros megjelenítés tömörített nézetben">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "K">
+<!ENTITY CompactHeader_menu.Linkify.caption "Link a tárgyakban az RSS csatornák és a hírcsoportok bejegyzéseiben">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "t">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Csak a cím megjelenítése">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "c">
+<!ENTITY CompactHeader_menu.flatButtons.caption "Lapos gombok">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "g">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Dupla kattintás a fejléc ki- vagy bekapcsolásához">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "D">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Elsötétül a fejléc, ha az üzenetablak fókuszban van">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "E">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Fejléc eszköztárának helye">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "bal">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "b">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "felső">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "f">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "jobb">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "j">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "láthatatlan">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "l">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/it/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/it/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/it/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/it/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** -->
 
 <!ENTITY CompactHeader_dialog.title "Preferenze di CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "P">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Mostra due linee nella visualizzazione compatta">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "c">
 <!ENTITY CompactHeader_menu.Linkify.caption "Link nell'oggetto dei feed RSS">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Mostra solo l'indirizzo">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "M">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Pulsanti piani">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "P">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Attiva l'intestazione doppio clic">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "l">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Annota l'intestazione se il riquadro dei messaggi ha la messa a fuoco">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "f">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Posizione della Barra Intestazioni">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "sinistra">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "s">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "alto">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "a">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.right "destra">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top   "alto">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.left  "sinistra">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.none  "invisibile">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Toggle header by double click">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Darken header if message pane has focus">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "d">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "invisibile">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "i">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/ja/CompactHeader.dtd compactheader-2.1.6/chrome/CompactHeader/locale/ja/CompactHeader.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/ja/CompactHeader.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/ja/CompactHeader.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -37,9 +37,10 @@
  ***** END LICENSE BLOCK *****
 
 
+
 -->
 <!ENTITY CompactHeader_hideDetailsButton.label "詳細を隠す">
 <!ENTITY CompactHeader_toggleDetails.key "h">
 <!ENTITY CompactHeader_showDetailsButton.label "詳細を表示">
 <!ENTITY CompactHeader_compactMenu.label "コンパクト">
-<!ENTITY CompactHeader_compactMenu.accesskey "C">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_compactMenu.accesskey "C">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/ja/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/ja/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/ja/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/ja/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -34,19 +34,28 @@
  the provisions above, a recipient may use your version of this file under
  the terms of any one of the MPL, the GPL or the LGPL.
 
- ***** END LICENSE BLOCK *****
-
-
+ ***** END LICENSE BLOCK ***** 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader 設定">
+<!ENTITY CompactHeader_dialog.accessKey "P">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "2 行表示">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "c">
 <!ENTITY CompactHeader_menu.Linkify.caption "RSS フィードとニュースグループの件名にリンクを設定する">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "s">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "メールアドレスのみ表示">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "フラットボタン">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "b">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "ダブルクリックでヘッダー表示を切り替える">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "h">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "メッセージペインにフォーカスが移った時にヘッダー表示部を暗くする">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "D">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "ツールバーの位置">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "右">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "上">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "左">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "上">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "t">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "右">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "r">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "非表示">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "ダブルクリックでヘッダ表示を切り替える">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "メッセージペインにフォーカスが移った時にヘッダ表示部を暗くする">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "i">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/nl/CompactHeader.dtd compactheader-2.1.6/chrome/CompactHeader/locale/nl/CompactHeader.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/nl/CompactHeader.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/nl/CompactHeader.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -34,9 +34,10 @@
  the terms of any one of the MPL, the GPL or the LGPL.
 
  ***** END LICENSE BLOCK ***** 
+
 -->
-<!ENTITY CompactHeader_hideDetailsButton.label "Verberg details">
-<!ENTITY CompactHeader_toggleDetails.key "h">
-<!ENTITY CompactHeader_showDetailsButton.label "Laat details zien">
+<!ENTITY CompactHeader_hideDetailsButton.label "Details verbergen">
+<!ENTITY CompactHeader_toggleDetails.key "D">
+<!ENTITY CompactHeader_showDetailsButton.label "Details laten zien">
 <!ENTITY CompactHeader_compactMenu.label "Compact">
-<!ENTITY CompactHeader_compactMenu.accesskey "C">
\ Kein Zeilenumbruch am Dateiende.
+<!ENTITY CompactHeader_compactMenu.accesskey "C">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/nl/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/nl/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/nl/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/nl/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -34,16 +34,28 @@
  the terms of any one of the MPL, the GPL or the LGPL.
 
  ***** END LICENSE BLOCK ***** 
+
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader voorkeuren">
-<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Laat twee regels zien in compact beeld">
-<!ENTITY CompactHeader_menu.Linkify.caption "Link in onderwerp van RSS feeds en nieuwsgroep berichten">
-<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Laat alleen adressen zien">
+<!ENTITY CompactHeader_dialog.accessKey "v">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Twee regels laten zien in compact beeld">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "T">
+<!ENTITY CompactHeader_menu.Linkify.caption "Koppeling laten zien in onderwerp van RSS feeds en nieuwsgroepberichten">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "K">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Alleen adressen laten zien">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "A">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Platte knoppen">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Plaats van Berichtkop werkbalk">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "rechts">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "boven">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "P">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Berichtkop wisselen door te dubbelklikken">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "w">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "De berichtkop donkerder maken als het berichtpaneel focus heeft">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "D">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Plaats van berichtkopwerkbalk">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "links">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "boven">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "b">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "rechts">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "r">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "onzichtbaar">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Wissel berichtkop door te dubbel klikken">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Maak de berichtkop donkerder als het berichtpaneel focus heeft">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "o">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/pl/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/pl/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/pl/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/pl/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader – ustawienia">
+<!ENTITY CompactHeader_dialog.accessKey "u">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Wyświetlaj dwa wiersze nagłówka">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "d">
 <!ENTITY CompactHeader_menu.Linkify.caption "Wyświetlaj odnośnik w tematach kanałów RSS i postów grup dyskusyjnych">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Wyświetlaj tylko adresy">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Wyświetlaj płaskie przyciski">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "W">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Przełączaj widok nagłówka dwukrotnym kliknięciem">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "k">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Przyciemniaj nagłówek, gdy panel wiadomości jest aktywny">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "ł">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Położenie paska narzędzi nagłówka">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "Po prawej">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "Na górze">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "Po lewej">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "Na górze">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "g">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "Po prawej">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "p">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "Niewidoczny">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Przełączaj widok nagłówka dwukrotnym kliknięciem">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Przyciemniaj nagłówek, gdy panel wiadomości jest aktywny">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "N">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/pt-BR/CompactHeader.dtd compactheader-2.1.6/chrome/CompactHeader/locale/pt-BR/CompactHeader.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/pt-BR/CompactHeader.dtd	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/pt-BR/CompactHeader.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,42 @@
+<!-- ***** BEGIN LICENSE BLOCK *****
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+ The Original Code is Mozilla Communicator client code, released
+ March 31, 1998.
+
+ The Initial Developer of the Original Code is
+ Netscape Communications Corporation.
+ Portions created by the Initial Developer are Copyright (C) 1998-1999
+ the Initial Developer. All Rights Reserved.
+
+ Contributor(s):
+
+ Alternatively, the contents of this file may be used under the terms of
+ either the GNU General Public License Version 2 or later (the "GPL"), or
+ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+
+ ***** END LICENSE BLOCK *****
+-->
+<!ENTITY CompactHeader_hideDetailsButton.label "Ocultar detalhes">
+<!ENTITY CompactHeader_toggleDetails.key "o">
+<!ENTITY CompactHeader_showDetailsButton.label "Mostrar detalhes">
+<!ENTITY CompactHeader_compactMenu.label "Compacto">
+<!ENTITY CompactHeader_compactMenu.accesskey "C">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/pt-BR/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/pt-BR/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/pt-BR/preferences.dtd	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/pt-BR/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,60 @@
+<!-- ***** BEGIN LICENSE BLOCK *****
+ Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS" basis,
+ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ for the specific language governing rights and limitations under the
+ License.
+
+ The Original Code is Mozilla Communicator client code, released
+ March 31, 1998.
+
+ The Initial Developer of the Original Code is
+ Netscape Communications Corporation.
+ Portions created by the Initial Developer are Copyright (C) 1998-1999
+ the Initial Developer. All Rights Reserved.
+
+ Contributor(s):
+
+ Alternatively, the contents of this file may be used under the terms of
+ either the GNU General Public License Version 2 or later (the "GPL"), or
+ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+
+ ***** END LICENSE BLOCK ***** 
+-->
+<!ENTITY CompactHeader_dialog.title "Preferências CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "P">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Exibir duas linhas em visualização compacta">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "l">
+<!ENTITY CompactHeader_menu.Linkify.caption "Link em feeds RSS e mensagens de grupo de notícias">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Mostrar só endereço">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "M">
+<!ENTITY CompactHeader_menu.flatButtons.caption "Botões flat">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "B">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Alternar cabeçalho com um duplo clique">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "A">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Escurecer o cabeçalho do painel da mensagem em foco">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "f">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Posição do cabeçalho da barra de ferramentas">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left "esquerdo">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "e">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "superior">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "s">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "direito">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "d">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none "invisivel">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "i">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/ru/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/ru/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/ru/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/ru/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -38,14 +38,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "Настройки CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "Н">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Две строчки в компактном режиме">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "р">
 <!ENTITY CompactHeader_menu.Linkify.caption "Тема ленты или группы новостей как ссылка">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "г">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Показывать только адрес">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "т">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Плоские кнопки">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "к">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Переключение режима двойным щелчком мышки">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "щ">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Заголовок темнее если в фокусе текст сообщения">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "з">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Расположение панели инструментов заголовка">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "справа">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "сверху">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "слева">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "с">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "сверху">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "в">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "справа">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "а">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "невидимa">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Переключение режима двойным щелчком мышки">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Заголовок темнее если в фокусе текст сообщения">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "н">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/sl-SI/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/sl-SI/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/sl-SI/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/sl-SI/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -36,14 +36,25 @@
  ***** END LICENSE BLOCK ***** 
 -->
 <!ENTITY CompactHeader_dialog.title "Nastavitve CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "N">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Prikaži dve vrstici v strnjenem pogledu">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "v">
 <!ENTITY CompactHeader_menu.Linkify.caption "Poveži zadeve virov RSS in objav novičarskih skupin">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "r">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Prikaži samo naslov">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "s">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Ploščati gumbi">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "g">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Preklopi glavo z dvoklikom">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "k">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Potemni glavo, če je podokno sporočil v žarišču">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "ž">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Položaj orodne vrstice glave">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "desno">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "zgoraj">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "levo">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "l">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "zgoraj">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "z">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "desno">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "d">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "nevidno">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Preklopi glavo z dvoklikom">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Potemni glavo, če je podokno sporočil v žarišču">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "n">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/sr/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/sr/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/sr/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/sr/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -38,14 +38,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader - опције">
+<!ENTITY CompactHeader_dialog.accessKey "о">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Прикажи две линије у сажетом приказу">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "с">
 <!ENTITY CompactHeader_menu.Linkify.caption "Повежи субјекте RSS претплата и групних објава новости">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "г">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Прикажи само адресу">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "а">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Равна дугмад">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "р">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Дуплим кликом пребацуј између заглавља">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "к">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Затамни заглавље ако табла са порукама има фокус">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "З">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Место траке са алаткама у заглављу">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "десно">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "врх">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "лево">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "л">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "врх">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "в">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "десно">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "д">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "невидљива">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Дуплим кликом пребацуј између заглавља">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Затамни заглавље ако табла са порукама има фокус">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "н">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/sv-SE/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/sv-SE/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/sv-SE/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/sv-SE/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -37,14 +37,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "Inställningar för CompactHeader">
+<!ENTITY CompactHeader_dialog.accessKey "I">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Visa två rader i kompaktvyn">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "t">
 <!ENTITY CompactHeader_menu.Linkify.caption "Länk i ämnesraderna för RSS-flöden och nyhetsgruppsinlägg">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Visa endast adresser">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Platta knappar">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "k">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Växla visning av huvudet med dubbelklick">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "d">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "Gör huvudet mörkare när meddelandepanelen har fokus">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "G">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Position för brevhuvudverktygsfältet">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "till höger">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "överst">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "till vänster">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "v">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "överst">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "ö">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "till höger">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "h">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "osynligt">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Växla visning av huvudet med dubbelklick">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "Gör huvudet mörkare när meddelandepanelen har fokus">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "o">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/tr/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/tr/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/tr/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/tr/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -37,14 +37,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader Tercihleri">
+<!ENTITY CompactHeader_dialog.accessKey "T">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "Kompakt görünümde iki satır göster">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "K">
 <!ENTITY CompactHeader_menu.Linkify.caption "RSS beslemeleri ve haber grubu mesajlarındaki bağlantı">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "R">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "Sadece adresleri göster">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "a">
 <!ENTITY CompactHeader_menu.flatButtons.caption "Düz düğmeler">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "D">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "Başlığı çift tıklamayla aç-kapat">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "B">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "İleti bölümüne odaklanılırsa başlığı karart">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "İ">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "Başlık Çubuğu Pozisyonu">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "sağ">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "üst">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "sol">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "s">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "üst">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "ü">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "sağ">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "ğ">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "görünmez">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "Başlığı çift tıklamayla aç-kapat">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "İleti bölümüne odaklanılırsa başlığı karart">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "g">
diff -Nru compactheader-2.1.0/chrome/CompactHeader/locale/zh-CN/preferences.dtd compactheader-2.1.6/chrome/CompactHeader/locale/zh-CN/preferences.dtd
--- compactheader-2.1.0/chrome/CompactHeader/locale/zh-CN/preferences.dtd	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/chrome/CompactHeader/locale/zh-CN/preferences.dtd	2018-08-18 02:45:39.000000000 +0200
@@ -38,14 +38,25 @@
 
 -->
 <!ENTITY CompactHeader_dialog.title "CompactHeader 首选项">
+<!ENTITY CompactHeader_dialog.accessKey "首">
 <!ENTITY CompactHeader_checkbox.Compact.TwolineView.caption "在紧凑视图下显示两行">
+<!ENTITY CompactHeader_checkbox.Compact.TwolineView.accessKey "在">
 <!ENTITY CompactHeader_menu.Linkify.caption "RSS 订阅主题中的链接">
+<!ENTITY CompactHeader_menu.Linkify.accessKey "订">
 <!ENTITY CompactHeader_menu.ShowOnlyAddress.caption "仅显示地址">
+<!ENTITY CompactHeader_menu.ShowOnlyAddress.accessKey "仅">
 <!ENTITY CompactHeader_menu.flatButtons.caption "浮动按钮">
+<!ENTITY CompactHeader_menu.flatButtons.accessKey "浮">
+<!ENTITY CompactHeader_menu.dblclick_header.caption "双击切换消息头">
+<!ENTITY CompactHeader_menu.dblclick_header.accessKey "双">
+<!ENTITY CompactHeader_menu.darken_on_focus.caption "如果焦点在消息面板上那么使消息头变暗">
+<!ENTITY CompactHeader_menu.darken_on_focus.accessKey "如">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.caption "消息头工具栏位置">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "右">
-<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "上">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.left "左">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.left.accessKey "左">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top "上">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.top.accessKey "上">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right "右">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.right.accessKey "右">
 <!ENTITY CompactHeader_radiobox.ToolbarPosition.none "不可见">
-<!ENTITY CompactHeader_menu.dblclick_header.caption "双击切换消息头">
-<!ENTITY CompactHeader_menu.darken_on_focus.caption "如果焦点在消息面板上那么使消息头变暗">
+<!ENTITY CompactHeader_radiobox.ToolbarPosition.none.accessKey "不">
diff -Nru compactheader-2.1.0/chrome.manifest compactheader-2.1.6/chrome.manifest
--- compactheader-2.1.0/chrome.manifest	2014-12-22 04:54:24.000000000 +0100
+++ compactheader-2.1.6/chrome.manifest	2018-08-18 02:45:39.000000000 +0200
@@ -12,16 +12,18 @@
 locale    CompactHeader     en-US   chrome/CompactHeader/locale/en-US/
 locale    CompactHeader     es-ES   chrome/CompactHeader/locale/es-ES/
 locale    CompactHeader     fr   chrome/CompactHeader/locale/fr/
+locale    CompactHeader     hu   chrome/CompactHeader/locale/hu/
 locale    CompactHeader     it   chrome/CompactHeader/locale/it/
 locale    CompactHeader     ja   chrome/CompactHeader/locale/ja/
+locale    CompactHeader     nl   chrome/CompactHeader/locale/nl/
 locale    CompactHeader     pl   chrome/CompactHeader/locale/pl/
+locale    CompactHeader     pt-BR   chrome/CompactHeader/locale/pt-BR/
 locale    CompactHeader     ru   chrome/CompactHeader/locale/ru/
+locale    CompactHeader     sl-SI   chrome/CompactHeader/locale/sl-SI/
 locale    CompactHeader     sr   chrome/CompactHeader/locale/sr/
 locale    CompactHeader     sv-SE   chrome/CompactHeader/locale/sv-SE/
 locale    CompactHeader     tr   chrome/CompactHeader/locale/tr/
 locale    CompactHeader     zh-CN   chrome/CompactHeader/locale/zh-CN/
-locale    CompactHeader     nl   chrome/CompactHeader/locale/nl/
-locale    CompactHeader     sl-SI   chrome/CompactHeader/locale/sl-SI/
 
 overlay chrome://messenger/content/messageWindow.xul     chrome://CompactHeader/content/CHTMessenger.xul
 overlay chrome://messenger/content/messenger.xul         chrome://CompactHeader/content/CHTMessenger.xul
@@ -29,10 +31,18 @@
 overlay chrome://messenger/content/msgHdrViewOverlay.xul chrome://CompactHeader/content/compactHeaderOverlay.xul
 overlay chrome://global/content/customizeToolbar.xul     chrome://CompactHeader/content/customizeToolbarOverlay.xul
 
-style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/osdef.css
-style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader/skin/CompactHeader.css
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/osdef.css appversion<=58.0b3
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader/skin/CompactHeader.css appversion<=58.0b3
+
+style   chrome://messenger/content/customizeToolbar.xul  chrome://CompactHeader-os/skin/osdef.css appversion>=59.0a1
+style   chrome://messenger/content/customizeToolbar.xul  chrome://CompactHeader/skin/CompactHeader.css appversion>=59.0a1
 
 overlay chrome://messenger/content/messageWindow.xul     chrome://CompactHeader/content/buttonsOverlay.xul
 overlay chrome://messenger/content/messenger.xul         chrome://CompactHeader/content/buttonsOverlay.xul
-style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/buttonsOverlay.css
+
+style   chrome://global/content/customizeToolbar.xul     chrome://CompactHeader-os/skin/buttonsOverlay.css appversion<=58.0b3
+
+style   chrome://messenger/content/customizeToolbar.xul  chrome://CompactHeader-os/skin/buttonsOverlay.css appversion>=59.0a1
+
+
 
diff -Nru compactheader-2.1.0/debian/changelog compactheader-2.1.6/debian/changelog
--- compactheader-2.1.0/debian/changelog	2016-03-26 21:30:29.000000000 +0100
+++ compactheader-2.1.6/debian/changelog	2019-01-05 09:45:37.000000000 +0100
@@ -1,18 +1,72 @@
-compactheader (2.1.0-3) unstable; urgency=medium
+compactheader (2.1.6-1~deb9u1) stretch; urgency=medium
 
-  * Team upload
-  * Drop Icedove from description
-  * Update Standards-Version to 3.9.7
-  * Rebuild with recent mozilla-devscripts to be ready for Thunderbird
+  [ Carsten Schoenert ]
+  * Rebuild for Stretch
+    (Closes: #918167)
+  * [93f8afe] debhelper: decrease to version available in stretch
+  * [8fd6a50] d/compat: decrease accordingly to version 10
+
+ -- Carsten Schoenert <c.schoenert@t-online.de>  Sat, 05 Jan 2019 09:45:37 +0100
+
+compactheader (2.1.6-1) unstable; urgency=medium
+
+  [ Carsten Schoenert ]
+  * [73171e8] d/watch: adjust to use the GitHub tree from jmozmoz
+    Using the move over of the Mozilla AddOn platform to
+    addons.thunderbird.net to also move the d/watch entry to the upstream Git
+    tree on GitHub.
+  * [229df45] d/control: increase Standards-Version to 4.2.1
+    No further changes needed.
+  * [d44b452] d/control: move package to webext-text team
+    One more move to the packaging Git tree, as we decided on the Bof while
+    Debconf 18 in Hsinchu the future of the Mozilla AddOns will be
+    WebExtension it's logical to collect all extensions we package for Debian
+    in the Salsa group for WebExtensions:
+    https://salsa.debian.org/webext-team/
+  * [d482d8f] New upstream version 2.1.6
+
+ -- Carsten Schoenert <c.schoenert@t-online.de>  Sun, 09 Sep 2018 08:43:27 +0200
+
+compactheader (2.1.5-1) unstable; urgency=medium
+
+  [ David Prévot ]
+  * [faa4ffb] Drop Icedove from description
+  * [58353f3] Update Standards-Version to 3.9.7
+
+  [ Carsten Schoenert ]
+  * [c9d19db] Adding debian/gbp.conf to make life easier
+  * [5e31e42] New upstream version 2.1.5
+    (Closes: #891433)
+  * [a7e96da] Add a patch queue
+  * [15ea418] d/rules: don't install unneeded files and folder
+    Don't install and ship files from the folder test and the files Readme.md
+    build.xml which aren't needed for the use of the package.
+  * [6d45fe5] d/rules: remove the get-orig-source target
+    The old get-orig-source Makefile target isn't needed and can be dropped in
+    favor of using uscan directly.
+  * [449a5e1] bumping debhelper and compat to version 11
+    Let's use a recent debhelper version.
+  * [27ff6a3] d/control: increase Standards-Version to 4.1.4
+    No further changes needed.
+  * [8a365a5] d/control: move package over to pkg-mozext-team on salsa
+    Alioth will be going offline and the successor platform is Salsa.
+  * [891ab67] d/control: adding myself as uploader
+    Thanks to William for working on compactheader in the past!
+    (Closes: #892410)
+  * [23957a9] d/control: adjust Maintainer field due changed email address
+    Due changes for the Alioth host the Maintainer email is also changing to a
+    new domain.
+
+ -- Carsten Schoenert <c.schoenert@t-online.de>  Thu, 17 May 2018 15:02:31 +0200
 
- -- David Prévot <taffit@debian.org>  Sat, 26 Mar 2016 16:30:16 -0400
+compactheader (2.1.1~beta1-1) experimental; urgency=medium
 
-compactheader (2.1.0-2) unstable; urgency=medium
+  * Team upload
 
-  * Team upload, to unstable since icedove 38 is available (Closes: #800636)
-  * Track the 2.1 branch
+  [ jmozmoz ]
+  * Add Portuguese translation
 
- -- David Prévot <taffit@debian.org>  Fri, 23 Oct 2015 18:11:57 -0400
+ -- David Prévot <taffit@debian.org>  Sat, 02 May 2015 10:57:15 -0400
 
 compactheader (2.1.0-1) experimental; urgency=medium
 
diff -Nru compactheader-2.1.0/debian/compat compactheader-2.1.6/debian/compat
--- compactheader-2.1.0/debian/compat	2013-07-17 03:55:27.000000000 +0200
+++ compactheader-2.1.6/debian/compat	2019-01-05 09:45:37.000000000 +0100
@@ -1 +1 @@
-8
+10
diff -Nru compactheader-2.1.0/debian/control compactheader-2.1.6/debian/control
--- compactheader-2.1.0/debian/control	2016-03-26 21:30:11.000000000 +0100
+++ compactheader-2.1.6/debian/control	2019-01-05 09:45:37.000000000 +0100
@@ -1,13 +1,13 @@
 Source: compactheader
 Section: mail
 Priority: optional
-Maintainer: Debian Mozilla Extension Maintainers <pkg-mozext-maintainers@lists.alioth.debian.org>
-Uploaders: Williams Orellana <worellana@williamsorellana.org>
-Build-Depends: debhelper (>= 8), mozilla-devscripts
-Standards-Version: 3.9.7
+Maintainer: Debian Mozilla Extension Maintainers <pkg-mozext-maintainers@alioth-lists.debian.net>
+Uploaders: Carsten Schoenert <c.schoenert@t-online.de>
+Build-Depends: debhelper (>= 10.2.5~), mozilla-devscripts
+Standards-Version: 4.2.1
 Homepage: http://compactheader.mozdev.org/
-Vcs-Git: git://anonscm.debian.org/pkg-mozext/compactheader.git -b 2.1
-Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-mozext/compactheader.git
+Vcs-Git: https://salsa.debian.org/webext-team/compactheader.git
+Vcs-Browser: https://salsa.debian.org/webext-team/compactheader
 
 Package: xul-ext-compactheader
 Architecture: all
diff -Nru compactheader-2.1.0/debian/gbp.conf compactheader-2.1.6/debian/gbp.conf
--- compactheader-2.1.0/debian/gbp.conf	2016-03-26 21:30:11.000000000 +0100
+++ compactheader-2.1.6/debian/gbp.conf	2019-01-05 09:43:54.000000000 +0100
@@ -1,2 +1,22 @@
+# Configuration file for git-buildpackage and friends
+
 [DEFAULT]
-debian-branch = 2.1
+# use pristine-tar:
+pristine-tar = True
+# generate gz compressed orig file
+compression = gz
+debian-branch = debian/stretch
+upstream-branch = upstream/latest
+
+[pq]
+patch-numbers = False
+
+[dch]
+id-length = 7
+debian-branch = debian/stretch
+
+[import-orig]
+# filter out unwanted files/dirs from upstream
+filter = [ '.cvsignore', '.gitignore', '*.orig', '*.rej' ]
+# filter the files out of the tarball passed to pristine-tar
+filter-pristine-tar = True
diff -Nru compactheader-2.1.0/debian/patches/Add-German-localization-to-install.rdf.patch compactheader-2.1.6/debian/patches/Add-German-localization-to-install.rdf.patch
--- compactheader-2.1.0/debian/patches/Add-German-localization-to-install.rdf.patch	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/debian/patches/Add-German-localization-to-install.rdf.patch	2018-09-09 10:15:08.000000000 +0200
@@ -0,0 +1,49 @@
+From: Carsten Schoenert <c.schoenert@t-online.de>
+Date: Tue, 15 May 2018 14:50:21 +0200
+Subject: Add German localization to install.rdf
+
+---
+ install.rdf | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+diff --git a/install.rdf b/install.rdf
+index 8e48cf4..cff090f 100644
+--- a/install.rdf
++++ b/install.rdf
+@@ -141,5 +141,36 @@
+       </Description>
+     </em:localized>
+ 
++    <em:localized>
++      <Description>
++        <em:locale>de</em:locale>
++        <em:name>CompactHeader</em:name>
++        <em:description>Hinzufügen der Möglichkeit die Anzeige der Header auf eine oder zwei Zeilen zu reduzieren und verknüpft Themen in RSS Feeds.</em:description>
++        <em:creator>Joachim Herb</em:creator>
++        <em:contributor>Zamula</em:contributor>
++        <em:contributor>Alex Dedul (Ursprünglicher Autor von RSS Linkify Subject)</em:contributor>
++        <em:contributor>Marco (Hilfe für Mac OS X Theme)</em:contributor>
++        <em:contributor>Axel Grude (Hilfe an DispMUA)</em:contributor>
++        <em:translator>Sam (cz)</em:translator>
++        <em:translator>Jørgen (da)</em:translator>
++        <em:translator>Joachim Herb (de)</em:translator>
++        <em:translator>strel (es-ES)</em:translator>
++        <em:translator>Joachim Herb (en-US)</em:translator>
++        <em:translator>Goofy (fr)</em:translator>
++        <em:translator>Óvári (hu)</em:translator>
++        <em:translator>Cai (ja)</em:translator>
++        <em:translator>oeekker (nl)</em:translator>
++        <em:translator>teo (pl)</em:translator>
++        <em:translator>ouesten (pt-BR)</em:translator>
++        <em:translator>Pinsky (ru)</em:translator>
++        <em:translator>Goofy (fr)</em:translator>
++        <em:translator>Peter Klofutar (sl)</em:translator>
++        <em:translator>Dak Srbija (sr)</em:translator>
++        <em:translator>Lakrits (sv-SE)</em:translator>
++        <em:translator>omrakin (tr)</em:translator>
++        <em:translator>Wang.H.K "whknnn" (zh-CN)</em:translator>
++      </Description>
++    </em:localized>
++
+   </RDF:Description>
+ </RDF>
diff -Nru compactheader-2.1.0/debian/patches/series compactheader-2.1.6/debian/patches/series
--- compactheader-2.1.0/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/debian/patches/series	2018-09-09 10:15:08.000000000 +0200
@@ -0,0 +1 @@
+Add-German-localization-to-install.rdf.patch
diff -Nru compactheader-2.1.0/debian/rules compactheader-2.1.6/debian/rules
--- compactheader-2.1.0/debian/rules	2016-03-26 21:29:59.000000000 +0100
+++ compactheader-2.1.6/debian/rules	2018-09-09 10:15:08.000000000 +0200
@@ -4,10 +4,13 @@
 	dh $@ --with xul-ext --buildsystem=xul_ext
 
 override_dh_auto_install:
-	install-xpi --remove-license-files xul-ext-compactheader.xpi
+	install-xpi \
+		--remove-license-files \
+		--exclude README.md \
+		--exclude build.xml \
+		xul-ext-compactheader.xpi
+	rm -rf $(CURDIR)/debian/xul-ext-compactheader/usr/share/xul-ext/compactheader/test
 
 override_dh_installchangelogs:
 	dh_installchangelogs $(CURDIR)/debian/upstream-changelog
 
-get-orig-source:
-	uscan --verbose --rename --compression xz --force
diff -Nru compactheader-2.1.0/debian/upstream-changelog compactheader-2.1.6/debian/upstream-changelog
--- compactheader-2.1.0/debian/upstream-changelog	2016-03-26 21:30:11.000000000 +0100
+++ compactheader-2.1.6/debian/upstream-changelog	2018-09-09 10:15:08.000000000 +0200
@@ -1,3 +1,4 @@
+    2.1.1beta1 Added Portuguese translation.
     2.1.0 = 2.1.0beta5
     2.1.0beta5: Thunderbird 36.0 removed (again) form the compatibility list. Remove obsolete code for old addon manager.
     2.1.0beta4: Thunderbird 36.0 added to list of compatible versions. :!: If the other action button is removed from the message pane header toolbar, Thunderbird will not show any messages after the next restart. The only way to fix this is to uninstall/deactivate this addon and re-add the button to the toolbar. :!:
diff -Nru compactheader-2.1.0/debian/watch compactheader-2.1.6/debian/watch
--- compactheader-2.1.0/debian/watch	2014-12-13 22:31:31.000000000 +0100
+++ compactheader-2.1.6/debian/watch	2018-09-09 10:15:08.000000000 +0200
@@ -1,4 +1,5 @@
-version=3
-options=uversionmangle=s/-?([^\d.])/~$1/ \
-https://addons.mozilla.org/thunderbird/addon/compactheader/ \
-https://addons.mozilla.org/thunderbird/downloads/file/\d+/compactheader-([\d\.\w]+)-.*\.xpi\?src=dp-btn-\w+
+version=4
+
+opts="mode=git, uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\.?\d*)$/$1~$2/" \
+  https://github.com/jmozmoz/compactheader \
+  refs/tags/(\d+\.\d+\.\d+(?:\.?beta[1-9])?)
diff -Nru compactheader-2.1.0/defaults/preferences/prefs.js compactheader-2.1.6/defaults/preferences/prefs.js
--- compactheader-2.1.0/defaults/preferences/prefs.js	2014-12-22 03:33:26.000000000 +0100
+++ compactheader-2.1.6/defaults/preferences/prefs.js	2018-08-18 02:45:39.000000000 +0200
@@ -3,8 +3,6 @@
 pref("extensions.CompactHeader.headersize.addressstyle", false);
 pref("extensions.CompactHeader.headersize.flatButtons", false);
 
-pref("extensions.CompactHeader.headersize.flatButtons", false);
-
 pref("extensions.CompactHeader.toolbox.position", "top");
 
 pref("extensions.CompactHeader.header.doubleclick", true);
diff -Nru compactheader-2.1.0/.hgignore compactheader-2.1.6/.hgignore
--- compactheader-2.1.0/.hgignore	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/.hgignore	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,13 @@
+
+syntax: regexp
+^AMO$
+syntax: regexp
+^test/ftp$
+syntax: regexp
+^test/test-.*
+syntax: regexp
+log-.*.txt
+syntax: regexp
+^pushgit\.bat$
+syntax: regexp
+^test/large-to-header\.txt$
\ Kein Zeilenumbruch am Dateiende.
diff -Nru compactheader-2.1.0/.hgtags compactheader-2.1.6/.hgtags
--- compactheader-2.1.0/.hgtags	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/.hgtags	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,78 @@
+002da0706241988afec0b00a362cfbca6140d8ce V_1_2_5_beta1
+085b2719688adfab60ef0cb648fa9ec9a1f615d3 V_1_3_0beta2
+0f12028638c1015b898c349aa83e3ccac9421916 V_1_0_2
+1226d206722edf67e78f48940a5be569f837a4ca version_0_6_2
+39d5f3ae71e050d1fc659cdab6f3814bc8f32ec3 V_2_0_0_beta_1
+559d76f889883711eb45a1f86a3a04aebbe8a374 V_1_2_1
+5eabf7c2d13978843074a086bd379d6c0cb51205 V_1_1_7
+669232304adc0ab90bf9f044eab4a8b8b9884c93 V_1_0_1
+790f50d88c2f0ab1c2d711ceb4fe954676fc6a51 V_1_0_0_
+8e15c04db83e5d40229b4a11b60c17ae23d6e1dc V_1_2_0
+952966e5f96d7f3c2e8eb3dce053bf702b5b8cc5 V_1_2_4
+97ac414e643557d62944df95b9a5aa5fe00de5eb V_1_1_6
+a2ad32711fcb9f1dd3498f144bbb81e5e742f0bb V_1_1_4
+c70cdc3efd29cffeb0f33441b39f1f998a711d72 V_1_2_3
+dd6a10b05ff33395ddbd8d47923e31e98cb9adb7 V_1_1_5
+e6befa63248936b65cf6dc11a647f31932d23275 V_1_1_5beta5
+eb681a4e600a4fca43a9706ff8ce8fb462f6b1bd V_1_3_0beta1
+ed7ee91b2ad0d6a02fc46720541212fa81533506 V_1_1_8
+ee6fecef652aebb739e29ca90012b33200b27299 V_1_2_0_beta1
+ee879e086607a15e7b4c8a3c356789154b36bed5 V_1_2_2
+ba8d44d825b0448ce5ef9f33caebf15fc51aedd4 V_1_4_0_beta2
+f701d2ede22af41f9e8db469148cf392d09c4f5a V_1_4_0
+67883ad600135a8d1766c686f890a0c7785081ca V_1_4_0
+d0476065ffe9a7be12de5fc68457eb969a4edaa5 V_1_4_1
+af7b065e63b91b036c92b3561706e7786ec352af V_1_4_2beta1
+8b74d6a6478a5d275908be59fc6aa1237a93b938 V_1_4_2beta2
+53a597dd8ac666f1dd87d33fabb8058aa2fb8811 V_1_4_2beta3
+90c661c94af0d16d1849c857b27b54417e434385 V_1_4_2beta4
+72e6ecaa24f3a1dea2b44a3c5f9bb2b109bf80f0 V_1_4_2beta5
+86d7f79a2a512f6b9405317f668aa5f077e77ead V_1_4_2
+71562d5ae32061477168fc780c12ad7dc5a25785 V_1_4_3beta1
+7340faf767f21b96806d758113fec406ed1fe677 V_1_4_3beta2
+c767ab47cef466eafd7845cecdfcd1e978c32009 V_1_4_3
+c767ab47cef466eafd7845cecdfcd1e978c32009 V_1_4_3
+a76216e6063ee82ac8f4c0c6a2b8321abfe42103 V_1_4_3
+d4b86697975aafe96e0b5e025d4b3231f0d891af V_1_4_4beta1
+573c3715fdb341de9b95dd9b6e90491b1f6409da V_1_4_5beta1
+4657fb5172bb49de040d78da819b02a29bd93df8 V_1_4_5beta2
+ba6106561e04402ecc908d85e037d34d7fe69122 V_1_4_5beta3
+6093962e4e97b7f9451d1a38f45ca072b6913e45 V_1_4_5beta4
+dd65a796824167b7e2501ba96fea6d2916fcfdea V_1_4_5
+61522db0c6303e234f877ac881f4dbf3fbb78f1a V_1_4_6beta1
+6579eab72d38bdd667e9b53b93bb14c04dda071e V_1_4_6beta2
+e4638c75258ad5ed4cd0ec5d4d5c7367541e8e78 V_1_4_6
+a9e41c7ef236eb30a9d7d28d935430f340dfab73 V_2_0_0_alpha_2
+9e1fb21fa7bf041255271ef8d9d5ce5a82ec40ee V_2_0_0beta1
+78fe2c5d07d3641ea1efbe8d5167fc76aeb2a7bb V_2_0_0
+28a57cc041c57af84326c06ea7b54ff235432be4 V_2_0_1beta1
+a2c94a80f2a4d848cf79d6ec527b4085042a5e64 V_2_0_1
+030deedd51fbdf8b613a8abe116d6254aa56f972 V_2_0_2
+fdbf7519af86535ed7cf0f59292b5b7527858217 V_2_0_3beta1
+c8ecafdab7a5d4f2e0f7c8212e1a49552d4ef6bd V_2_0_3beta2
+611249bdd06e8392cd7c44d29fc3fc56eb01385c V_2_0_2beta2
+9f87f64510eeaa0822aa0066d1fc246d155d1371 V_2_0_3beta3
+8c20b89055fb6e909f3fd5caee8e1cba5cb2e03a V_2_0_2beta1
+82ebe90f78532a39a0371ea7fe3bfd6e41209459 V_2_0_3
+b2265790f2ebae3b1647a15dbda086e99f795c51 V_2_0_4beta1
+cbb7989ca07ebb0eb7126862827613e94d0b9cc0 V_2_0_4beta2
+c34c3658de7ec2270be8db18770aa8c081449166 V_2_0_4
+131add685e554e4d43bed78d54fd132a82e03188 V_2_0_5beta1
+6fda259f7966ccbcd4529b04225244971a2280d2 V_2_0_5beta2
+d2543c3bafb7b63c9c57a590e22f4bcd5ed2f975 V_2_0_5
+83b89b2afbfa8191937e713686eb9dfe3a9bc744 V_2_0_6beta1
+b1ff0d2731183bbd9130f30fa678e6fee1c8cc3a V_2_0_6beta2
+300bc6edc45b79caf8a21756abd2803ac05baebd V_2_0_6
+27bfd053a909fa87a29d6ea5251a1238013fc75e V_2_0_7beta1
+180585cd620ca43ffb060c052ec7fbcf484a35c8 V_2_0_7beta2
+a196237349559c4f2eca0b41c01f46510e28f983 V_2_0_7beta3
+7ceb9d1fa0c47793820704c73df0cfe309bc1893 V_2_0_7
+f215e89b748cd8e1538584a16e29a8aef818569f V_2_0_8beta1
+d1a2a848c5763af882effe3f1b149071e47e147b V_2_0_8beta2
+8da8524e4c60557a3c3c4723103e0e00dff4e826 V_2_0_8
+3e87cf97c71255ef133cdea5ce67f40f6d0128f3 V_2_0_8beta3
+3e87cf97c71255ef133cdea5ce67f40f6d0128f3 V_2_0_8beta3
+0000000000000000000000000000000000000000 V_2_0_8beta3
+c3072d9044c63860604fd62830cf6ec836720fac V_2_0_9beta2
+06ff59781da900fa0e3ac6c60c2a49cff5e9fdab V_2_0_9
+290d2ce7fc8e01e56ad284f325704f74d7f739a3 github/branch36.0a1
diff -Nru compactheader-2.1.0/install.rdf compactheader-2.1.6/install.rdf
--- compactheader-2.1.0/install.rdf	2015-04-08 20:44:44.000000000 +0200
+++ compactheader-2.1.6/install.rdf	2018-08-18 02:45:39.000000000 +0200
@@ -1,39 +1,145 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
-	 xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
-	 xmlns:em="http://www.mozilla.org/2004/em-rdf#";>
+   xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:em="http://www.mozilla.org/2004/em-rdf#";>
+
+  <RDF:Description about="urn:mozilla:install-manifest">
+    <em:name>CompactHeader</em:name>
+    <em:version>2.1.6beta3</em:version>
+    <em:description>Add ability to reduce header size to one or two lines. Linkify subjects in RSS feeds.</em:description>
+    <em:creator>Joachim Herb</em:creator>
+    <em:contributor>Zamula</em:contributor>
+    <em:contributor>Alex Dedul (original author of RSS Linkify Subject)</em:contributor>
+    <em:contributor>Marco (Help for Mac OS X theme)</em:contributor>
+    <em:contributor>Axel Grude (Help on DispMUA)</em:contributor>
+    <em:translator>Sam (cz)</em:translator>
+    <em:translator>Jørgen (da)</em:translator>
+    <em:translator>Joachim Herb (de)</em:translator>
+    <em:translator>strel (es-ES)</em:translator>
+    <em:translator>Joachim Herb (en-US)</em:translator>
+    <em:translator>Goofy (fr)</em:translator>
+    <em:translator>Óvári (hu)</em:translator>
+    <em:translator>Cai (ja)</em:translator>
+    <em:translator>oeekker (nl)</em:translator>
+    <em:translator>teo (pl)</em:translator>
+    <em:translator>ouesten (pt-BR)</em:translator>
+    <em:translator>Pinsky (ru)</em:translator>
+    <em:translator>Goofy (fr)</em:translator>
+    <em:translator>Peter Klofutar (sl)</em:translator>
+    <em:translator>Dak Srbija (sr)</em:translator>
+    <em:translator>Lakrits (sv-SE)</em:translator>
+    <em:translator>omrakin (tr)</em:translator>
+    <em:translator>Wang.H.K "whknnn" (zh-CN)</em:translator>
+    <em:optionsURL>chrome://CompactHeader/content/preferences.xul</em:optionsURL>
+    <em:homepageURL>http://compactheader.mozdev.org/</em:homepageURL>
+    <em:updateURL>http://compactheader.mozdev.org/update.rdf</em:updateURL>
+    <em:updateKey>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+O1ZsY+7zY6A2GUdEx+6yoWhlfMz7qtDWDLEzMDCZ046vWauIwTGsIT4/48InmKSjF8q529U8FHamJI03FQuuE94KdLkQCJfGTUOwf/U1pKcHpF/WweGmRj7SrOt/exNCdUj7EaJ/vICy4TaUZ42Oul2CwP00x4BixiNs+26UbwIDAQAB</em:updateKey>
+    <em:id>{58D4392A-842E-11DE-B51A-C7B855D89593}</em:id>
+    <em:type>2</em:type>
+    <em:iconURL>chrome://CompactHeader/skin/cohe-icon.png</em:iconURL>
+
+    <!-- Target Application - Thunderbird -->
+    <em:targetApplication>
+      <RDF:Description>
+        <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
+        <em:minVersion>52.0</em:minVersion>
+        <em:maxVersion>61.0</em:maxVersion>
+      </RDF:Description>
+    </em:targetApplication>
+
+    <em:localized>
+      <Description>
+        <em:locale>hu</em:locale>
+        <em:name>Tömörített fejléc (CompactHeader)</em:name>
+        <em:description>A fejléc méretének egy vagy két sorral való módosítása. Link témák az RSS csatornákban.</em:description>
+        <em:creator>Joachim Herb</em:creator>
+        <em:contributor>Zamula</em:contributor>
+        <em:contributor>Alex Dedul (eredeti szerző: RSS Linkify Subject)</em:contributor>
+        <em:contributor>Marco (segítség a Mac OS X témában)</em:contributor>
+        <em:contributor>Axel Grude (segítség a DispMUA-val)</em:contributor>
+        <em:translator>Sam (cz)</em:translator>
+        <em:translator>Jørgen (da)</em:translator>
+        <em:translator>Joachim Herb (de)</em:translator>
+        <em:translator>strel (es-ES)</em:translator>
+        <em:translator>Joachim Herb (en-US)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Óvári (hu)</em:translator>
+        <em:translator>Cai (ja)</em:translator>
+        <em:translator>oeekker (nl)</em:translator>
+        <em:translator>teo (pl)</em:translator>
+        <em:translator>ouesten (pt-BR)</em:translator>
+        <em:translator>Pinsky (ru)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Peter Klofutar (sl)</em:translator>
+        <em:translator>Dak Srbija (sr)</em:translator>
+        <em:translator>Lakrits (sv-SE)</em:translator>
+        <em:translator>omrakin (tr)</em:translator>
+        <em:translator>Wang.H.K "whknnn" (zh-CN)</em:translator>
+      </Description>
+    </em:localized>
 
-	<RDF:Description about="urn:mozilla:install-manifest">
-		<em:name>CompactHeader</em:name>
     <em:localized>
       <Description>
         <em:locale>sl-SI</em:locale>
         <em:name>CompactHeader</em:name>
         <em:description>Doda zmožnost zmanjševanja velikosti glave na eno ali dve vrstici. Ustvari povezave iz zadev virov RSS.</em:description>
-        <em:translator>Peter Klofutar</em:translator>
+        <em:creator>Joachim Herb</em:creator>
+        <em:contributor>Zamula</em:contributor>
+        <em:contributor>Alex Dedul (original author of RSS Linkify Subject)</em:contributor>
+        <em:contributor>Marco (Help for Mac OS X theme)</em:contributor>
+        <em:contributor>Axel Grude (Help on DispMUA)</em:contributor>
+        <em:translator>Sam (cz)</em:translator>
+        <em:translator>Jørgen (da)</em:translator>
+        <em:translator>Joachim Herb (de)</em:translator>
+        <em:translator>strel (es-ES)</em:translator>
+        <em:translator>Joachim Herb (en-US)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Óvári (hu)</em:translator>
+        <em:translator>Cai (ja)</em:translator>
+        <em:translator>oeekker (nl)</em:translator>
+        <em:translator>teo (pl)</em:translator>
+        <em:translator>ouesten (pt-BR)</em:translator>
+        <em:translator>Pinsky (ru)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Peter Klofutar (sl)</em:translator>
+        <em:translator>Dak Srbija (sr)</em:translator>
+        <em:translator>Lakrits (sv-SE)</em:translator>
+        <em:translator>omrakin (tr)</em:translator>
+        <em:translator>Wang.H.K "whknnn" (zh-CN)</em:translator>
       </Description>
     </em:localized>
-		<em:version>2.1.0</em:version>
-		<em:description>Add ability to reduce header size to one or two lines. Linkify subjects in RSS feeds.</em:description>
-		<em:creator>Joachim Herb</em:creator>
-		<em:contributor>Zamula</em:contributor>
-		<em:contributor>Alex Dedul (original author of RSS Linkify Subject)</em:contributor>
-    <em:contributor>Marco (Help for Mac OS X theme)</em:contributor>
-    <em:contributor>Axel Grude (Help on DispMUA)</em:contributor>
-    <em:optionsURL>chrome://CompactHeader/content/preferences.xul</em:optionsURL>
-		<em:homepageURL>http://compactheader.mozdev.org/</em:homepageURL>
 
+    <em:localized>
+      <Description>
+        <em:locale>es-ES</em:locale>
+        <em:name>CompactHeader</em:name>
+        <em:description>Añade la capacidad de reducir el tamaño de la cabecera a una o dos líneas. Muestra como enlaces los asuntos en los canales RSS.</em:description>
+        <em:creator>Joachim Herb</em:creator>
+        <em:contributor>Zamula</em:contributor>
+        <em:contributor>Alex Dedul (original author of RSS Linkify Subject)</em:contributor>
+        <em:contributor>Marco (Help for Mac OS X theme)</em:contributor>
+        <em:contributor>Axel Grude (Help on DispMUA)</em:contributor>
+        <em:translator>Sam (cz)</em:translator>
+        <em:translator>Jørgen (da)</em:translator>
+        <em:translator>Joachim Herb (de)</em:translator>
+        <em:translator>strel (es-ES)</em:translator>
+        <em:translator>Joachim Herb (en-US)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Óvári (hu)</em:translator>
+        <em:translator>Cai (ja)</em:translator>
+        <em:translator>oeekker (nl)</em:translator>
+        <em:translator>teo (pl)</em:translator>
+        <em:translator>ouesten (pt-BR)</em:translator>
+        <em:translator>Pinsky (ru)</em:translator>
+        <em:translator>Goofy (fr)</em:translator>
+        <em:translator>Peter Klofutar (sl)</em:translator>
+        <em:translator>Dak Srbija (sr)</em:translator>
+        <em:translator>Lakrits (sv-SE)</em:translator>
+        <em:translator>omrakin (tr)</em:translator>
+        <em:translator>Wang.H.K "whknnn" (zh-CN)</em:translator>
+      </Description>
+    </em:localized>
 
-		<em:id>{58D4392A-842E-11DE-B51A-C7B855D89593}</em:id>
-		<em:type>2</em:type>
-  	<em:iconURL>chrome://CompactHeader/skin/cohe-icon.png</em:iconURL>
-		<em:targetApplication>
-			<RDF:Description>
-				<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
-				<em:minVersion>37.0</em:minVersion>
-				<em:maxVersion>40.0</em:maxVersion>
-			</RDF:Description>
-		</em:targetApplication>
-	</RDF:Description>
+  </RDF:Description>
 </RDF>
diff -Nru compactheader-2.1.0/LICENSE compactheader-2.1.6/LICENSE
--- compactheader-2.1.0/LICENSE	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/LICENSE	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,469 @@
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the MPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     https://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
diff -Nru compactheader-2.1.0/README.md compactheader-2.1.6/README.md
--- compactheader-2.1.0/README.md	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/README.md	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,91 @@
+# CompactHeader [![Build Status](https://travis-ci.org/jmozmoz/compactheader.svg?branch=master)](https://travis-ci.org/jmozmoz/compactheader) [![Build status](https://ci.appveyor.com/api/projects/status/mmvvkm83lajuunms/branch/master?svg=true)](https://ci.appveyor.com/project/jmozmoz/compactheader/branch/master)
+
+
+Thunderbird extension to add a symbol in the header plane to switch between
+compact and expanded view. Options to switch between one or two lines compact
+view, which buttons should be displayed in header pane.
+
+### Description
+
+Thunderbird does not anymore have the ability to reduce the display size of
+header pane to one line (as in Thunderbird 2.0). This add-on adds a symbol to
+compact and expand the message header plane. The compact header view mode can
+be set to either one or two lines.
+
+A customization dialog can be opened for the toolbar in the header pane
+(right mouse button context menu) to change the displayed buttons and their
+style.
+
+The shortcut "SHIFT+h" can be used to toggle between expanded and compact
+header view.
+
+This add-on integrates the functionality of ["RSS Linkify Subject" by
+Alex Dedul](https://addons.mozilla.org/en-US/thunderbird/addon/1704).
+
+There is also an option to display only the email addresses in the compact
+header view. Another option enables darkening the message header,
+if the message pane has focus.
+
+If you want to use the latest version, look for it at the
+[beta channel at AMO](https://addons.mozilla.org/thunderbird/addon/compactheader/versions/beta).
+
+
+### Known bugs
+
+There are several bug reports about a disappearing header pane in the compact
+header view mode. I could reproduce it if the TB Header Tools Extension is
+installed at the same time, see (http://forums.mozillazine.org/viewtopic.php?p=8543415#p8543415)
+
+### Installing
+
+Downloading the installation file from [addons.mozilla.org](https://addons.mozilla.org/thunderbird/addon/compactheader/)
+and then install CompactHeader within the add-on manager of Thunderbird.
+
+### Support
+
+Please send support questions to the [support threat at mozillazine](http://forums.mozillazine.org/viewtopic.php?f=29&t=1405155).
+
+### Build the xpi
+
+Download xmltask.jar from https://sourceforge.net/projects/xmltask/ and add
+the jar to CLASSPATH. Then:
+
+```
+ant buildAMO
+```
+
+## Running the tests
+
+In the directory [test](https://github.com/jmozmoz/compactheader/tree/master/test) a Python script is included which tests the add-on
+with different Thunderbird versions (see also [.travis.yml](https://github.com/jmozmoz/compactheader/blob/master/.travis.yml) and
+[appveyor.yml](https://github.com/jmozmoz/compactheader/blob/master/appveyor.yml)
+using the [Thunderbird infrastructure for mozmill](https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Thunderbird_MozMill_Testing/Running_Thunderbird_MozMill_tests_from_packaged_tests).
+
+```
+python executeTests.py
+```
+
+Available options:
+
+`--version` Version of Thunderbird to use for tests (currently supported ESR and nightly)
+
+`--nodownload` Do not download the latest version of Thunderbird but use the one stored from the last test
+
+`--downloadonly` Only download the latest version of Thunderbird but do not execute the tests
+
+## Versioning
+
+We use [mozilla Toolkit version format](https://developer.mozilla.org/en-US/docs/Mozilla/Toolkit_version_format)
+for versioning. For the versions available, see the [tags on this repository](https://github.com/jmozmoz/compactheader/tags),
+[versions available from AMO](https://addons.mozilla.org/thunderbird/addon/compactheader/versions/) and
+the [first message in the support threat](http://forums.mozillazine.org/viewtopic.php?p=7170965&sid=3f87f1bc1538d02ec6b81580f0e71fe1#p7170965).
+
+## Authors
+
+* **Joachim Herb** - [jmozmoz](https://github.com/jmozmoz)
+
+See the list of contributors and tranlators in [install.rdf](https://github.com/jmozmoz/compactheader/blob/master/install.rdf) who participated in this project.
+
+## License
+
+This project is licensed under [MPL 1.1](http://www.mozilla.org/MPL/)/GPL 2.0/LGPL 2.1
diff -Nru compactheader-2.1.0/test/buildconfig.py compactheader-2.1.6/test/buildconfig.py
--- compactheader-2.1.0/test/buildconfig.py	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/buildconfig.py	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,5 @@
+import os
+
+substs = {}
+
+substs['top_srcdir'] = os.path.abspath(os.path.join('..', '..'))
\ Kein Zeilenumbruch am Dateiende.
diff -Nru compactheader-2.1.0/test/compactheader/test-compactheader-collapse.js compactheader-2.1.6/test/compactheader/test-compactheader-collapse.js
--- compactheader-2.1.0/test/compactheader/test-compactheader-collapse.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-compactheader-collapse.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,464 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-collapse';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+const ENABLE_CHAT_PREF="mail.chat.enabled";
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+var folder2;
+
+var messageBodyISO8859_1 = "ae: " + String.fromCharCode(228) +
+  ", oe: " + String.fromCharCode(246) +
+  ", ue: " + String.fromCharCode(252) +
+  ", AE: " + String.fromCharCode(196) +
+  ", OE: " + String.fromCharCode(214) +
+  ", UE: " + String.fromCharCode(220) +
+  ", ss: " + String.fromCharCode(223) + "\n";
+
+var messageBodyUTF8 = "ae: ä, oe: ö, ue: ü, AE: Ä, OE: Ö, UE: Ü, ss: ß";
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+  folder1 = create_folder("MessageWindowE");
+
+  // create a message that has the interesting headers that commonly
+  // show up in the message header pane for testing
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(20), // YYY
+                            subject: "This is a really, really, really, really, really, really, really, really, long subject.",
+                            clobberHeaders: {
+                              "Newsgroups": "alt.test",
+                              "Reply-To": "J. Doe <j.doe@momo.invalid>",
+                              "Content-Base": "http://example.com/";,
+                              "Bcc": "Richard Roe <richard.roe@momo.invalid>"
+                            }});
+  add_message_to_folder(folder1, msg);
+
+  let msg2 = create_message({cc: msgGen.makeNamesAndAddresses(2), // YYY
+    subject: "This is a really, really, really, really, really, really, really, really, long subject.",
+    clobberHeaders: {
+      "Newsgroups": "alt.test",
+      "Reply-To": "J. Doe <j.doe@momo.invalid>",
+      "Content-Base": "http://example.com/";,
+      "Bcc": "Richard Roe <richard.roe@momo.invalid>"
+    }});
+  add_message_to_folder(folder1, msg2);
+
+  let msg3 = create_message({
+    subject: "This is a short subject.",
+    to: [["T Toe", "t.toe@t.invalid"]],
+    clobberHeaders: {
+      "Bcc": "R Roe <r.roe@r.invalid>",
+      "cc": "S Soe <s.soe@s.invalid>",
+    },
+    });
+  add_message_to_folder(folder1, msg3);
+
+  let msg4 = create_message({cc: msgGen.makeNamesAndAddresses(3),
+    to: msgGen.makeNamesAndAddresses(1)
+  });
+  add_message_to_folder(folder1, msg4);
+}
+
+function teardownModule() {
+  Services.prefs.clearUserPref(ENABLE_CHAT_PREF);
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+}
+
+function test_wide_layout_and_compact() {
+  set_pane_layout(kWideMailLayout);
+  assert_pane_layout(kWideMailLayout);
+  let abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+  select_message_in_folder(folder1, 0, mc);
+  collapse_and_assert_header(mc);
+
+  let largeDispMUAIcon = mc.e("CompactHeader_dispMUAiconExp");
+  let twoLineDispMUAIcon = mc.e("CompactHeader_dispMUAicon2line");
+  let oneLineDispMUAIcon = mc.e("CompactHeader_dispMUAiconCompact");
+
+  let orignalDispMUA = mc.e("dispMUA");
+
+  if (orignalDispMUA == null) {
+    assert_equals(oneLineDispMUAIcon.getAttribute("collapsed"), "true");
+    assert_equals(twoLineDispMUAIcon.getAttribute("collapsed"), "true");
+  }
+
+  expand_and_assert_header(mc);
+  if (orignalDispMUA == null) {
+    assert_equals(oneLineDispMUAIcon.getAttribute("collapsed"), "true");
+    assert_equals(twoLineDispMUAIcon.getAttribute("collapsed"), "true");
+  }
+
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+}
+
+function test_toggle_header_view_twoline(){
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+  collapse_and_assert_header(mc);
+  expand_and_assert_header(mc);
+  expand_and_assert_header(mc);
+  collapse_and_assert_header(mc);
+}
+
+function test_toggle_header_view_oneline(){
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_oneline);
+  mc.sleep(10);
+  open_preferences_dialog(mc, set_preferences_oneline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+  collapse_and_assert_header(mc);
+  expand_and_assert_header(mc);
+  expand_and_assert_header(mc);
+  collapse_and_assert_header(mc);
+}
+
+
+function get_deck_size(target) {
+  return mc.eid("msgHeaderViewDeck").getNode().boxObject;
+}
+
+
+function dump_header_size() {
+  deck_size = get_deck_size();
+  dump('msgHeaderViewDeck width: ' +
+       deck_size.width +
+      '\n');
+  dump('msgHeaderViewDeck height: ' +
+       deck_size.height +
+       '\n');
+}
+
+
+function doubleClickRight(target) {
+  deck_size = get_deck_size();
+  mc.doubleClick(target,
+      deck_size.width - 50,
+      deck_size.height/2);
+}
+
+
+function test_dblclick(){
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_oneline);
+  mc.sleep(10);
+  expand_and_assert_header(mc);
+
+  dump_header_size();
+  deck_size = get_deck_size();
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  dump_header_size();
+  assert_collapsed(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  dump_header_size();
+  assert_expanded(mc);
+
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+
+  expand_and_assert_header(mc);
+  dump_header_size();
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_collapsed(mc);
+  dump_header_size();
+
+  doubleClickRight(mc.eid("msgHeaderViewDeck"));
+  dump_header_size();
+  assert_expanded(mc);
+}
+
+function test_address_type_format(){
+  select_message_in_folder(folder1, 1, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+  collapse_and_assert_header(mc);
+
+  // Check the mode of the header.
+  let headerBox = mc.eid("CompactHeader_collapsedHeaderView");
+  let previousHeaderMode = headerBox.node.getAttribute("show_header_mode");
+
+  // Click the "more" button.
+  let moreIndicator = mc.eid("CompactHeader_collapsed2LtoCcBccBox");
+  moreIndicator = mc.window.document.getAnonymousElementByAttribute(
+                    moreIndicator.node, "anonid", "more");
+  moreIndicator = new elementslib.Elem(moreIndicator);
+  if (moreIndicator) {
+    mc.click(moreIndicator);
+  }
+
+  // Check the new mode of the header.
+  // FIXME: In the expanded header mode pressing the more button
+  // makes the header scrollable.
+//  if (headerBox.node.getAttribute("show_header_mode") != "all")
+//    throw new Error("Header Mode didn't change to 'all'!  " + "old=" +
+//                    previousHeaderMode + ", new=" +
+//                    headerBox.node.getAttribute("show_header_mode"));
+
+
+  let toDescription = mc.a('CompactHeader_collapsed2LtoCcBccBox', {class: "headerValue"});
+  let addrs = toDescription.getElementsByTagName('mail-emailaddress');
+  for (let i=0; i<addrs.length; i++) {
+    assert_true(addrs[i].hasAttribute("addressType"));
+  }
+}
+
+function test_date_format_collapsed(){
+  let msg = create_message();
+  add_message_to_folder(folder1, msg);
+  select_message_in_folder(folder1, -1, mc);
+
+  expand_and_assert_header(mc);
+  let expandedValue = mc.e("dateLabel").textContent;
+
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+  assert_equals(expandedValue, mc.e("CompactHeader_collapsed2LdateBox").textContent);
+
+  open_preferences_dialog(mc, set_preferences_oneline);
+  collapse_and_assert_header(mc);
+  assert_equals(expandedValue, mc.e("CompactHeader_collapsed1LdateBox").textContent);
+}
+
+function test_neighbours_of_header_view_toolbox(){
+  expand_and_assert_header(mc);
+  mc = reopen_3pane_window();
+
+  be_in_folder(folder1);
+
+  // select the first message, which will display it
+  let curMessage = select_click_row(0);
+  assert_selected_and_displayed(mc, curMessage);
+
+  let oldPreviousSibling = mc.e("header-view-toolbox").previousSibling;
+  if (oldPreviousSibling) {
+    oldPreviousSibling = oldPreviousSibling.id;
+  }
+  let oldNextSibling = mc.e("header-view-toolbox").nextSibling;
+  if (oldNextSibling) {
+    oldNextSibling = oldNextSibling.id;
+  }
+
+  collapse_and_assert_header(mc);
+  expand_and_assert_header(mc);
+
+  let newPreviousSibling = mc.e("header-view-toolbox").previousSibling;
+  if (newPreviousSibling) {
+    newPreviousSibling = newPreviousSibling.id;
+  }
+  let newNextSibling = mc.e("header-view-toolbox").nextSibling;
+  if (newNextSibling) {
+    newNextSibling = newNextSibling.id;
+  }
+
+  assert_equals(oldPreviousSibling, newPreviousSibling);
+  assert_equals(oldNextSibling, newNextSibling);
+}
+
+function test_address_type_order(){
+  select_message_in_folder(folder1, 2, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+  select_message_in_folder(folder1, 2, mc);
+
+  let toCcBccDescription = mc.a('CompactHeader_collapsed2LtoCcBccBox', {class: "headerValue"});
+  let addrs = toCcBccDescription.getElementsByTagName('mail-emailaddress');
+
+  let currentAddressType = "to";
+  for (let i=0; i<addrs.length; i++) {
+    let addressType = addrs[i].getAttribute("addressType");
+    assert_true((addressType == "to") || (addressType == "cc") || (addressType == "bcc"),
+      "wrong address type");
+    assert_true(addressType <= currentAddressType, "wrong address type order");
+    currentAddressType = addressType;
+  }
+}
+
+function test_addresses_do_not_double(){
+  const MORE_PREF = "mailnews.headers.show_n_lines_before_more";
+  Services.prefs.setIntPref(MORE_PREF, 2);
+
+  select_message_in_folder(folder1, 2, mc);
+  collapse_and_assert_header(mc);
+  expand_and_assert_header(mc);
+  select_message_in_folder(folder1, 3, mc);
+
+  let addrs;
+
+  let fromDescription = mc.a('expandedfromBox', {class: "headerValue"});
+  addrs = fromDescription.getElementsByTagName('mail-emailaddress');
+  let firstFromAddrNum = 0;
+    for (let i = 0; i<addrs.length; i++) {
+      if (isVisible(addrs[i])) {
+        firstFromAddrNum += 1;
+      }
+  }
+
+  let toDescription = mc.a('expandedtoBox', {class: "headerValue"});
+  addrs = toDescription.getElementsByTagName('mail-emailaddress');
+  let firstToAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      firstToAddrNum += 1;
+    }
+  }
+
+  let ccDescription = mc.a('expandedccBox', {class: "headerValue"});
+  addrs = ccDescription.getElementsByTagName('mail-emailaddress');
+  let firstCCAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      firstCCAddrNum += 1;
+    }
+  }
+
+  collapse_and_assert_header(mc);
+  expand_and_assert_header(mc);
+
+  addrs = fromDescription.getElementsByTagName('mail-emailaddress');
+  let secondFromAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      secondFromAddrNum += 1;
+    }
+  }
+
+  addrs = toDescription.getElementsByTagName('mail-emailaddress');
+  let secondToAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      secondToAddrNum += 1;
+    }
+  }
+
+  addrs = ccDescription.getElementsByTagName('mail-emailaddress');
+  let secondCCAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      secondCCAddrNum += 1;
+    }
+  }
+
+  assert_true(firstFromAddrNum == secondFromAddrNum, "number of from addresses changed from " +
+      firstFromAddrNum + " to " + secondFromAddrNum);
+  assert_true(firstToAddrNum == secondToAddrNum, "number of to addresses changed from " +
+      firstToAddrNum + " to " + secondToAddrNum);
+  assert_true(firstCCAddrNum == secondCCAddrNum, "number of cc addresses changed from " +
+      firstCCAddrNum + " to " + secondCCAddrNum);
+  Services.prefs.clearUserPref(MORE_PREF);
+}
+
+function test_toCcBcc_without_chat_enabled(){
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+
+  Services.prefs.setBoolPref(ENABLE_CHAT_PREF, false);
+
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+  let msg = create_message({
+    subject: "This is a short subject.",
+    to: [["U Ull", "u.ull@t.invalid"]],
+      clobberHeaders: {
+        "cc": "W Wer <w.wer@s.invalid>",
+    },
+    });
+  add_message_to_folder(folder1, msg);
+  select_message_in_folder(folder1, -1, mc);
+
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+
+  let toDescription = mc.a('CompactHeader_collapsed2LtoCcBccBox', {class: "headerValue"});
+  let addrs = toDescription.getElementsByTagName('mail-emailaddress');
+  for (let i=0; i<addrs.length; i++) {
+    let labels = mc.window.document.getAnonymousElementByAttribute(
+      addrs[i], "anonid", "emaillabel");
+    assert_true(labels.value.length > 0);
+  }
+}
diff -Nru compactheader-2.1.0/test/compactheader/test-compactheader-context-copy.js compactheader-2.1.6/test/compactheader/test-compactheader-context-copy.js
--- compactheader-2.1.0/test/compactheader/test-compactheader-context-copy.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-compactheader-context-copy.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,279 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-dark-on-focus';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+const LINKIFY_PREF = "extensions.CompactHeader.headersize.linkify";
+const FEED_ADDR = "http://www.mozilla.org/";
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+var normalBackground;
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+  folder1 = create_folder("ContextCopyTest1");
+
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(3),
+    to: msgGen.makeNamesAndAddresses(1),
+    subject: "Normal message"
+  });
+
+
+  add_message_to_folder(folder1, msg);
+  // create a message which looks like an RSS feed
+  let msg2 = create_message({to: msgGen.makeNamesAndAddresses(1), // YYY
+                            subject: "RSS feed message",
+                            clobberHeaders: {
+                              "Content-Base": FEED_ADDR
+                            }});
+  add_message_to_folder(folder1, msg2);
+
+}
+
+function teardownModule() {
+  Services.prefs.clearUserPref(LINKIFY_PREF);
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+}
+
+function test_without_linkify() {
+  // select "normal message
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  open_preferences_dialog(mc, set_preferences_oneline);
+  open_preferences_dialog(mc, set_preferences_non_linkify);
+
+  // check context menu of subject = Copy
+  mc.rightClick(mc.eid("expandedsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+  // no header entry web address
+  assert_false(isVisible(mc.e("expandedcontent-baseBox")));
+
+  collapse_and_assert_header(mc);
+  // check context menu of subject = Copy
+  assert_true(isVisible(mc.e("CompactHeader_collapsed1LsubjectBox")));
+  mc.rightClick(mc.eid("CompactHeader_collapsed1LsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyLink")),
+    "CompactHeader_copyPopup_CopyLink should be invisible");
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyText")),
+    "CompactHeader_copyPopup_CopyText should be invisible");
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+  assert_equals(null, mc.e("CompactHeader_collapsedsubjectlinkBox"));
+
+  // select RSS message
+  curMessage = select_message_in_folder(folder1, 1, mc);
+  expand_and_assert_header(mc);
+
+  // check context menu of subject = Copy
+  mc.rightClick(mc.eid("expandedsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+  // check context menu of Website = Copy Link Address
+  mc.rightClick(mc.eid("expandedcontent-baseBox"));
+  wait_for_popup_to_open(mc.e("copyUrlPopup"));
+
+  let copyLinkMenuItem = mc.window.document.getElementsByAttribute("oncommand",
+      "CopyWebsiteAddress(document.popupNode)")[0];
+  assert_true(isVisible(copyLinkMenuItem));
+  let copyLinkMenuItemClick = new elementslib.Elem(copyLinkMenuItem);
+  mc.click(copyLinkMenuItemClick);
+  assert_clipboard_content(FEED_ADDR);
+
+
+  collapse_and_assert_header(mc);
+  // check context menu of subject = Copy
+  assert_true(isVisible(mc.e("CompactHeader_collapsed1LsubjectBox")));
+  mc.rightClick(mc.eid("CompactHeader_collapsed1LsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyLink")),
+    "CompactHeader_copyPopup_CopyLink should be invisible");
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyText")),
+    "CompactHeader_copyPopup_CopyText should be invisible");
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+  // no link in subject
+  assert_equals(null, mc.e("CompactHeader_collapsedsubjectlinkBox"));
+}
+
+function test_with_linkify() {
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  open_preferences_dialog(mc, set_preferences_oneline);
+  open_preferences_dialog(mc, set_preferences_linkify);
+
+  // check context menu of subject = Copy
+  mc.rightClick(mc.eid("expandedsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+  // no header entry web address
+  assert_false(isVisible(mc.e("expandedcontent-baseBox")));
+
+  collapse_and_assert_header(mc);
+  // check context menu of subject = Copy
+  assert_true(isVisible(mc.e("CompactHeader_collapsed1LsubjectBox")));
+  mc.rightClick(mc.eid("CompactHeader_collapsed1LsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyLink")),
+    "CompactHeader_copyPopup_CopyLink should be invisible");
+  assert_false(isVisible(mc.e("CompactHeader_copyPopup_CopyText")),
+    "CompactHeader_copyPopup_CopyText should be invisible");
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+  curMessage = select_message_in_folder(folder1, 1, mc);
+  expand_and_assert_header(mc);
+
+  // check context menu of subject = Copy
+  mc.rightClick(mc.eid("expandedsubjectBox"));
+  wait_for_popup_to_open(mc.e("copyPopup"));
+  assert_true(isVisible(mc.e("copyMenuitem")));
+  mc.click_menus_in_sequence(mc.e("copyPopup"), [{id: "copyMenuitem"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+  // check context menu of Website = Copy Link Address
+  mc.rightClick(mc.eid("expandedcontent-baseBox"));
+  wait_for_popup_to_open(mc.e("copyUrlPopup"));
+
+  let copyLinkMenuItem = mc.window.document.getElementsByAttribute("oncommand",
+      "CopyWebsiteAddress(document.popupNode)")[0];
+  assert_true(isVisible(copyLinkMenuItem));
+  let copyLinkMenuItemClick = new elementslib.Elem(copyLinkMenuItem);
+  mc.click(copyLinkMenuItemClick);
+  assert_clipboard_content(FEED_ADDR);
+
+
+  collapse_and_assert_header(mc);
+  // check context menu of subject = Copy
+  assert_false(isVisible(mc.e("CompactHeader_collapsed1LsubjectBox")));
+  assert_equals(FEED_ADDR,
+      mc.e("CompactHeader_collapsedsubjectlinkBox").getAttribute("url"));
+  mc.rightClick(mc.eid("CompactHeader_collapsedsubjectlinkBox"));
+  wait_for_popup_to_open(mc.e("CompactHeader_copyPopup"));
+  assert_false(isVisible(mc.e("copyPopup")));
+  assert_true(isVisible(mc.e("CompactHeader_copyPopup_CopyLink")),
+    "CompactHeader_copyPopup_CopyLink should be visible");
+  assert_true(isVisible(mc.e("CompactHeader_copyPopup_CopyText")),
+    "CompactHeader_copyPopup_CopyText should be visible");
+  mc.click_menus_in_sequence(mc.e("CompactHeader_copyPopup"),
+      [{id: "CompactHeader_copyPopup_CopyText"}]);
+  assert_clipboard_content(curMessage.mime2DecodedSubject);
+
+
+  mc.rightClick(mc.eid("CompactHeader_collapsedsubjectlinkBox"));
+  wait_for_popup_to_open(mc.e("CompactHeader_copyPopup"));
+  mc.click_menus_in_sequence(mc.e("CompactHeader_copyPopup"),
+      [{id: "CompactHeader_copyPopup_CopyLink"}]);
+  assert_clipboard_content(FEED_ADDR);
+}
+
+
+function assert_clipboard_content(expectedContent) {
+  var trans = Transferable();
+  trans.addDataFlavor("text/unicode");
+
+  Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard);
+
+  var str       = {};
+  var strLength = {};
+
+  trans.getTransferData("text/unicode", str, strLength);
+
+  if (str) {
+    var pastetext = str.value.QueryInterface(Ci.nsISupportsString).data;
+  }
+
+  assert_equals(expectedContent, pastetext)
+}
+
+//Create a constructor for the builtin transferable class
+const nsTransferable = Components.Constructor("@mozilla.org/widget/transferable;1", "nsITransferable");
+
+//Create a wrapper to construct a nsITransferable instance and set its source to the given window, when necessary
+function Transferable(source) {
+    var res = nsTransferable();
+    if ('init' in res) {
+        // When passed a Window object, find a suitable provacy context for it.
+        if (source instanceof Ci.nsIDOMWindow)
+            // Note: in Gecko versions >16, you can import the PrivateBrowsingUtils.jsm module
+            // and use PrivateBrowsingUtils.privacyContextFromWindow(sourceWindow) instead
+            source = source.QueryInterface(Ci.nsIInterfaceRequestor)
+                           .getInterface(Ci.nsIWebNavigation);
+
+        res.init(source);
+    }
+    return res;
+}
\ Kein Zeilenumbruch am Dateiende.
diff -Nru compactheader-2.1.0/test/compactheader/test-compactheader-dark-on-focus.js compactheader-2.1.6/test/compactheader/test-compactheader-dark-on-focus.js
--- compactheader-2.1.0/test/compactheader/test-compactheader-dark-on-focus.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-compactheader-dark-on-focus.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,193 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-dark-on-focus';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+const DARKEN_PREF="extensions.CompactHeader.header.darkenonfocus";
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+var normalBackground;
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+  folder1 = create_folder("DarkenTest1");
+
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(3),
+    to: msgGen.makeNamesAndAddresses(1)
+  });
+
+  add_message_to_folder(folder1, msg);
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  let msgHeaderView = mc.window.document.getElementById("msgHeaderView");
+  normalBackground = mc.window.getComputedStyle(msgHeaderView)
+                       .getPropertyValue("background-color");  //fails on OSX
+  mc.sleep(1000);
+}
+
+function teardownModule() {
+  Services.prefs.clearUserPref(DARKEN_PREF);
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+}
+
+function test_normal_background() {
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));  //fails on OSX
+  sub_test_background(normalBackground, mc, mc.eid('messagepane'));
+
+  set_pane_layout(kWideMailLayout);
+  assert_pane_layout(kWideMailLayout);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(normalBackground, mc, mc.eid('messagepane'));
+
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(normalBackground, mc, mc.eid('messagepane'));
+}
+
+function test_darken_background() {
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+  let darkenBackground = darkenColor(normalBackground, 0.9);  // fails on OSX
+
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  open_preferences_dialog(mc, set_preferences_darken);
+
+  sub_test_background(normalBackground, mc, mc.eid('displayDeck'));
+
+  sub_test_background(darkenBackground, mc, mc.eid('messagepane'));
+
+  set_pane_layout(kWideMailLayout);
+  assert_pane_layout(kWideMailLayout);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(darkenBackground, mc, mc.eid('messagepane'));
+
+  let msgc = open_selected_message_in_new_window();
+  sub_test_background(normalBackground, msgc, msgc.eid('messagepane'));
+  close_window(msgc);
+
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(darkenBackground, mc, mc.eid('messagepane'));
+
+  open_preferences_dialog(mc, set_preferences_non_darken);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(normalBackground, mc, mc.eid('messagepane'));
+
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  sub_test_background(normalBackground, mc, mc.eid('threadTree'));
+  sub_test_background(normalBackground, mc, mc.eid('messagepane'));
+}
+
+function sub_test_background(aColor, aController, aTarget) {
+  expand_and_assert_header(aController);
+  mc.click(aTarget);
+  let msgHeaderView = aController.window.document.getElementById("msgHeaderView");
+  let background =  aController.window.getComputedStyle(msgHeaderView)
+                             .getPropertyValue("background-color");
+
+  assert_equals(darkenColor(aColor, 1), darkenColor(background, 1));
+
+  open_preferences_dialog(aController, set_preferences_twoline);
+  aController.sleep(10);
+  collapse_and_assert_header(aController);
+  mc.click(aTarget);
+  msgHeaderView = aController.window.document.getElementById("msgHeaderView");
+  background =  aController.window.getComputedStyle(msgHeaderView)
+                         .getPropertyValue("background-color");
+  assert_equals(darkenColor(aColor, 1), darkenColor(background, 1));
+
+  open_preferences_dialog(aController, set_preferences_oneline);
+  aController.sleep(10);
+  collapse_and_assert_header(aController);
+  mc.click(aTarget);
+  msgHeaderView = aController.window.document.getElementById("msgHeaderView");
+  background =  aController.window.getComputedStyle(msgHeaderView)
+                         .getPropertyValue("background-color");
+  assert_equals(darkenColor(aColor, 1), darkenColor(background, 1));
+}
+
+function darkenColor(color, factor) {
+  if ((color.substr(0, 1) === '#') || (color === "transparent")) {
+    return color;
+  }
+
+  var digits = /(.*?)rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)/.exec(color);
+
+  var red = parseInt(digits[2]);
+  var green = parseInt(digits[3]);
+  var blue = parseInt(digits[4]);
+
+  red = red * factor;
+  green = green * factor;
+  blue = blue * factor;
+
+  var rgb = blue | (green << 8) | (red << 16);
+  return digits[1] + '#' + rgb.toString(16);
+}
diff -Nru compactheader-2.1.0/test/compactheader/test-compactheader-preferences.js compactheader-2.1.6/test/compactheader/test-compactheader-preferences.js
--- compactheader-2.1.0/test/compactheader/test-compactheader-preferences.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-compactheader-preferences.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,259 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-preferences';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+var folder2;
+
+const PREF = "browser.preferences.instantApply";
+
+var messageBodyISO8859_1 = "ae: " + String.fromCharCode(228) +
+  ", oe: " + String.fromCharCode(246) +
+  ", ue: " + String.fromCharCode(252) +
+  ", AE: " + String.fromCharCode(196) +
+  ", OE: " + String.fromCharCode(214) +
+  ", UE: " + String.fromCharCode(220) +
+  ", ss: " + String.fromCharCode(223) + "\n";
+
+//var messageBodyUTF8 = "ae: ä, oe: ö, ue: ü, " +
+//  "AE: Ä, OE: Ö, UE: Ü, ss: ß";
+
+//var messageBodyUTF8 = "ae: \uc3a4, oe: \uceb6, ue: \uc3bc, " +
+//                      "AE: \uc384, OE: \uc396, UE: \uc39c, ss: \uce9f";
+
+messageBodyUTF8 =
+  "ae: "   + String.fromCharCode(0xc3) + String.fromCharCode(0xa4) +
+  ", oe: " + String.fromCharCode(0xc3) + String.fromCharCode(0xb6) +
+  ", ue: " + String.fromCharCode(0xc3) + String.fromCharCode(0xbc) +
+  ", AE: " + String.fromCharCode(0xc3) + String.fromCharCode(0x84) +
+  ", OE: " + String.fromCharCode(0xc3) + String.fromCharCode(0x96) +
+  ", UE: " + String.fromCharCode(0xc3) + String.fromCharCode(0x9c) +
+  ", ss: " + String.fromCharCode(0xc3) + String.fromCharCode(0x9f) +
+  "\n";
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+// turn this on to mimic OSX behavior
+// Services.prefs.setBoolPref(PREF, true);
+
+  // Get rid of possibly showing up lightning import wizard
+  // Get rid of possibly showing up lightning import wizard
+  let wizard = Services.wm.getMostRecentWindow("Calendar:MigrationWizard");
+  if (wizard) {
+    close_window(wizard);
+    mc = open3PaneWindow();
+  }
+
+  folder1 = create_folder("MessageWindowC");
+  folder2 = create_folder("MessageWindowD");
+
+  // create a message that has the interesting headers that commonly
+  // show up in the message header pane for testing
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(20), // YYY
+                            subject: "This is a really, really, really, really, really, really, really, really, long subject.",
+                            clobberHeaders: {
+                              "Newsgroups": "alt.test",
+                              "Reply-To": "J. Doe <j.doe@momo.invalid>",
+                              "Content-Base": "http://example.com/";,
+                              "Bcc": "Richard Roe <richard.roe@momo.invalid>"
+                            }});
+
+  add_message_to_folder(folder1, msg);
+
+  // create a message that has umlauts
+  addToFolder("test encoded ISO-8859-1", messageBodyISO8859_1, folder1, "iso-8859-1");
+  addToFolder("test encoded UTF-8", messageBodyUTF8, folder1, "utf-8");
+
+  let msg2 = create_message();
+  add_message_to_folder(folder1, msg2);
+
+  let msg3 = create_message();
+  add_message_to_folder(folder2, msg3);
+
+  // create message with empty email addresses to avoid double click
+  // confusion
+  let msg4 = create_message(
+      {
+        to: 't@t',
+        from: 't@t',
+        subject: "subject.",
+      });
+
+  add_message_to_folder(folder2, msg4);
+}
+
+
+function test_double_preference_change_ISO(){
+  select_message_in_folder(folder1, 2, mc);
+  assert_browser_text_present(mc.e("messagepane"), messageBodyISO8859_1);
+  open_preferences_dialog(mc, subtest_change_twoline_linkify);
+  mc.sleep(100);
+  assert_browser_text_present(mc.e("messagepane"), messageBodyISO8859_1);
+}
+
+function test_double_preference_change_UTF(){
+  select_message_in_folder(folder1, 3, mc);
+  assert_browser_text_present(mc.e("messagepane"), messageBodyISO8859_1);
+  open_preferences_dialog(mc, subtest_change_twoline_linkify);
+  mc.sleep(100);
+  assert_browser_text_present(mc.e("messagepane"), messageBodyISO8859_1);
+}
+
+function subtest_change_twoline_linkify(aController) {
+  aController.click(aController.eid("CompactHeader_checkboxCompactTwolineView"));
+  aController.click(aController.eid("CompactHeader_checkboxLinkify"));
+  close_preferences_dialog(aController);
+}
+
+function test_single_preference_change_folder(){
+  select_message_in_folder(folder1, 3, mc);
+  open_preferences_dialog(mc, subtest_change_twoline);
+  select_message_in_folder(folder2, 0, mc);
+}
+
+function addToFolder(aSubject, aBody, aFolder, aCharset) {
+
+  let msgId = Components.classes["@mozilla.org/uuid-generator;1"]
+                          .getService(Components.interfaces.nsIUUIDGenerator)
+                          .generateUUID() +"@mozillamessaging.invalid";
+
+  let source = "From - Sat Nov  1 12:39:54 2008\n" +
+               "X-Mozilla-Status: 0001\n" +
+               "X-Mozilla-Status2: 00000000\n" +
+               "Message-ID: <" + msgId + ">\n" +
+               "Date: Wed, 11 Jun 2008 20:32:02 -0400\n" +
+               "From: Tester <tests@mozillamessaging.invalid>\n" +
+               "User-Agent: Thunderbird 3.0a2pre (Macintosh/2008052122)\n" +
+               "MIME-Version: 1.0\n" +
+               "To: recipient@mozillamessaging.invalid\n" +
+               "Subject: " + aSubject + "\n" +
+               "Content-Type: text/html; charset=" + aCharset + "\n" +
+               "Content-Transfer-Encoding: 8bit\n" +
+               "\n" + aBody + "\n";
+
+  aFolder.QueryInterface(Components.interfaces.nsIMsgLocalMailFolder);
+  aFolder.gettingNewMessages = true;
+
+  aFolder.addMessage(source);
+  aFolder.gettingNewMessages = false;
+
+  return aFolder.msgDatabase.getMsgHdrForMessageID(msgId);
+}
+
+/**
+ * Asserts that the given text is present on the message pane.
+ */
+function assert_browser_text_present(aBrowser, aText) {
+  let html = aBrowser.contentDocument.documentElement.innerHTML;
+  if (html.indexOf(aText) == -1) {
+    throw new Error("Unable to find string \"" + escape(aText) + "\" on the message pane");
+  }
+}
+
+function subtest_change_twoline_dblclick(aController) {
+  let dblClick = aController.eid("CompactHeader_checkbox_dblclick_header");
+  let dblClickNode = dblClick.node;
+
+  if (!dblClickNode.hasAttribute("checked")) {
+    aController.click(dblClick);
+  }
+  let checkboxCompactTwolineView = aController.eid("CompactHeader_checkboxCompactTwolineView");
+  if (!checkboxCompactTwolineView.node.getAttribute("checked")) {
+    aController.click(checkboxCompactTwolineView);
+  }
+
+  close_preferences_dialog(aController);
+}
+
+
+/*
+ * Test that double click in header pane toggles expanded/compact view
+ */
+
+function test_dblclick_header(){
+  select_message_in_folder(folder2, 1, mc);
+  set_and_assert_toolbox_position(mc, 'top'); // make sure, email addresses are out of the click way
+  open_preferences_dialog(mc, subtest_change_oneline);
+  open_preferences_dialog(mc, subtest_change_no_dblclick);
+  collapse_and_assert_header(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_collapsed(mc);
+
+  open_preferences_dialog(mc, subtest_change_twoline_dblclick);
+  collapse_and_assert_header(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_expanded(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_collapsed(mc);
+
+  open_preferences_dialog(mc, subtest_change_oneline);
+  mc.sleep(250); // make sure, next preferences change results in update of email display
+  collapse_and_assert_header(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_expanded(mc);
+
+  mc.doubleClick(mc.eid("msgHeaderViewDeck"));
+  assert_collapsed(mc);
+}
diff -Nru compactheader-2.1.0/test/compactheader/test-compactheader-toolbar.js compactheader-2.1.6/test/compactheader/test-compactheader-toolbar.js
--- compactheader-2.1.0/test/compactheader/test-compactheader-toolbar.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-compactheader-toolbar.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,883 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-toolbar';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'dom-helpers', 'compactheader-helpers'];
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+Cu.import("resource://gre/modules/Services.jsm");
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1, folder2;
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+  let domh = collector.getModule('dom-helpers');
+  domh.installInto(module);
+
+  // Get rid of possibly showing up lightning import wizard
+  let wizard = Services.wm.getMostRecentWindow("Calendar:MigrationWizard");
+  if (wizard) {
+    close_window(wizard);
+    mc = open3PaneWindow();
+  }
+
+  folder1 = create_folder("MessageWindowB");
+
+  // create a message that has the interesting headers that commonly
+  // show up in the message header pane for testing
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(20), // YYY
+                            subject: "This is a really, really, really, really, really, really, really, really, long subject.",
+                            clobberHeaders: {
+                              "Newsgroups": "alt.test",
+                              "Reply-To": "J. Doe <j.doe@momo.invalid>",
+                              "Content-Base": "http://example.com/";,
+                              "Bcc": "Richard Roe <richard.roe@momo.invalid>"
+                            }});
+
+  add_message_to_folder(folder1, msg);
+
+  // create a message that has boring headers to be able to switch to and
+  // back from, to force the more button to collapse again.
+  msg = create_message();
+  add_message_to_folder(folder1, msg);
+
+  folder2 = create_folder("ThreadTest");
+
+  thread1 = create_thread(3);
+  add_sets_to_folders([folder2], [thread1]);
+
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+}
+
+function teardownModule() {
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+}
+
+/**
+ *  Test header pane toolbar position
+ */
+function test_button_visibility() {
+  if (canMoveToolbox()) {
+    be_in_folder(folder2);
+    select_click_row(0);
+    set_and_assert_toolbox_position(mc, 'right');
+    restore_and_check_default_buttons(mc);
+    Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+    let ctc = open_header_pane_toolbar_customization(mc);
+    let palette = ctc.e("palette-box");
+
+    let button1 = ctc.e("wrapper-CompactHeader_button-starMessages");
+    let button2 = mc.e("wrapper-hdrJunkButton");
+    dump("drag target: " + button1 + "\n");
+    dump("drop target: " + button2 + "\n");
+    drag_n_drop_element(button1, ctc.window, button2, mc.window, 0.25,
+                        0.25, palette);  // fails on OSX
+    close_header_pane_toolbar_customization(ctc);
+
+    button1 = mc.e("CompactHeader_button-starMessages");
+    assert_false(button1.hasAttribute("disabled"));
+
+    make_display_threaded();
+    toggle_thread_row(0);
+
+    assert_true(button1.hasAttribute("disabled"));
+    assert_equals(button1.getAttribute("disabled"), "true");
+
+    select_message_in_folder(folder1, 0, mc);
+    assert_false(button1.hasAttribute("disabled"));
+
+    restore_and_check_default_buttons(mc);
+    Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+  }
+}
+
+/**
+ *  Make sure that opening the header toolbar customization dialog
+ *  does not break the get messages button in main toolbar
+ */
+function test_get_msg_button_customize_header_toolbar(){
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // It is necessary to press the Get Message Button to get the popup menu populated
+  mc.click(mc.aid("button-getmsg", {class: "toolbarbutton-menubutton-dropmarker"}));
+  mc.ewait("button-getAllNewMsgSeparator");
+
+  var getMailButtonPopup = mc.eid("button-getMsgPopup").node;
+  var originalServerCount = getMailButtonPopup.childElementCount;
+
+  // Open customization dialog, because it broke the Get Message Button popup menu
+  // see https://bugzilla.mozilla.org/show_bug.cgi?id=565045
+  let ctc = open_header_pane_toolbar_customization(mc);
+  close_header_pane_toolbar_customization(ctc);
+
+  // Press the Get Message Button to populate popup menu again
+  mc.click(mc.aid("button-getmsg", {class: "toolbarbutton-menubutton-dropmarker"}));
+  mc.ewait("button-getAllNewMsgSeparator");
+
+  getMailButtonPopup = mc.eid("button-getMsgPopup").node;
+  var finalServerCount = getMailButtonPopup.childElementCount;
+
+  if (originalServerCount != finalServerCount) {
+    throw new Error("number of entries in Get Message Button popup menu after " +
+                    "header toolbar customization " +
+                    finalServerCount + " <> as before: " +
+                    originalServerCount);
+  }
+}
+
+/**
+ *  Test header pane toolbar customization: Check for default button sets
+ */
+function test_customize_header_toolbar_check_default()
+{
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  let hdrToolbar = mc.eid("header-view-toolbar").node;
+  let hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  // In a fresh profile the currentset attribute does not
+  // exist, i.e. it returns empty. So check for both valid
+  // posiblities.
+  assert_true((hdrToolbar.getAttribute("currentset") == "") ||
+    (hdrToolbar.getAttribute("currentset") == hdrBarDefaultSet),
+    "Header Toolbar currentset should be empty or contain default buttons "+
+    "but contains: " + hdrToolbar.getAttribute("currentset"));
+  // Now make sure, that also the attribute gets set:
+  restore_and_check_default_buttons(mc);
+
+  // Display message in new window and check that the default
+  // buttons are shown there.
+  let msgc = open_selected_message_in_new_window();
+  assert_selected_and_displayed(msgc, curMessage);
+  expand_and_assert_header(msgc);
+  hdrToolbar = msgc.eid("header-view-toolbar").node;
+  hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  // In a fresh profile the currentset attribute does not
+  // exist, i.e. it returns empty. So check for both valid
+  // posiblities.
+  assert_true((hdrToolbar.getAttribute("currentset") == "") ||
+    (hdrToolbar.getAttribute("currentset") == hdrBarDefaultSet),
+    "Header Toolbar currentset should be empty or contain default buttons "+
+    "but contains: " + hdrToolbar.getAttribute("currentset"));
+  // Now make sure, that also the attribute gets set:
+  restore_and_check_default_buttons(msgc);
+
+  close_window(msgc);
+}
+
+/**
+*  Test that other action button has icon
+*/
+function test_other_actions_icon()
+{
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+
+  // Restore the default buttons to get defined starting conditions.
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+  restore_and_check_default_buttons(mc);
+
+  let otherActionIcon = mc.a('otherActionsButton', {class: "toolbarbutton-icon"});
+
+  let imageSrc = 'url("chrome://compactheader-os/skin/other-action-small.png")';
+  assert_equals(mc.window.getComputedStyle(otherActionIcon).getPropertyValue("list-style-image"), imageSrc);
+
+}
+
+/**
+ *  Test header pane toolbar customization: Reorder buttons
+ */
+function test_customize_header_toolbar_reorder_buttons()
+{
+  Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+
+  // Restore the default buttons to get defined starting conditions.
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+  restore_and_check_default_buttons(mc);
+
+  // Save the currentSet of the toolbar before opening the
+  // customization dialog, to get out of the way of the
+  // wrapper- prefix.
+  let toolbar = mc.eid("header-view-toolbar").node;
+  let oldSet = filterInvisibleButtons(mc, toolbar.currentSet).split(",");
+
+  let ctc = open_header_pane_toolbar_customization(mc);
+  let currentSet = filterInvisibleButtons(mc, toolbar.currentSet).split(",");
+
+  for (let i=1; i<currentSet.length; i++) {
+    let button1 = mc.e(currentSet[i]);
+    let button2 = mc.e(currentSet[i-1]);
+    // Move each button to the left of its left neighbour starting with
+    // the second button, i.e. reverse the order of the buttons.
+    drag_n_drop_element(button1, mc.window, button2, mc.window, 0.25, 0.0, toolbar);  // fails on OSX
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+  // Check, if the toolbar is really in reverse order of beginning.
+  let reverseSet = oldSet.reverse().join(",");
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet), reverseSet);
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      reverseSet);
+
+  // Display message in new window and check that the default
+  // buttons are shown there.
+  let msgc = open_selected_message_in_new_window();
+  assert_selected_and_displayed(msgc, curMessage);
+  expand_and_assert_header(msgc);
+  set_and_assert_toolbox_position(msgc, 'top');
+  let hdrToolbar = msgc.eid("header-view-toolbar").node;
+  let hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  assert_equals(hdrToolbar.getAttribute("currentset"), hdrBarDefaultSet);
+  close_window(msgc);
+
+  // Leave the toolbar in the default state.
+  restore_and_check_default_buttons(mc);
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+}
+//
+///**
+// *  Test header pane toolbar customization: Change buttons in
+// *  separate mail window
+// */
+function test_customize_header_toolbar_separate_window()
+{
+  Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+  let curMessage = select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // Restore the default buttons to get defined starting conditions.
+  restore_and_check_default_buttons(mc);
+
+  // Display message in new window and check that the default
+  // buttons are shown there.
+  let msgc = open_selected_message_in_new_window();
+  assert_selected_and_displayed(msgc, curMessage);
+  expand_and_assert_header(msgc);
+  set_and_assert_toolbox_position(msgc, 'top');
+  let hdrToolbar = msgc.eid("header-view-toolbar").node;
+  let hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  assert_equals(hdrToolbar.getAttribute("currentset"), hdrBarDefaultSet);
+
+  // Save the currentSet of the toolbar before opening the
+  // customization dialog, to get out of the way of the
+  // wrapper- prefix.
+  let toolbar = msgc.eid("header-view-toolbar").node;
+  let oldSet = filterInvisibleButtons(msgc, toolbar.currentSet).split(",");
+
+  let ctc = open_header_pane_toolbar_customization(msgc);
+  let currentSet = filterInvisibleButtons(msgc, toolbar.currentSet).split(",");
+  for (let i=1; i<currentSet.length; i++) {
+    let button1 = msgc.e(currentSet[i]);
+    let button2 = msgc.e(currentSet[i-1]);
+    dump("drag_n_drop button: " + i + "\n");
+    // Move each button to the left of its left neighbour starting with
+    // the second button, i.e. reverse the order of the buttons.
+    drag_n_drop_element(button1, msgc.window, button2, msgc.window, 0.25, 0.0, toolbar);
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+  // Check, if the toolbar is really in reverse order of beginning.
+  let reverseSet = oldSet.reverse().join(",");
+  assert_equals(filterInvisibleButtons(msgc, toolbar.currentSet), reverseSet);
+  assert_equals(filterInvisibleButtons(msgc, toolbar.getAttribute("currentset")),
+      reverseSet);
+
+  // Make sure we have a different window open, so that we don't start shutting
+  // down just because the last window was closed
+  let abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+  close_window(msgc);
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+  select_message_in_folder(folder1, 0, mc);
+
+  // Check, if the buttons in the mail3pane window are the correct ones.
+  hdrToolbar = mc.eid("header-view-toolbar").node;
+  hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  assert_equals(hdrToolbar.getAttribute("currentset"), hdrBarDefaultSet);
+
+  // Open separate mail window again and check another time.
+  msgc = open_selected_message_in_new_window();
+  assert_selected_and_displayed(msgc, curMessage);
+  toolbar = msgc.eid("header-view-toolbar").node;
+  assert_equals(filterInvisibleButtons(msgc, toolbar.currentSet), reverseSet);
+  assert_equals(filterInvisibleButtons(msgc, toolbar.getAttribute("currentset")),
+      reverseSet);
+
+  // Leave the toolbar in the default state.
+  restore_and_check_default_buttons(msgc);
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+  close_window(msgc);
+}
+
+/**
+ *  Test header pane toolbar customization: Remove buttons
+ */
+function test_customize_header_toolbar_remove_buttons(){
+  // Save currentset of toolbar for adding the buttons back
+  // at the end.
+  var lCurrentset;
+  Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // Restore the default buttons to get defined starting conditions.
+  restore_and_check_default_buttons(mc);
+
+  let ctc = open_header_pane_toolbar_customization(mc);
+  let toolbar = mc.eid("header-view-toolbar").node;
+  lCurrentset = filterInvisibleButtons(mc, toolbar.currentSet).split(",");
+  let target = ctc.e("palette-box");
+  for (let i=0; i<lCurrentset.length; i++) {
+    let button = mc.e(lCurrentset[i]);
+    drag_n_drop_element(button, mc.window, target, ctc.window, 0.5, 0.5, toolbar);  // fails on OSX
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+  // Check, if the toolbar is really empty.
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet), "__empty");
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      "__empty");
+
+  // Move to the next message and check again.
+  let curMessage = select_message_in_folder(folder1, 1, mc);
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet), "__empty");
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      "__empty");
+
+  // Display message in new window and check that the default
+  // buttons are shown there.
+  let msgc = open_selected_message_in_new_window();
+  assert_selected_and_displayed(msgc, curMessage);
+  expand_and_assert_header(msgc);
+
+  let hdrToolbar = msgc.eid("header-view-toolbar").node;
+  let hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+  assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  assert_equals(hdrToolbar.getAttribute("currentset"), hdrBarDefaultSet);
+  close_window(msgc);
+
+  // Check the persistency of the buttons.
+
+  // Make sure we have a different window open, so that we don't start shutting
+  // down just because the last window was closed
+  let abwc = openAddressBook();
+  // The 3pane window is closed.
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+  select_message_in_folder(folder1, 0, mc);
+
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet), "__empty");
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      "__empty");
+
+  // Check that all removed buttons show up in the palette
+  // and move it back in the toolbar.
+  ctc = open_header_pane_toolbar_customization(mc);
+  toolbar = mc.eid("header-view-toolbar").node;
+  palette = ctc.e("palette-box");
+  for (let i=0; i<lCurrentset.length; i++) {
+    let button = ctc.e(lCurrentset[i]);
+    assert_true(button!=null, "Button " + lCurrentset[i] + " not in palette");
+    // Drop each button to the right end of the toolbar, so we should get the
+    // original order.
+    drag_n_drop_element(button, ctc.window, toolbar, mc.window, 0.99, 0.5, palette);  // fails on OSX
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet),
+      filterInvisibleButtons(mc, hdrBarDefaultSet));
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      filterInvisibleButtons(mc, hdrBarDefaultSet));
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+}
+
+/**
+ *  Test header pane toolbar customization: Add all buttons to toolbar
+ */
+function test_customize_header_toolbar_add_all_buttons(){
+
+  Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // Restore the default buttons to get defined starting conditions.
+  restore_and_check_default_buttons(mc);
+
+  let toolbar = mc.eid("header-view-toolbar").node;
+  let lCurrentset = filterInvisibleButtons(mc, toolbar.currentSet).split(",");
+
+  // Get all buttons in the palette and move them to toolbar
+  let ctc = open_header_pane_toolbar_customization(mc);
+  let palette = ctc.e("palette-box");
+  let tmp = ctc.window.document.getElementById("palette-box").
+    getElementsByTagName("toolbarpaletteitem");
+
+  let wrappedButtons = new Array;
+  let buttons = new Array;
+  for (let i=0; i<tmp.length; i++) {
+    let type = tmp[i].getAttribute("type");
+    if ((type != "separator") &&
+        (type != "spring") &&
+        (type != "spacer")
+        ) {
+      wrappedButtons.push(tmp[i].id)
+      buttons.push(tmp[i].id.replace(new RegExp("wrapper-"), ""));
+    }
+  }
+
+  for (let i=0; i<wrappedButtons.length; i++) {
+    let button = ctc.e(wrappedButtons[i]);
+    // Drop each button to the right end of the toolbar.
+    drag_n_drop_element(button, ctc.window, toolbar, mc.window, 0.99, 0.5, palette);
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+
+  // All buttons have shown up in the toolbar
+  let fullButtonSet = lCurrentset.concat(buttons).join(",");
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet),
+      fullButtonSet);
+
+  // No buttons are left in the palette
+  // Get all buttons in the palette and move them to toolbar
+  ctc = open_header_pane_toolbar_customization(mc);
+  palette = ctc.e("palette-box");
+  tmp = ctc.window.document.getElementById("palette-box").
+    getElementsByTagName("toolbarpaletteitem");
+
+  let leftButtons = new Array;
+  for (let i=0; i<tmp.length; i++) {
+    let type = tmp[i].getAttribute("type");
+    if ((type != "separator") &&
+        (type != "spring") &&
+        (type != "spacer")
+        ) {
+      leftButtons.push(tmp[i].id)
+    }
+  }
+  assert_equals(leftButtons.length, 0);
+  close_header_pane_toolbar_customization(ctc);
+
+  // Move the buttons back to palette
+  ctc = open_header_pane_toolbar_customization(mc);
+  let target = ctc.e("palette-box");
+  for (let i=wrappedButtons.length-1; i>= 0; i--) {
+    dump("drag_n_drop button: " + i + "\n");
+    dump("drag_n_drop button: " + wrappedButtons[i] + "\n");
+    let button = mc.e(wrappedButtons[i]);
+    dump("drag target: " + button + "\n");
+    dump("drop target: " + target + "\n");
+    drag_n_drop_element(button, mc.window, target, ctc.window, 0.5, 0.5, toolbar);  // fails on OSX
+  }
+  close_header_pane_toolbar_customization(ctc);
+
+  // Only defaults button are left in the toolbar
+  let hdrBarDefaultSet = toolbar.getAttribute("defaultset");
+  assert_equals(filterInvisibleButtons(mc, toolbar.currentSet),
+      filterInvisibleButtons(mc, hdrBarDefaultSet));
+  assert_equals(filterInvisibleButtons(mc, toolbar.getAttribute("currentset")),
+      filterInvisibleButtons(mc, hdrBarDefaultSet));
+
+  // All buttons have shown up in the palette
+  ctc = open_header_pane_toolbar_customization(mc);
+  backButtons = new Array;
+  tmp = ctc.window.document.getElementById("palette-box").
+    getElementsByTagName("toolbarpaletteitem");
+  for (let i=tmp.length-1; i>=0; i--) {
+    let type = tmp[i].getAttribute("type");
+    if ((type != "separator") &&
+        (type != "spring") &&
+        (type != "spacer")
+        ) {
+      backButtons.push(tmp[i].id)
+    }
+  }
+  assert_equals(backButtons.join(","), wrappedButtons.join(","));
+  close_header_pane_toolbar_customization(ctc);
+
+  // Reopen customization dialog and
+  // all buttons are still in the palette
+  select_message_in_folder(folder1, 1, mc);
+  ctc = open_header_pane_toolbar_customization(mc);
+
+  backButtons = new Array;
+  tmp = ctc.window.document.getElementById("palette-box").
+    getElementsByTagName("toolbarpaletteitem");
+  for (let i=tmp.length-1; i>=0; i--) {
+    let type = tmp[i].getAttribute("type");
+    if ((type != "separator") &&
+        (type != "spring") &&
+        (type != "spacer")
+        ) {
+      backButtons.push(tmp[i].id)
+    }
+  }
+  assert_equals(backButtons.join(","), wrappedButtons.join(","));
+
+  close_header_pane_toolbar_customization(ctc);
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+
+}
+
+
+/**
+ *  Test header pane toolbar customization dialog layout
+ */
+function test_customize_header_toolbar_dialog_style(){
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // Restore the default buttons to get defined starting conditions.
+  restore_and_check_default_buttons(mc);
+
+  let ctc = open_header_pane_toolbar_customization(mc);
+
+  // The full mode menulist entry is hidden, because in the header toolbar
+  // this mode is disabled.
+  let fullMode = ctc.window.document.getElementById("main-box").
+    querySelector("[value='full']");
+  assert_equals(ctc.window.getComputedStyle(fullMode).getPropertyValue("display"), "none");
+  // The icon menulist entry is selected, because in the header toolbar with CompactHeader installed
+  // this is the default mode.
+  let iconMode = ctc.window.document.getElementById("modelist").
+    querySelector("[value='icons']");
+  assert_equals(iconMode.getAttribute("selected"), "true");
+
+  // The small icons checkbox is hidden, because in the header toolbar
+  // this mode is the only possible (therefore, the checked attribute is true).
+  let smallIcons = ctc.eid("smallicons").node;
+  assert_equals(smallIcons.getAttribute("checked"), "true");
+  assert_equals(ctc.window.getComputedStyle(smallIcons).getPropertyValue("display"), "none");
+
+  // The add new toolbar button is hidden, because in the header toolbar
+  // this functionality is not available.
+  let addNewToolbar = ctc.window.document.getElementById("main-box").
+    querySelector("[oncommand='addNewToolbar();']");
+  assert_equals(ctc.window.getComputedStyle(addNewToolbar).getPropertyValue("display"), "none");
+
+  close_header_pane_toolbar_customization(ctc);
+}
+
+/**
+ *  Test header pane toolbar customization dialog for button style changes
+ */
+function test_customize_header_toolbar_change_button_style(){
+  Services.prefs.setBoolPref("toolkit.customization.unsafe_drag_events", true);
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+
+  // Restore the default buttons to get defined starting conditions.
+  restore_and_check_default_buttons(mc);
+
+  // The default mode is icon visible only.
+  subtest_buttons_style("-moz-box", "none");
+
+  // Change the button style to text and icon mode
+  let ctc = open_header_pane_toolbar_customization(mc);
+  let iconMode = ctc.window.document.getElementById("main-box").
+    querySelector("[value='textbesideicon']");
+  ctc.click(new elib.Elem(iconMode));
+  close_header_pane_toolbar_customization(ctc);
+
+  subtest_buttons_style("-moz-box", "-moz-box");
+
+  // Change the button style to icon mode only
+  ctc = open_header_pane_toolbar_customization(mc);
+  iconMode = ctc.window.document.getElementById("main-box").
+    querySelector("[value='icons']");
+  ctc.click(new elib.Elem(iconMode));
+  close_header_pane_toolbar_customization(ctc);
+
+  subtest_buttons_style("-moz-box", "none");
+
+  // Change the button style to text (only) mode
+  ctc = open_header_pane_toolbar_customization(mc);
+  let textMode = ctc.window.document.getElementById("main-box").
+    querySelector("[value='text']");
+  ctc.click(new elib.Elem(textMode));
+  close_header_pane_toolbar_customization(ctc);
+
+  subtest_buttons_style("none", "-moz-box");
+
+  // The default mode is icon visible only.
+  restore_and_check_default_buttons(mc);
+  subtest_buttons_style("-moz-box", "none");
+  Services.prefs.clearUserPref("toolkit.customization.unsafe_drag_events");
+}
+
+/**
+ *  Test header pane toolbar visible after toggling
+ */
+function test_visible_toolbar() {
+  select_message_in_folder(folder1, 1, mc);
+  expand_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'top');
+  let toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(isVisible(toolbar), true);
+
+  open_preferences_dialog(mc, subtest_change_twoline);
+
+  collapse_and_assert_header(mc);
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(isVisible(toolbar), true);
+  expand_and_assert_header(mc);
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(isVisible(toolbar), true);
+
+  set_pane_layout(kWideMailLayout);
+  assert_pane_layout(kWideMailLayout);
+  let abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+  select_message_in_folder(folder1, 1, mc);
+
+  mc.sleep(10);
+
+  collapse_and_assert_header(mc);
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(isVisible(toolbar), true);
+  expand_and_assert_header(mc);
+  toolbar = mc.eid("header-view-toolbar").node;
+  assert_equals(isVisible(toolbar), true);
+
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+}
+
+/**
+ *  Test header pane toolbar position
+ */
+function test_set_toolbar_position() {
+  set_pane_layout(kClassicMailLayout);
+  assert_pane_layout(kClassicMailLayout);
+  let abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow();
+
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+  select_message_in_folder(folder1, 0, mc);
+  expand_and_assert_header(mc);
+  restore_and_check_default_buttons(mc);
+
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+
+  collapse_and_assert_header(mc);
+  open_preferences_dialog(mc, subtest_change_twoline);
+
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+
+  collapse_and_assert_header(mc);
+  open_preferences_dialog(mc, subtest_change_oneline);
+
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'top');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'left');
+  set_and_assert_toolbox_position(mc, 'right');
+  set_and_assert_toolbox_position(mc, 'none');
+  set_and_assert_toolbox_position(mc, 'top');
+
+  expand_and_assert_header(mc);
+  restore_and_check_default_buttons(mc);
+}
+
+
+/**
+ *  Check all buttons in the toolbar for the correct style
+ *  of text and icon.
+ */
+function subtest_buttons_style(aIconVisibility, aLabelVisibility)
+{
+  let toolbar = mc.eid("header-view-toolbar").node;
+  let currentSet = filterInvisibleButtons(mc, toolbar.currentSet).split(",");
+
+  for (let i=0; i<currentSet.length; i++) {
+    // XXX For the moment only consider normal toolbar buttons.
+    // XXX Handling of toolbaritem buttons has to be added later,
+    // XXX especially the smart reply button!
+    if ((mc.eid(currentSet[i]).node.tagName == "toolbarbutton") &&
+        (currentSet[i] != "otherActionsButton") // otherActionsButton does not have an icon anymore :-(
+        ) {
+      let icon = mc.aid(currentSet[i], {class: "toolbarbutton-icon"}).node;
+      let label = mc.aid(currentSet[i], {class: "toolbarbutton-text"}).node;
+
+      if (!icon) {
+        let exp1 = mc.e(currentSet[i]);
+        let node = mc.window.document.getAnonymousElementByAttribute(exp1, "anonid", "button");
+        if (node) {
+          icon = mc.window.document.getAnonymousElementByAttribute(node, "class", "toolbarbutton-icon");
+        }
+      }
+      if (!label) {
+        let exp1 = mc.e(currentSet[i]);
+        let node = mc.window.document.getAnonymousElementByAttribute(exp1, "anonid", "button");
+        if (node) {
+          label = mc.window.document.getAnonymousElementByAttribute(node, "class", "toolbarbutton-text");
+        }
+      }
+      assert_not_equals(null, label, "No label of button " + currentSet[i] + " found!");
+      assert_not_equals(null, icon, "No icon of button " + currentSet[i] + " found!");
+      assert_equals(mc.window.getComputedStyle(icon).getPropertyValue("display"),
+          aIconVisibility, "wrong visiibility for icon of button " + currentSet[i]);
+      assert_equals(mc.window.getComputedStyle(label).getPropertyValue("display"),
+          aLabelVisibility, "wrong visiibility for label of button " + i);
+    }
+  }
+}
diff -Nru compactheader-2.1.0/test/compactheader/test-ewait.js compactheader-2.1.6/test/compactheader/test-ewait.js
--- compactheader-2.1.0/test/compactheader/test-ewait.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-ewait.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,153 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Blake Winton <bwinton@latte.ca>
+ *   Dan Mosedale <dmose@mozillamessaging.com>
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Test that we can add a tag to a message without messing up the header.
+ */
+var MODULE_NAME = 'test-header-toolbar';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'mouse-event-helpers',
+                       'address-book-helpers'];
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+Cu.import("resource://gre/modules/Services.jsm");
+
+var folder;
+
+const USE_SHEET_PREF = "toolbar.customization.usesheet";
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  let wh = collector.getModule('window-helpers');
+  wh.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+
+  folder = create_folder("TestEwait");
+
+  let msg = create_message();
+  add_message_to_folder(folder, msg);
+}
+
+function teardownModule() {
+  Services.prefs.clearUserPref(USE_SHEET_PREF);
+}
+
+/**
+ * Should test, if drag and drop from the header toolbar works.
+ * Currently this test does no work
+ */
+function notest_with_sheet_dragndrop(){
+  select_message_in_folder(0);
+  Services.prefs.setBoolPref(USE_SHEET_PREF, true);
+  let ctc = open_header_pane_toolbar_customization(mc);
+
+  let firstButton = mc.e("wrapper-hdrTrashButton")
+  let listener = mc.e("header-view-toolbar");
+  let target = ctc.e("palette-box");
+
+  drag_n_drop_element(firstButton, mc.window, target,
+    ctc.window, 0.5, 0.5, listener)
+
+  let secondButton = ctc.e("wrapper-spacer");
+  target = mc.e("header-view-toolbar");
+  listener = ctc.e("palette-box");
+
+  drag_n_drop_element(secondButton, ctc.window, target,
+    mc.window, 0.99, 0.5, listener)
+
+  close_header_pane_toolbar_customization(ctc);
+
+  firstButton = mc.e("hdrTrashButton")
+  assert_equals(firstButton, null);
+}
+
+
+/**
+ * Select message in current (global) folder.
+ */
+function select_message_in_folder(aMessageNum)
+{
+  be_in_folder(folder);
+
+  // select and open the first message
+  let curMessage = select_click_row(aMessageNum);
+
+  // make sure it loads
+  wait_for_message_display_completion(mc);
+  assert_selected_and_displayed(mc, curMessage);
+
+  return curMessage;
+}
+
+/*
+ * Open the header pane toolbar customization dialog.
+ */
+function open_header_pane_toolbar_customization(aController)
+{
+  let ctc;
+  aController.click(aController.eid("CustomizeHeaderToolbar"));
+  // Depending on preferences the customization dialog is
+  // either a normal window or embedded into a sheet.
+  if (Services.prefs.getBoolPref(USE_SHEET_PREF, true)) {
+    ctc = wait_for_frame_load(aController.e("customizeToolbarSheetIFrame"),
+      "chrome://global/content/customizeToolbar.xul");  }
+  else {
+    ctc = wait_for_existing_window("CustomizeToolbarWindow");
+  }
+  return ctc;
+}
+
+function close_header_pane_toolbar_customization(aController)
+{
+  aController.click(aController.eid("donebutton"));
+  // XXX There should be an equivalent for testing the closure of
+  // XXX the dialog embedded in a sheet, but I do not know how.
+  if (!Services.prefs.getBoolPref(USE_SHEET_PREF, true)) {
+    assert_true(aController.window.closed, "The customization dialog is not closed.");
+  }
+}
diff -Nru compactheader-2.1.0/test/compactheader/test-more-button.js compactheader-2.1.6/test/compactheader/test-more-button.js
--- compactheader-2.1.0/test/compactheader/test-more-button.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-more-button.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,250 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-compactheader-preferences';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+  folder1 = create_folder("testMoreButton");
+
+  let msg = create_message({cc: msgGen.makeNamesAndAddresses(10),
+    to: msgGen.makeNamesAndAddresses(10)
+  });
+  add_message_to_folder(folder1, msg);
+
+  let msg2 = create_message({cc: msgGen.makeNamesAndAddresses(10),
+    to: msgGen.makeNamesAndAddresses(10)
+  });
+  add_message_to_folder(folder1, msg2);
+
+  const MORE_PREF = "mailnews.headers.show_n_lines_before_more";
+  Services.prefs.clearUserPref(MORE_PREF);
+}
+
+/* click the more button in compact view should change to expanded
+ * header view
+ */
+function test_click_more(){
+  select_message_in_folder(folder1, 1, mc);
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+
+  // Click the "more" button.
+  let L2Box = mc.e("CompactHeader_collapsed2LtoCcBccBox");
+  let moreIndicator = mc.window.document.getAnonymousElementByAttribute(
+    L2Box, "anonid", "more");
+  moreIndicator = new elementslib.Elem(moreIndicator);
+  assert_not_equals(null, moreIndicator);
+  assert_true(isVisible(moreIndicator))
+  if (moreIndicator) {
+    mc.click(moreIndicator);
+  }
+  assert_expanded(mc);
+
+  let expandedToBox = mc.e("expandedtoBox");
+  let expandedCCBox = mc.e("expandedccBox");
+  let expandedBCCBox = mc.e("expandedbccBox");
+  let eTOmoreIndicator = mc.window.document.getAnonymousElementByAttribute(
+      expandedToBox, "anonid", "more");
+  let eCCmoreIndicator = mc.window.document.getAnonymousElementByAttribute(
+      expandedCCBox, "anonid", "more");
+  let eBCCmoreIndicator = mc.window.document.getAnonymousElementByAttribute(
+      expandedBCCBox, "anonid", "more");
+
+  assert_equals(eTOmoreIndicator.getAttribute("collapsed"), "true");
+  assert_equals(eCCmoreIndicator.getAttribute("collapsed"), "true");
+  assert_equals(eBCCmoreIndicator.getAttribute("collapsed"), "true");
+}
+
+/* all to and cc addresses should show up in the compact header view more
+ * button tooltip
+ */
+function test_more_tooltip(){
+  select_message_in_folder(folder1, 0, mc);
+  let msg = select_message_in_folder(folder1, 1, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+
+  // Click the "more" button.
+  let moreIndicator = mc.eid("CompactHeader_collapsed2LtoCcBccBox");
+  moreIndicator = mc.window.document.getAnonymousElementByAttribute(
+                    moreIndicator.node, "anonid", "more");
+
+  let tooltiptext = moreIndicator.getAttribute("tooltiptext");
+
+  let headerParser = Cc["@mozilla.org/messenger/headerparser;1"]
+                        .getService(Ci.nsIMsgHeaderParser);
+
+  // check that all cc addresses are in more buttons tooltip
+  let addresses = {};
+  let fullNames = {};
+  let names = {};
+  let numAddresses = headerParser.parseHeadersWithArray(
+    msg.ccList, addresses, names, fullNames);
+  for (let i = 0; i < numAddresses; i++)
+  {
+    assert_true(tooltiptext.indexOf(fullNames.value[i]) != -1, fullNames.value[i]);
+  }
+
+  // check that all to addresses are in more buttons tooltip
+  addresses = {};
+  fullNames = {};
+  names = {};
+  numAddresses = headerParser.parseHeadersWithArray(
+    msg.recipients, addresses, names, fullNames);
+
+  for (let i = 0; i < numAddresses; i++)
+  {
+    assert_true(tooltiptext.indexOf(fullNames.value[i]) != -1, fullNames.value[i]);
+  }
+}
+
+/* check if more button shows correct number of missing addresses
+ */
+function test_more_number_indicator(){
+  select_message_in_folder(folder1, 0, mc);
+  let msg = select_message_in_folder(folder1, 1, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  collapse_and_assert_header(mc);
+
+  let headerParser = Cc["@mozilla.org/messenger/headerparser;1"]
+                       .getService(Ci.nsIMsgHeaderParser);
+
+  // check for more indicator number of collapsed header view
+  let addresses = {};
+  let fullNames = {};
+  let names = {};
+  let numAddressesCC = headerParser.parseHeadersWithArray(
+    msg.ccList, addresses, names, fullNames);
+  let numAddressesTo = headerParser.parseHeadersWithArray(
+      msg.recipients, addresses, names, fullNames);
+
+  let toCcBccDescription = mc.a('CompactHeader_collapsed2LtoCcBccBox', {class: "headerValue"});
+  let addrs = toCcBccDescription.getElementsByTagName('mail-emailaddress');
+  let firstToCCBccAddrNum = 0;
+  for (let i=0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      firstToCCBccAddrNum += 1;
+    }
+  }
+
+  let hiddenAddresses = numAddressesCC + numAddressesTo - firstToCCBccAddrNum;
+
+  let moreIndicator = mc.eid("CompactHeader_collapsed2LtoCcBccBox");
+  moreIndicator = mc.window.document.getAnonymousElementByAttribute(
+                     moreIndicator.node, "anonid", "more");
+  let moreText = moreIndicator.getAttribute("value");
+  let moreSplit = moreText.split(" ");
+  let moreNumber = parseInt(moreSplit[0])
+
+  assert_not_equals(NaN, moreNumber);
+  assert_equals(hiddenAddresses, moreNumber);
+
+  // check for more indicator number of expanded header view
+  expand_and_assert_header(mc);
+
+  let ccDescription = mc.a('expandedccBox', {class: "headerValue"});
+  addrs = ccDescription.getElementsByTagName('mail-emailaddress');
+  let firstCCAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      firstCCAddrNum += 1;
+    }
+  }
+  let toDescription = mc.a('expandedtoBox', {class: "headerValue"});
+  addrs = toDescription.getElementsByTagName('mail-emailaddress');
+  let firstToAddrNum = 0;
+  for (let i = 0; i<addrs.length; i++) {
+    if (isVisible(addrs[i])) {
+      firstToAddrNum += 1;
+    }
+  }
+
+  let hiddenAddressesCC = numAddressesCC - firstCCAddrNum;
+  let hiddenAddressesTo = numAddressesTo - firstToAddrNum;
+
+  let expandedToBox = mc.e("expandedtoBox");
+  let expandedCCBox = mc.e("expandedccBox");
+  let eTOmoreIndicator = mc.window.document.getAnonymousElementByAttribute(
+      expandedToBox, "anonid", "more");
+  let eCCmoreIndicator = mc.window.document.getAnonymousElementByAttribute(
+      expandedCCBox, "anonid", "more");
+  let moreTextTo = eTOmoreIndicator.getAttribute("value");
+  let moreTextCC = eCCmoreIndicator.getAttribute("value");
+
+  let moreSplitTo = moreTextTo.split(" ");
+  let moreNumberTo = parseInt(moreSplitTo[0])
+
+  assert_not_equals(NaN, moreNumberTo);
+  assert_equals(hiddenAddressesTo, moreNumberTo)
+
+  let moreSplitCC = moreTextCC.split(" ");
+  let moreNumberCC = parseInt(moreSplitCC[0])
+
+  assert_not_equals(NaN, moreNumberCC);
+  assert_equals(hiddenAddressesCC, moreNumberCC)
+}
+
diff -Nru compactheader-2.1.0/test/compactheader/test-other-actions-button.js compactheader-2.1.6/test/compactheader/test-other-actions-button.js
--- compactheader-2.1.0/test/compactheader/test-other-actions-button.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/compactheader/test-other-actions-button.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,146 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <Joachim.Herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var MODULE_NAME = 'test-other-actions-button';
+
+var RELATIVE_ROOT = '../shared-modules';
+var MODULE_REQUIRES = ['folder-display-helpers', 'window-helpers',
+                       'address-book-helpers', 'mouse-event-helpers',
+                       'compactheader-helpers'];
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var controller = {};
+Cu.import('resource://mozmill/modules/controller.js', controller);
+
+// The WindowHelper module
+var WindowHelper;
+
+var folder1;
+
+function setupModule(module) {
+  let fdh = collector.getModule('folder-display-helpers');
+  fdh.installInto(module);
+  WindowHelper = collector.getModule('window-helpers');
+  WindowHelper.installInto(module);
+  let abh = collector.getModule('address-book-helpers');
+  abh.installInto(module);
+  let meh = collector.getModule('mouse-event-helpers');
+  meh.installInto(module);
+  let chh = collector.getModule('compactheader-helpers');
+  chh.installInto(module);
+
+  folder1 = create_folder("testOtherActionButton");
+
+  let thread1 = create_thread(2);
+  add_sets_to_folders([folder1], [thread1]);
+
+  let msg = create_message();
+  add_message_to_folder(folder1, msg);
+
+  let msg2 = create_message();
+  add_message_to_folder(folder1, msg2);
+
+  let abwc = openAddressBook();
+  close3PaneWindow();
+  mc = open3PaneWindow();
+  abwc.window.close();
+
+  select_message_in_folder(folder1, 0, mc);
+}
+
+/* check that the context menu of the other actions button are populated
+ * correctly
+ */
+function test_other_actions_button() {
+  select_message_in_folder(folder1, 0, mc);
+  open_preferences_dialog(mc, set_preferences_twoline);
+  mc.sleep(10);
+  restore_and_check_default_buttons(mc);
+  collapse_and_assert_header(mc);
+  set_and_assert_toolbox_position(mc, 'right');
+
+  // It is necessary to press the Other Actions Button to get the popup menu populated
+  mc.click(mc.eid("otherActionsButton"));
+  mc.ewait("CompactHeader_hidecohePreferencesButton");
+  mc.click(mc.eid("otherActionsButton"));
+
+  let menuItems = {
+    "otherActionsOpenConversation":      false, // always disabled, probably because messages are not indexed
+    "otherActionsOpenInNewWindow":       true,
+    "otherActionsOpenInNewTab":          true,
+    "CompactHeader_hdrPane-markFlagged": true,
+    "viewSourceMenuItem":                true,
+    //"markAsReadMenuItem":                true,  // this does not work, because the message is already set to read
+    "markAsUnreadMenuItem":              true,
+    "saveAsMenuItem":                    true,
+    "otherActionsPrint":                 true
+  };
+
+  for (let menu in menuItems) {
+    let menuEl = mc.e(menu);
+    assert_equals(menuEl.hasAttribute("disabled"), !menuItems[menu], menu);
+  }
+
+  select_none();
+  assert_nothing_selected();
+
+  // It is necessary to press the Other Actions Button to get the popup menu populated
+  mc.click(mc.eid("otherActionsButton"));
+  mc.ewait("CompactHeader_hidecohePreferencesButton");
+  mc.click(mc.eid("otherActionsButton"));
+
+  for (let menu in menuItems) {
+    let menuEl = mc.e(menu);
+    assert_equals(menuEl.getAttribute("disabled"), "true", menu);
+    break; // check only the first menu entry
+  }
+
+  select_message_in_folder(folder1, 3, mc);
+  select_control_click_row(0);
+  assert_selected_and_displayed(0, 3);
+
+  mc.click(mc.eid("otherActionsButton"));
+  mc.ewait("CompactHeader_hidecohePreferencesButton");
+  mc.click(mc.eid("otherActionsButton"));
+
+  for (let menu in menuItems) {
+    let menuEl = mc.e(menu);
+    assert_equals(menuEl.hasAttribute("disabled"), !menuItems[menu], menu);
+  }
+
+}
diff -Nru compactheader-2.1.0/test/executeTests.py compactheader-2.1.6/test/executeTests.py
--- compactheader-2.1.0/test/executeTests.py	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/executeTests.py	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,591 @@
+#! /usr/bin/env python
+
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from __future__ import division
+
+import json
+import platform
+import subprocess
+import os
+import argparse
+import glob
+import logging
+import re
+import errno
+import shutil
+import xml.etree.ElementTree as ET
+import datetime
+
+
+def mkdir_p(path):
+    """Equivalent for unix command mkdir -p"""
+    try:
+        os.makedirs(path)
+    except OSError as exc:
+        if exc.errno == errno.EEXIST and os.path.isdir(path):
+            pass
+        else:
+            raise
+
+
+class TestExecutor:
+    def __init__(self):
+        logging.basicConfig(level=logging.DEBUG)
+        if platform.system() == "Windows":
+            self.TMPDIR = 'c:\\tmp\\'
+        else:
+            self.TMPDIR = '/tmp'
+
+        parser = argparse.ArgumentParser()
+        parser.add_argument("-v", "--version",
+                            help="test against Thunderbird version",
+                            default=None,
+                            required=False)
+        parser.add_argument("-d", "--downloadonly",
+                            help="only download files",
+                            default=False,
+                            action="store_true",
+                            required=False)
+        parser.add_argument("-n", "--nodownload",
+                            help="skip downloading files",
+                            default=False,
+                            action="store_true",
+                            required=False)
+        self.args = parser.parse_args()
+
+        logging.debug("command line args: %r" % self.args)
+
+        tree = ET.parse("../install.rdf")
+        root = tree.getroot()
+        ns = {
+            "RDF": "http://www.w3.org/1999/02/22-rdf-syntax-ns#";,
+            "em": "http://www.mozilla.org/2004/em-rdf#"}
+
+        xpiversion = root.findall("RDF:Description/em:version", ns)[0].text
+        self.xpi = os.path.abspath(os.path.join(
+            "..", "AMO", "CompactHeader-" + xpiversion + ".xpi"
+        ))
+
+        logging.info("CH version: %r" % xpiversion)
+        logging.info("CH file: %r" % self.xpi)
+
+        self.ftpdir = os.path.abspath(os.path.join(
+            self.TMPDIR,
+            "compactheader", "ftp"))
+
+        jsonfilename = 'testapps.json'
+
+        self.test_apps = json.load(open(jsonfilename))
+
+        self.machine = platform.system() + platform.machine()
+        logging.info("Running on %s\n\n" % self.machine)
+
+        self.package_tools = {
+            "WindowsAMD64": {
+                "unpack": "../mozmill-virtualenv/Scripts/mozinstall",
+                "unpack_args": "--app=thunderbird",
+                "unpack_target_args": "--destination",
+                "virtualpython": "..\\mozmill-virtualenv\\Scripts\\python"
+                },
+            "Linuxx86_64": {
+                "unpack": "../mozmill-virtualenv/bin/mozinstall",
+                "unpack_args": "--app=thunderbird",
+                "unpack_target_args": "--destination",
+                "virtualpython": "../mozmill-virtualenv/bin/python"
+                },
+            "Darwinx86_64": {
+                "unpack": "../mozmill-virtualenv/bin/mozinstall",
+                "unpack_args": "--app=thunderbird",
+                "unpack_target_args": "--destination",
+                "virtualpython": "../mozmill-virtualenv/bin/python"
+                },
+            }
+
+    def download_test(self):
+        script_dir = os.path.abspath(os.path.dirname(__file__))
+        logging.debug("script dir: %s" % script_dir)
+
+        self.dispMUA = (
+            "https://addons.mozilla.org/thunderbird/downloads/"; +
+            "latest/display-mail-user-agent/platform:5/addon-562-latest.xpi")
+        self.mnenhy = ("https://addons.mozilla.org/thunderbird/downloads"; +
+                       "/latest/2516/addon-2516-latest.xpi")
+
+        subprocess.call(["wget", "--no-check-certificate", "-q", "-P",
+                         self.ftpdir, "-N", self.dispMUA])
+        subprocess.call(["wget", "--no-check-certificate", "-q", "-P",
+                         self.ftpdir, "-N", self.mnenhy])
+
+        test_specs = {}
+        for appversion in self.test_apps:
+            if self.args.version and appversion != self.args.version:
+                continue
+            if self.machine in self.test_apps[appversion]:
+                appref = self.test_apps[appversion][self.machine]
+
+                hosttype = self.machine
+                ftppath = appref['url']
+                app = appref['appzip']
+                tests = appref['testzip']
+                checksum = appref['checksum']
+
+                # Download checksums file to determine version of Thunderbird,
+                # because we use a link to latest release/beta/earlybird/trunk
+                # build and do not know the version!
+                #    wget -r -l1 --no-parent --follow-ftp -A .checksums  '' -nd
+
+                files = glob.glob(self.ftpdir + "/thunderbird*" + checksum)
+                for f in files:
+                    os.remove(f)
+
+                logging.info("look for available Thunderbird versions:\n\n")
+                get_checksum = [
+                    "wget", "-r", "-l1",  "--no-check-certificate",
+                    "--no-parent", "--follow-ftp",  "-A" + checksum,
+                    ftppath + "/", "-nd", "-P",  self.ftpdir
+                    ]
+                logging.debug("Download command: %r", " ".join(get_checksum))
+                subprocess.call(get_checksum)
+                files = glob.glob(self.ftpdir + "/thunderbird*" + checksum)
+                logging.debug("found checksums: %r" % files)
+
+                file = files[-1]
+
+                version = ""
+                m = re.search("thunderbird-(.*)" + checksum, file)
+                if m:
+                    version = m.group(1)
+
+                logging.info("************")
+                logging.info("found version: %s " % version)
+                logging.info("************")
+#
+                app = re.sub(r'_VER_', version, app)
+                tests = re.sub(r'_VER_', version, tests)
+
+                logging.debug("app: %s" % app)
+                logging.debug("tests: %s" % tests)
+                logging.debug("hosttype: %s" % hosttype)
+                logging.debug("ftppath: %s" % ftppath)
+
+                testdir = os.path.join(
+                    self.TMPDIR,
+                    "compactheader",
+                    "test-" + version,
+                    "testing")
+
+                logging.debug("create test and ftpdir")
+                mkdir_p(testdir)
+                mkdir_p(self.ftpdir)
+
+                logging.debug("download path:             %s/%s-%s" %
+                              (self.ftpdir, hosttype, version))
+                logging.debug("Thunderbird download path: %s/%s" %
+                              (ftppath, app))
+                logging.debug(
+                    "Tests download path:       %s/%s" %
+                    (ftppath, tests))
+
+                tools = self.package_tools[hosttype]
+
+                if (not self.args.nodownload):
+                    subprocess.call(
+                        ["wget", "--no-check-certificate", "-q", "-P",
+                         os.path.join(self.ftpdir, hosttype + "-" + version),
+                         "-N", ftppath + "/" + app
+                         ]
+                    )
+                    subprocess.call(
+                        ["wget", "--no-check-certificate", "-q", "-P",
+                         os.path.join(self.ftpdir, hosttype + "-" + version),
+                         "-N", ftppath + "/" + tests
+                         ]
+                    )
+                logging.debug("unzipping tests...")
+                unzip_test_cmd = [
+                    "unzip", "-q", "-o",
+                    os.path.join(
+                        self.ftpdir, hosttype + "-" + version, tests),
+                    "-d", testdir, "-x", "*mochitest*",
+                    "*xpcshell*", "*reftest*", "*jit-test*", "*bin*"
+                    ]
+                logging.debug("unzip tests: %r" % " ".join(unzip_test_cmd))
+                subprocess.call(unzip_test_cmd)
+
+                testdir = os.path.abspath(os.path.join(
+                    self.TMPDIR,
+                    "compactheader",
+                    "test-" + version,
+                    "testing"))
+
+                # "Link" the add-on tests into the mozmill directory
+                if platform.system() == "Windows":
+                    subprocess.call(
+                        ["junction", "-d",
+                         os.path.join(testdir, "mozmill", "compactheader")
+                         ]
+                    )
+                    subprocess.call(
+                        ["junction",
+                         os.path.join(testdir, "mozmill", "compactheader"),
+                         os.path.join(script_dir, "compactheader")
+                         ]
+                    )
+                    subprocess.call(
+                        ["junction", "-d",
+                         os.path.join(testdir, "..", "python")
+                         ]
+                    )
+                    subprocess.call(
+                        ["junction",
+                         os.path.join(testdir, "..", "python"),
+                         os.path.join(testdir, "tools"),
+                         ]
+                    )
+                else:
+                    subprocess.call(
+                        ["ln", "-sfn",
+                         os.path.join(script_dir, "compactheader"),
+                         os.path.join(testdir, "mozmill", "compactheader"),
+                         ]
+                    )
+                    subprocess.call(
+                        ["ln", "-sfn",
+                         os.path.join(testdir, "tools"),
+                         os.path.join(testdir, "..", "python"),
+                         ]
+                    )
+
+                shutil.copy(
+                    os.path.join(script_dir, "buildconfig.py"),
+                    os.path.join(testdir, "mozmill", "resources"))
+
+                os.chdir(os.path.join(testdir, "mozmill"))
+
+                logging.info("... installing mozmill")
+                shutil.rmtree(os.path.join("..", "mozmill-virtualenv"),
+                              ignore_errors=True)
+
+                int_version = int(re.findall('^\d+', str(version))[0])
+                logging.debug("int version: %d" % int_version)
+                if int_version >= 59:
+                    install_cmd = [
+                        "pip",
+                        "wheel",
+                        os.path.join(testdir, "..", "python", "mozterm"),
+                        "--wheel-dir",
+                        "/tmp/compactheader"
+                    ]
+                    logging.debug(" ".join(install_cmd))
+                    subprocess.call(install_cmd)
+                    install_cmd = [
+                        "python",
+                        os.path.join("resources", "installmozmill.py"),
+                        os.path.join("..", "mozmill-virtualenv")]
+                else:
+                    # shutil.rmtree(os.path.join("..", "mozbase"),
+                    # ignore_errors=True)
+                    install_cmd = [
+                        "python",
+                        os.path.join("resources", "installmozmill.py"),
+                        os.path.join("..", "mozmill-virtualenv"),
+                        os.path.join("..", "mozbase")]
+
+                logging.debug(" ".join(install_cmd))
+                subprocess.call(install_cmd)
+
+                install_cmd = [
+                    tools['virtualpython'],
+                    "-mpip",
+                    "install",
+                    os.path.join("..", "mozbase", "mozinstall")]
+
+                logging.debug(" ".join(install_cmd))
+                subprocess.call(install_cmd)
+
+                os.chdir(os.path.join(testdir, "mozmill"))
+
+                logging.debug("unzipping Thunderbird...")
+                install_cmd = [
+                    tools["unpack"],
+                    tools["unpack_args"],
+                    os.path.join(self.ftpdir, hosttype + "-" + version,
+                                 app),
+                    tools["unpack_target_args"],
+                    testdir
+                    ]
+
+                logging.debug(" ".join(install_cmd))
+                try:
+                    appbin = subprocess.check_output(install_cmd)
+                except subprocess.CalledProcessError as e:
+                    logging.error("cannot install thunderbird %" %
+                                  e.output)
+
+                # copy drag'n'drop helpers to shared-modules until
+                # they are added to thunderbird source
+                os.chdir(os.path.join(script_dir, "shared-modules"))
+                shared_files = glob.glob("*")
+                logging.debug("shared files: %r" % shared_files)
+                for file in shared_files:
+                    target_dir_name = os.path.join(
+                        testdir, "mozmill", "shared-modules")
+                    target_file_name = os.path.join(target_dir_name, file)
+                    logging.debug("copy file: %s -> %s" %
+                                  (file, target_file_name))
+                    if os.path.exists(target_file_name):
+                        os.remove(target_file_name)
+
+                    shutil.copyfile(file, target_file_name)
+
+                test_specs[appversion] = {
+                    "version": version,
+                    "appbin": appbin.rstrip('\r\n'),
+                    "tests": tests,
+                    "hosttype": hosttype
+                }
+
+        logging.info("download/unzip finished\n\n")
+        return test_specs
+
+    def execute_test(self, test_spec, out_dir):
+        version = test_spec['version']
+        appbin = test_spec['appbin']
+        tests = test_spec['tests']
+        hosttype = test_spec['hosttype']
+        tools = self.package_tools[hosttype]
+
+        logging.info("Execute tests for: %s\t%s\t%s\t%s\n\n" %
+                     (hosttype, version, appbin, tests))
+#
+        testdir = os.path.abspath(os.path.join(
+            self.TMPDIR,
+            "compactheader",
+            "test-" + version,
+            "testing"))
+
+        os.chdir(os.path.join(testdir, "mozmill"))
+
+        python = tools["virtualpython"]
+
+        # display mail user agent for AMO#
+        dispMUAfiles = glob.glob("../../../ftp/display_*")
+        if len(dispMUAfiles) > 0:
+            dispMUAfile1 = os.path.abspath(dispMUAfiles[-1])
+        else:
+            dispMUAfile1 = ""
+
+        dispMUAfiles = glob.glob("../../../ftp/addon-562*.xpi")
+        if len(dispMUAfiles) > 0:
+            dispMUAfile2 = os.path.abspath(dispMUAfiles[-1])
+        else:
+            dispMUAfile2 = ""
+
+        # We have out own tests for this, so delete it
+        try:
+            os.remove("message-header/test-header-toolbar.js")
+        except OSError:
+            pass
+
+        # disable test, because the default is now icons only, so this test
+        # does not work anymore
+        sed_cmd = [
+            "sed", "-i", "-e",
+            's/test_toolbar_collapse_and_expand/' +
+            'notest_toolbar_collapse_and_expand/',
+            os.path.join(
+                testdir, "mozmill", "message-header", "test-message-header.js")
+            ]
+        logging.debug("sed: %r" % " " . join(sed_cmd))
+        subprocess.call(sed_cmd)
+
+        if platform.system() == 'Darwin' and "TRAVIS" in os.environ:
+            # some tests do not work - for whatever reasons - on OSX
+            osx_disalbe_tests = [
+                'test_button_visibility',
+                'test_customize_header_toolbar_reorder_buttons',
+                'test_customize_header_toolbar_remove_buttons',
+                'test_customize_header_toolbar_add_all_buttons',
+                ]
+
+            for disable_test in osx_disalbe_tests:
+                sed_cmd = [
+                    "sed", "-i", "-e",
+                    's/' + disable_test + '/' +
+                    'no' + disable_test + '/',
+                    os.path.join(
+                        testdir, "mozmill", "compactheader",
+                        "test-compactheader-toolbar.js")
+                    ]
+                logging.debug("sed: %r" % " ".join(sed_cmd))
+                subprocess.call(sed_cmd)
+            sed_cmd = [
+                "sed", "-i", "-e",
+                's/test_a11y_attrs/' +
+                'notest_a11y_attrs/',
+                os.path.join(
+                    testdir, "mozmill", "message-header",
+                    "test-message-header.js")
+                ]
+            logging.debug("sed: %r" % " ".join(sed_cmd))
+            subprocess.call(sed_cmd)
+
+            sed_cmd = [
+                "sed", "-i", "-e",
+                's/test_ignore_phishing_warning_from_eml_attachment/' +
+                'notest_ignore_phishing_warning_from_eml_attachment/',
+                os.path.join(
+                    testdir, "mozmill", "message-header",
+                    "test-phishing-bar.js")
+                ]
+            logging.debug("sed: %r" % " ".join(sed_cmd))
+            subprocess.call(sed_cmd)
+
+            sed_cmd = [
+                "sed", "-i", "-e",
+                's/test_delete_one_after_message_in_folder_tab/' +
+                'notest_delete_one_after_message_in_folder_tab/',
+                os.path.join(
+                    testdir, "mozmill", "folder-display",
+                    "test-deletion-with-multiple-displays.js",
+                    )
+                ]
+            logging.debug("sed: %r" % " ".join(sed_cmd))
+            subprocess.call(sed_cmd)
+        elif platform.system() == 'Windows' and "APPVEYOR" in os.environ:
+            win_disalbe_tests = [
+                'test_show_all_header_mode',
+                'test_customize_header_toolbar_reorder_buttons',
+                'test_more_widget_with_maxlines_of_3',
+                ]
+            for disable_test in win_disalbe_tests:
+                sed_cmd = [
+                    "sed", "-i", "-e",
+                    's/' + disable_test + '/' +
+                    'no' + disable_test + '/',
+                    os.path.join(
+                        testdir, "mozmill", "message-header",
+                        "test-message-header.js")
+                    ]
+                logging.debug("sed: %r" % " ".join(sed_cmd))
+                subprocess.call(sed_cmd)
+
+        compatibility_apps = [
+            dispMUAfile1, dispMUAfile2,
+            self.xpi
+            ]
+
+        compatibility_apps = filter(re.compile(r'\S').search,
+                                    compatibility_apps)
+
+        compatibility_apps_args = []
+        for ca in compatibility_apps:
+            compatibility_apps_args += ["-a", ca]
+
+        logging.info("addons: %r" % compatibility_apps)
+#
+#           my $comp_apps = join(" -a ", @compatibility_apps);
+
+        mozmill_commands = [
+            [python, "runtest.py",
+             "--timeout=240",
+             "--binary=" + appbin,
+             "-a", self.xpi,
+             "-t", "compactheader",
+             "--testing-modules-dir", "../modules",
+             "2>&1"],
+            [python, "runtest.py",
+             "--timeout=600",
+             "--binary=" + appbin,
+             "-a", self.xpi,
+             "-t", "message-header",
+             "--testing-modules-dir", "../modules",
+             "2>&1"],
+            [python, "runtest.py",
+             "--timeout=600",
+             "--binary=" + appbin,
+             "-a", self.xpi,
+             "-t", "folder-display",
+             "--testing-modules-dir", "../modules",
+             "2>&1"],
+            [python, "runtest.py",
+             "--timeout=240",
+             "--binary=" + appbin] +
+            compatibility_apps_args +
+            ["-t", "compactheader/test-compactheader-preferences.js",
+             "--testing-modules-dir", "../modules",
+             "2>&1"],
+            [python, "runtest.py",
+             "--timeout=240",
+             "--binary=" + appbin] +
+            compatibility_apps_args +
+            ["-t", "compactheader/test-compactheader-toolbar.js",
+             "--testing-modules-dir", "../modules",
+             "2>&1"],
+            ]
+#
+        log = ""
+        number_of_tests = 0
+
+        for command in mozmill_commands:
+            logging.info("mozmill command: %r" % " ".join(command))
+            proc = subprocess.Popen(command,
+                                    stdout=subprocess.PIPE,
+                                    universal_newlines=True)
+            old_cmd_out = ""
+            for line in iter(proc.stdout.readline, ''):
+                if line != old_cmd_out:
+                    print(line.rstrip())
+                    old_cmd_out = line
+                log += line
+            proc.stdout.close()
+            number_of_tests += 1
+
+        datestr = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
+        with open(os.path.join(
+            out_dir,
+            "log-" + version + "-" + hosttype + "-" +
+                  datestr + ".txt"), 'w') as f:
+            f.write(log)
+
+        logging.info("Suspicious test outputs:")
+        suspicious = filter(
+            re.compile(r"(UNEXPECTED|^  |^Exception: Sorry, cannot )").search,
+            log.splitlines())
+        for line in suspicious:
+            logging.info(line)
+
+        log_lines = len(suspicious)
+        return (log_lines, number_of_tests)
+
+
+def main():
+    current_dir = os.getcwd()
+    test_executor = TestExecutor()
+    test_specs = test_executor.download_test()
+    logging.info("test specs: %r" % test_specs)
+    log_lines = 0
+    number_of_tests = 0
+
+    for appversion in test_specs:
+        l, n = test_executor.execute_test(
+            test_specs[appversion], current_dir)
+        log_lines += l
+        number_of_tests += n
+
+    logging.info(
+        "loglines: %i, number_of_tests: %d",
+        log_lines, number_of_tests)
+
+    # there is one line of output per test (i.e. the date)
+    if (
+            (platform.system() == "Darwin" and log_lines != 0) or
+            (platform.system() != "Darwin" and log_lines != number_of_tests)):
+        logging.error("some tests failed!")
+        exit(1)
+
+
+if __name__ == '__main__':
+    main()
diff -Nru compactheader-2.1.0/test/find_beta_build.py compactheader-2.1.6/test/find_beta_build.py
--- compactheader-2.1.0/test/find_beta_build.py	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/find_beta_build.py	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,37 @@
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from __future__ import division
+
+import requests
+import bs4
+import json
+
+with open("testapps.json", "r") as jf:
+    data = json.load(jf)
+
+beta_data = data['beta']
+
+
+for platform in beta_data:
+    platform_data = beta_data[platform]
+    url = "/".join(platform_data['url'].split('/')[:-1]) + '/'
+    print("url:", url)
+
+    r = requests.get(url)
+
+    page = r.text
+
+    soup = bs4.BeautifulSoup(page, 'lxml')
+
+    stack = []
+    for tr in soup.findAll('tr'):
+        for a in tr.findAll('a'):
+            stack.append(a.text.strip())
+
+    print("Last build:", url + stack[-1][:-1])
+
+    data['beta'][platform]['url'] = url + stack[-1][:-1]
+
+with open("testapps.json", "w") as jf:
+    json.dump(data, jf, indent=4)
diff -Nru compactheader-2.1.0/test/shared-modules/test-compactheader-helpers.js compactheader-2.1.6/test/shared-modules/test-compactheader-helpers.js
--- compactheader-2.1.0/test/shared-modules/test-compactheader-helpers.js	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/shared-modules/test-compactheader-helpers.js	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,505 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Thunderbird Mail Client.
+ *
+ * The Initial Developer of the Original Code is
+ * the Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Joachim Herb <joachim.herb@gmx.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var Ci = Components.interfaces;
+var Cc = Components.classes;
+var Cu = Components.utils;
+
+var MODULE_NAME = "compactheader-helpers";
+
+var elib = {};
+Cu.import('resource://mozmill/modules/elementslib.js', elib);
+var mozmill = {};
+Cu.import('resource://mozmill/modules/mozmill.js', mozmill);
+var EventUtils = {};
+Cu.import('resource://mozmill/stdlib/EventUtils.js', EventUtils);
+
+var RELATIVE_ROOT = "../shared-modules";
+var MODULE_REQUIRES = ["folder-display-helpers", "window-helpers",
+                       "customization-helpers"];
+
+const usesheetPref = "toolbar.customization.usesheet";
+var allPreferences = Cc["@mozilla.org/preferences-service;1"]
+                    .getService(Ci.nsIPrefBranch);
+var L;
+var folderDisplayHelper;
+var gCDHelper;
+
+function setupModule(module) {
+  folderDisplayHelper = collector.getModule('folder-display-helpers');
+  windowHelper = collector.getModule('window-helpers');
+  let cu = collector.getModule('customization-helpers');
+  cu.installInto(module);
+
+  var appInfo = Cc["@mozilla.org/xre/app-info;1"]
+  .getService(Ci.nsIXULAppInfo);
+  var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
+    .getService(Ci.nsIVersionComparator);
+  if (versionChecker.compare(appInfo.version, "24.0b1") < 0) {
+    gCDHelper = new module.CustomizeDialogHelper('header-view-toolbar',
+      'CustomizeHeaderToolbar', 'CustomizeToolbarWindow');
+  }
+  else {
+    gCDHelper = new module.CustomizeDialogHelper('header-view-toolbar',
+        'CustomizeHeaderToolbar', 'mailnews:customizeToolbar');
+  }
+}
+
+function installInto(module) {
+  setupModule(module);
+
+  // Now copy helper functions
+  module.reopen_3pane_window = reopen_3pane_window;
+  module.close3PaneWindow = close3PaneWindow;
+  module.open3PaneWindow = open3PaneWindow;
+  module.openAddressBook = openAddressBook;
+  module.open_preferences_dialog = open_preferences_dialog;
+  module.close_preferences_dialog = close_preferences_dialog;
+  module.select_message_in_folder = select_message_in_folder;
+  module.collapse_and_assert_header = collapse_and_assert_header;
+  module.expand_and_assert_header = expand_and_assert_header;
+  module.restore_and_check_default_buttons = restore_and_check_default_buttons;
+  module.open_header_pane_toolbar_customization = open_header_pane_toolbar_customization;
+  module.close_header_pane_toolbar_customization = close_header_pane_toolbar_customization;
+  module.filterInvisibleButtons = filterInvisibleButtons;
+  module.canMoveToolbox = canMoveToolbox;
+  module.set_and_assert_toolbox_position = set_and_assert_toolbox_position;
+  module.subtest_change_oneline = subtest_change_oneline;
+  module.subtest_change_twoline = subtest_change_twoline;
+  module.set_preferences_twoline = set_preferences_twoline;
+  module.set_preferences_oneline = set_preferences_oneline;
+  module.set_preferences_darken = set_preferences_darken;
+  module.set_preferences_non_darken = set_preferences_non_darken;
+  module.set_preferences_linkify = set_preferences_linkify;
+  module.set_preferences_non_linkify = set_preferences_non_linkify;
+  module.subtest_change_dblclick = subtest_change_dblclick;
+  module.subtest_change_no_dblclick = subtest_change_no_dblclick;
+  module.assert_collapsed = assert_collapsed;
+  module.assert_expanded = assert_expanded;
+  module.isVisible = isVisible;
+}
+
+function reopen_3pane_window() {
+  // Close the 3PaneWindow to reset margin to start values
+  // Make sure we have a different window open, so that we don't start shutting
+  // down just because the last window was closed
+  let abwc = openAddressBook();
+  // The 3pane window is closed and opened again.
+  close3PaneWindow
+  mc = open3PaneWindow();
+  abwc.window.close();
+  return mc;
+}
+
+/**
+ *  Helper function to open an extra window, so that the 3pane
+ *  window can be closed and opend again for persistancy checks.
+ *  They are copied from the test-session-store.js.
+ */
+function close3PaneWindow() {
+  let windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"].
+    getService(Ci.nsIWindowMediator);
+  let mail3PaneWindow = windowMediator.getMostRecentWindow("mail:3pane");
+  // close the 3pane window
+  mail3PaneWindow.close();
+}
+
+function open3PaneWindow() {
+  let windowWatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].
+    getService(Ci.nsIWindowWatcher);
+  windowHelper.plan_for_new_window("mail:3pane");
+  windowWatcher.openWindow(null,
+                           "chrome://messenger/content/messenger.xul", "",
+                           "all,chrome,dialog=no,status,toolbar",
+                           null);
+  return windowHelper.wait_for_new_window("mail:3pane");
+}
+
+function openAddressBook() {
+  let windowWatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].
+    getService(Ci.nsIWindowWatcher);
+  windowHelper.plan_for_new_window("mail:addressbook");
+  windowWatcher.openWindow(
+                      null,
+                      "chrome://messenger/content/addressbook/addressbook.xul", "",
+                      "all,chrome,dialog=no,status,toolbar",
+                      null);
+  return windowHelper.wait_for_new_window("mail:addressbook");
+}
+
+function open_preferences_dialog(aController, aSubtest) {
+  windowHelper.plan_for_modal_dialog("ext:options", aSubtest);
+  aController.click(aController.eid("CompactHeader_hidecohePreferencesButton"));
+  windowHelper.wait_for_modal_dialog("ext:options", 1);
+}
+
+function close_preferences_dialog(aController) {
+  windowHelper.plan_for_window_close(aController);
+  if (allPreferences.getBoolPref("browser.preferences.instantApply")) {
+    windowHelper.close_window(aController);
+  }
+  else {
+    let okButton = aController.window.document.documentElement.getButton('accept');
+    aController.click(new elib.Elem(okButton));
+  }
+  windowHelper.wait_for_window_close();
+}
+
+/**
+ * Select message in aFolder.
+ */
+function select_message_in_folder(aFolder, aMessageNum, aController)
+{
+  folderDisplayHelper.be_in_folder(aFolder);
+
+  // select and open the first message
+  let curMessage = folderDisplayHelper.select_click_row(aMessageNum);
+
+  // make sure it loads
+  folderDisplayHelper.wait_for_message_display_completion(aController, true);
+  folderDisplayHelper.assert_selected_and_displayed(aController, curMessage);
+
+  return curMessage;
+}
+
+function collapse_and_assert_header(aController) {
+  let collapsedHeaderView = aController.e("CompactHeader_collapsedHeaderView");
+  let expandedHeaderView = aController.e("expandedHeaderView");
+  if (collapsedHeaderView.getAttribute("collapsed")) {
+    aController.click(aController.eid("CompactHeader_hideDetailsButton"));
+  }
+  assert_collapsed(aController);
+}
+
+function assert_collapsed(aController) {
+  let collapsedHeaderView = aController.e("CompactHeader_collapsedHeaderView");
+  let expandedHeaderView = aController.e("expandedHeaderView");
+  folderDisplayHelper.assert_true(!collapsedHeaderView.hasAttribute("collapsed"),
+    'collapsed header view has attribute collapsed but should not have it');
+  folderDisplayHelper.assert_true(expandedHeaderView.getAttribute("collapsed"),
+    'expanded header view does not have attribute collapsed but should have it');
+}
+
+function expand_and_assert_header(aController) {
+  let collapsedHeaderView = aController.e("CompactHeader_collapsedHeaderView");
+  let expandedHeaderView = aController.e("expandedHeaderView");
+  if (!collapsedHeaderView.hasAttribute("collapsed") ||
+      !collapsedHeaderView.getAttribute("collapsed")) {
+    aController.click(aController.eid("CompactHeader_showDetailsButton"));
+  }
+  assert_expanded(aController);
+}
+
+function assert_expanded(aController) {
+  let collapsedHeaderView = aController.e("CompactHeader_collapsedHeaderView");
+  let expandedHeaderView = aController.e("expandedHeaderView");
+  folderDisplayHelper.assert_true(collapsedHeaderView.getAttribute("collapsed"),
+    'collapsed header view does not have attribute collapsed but should have it');
+  folderDisplayHelper.assert_true(!expandedHeaderView.hasAttribute("collapsed"),
+    'expanded header view has attribute collapsed but should not have it');
+}
+
+/**
+ *  Restore the default buttons in the header pane toolbar
+ *  by clicking the corresponding button in the palette dialog
+ *  and check if it worked.
+ */
+function restore_and_check_default_buttons(aController)
+{
+  let ctc = open_header_pane_toolbar_customization(aController);
+  let restoreButton = ctc.window.document.getElementById("main-box").
+    querySelector("[oncommand='overlayRestoreDefaultSet();']");
+  ctc.click(new elib.Elem(restoreButton));
+//  gCDHelper.restoreDefaultButtons(aController);
+  close_header_pane_toolbar_customization(ctc);
+
+  let hdrToolbar = aController.eid("header-view-toolbar").node;
+  let hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+
+  folderDisplayHelper.assert_equals(hdrToolbar.currentSet, hdrBarDefaultSet);
+  folderDisplayHelper.assert_equals(hdrToolbar.getAttribute("currentset"), hdrBarDefaultSet);
+}
+
+/*
+ * Open the header pane toolbar customization dialog.
+ */
+function open_header_pane_toolbar_customization(aController)
+{
+  let ctc;
+  ctc = gCDHelper.open(aController);
+  return ctc;
+}
+
+/*
+ * Close the header pane toolbar customization dialog.
+ */
+function close_header_pane_toolbar_customization(aCtc)
+{
+  gCDHelper.close(aCtc);
+//  // XXX There should be an equivalent for testing the closure of
+//  // XXX the dialog embedded in a sheet, but I do not know how.
+  if (!allPreferences.getBoolPref(usesheetPref, true)) {
+    folderDisplayHelper.assert_true(aCtc.window.closed, "The customization dialog is not closed.");
+  }
+}
+
+/*
+ * Remove invsible buttons from (comma separated) buttons list
+ */
+function filterInvisibleButtons(aController, aButtons) {
+  let buttons = aButtons.split(",");
+  let result = new Array;
+
+  for (let i=1; i<buttons.length; i++) {
+    button = buttons[i].replace(new RegExp("wrapper-"), "");
+    if ((aController.eid(button).node) &&
+        (!aController.eid(button).node.getAttribute("collapsed"))
+        ) {
+      result.push(buttons[i]);
+    }
+  }
+
+  let strResult;
+  if (result.length > 0) {
+    strResult = result.join(",");
+  }
+  else {
+    strResult = "__empty";
+  }
+
+  return strResult;
+}
+
+function canMoveToolbox() {
+  var appInfo = Cc["@mozilla.org/xre/app-info;1"]
+    .getService(Ci.nsIXULAppInfo);
+  var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
+    .getService(Ci.nsIVersionComparator);
+  return (versionChecker.compare(appInfo.version, "10.0a2") >= 0)
+};
+
+function set_top_toobox_position(aController) {
+  if (canMoveToolbox()) {
+    aController.click(aController.eid("CompactHeader_hdrToolbox.pos.top"));
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_left_toobox_position(aController) {
+  if (canMoveToolbox()) {
+    aController.click(aController.eid("CompactHeader_hdrToolbox.pos.left"));
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_right_toobox_position(aController) {
+  if (canMoveToolbox()) {
+    aController.click(aController.eid("CompactHeader_hdrToolbox.pos.right"));
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_none_toobox_position(aController) {
+  if (canMoveToolbox()) {
+    aController.click(aController.eid("CompactHeader_hdrToolbox.pos.none"));
+  }
+  close_preferences_dialog(aController);
+}
+
+var setToolboxPositionPreferences = new Array();
+setToolboxPositionPreferences = {
+  'top': {
+    setFunc: set_top_toobox_position,
+    pos: 'msgHeaderViewDeck',
+    collapsed: false,
+    other: ['CompactHeader_leftSidebar', 'CompactHeader_rightSidebar']
+  },
+  'left': {
+    setFunc: set_left_toobox_position,
+    pos: 'CompactHeader_leftSidebar',
+    collapsed: false,
+    other: ['expandedHeadersBox', 'CompactHeader_rightSidebar']
+  },
+  'right': {
+    setFunc: set_right_toobox_position,
+    pos: 'CompactHeader_rightSidebar',
+    collapsed: false,
+    other: ['CompactHeader_leftSidebar', 'expandedHeadersBox']
+  },
+  'none': {
+    setFunc: set_none_toobox_position,
+    pos: 'messagepaneboxwrapper',
+    collapsed: true,
+    other: []
+  }
+};
+
+function set_and_assert_toolbox_position(aController, aPosition) {
+  open_preferences_dialog(aController, setToolboxPositionPreferences[aPosition].setFunc);
+//  expand_and_assert_header(aController);
+  aController.sleep(300);
+  if (canMoveToolbox()) {
+    let pos = setToolboxPositionPreferences[aPosition].pos;
+    let e = aController.e(pos).getElementsByAttribute("id", "header-view-toolbox");
+    folderDisplayHelper.assert_equals(e.length, 1);
+    let c = setToolboxPositionPreferences[aPosition].collapsed;
+    if (c) {
+      folderDisplayHelper.assert_equals(e[0].getAttribute("collapsed"), "true");
+    }
+    else {
+      folderDisplayHelper.assert_equals(e[0].hasAttribute("collapsed"), false);
+    }
+
+    for (let i = 0; i < setToolboxPositionPreferences[aPosition].other.length; i++) {
+      let pos = setToolboxPositionPreferences[aPosition].other[i];
+      let e = aController.e(pos).getElementsByAttribute("id", "header-view-toolbox");
+      folderDisplayHelper.assert_equals(e.length, 0);
+    }
+  }
+  else {
+    let pos = "msgHeaderViewDeck";
+    let e = aController.e(pos).getElementsByAttribute("id", "header-view-toolbox");
+    folderDisplayHelper.assert_equals(e.length, 1);
+  }
+}
+
+function subtest_change_oneline(aController) {
+  let lineMode = aController.eid("CompactHeader_checkboxCompactTwolineView");
+  let lineModeNode = lineMode.node;
+
+  if (lineModeNode.hasAttribute("checked")) {
+    aController.click(lineMode);
+  }
+  close_preferences_dialog(aController);
+}
+
+function subtest_change_twoline(aController) {
+  let lineMode = aController.eid("CompactHeader_checkboxCompactTwolineView");
+  let lineModeNode = lineMode.node;
+
+  if (!lineModeNode.hasAttribute("checked")) {
+    aController.click(lineMode);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_twoline(aController) {
+  let checkboxCompactTwolineView = aController.eid("CompactHeader_checkboxCompactTwolineView");
+  if (!checkboxCompactTwolineView.node.getAttribute("checked")) {
+    aController.click(checkboxCompactTwolineView);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_oneline(aController) {
+  let checkboxCompactTwolineView = aController.eid("CompactHeader_checkboxCompactTwolineView");
+  if (checkboxCompactTwolineView.node.getAttribute("checked")) {
+    aController.click(checkboxCompactTwolineView);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_darken(aController) {
+  let checkboxDarken = aController.eid("CompactHeader_checkbox_darken_on_focus");
+  if (!checkboxDarken.node.getAttribute("checked")) {
+    aController.click(checkboxDarken);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_non_darken(aController) {
+  let checkboxDarken = aController.eid("CompactHeader_checkbox_darken_on_focus");
+  if (checkboxDarken.node.getAttribute("checked")) {
+    aController.click(checkboxDarken);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_linkify(aController) {
+  let checkboxLinkify = aController.eid("CompactHeader_checkboxLinkify");
+  if (!checkboxLinkify.node.getAttribute("checked")) {
+    aController.click(checkboxLinkify);
+  }
+  close_preferences_dialog(aController);
+}
+
+function set_preferences_non_linkify(aController) {
+  let checkboxLinkify = aController.eid("CompactHeader_checkboxLinkify");
+  if (checkboxLinkify.node.getAttribute("checked")) {
+    aController.click(checkboxLinkify);
+  }
+  close_preferences_dialog(aController);
+}
+
+function isVisible(aElem) {
+  if (   aElem.hidden || aElem.collapsed
+      || aElem.state == "closed"
+      || (typeof aElem.hasAttribute === 'function'
+          && aElem.hasAttribute("collapsed")
+          && aElem.getAttribute("collapsed") == "true"
+         )
+     )
+    return false;
+  let parent = aElem.parentNode;
+  if (parent == null)
+    return true;
+  if (("selectedPanel" in parent) &&
+      parent.selectedPanel != aElem)
+    return false;
+  return isVisible(parent);
+}
+
+function subtest_change_no_dblclick(aController) {
+  let dblClick = aController.eid("CompactHeader_checkbox_dblclick_header");
+  let dblClickNode = dblClick.node;
+
+  if (dblClickNode.hasAttribute("checked")) {
+    aController.click(dblClick);
+  }
+
+  close_preferences_dialog(aController);
+}
+
+function subtest_change_dblclick(aController) {
+  let dblClick = aController.eid("CompactHeader_checkbox_dblclick_header");
+  let dblClickNode = dblClick.node;
+
+  if (!dblClickNode.hasAttribute("checked")) {
+    aController.click(dblClick);
+  }
+  close_preferences_dialog(aController);
+}
diff -Nru compactheader-2.1.0/test/testapps.json compactheader-2.1.6/test/testapps.json
--- compactheader-2.1.0/test/testapps.json	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/test/testapps.json	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,80 @@
+{
+    "nightly": {
+        "WindowsAMD64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-central";, 
+            "appzip": "thunderbird-_VER_.en-US.win64.zip", 
+            "testzip": "thunderbird-_VER_.en-US.win64.common.tests.zip", 
+            "checksum": ".en-US.win64.checksums"
+        }, 
+        "Linuxx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-central";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-x86_64.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-x86_64.common.tests.zip", 
+            "checksum": ".en-US.linux-x86_64.checksums"
+        }, 
+        "Darwinx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-central";, 
+            "appzip": "thunderbird-_VER_.en-US.mac.dmg", 
+            "testzip": "thunderbird-_VER_.en-US.mac.common.tests.zip", 
+            "checksum": ".en-US.mac.checksums"
+        }, 
+        "Linux": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-central";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-i686.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-i686.common.tests.zip", 
+            "checksum": ".en-US.linux-i686.checksums"
+        }
+    }, 
+    "beta": {
+        "WindowsAMD64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/tinderbox-builds/comm-beta-win32/1522790702";, 
+            "appzip": "thunderbird-_VER_.en-US.win32.zip", 
+            "testzip": "thunderbird-_VER_.en-US.win32.common.tests.zip", 
+            "checksum": ".en-US.win32.checksums"
+        }, 
+        "Linuxx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/tinderbox-builds/comm-beta-linux64/1522790702";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-x86_64.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-x86_64.common.tests.zip", 
+            "checksum": ".en-US.linux-x86_64.checksums"
+        }, 
+        "Darwinx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/tinderbox-builds/comm-beta-macosx64/1522580117";, 
+            "appzip": "thunderbird-_VER_.en-US.mac.dmg", 
+            "testzip": "thunderbird-_VER_.en-US.mac.common.tests.zip", 
+            "checksum": ".en-US.mac.checksums"
+        }, 
+        "Linux": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/tinderbox-builds/comm-beta-linux/1522790702";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-i686.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-i686.common.tests.zip", 
+            "checksum": ".en-US.linux-i686.checksums"
+        }
+    }, 
+    "ESR": {
+        "WindowsAMD64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-esr52";, 
+            "appzip": "thunderbird-_VER_.en-US.win32.zip", 
+            "testzip": "thunderbird-_VER_.en-US.win32.common.tests.zip", 
+            "checksum": ".en-US.win32.checksums"
+        }, 
+        "Linuxx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-esr52";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-x86_64.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-x86_64.common.tests.zip", 
+            "checksum": ".en-US.linux-x86_64.checksums"
+        }, 
+        "Darwinx86_64": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-esr52";, 
+            "appzip": "thunderbird-_VER_.en-US.mac.dmg", 
+            "testzip": "thunderbird-_VER_.en-US.mac.common.tests.zip", 
+            "checksum": ".en-US.mac.checksums"
+        }, 
+        "Linux": {
+            "url": "https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-esr52";, 
+            "appzip": "thunderbird-_VER_.en-US.linux-i686.tar.bz2", 
+            "testzip": "thunderbird-_VER_.en-US.linux-i686.common.tests.zip", 
+            "checksum": ".en-US.linux-i686.checksums"
+        }
+    }
+}
\ Kein Zeilenumbruch am Dateiende.
diff -Nru compactheader-2.1.0/.travis.yml compactheader-2.1.6/.travis.yml
--- compactheader-2.1.0/.travis.yml	1970-01-01 01:00:00.000000000 +0100
+++ compactheader-2.1.6/.travis.yml	2018-08-18 02:45:39.000000000 +0200
@@ -0,0 +1,53 @@
+language: java
+
+os: 
+  - osx
+  - linux
+
+env:
+  - VERSION=ESR
+#  - VERSION=beta
+#   - VERSION=nightly
+
+cache:
+   directories:
+      - /tmp/compactheader/ftp/
+     
+before_install:
+  - if echo "$TRAVIS_COMMIT_MESSAGE" | grep -F -q "[skip travis]" ; then echo "[skip travis] has been found, exiting" && exit 0 ; else echo "[skip travis] has not been found, continuing" ; fi
+  - |
+    if [[ $TRAVIS_OS_NAME != 'osx' ]]; then
+      sudo apt-get install metacity
+    else
+      HOMEBREW_NO_AUTO_UPDATE=1 brew install ant
+    fi
+
+before_script:
+  - wget https://downloads.sourceforge.net/project/xmltask/xmltask/1.16.1/xmltask.jar 
+  - export CLASSPATH=`pwd`/xmltask.jar:$CLASSPATH
+  - |
+    if [[ $TRAVIS_OS_NAME != 'osx' ]]; then
+      export DISPLAY=:99.0
+      /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1920x1080x16  -extension RANDR
+      sleep 5 # give xvfb some time to start
+      metacity --sm-disable --replace 2>/dev/null &
+      sudo python -m pip install bs4
+      sudo python -m pip install lxml
+      sudo python -m pip install requests
+    fi
+  - |
+    if [[ $TRAVIS_OS_NAME == 'osx' ]]; then
+      wget -qO- https://bootstrap.pypa.io/get-pip.py | sudo python
+      sudo python -m pip install bs4
+      sudo python -m pip install lxml
+      sudo python -m pip install requests
+      export PIP_INDEX_URL=http://pypi.pub.build.mozilla.org/pub
+      export PIP_TRUSTED_HOST="pypi.pub.build.mozilla.org"
+      export PIP_FIND_LINKS="/tmp/compactheader http://pypi.pub.build.mozilla.org/pub";
+    fi
+
+script: 
+  - ant buildAMO
+  - cd test
+  - python ./find_beta_build.py
+  - python ./executeTests.py --version $VERSION

Reply to: