Thunderbird/Add-ons Guide 57

From MozillaWiki
Jump to: navigation, search

Add-ons Guide for Thunderbird 57 and beyond

Mozilla core have disabled "legacy" add-ons (not based purely on WebExtensions) in Firefox 57. Because this type of add-on is not supported from mozilla57 any more, many interfaces have been removed from Mozilla core.

However, Thunderbird 57-59 and Seamonkey still support these add-ons if the appropriate modifications are done to adapt to the changed interfaces. In general, Thunderbird is adding WebExtension support (bug 1396172) while maintaining "legacy" add-ons and hybrid add-ons.

Removed interfaces in mozilla57

  • nsILocalFile -- replacement: nsIFile
  • extIApplication, nsIEntityConverter
  • nsIProgrammingLanguage
  • nsILocaleService and friends
  • nsIScriptableDateFormat -- replacement: Intl.DateTimeFormat and mozIntl.DateTimeFormat
  • nsIFilePicker.show() -- replacement: nsIFilePicker.open() (async), example: Changeset where Thunderbird implemented that change
  • nsIDownloadManager
  • Promise.jsm -- replacement: PromiseUtils.jsm
  • nsIPrefBranch2 and nsIPrefBranchInternal -- replacement: nsIPrefBranch
  • nsIExternalProtocolService.loadUrl -- replacement: nsIExternalProtocolService.loadURI
  • nsIInputStreamPump.init: Change of arguments
  • nsIAtomService - see bug 1393692 for removal from Thunderbird

Changes to JS and XUL in mozilla57

[1]

  • `for each ()` construct [2] -- replacement: 'for (x of object)' or 'for (x of Object.values())'
  • `with` construct [3]
  • catch (ex if ex instanceof ExceptionType) (removed in mozilla47 already)
  • versioned Javascript support -- replacement: In XUL files, links to JS files using <script type="application/x-javascript" ... > or <script type="application/x-javascript;version=1.7" ... >, change to <script type="application/javascript" ... >
  • __iterator__ and Iterator()
  • "legacy" generators, now need to use `function*` syntax (removed in mozilla? already)
  • imports must be 100% correct now: Components.utils.import("resource://gre/modules/...") for Mozilla central imports, Components.utils.import("resource:///modules/...") for Thunderbird imports.

Changes in thunderbird57

  • steelIApplication (removed due to removal of extIApplication) -- replacement: Services, AppConstants
  • for (x in fixIterator(obj)) (removed due to removal of __iterator__) -- replacement: for (x of fixIterator(obj))

Removed in mozilla58

  • Date.prototype.toLocaleFormat
  • {get,set}ComplexValue use of nsISupportsString -- replacement: {get,set}StringPref(), example: Changeset where Thunderbird implemented that change
  • Mechanism to store add-on preferences in defaults/preferences/xx.js. Thunderbird 58 Beta not affected due to backout of this core change. A fix has landed on Daily 59 as of 2017-12-12, see bug 1414398.

Changes to JS in mozilla58

[4]

  • StopIteration [5]

Affected in thunderbird59

  • Add-on options dialog not working in Add-ons Manager. Fix on the way in bug bug 1419145.

Removed in mozilla59

  • Inline options were removed in bug 1414406. Thunderbird will not support that uncommon feature any more. Solution: Add-ons need to embed a WebExtension to display inline options [6][7], currently not working due to bug 1418914.

Changes to JS changes in mozilla59

[8]

  • catch (ex if ...)

Outlook and Suggestion

Suggestion for add-on authors wishing to be compatible with Thunderbird 59: Wait! The fix for bug 1414398 (see above) has arrived (2017-12-12). bug 1419145 is being analysed. bug 1418914 will be fixed and then inline options can be achieved via an embedded WebExtension.

Also Note

The list above only contains selected changes relevant to add-ons. The full list of changes can be seen at Firefox developer release notes where all the details, bugzilla bug reports and patches implementing those changes can be found.