Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save JimDanner/c3903b6eb000fa93b73070804dfaa76c to your computer and use it in GitHub Desktop.

Select an option

Save JimDanner/c3903b6eb000fa93b73070804dfaa76c to your computer and use it in GitHub Desktop.
Diff of WebExtension API schemas from the Thunderbird and Firefox source code, between versions THUNDERBIRD_109_0b4_RELEASE and THUNDERBIRD_127_0_BUILD1. Downloaded from https://hg.mozilla.org/try-comm-central and https://hg.mozilla.org/mozilla-unified
--- APIs/THUNDERBIRD_109_0b4_RELEASE/metainfo/schema_dump.json 2024-06-27 11:04:39.505326213 +0200
+++ APIs/THUNDERBIRD_127_0_BUILD1/metainfo/schema_dump.json 2024-06-24 16:28:51.297398270 +0200
@@ -24,91 +24,109 @@
"choices": [
{
"enum": [
- "addressBooks"
+ "addressBooks",
+ "sensitiveDataUpload"
],
"type": "string"
}
]
},
{
- "additionalProperties": {
- "$ref": "UnrecognizedProperty"
- },
- "id": "ActionManifest",
- "properties": {
- "browser_style": {
- "default": false,
- "description": "Enable browser styles. See the `MDN documentation on browser styles <|link-mdn-browser-styles|>`__ for more information.",
- "optional": true,
- "type": "boolean"
- },
- "default_area": {
- "description": "Defines the location the action button will appear. The default location is <value>maintoolbar</value>.",
- "enum": [
- "maintoolbar",
- "tabstoolbar"
- ],
- "optional": true,
- "type": "string"
- },
- "default_icon": {
- "$ref": "IconPath",
- "description": "The paths to one or more icons for the action button.",
- "optional": true
- },
- "default_label": {
- "description": "The label of the action button, defaults to its title. Can be set to an empty string to not display any label. If the containing toolbar is configured to display text only, the title will be used as fallback.",
- "optional": true,
- "preprocess": "localize",
- "type": "string"
- },
- "default_popup": {
- "description": "The html document to be opened as a popup when the user clicks on the action button.",
- "format": "relativeUrl",
- "optional": true,
- "preprocess": "localize",
- "type": "string"
- },
- "default_title": {
- "description": "The title of the action button. This shows up in the tooltip and the label. Defaults to the add-on name.",
- "optional": true,
- "preprocess": "localize",
- "type": "string"
- },
- "default_windows": {
- "default": [
- "normal"
- ],
- "description": "Defines the windows, the action button should appear in. Defaults to showing it only in the <value>normal</value> Thunderbird window, but can also be shown in the <value>messageDisplay</value> window.",
- "items": {
- "enum": [
- "normal",
- "messageDisplay"
- ],
- "type": "string"
- },
- "optional": true,
- "type": "array"
- },
- "theme_icons": {
- "description": "Specifies dark and light icons to be used with themes. The ``light`` icon is used on dark backgrounds and vice versa. **Note:** The default theme uses the ``default_icon`` for light backgrounds (if specified).",
- "items": {
- "$ref": "ThemeIcons"
- },
- "minItems": 1,
- "optional": true,
- "type": "array"
- }
- },
- "type": "object"
- },
- {
"$extend": "WebExtensionManifest",
"properties": {
"action": {
- "$ref": "ActionManifest",
+ "additionalProperties": {
+ "$ref": "UnrecognizedProperty"
+ },
"min_manifest_version": 3,
- "optional": true
+ "optional": true,
+ "properties": {
+ "allowed_spaces": {
+ "default": [
+ "mail"
+ ],
+ "description": "Defines for which spaces the action button will be added to Thunderbird's unified toolbar. Defaults to only allowing the action in the <value>mail</value> space. The <value>default</value> space is for tabs that don't belong to any space. If this is an empty array, the action button is shown in all spaces.",
+ "items": {
+ "enum": [
+ "mail",
+ "addressbook",
+ "calendar",
+ "tasks",
+ "chat",
+ "settings",
+ "default"
+ ],
+ "type": "string"
+ },
+ "optional": true,
+ "type": "array"
+ },
+ "browser_style": {
+ "default": false,
+ "description": "Enable browser styles. See the `MDN documentation on browser styles <|link-mdn-browser-styles|>`__ for more information.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "default_icon": {
+ "$ref": "manifest.IconPath",
+ "description": "The paths to one or more icons for the action button.",
+ "optional": true
+ },
+ "default_label": {
+ "description": "The label of the action button, defaults to its title. Can be set to an empty string to not display any label. If the containing toolbar is configured to display text only, the title will be used as fallback.",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_popup": {
+ "description": "The html document to be opened as a popup when the user clicks on the action button. Ignored for action buttons with type <value>menu</value>.",
+ "format": "relativeUrl",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_title": {
+ "description": "The title of the action button. This shows up in the tooltip and the label. Defaults to the add-on name.",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_windows": {
+ "default": [
+ "normal"
+ ],
+ "description": "Defines the windows, the action button should appear in. Defaults to showing it only in the <value>normal</value> Thunderbird window, but can also be shown in the <value>messageDisplay</value> window.",
+ "items": {
+ "enum": [
+ "normal",
+ "messageDisplay"
+ ],
+ "type": "string"
+ },
+ "optional": true,
+ "type": "array"
+ },
+ "theme_icons": {
+ "description": "Specifies dark and light icons to be used with themes. The ``light`` icon is used on dark backgrounds and vice versa. **Note:** The default theme uses the ``default_icon`` for light backgrounds (if specified).",
+ "items": {
+ "$ref": "ThemeIcons"
+ },
+ "minItems": 1,
+ "optional": true,
+ "type": "array"
+ },
+ "type": {
+ "default": "button",
+ "description": "Specifies the type of the button. Default type is <value>button</value>.",
+ "enum": [
+ "button",
+ "menu"
+ ],
+ "optional": true,
+ "type": "string"
+ }
+ },
+ "type": "object"
}
}
},
@@ -116,9 +134,107 @@
"$extend": "WebExtensionManifest",
"properties": {
"browser_action": {
- "$ref": "ActionManifest",
+ "additionalProperties": {
+ "$ref": "UnrecognizedProperty"
+ },
"max_manifest_version": 2,
- "optional": true
+ "optional": true,
+ "properties": {
+ "allowed_spaces": {
+ "default": [
+ "mail"
+ ],
+ "description": "Defines for which spaces the browserAction button will be added to Thunderbird's unified toolbar. Defaults to only allowing the browserAction in the <value>mail</value> space. The <value>default</value> space is for tabs that don't belong to any space. If this is an empty array, the browserAction button is shown in all spaces.",
+ "items": {
+ "enum": [
+ "mail",
+ "addressbook",
+ "calendar",
+ "tasks",
+ "chat",
+ "settings",
+ "default"
+ ],
+ "type": "string"
+ },
+ "optional": true,
+ "type": "array"
+ },
+ "browser_style": {
+ "default": false,
+ "description": "Enable browser styles. See the `MDN documentation on browser styles <|link-mdn-browser-styles|>`__ for more information.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "default_area": {
+ "description": "Defines the location the browserAction button will appear. Deprecated and ignored. Replaced by ``allowed_spaces``",
+ "enum": [
+ "maintoolbar",
+ "tabstoolbar"
+ ],
+ "optional": true,
+ "type": "string"
+ },
+ "default_icon": {
+ "$ref": "manifest.IconPath",
+ "description": "The paths to one or more icons for the browserAction button.",
+ "optional": true
+ },
+ "default_label": {
+ "description": "The label of the browserAction button, defaults to its title. Can be set to an empty string to not display any label. If the containing toolbar is configured to display text only, the title will be used as fallback.",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_popup": {
+ "description": "The html document to be opened as a popup when the user clicks on the browserAction button. Ignored for action buttons with type <value>menu</value>.",
+ "format": "relativeUrl",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_title": {
+ "description": "The title of the browserAction button. This shows up in the tooltip and the label. Defaults to the add-on name.",
+ "optional": true,
+ "preprocess": "localize",
+ "type": "string"
+ },
+ "default_windows": {
+ "default": [
+ "normal"
+ ],
+ "description": "Defines the windows, the browserAction button should appear in. Defaults to showing it only in the <value>normal</value> Thunderbird window, but can also be shown in the <value>messageDisplay</value> window.",
+ "items": {
+ "enum": [
+ "normal",
+ "messageDisplay"
+ ],
+ "type": "string"
+ },
+ "optional": true,
+ "type": "array"
+ },
+ "theme_icons": {
+ "description": "Specifies dark and light icons to be used with themes. The ``light`` icon is used on dark backgrounds and vice versa. **Note:** The default theme uses the ``default_icon`` for light backgrounds (if specified).",
+ "items": {
+ "$ref": "ThemeIcons"
+ },
+ "minItems": 1,
+ "optional": true,
+ "type": "array"
+ },
+ "type": {
+ "default": "button",
+ "description": "Specifies the type of the button. Default type is <value>button</value>.",
+ "enum": [
+ "button",
+ "menu"
+ ],
+ "optional": true,
+ "type": "string"
+ }
+ },
+ "type": "object"
}
}
},
@@ -377,61 +493,123 @@
"$extend": "WebExtensionManifest",
"properties": {
"commands": {
- "additionalProperties": {
- "additionalProperties": {
- "$ref": "UnrecognizedProperty"
- },
- "properties": {
- "description": {
- "optional": true,
- "preprocess": "localize",
- "type": "string"
- },
- "suggested_key": {
- "optional": true,
+ "choices": [
+ {
+ "additionalProperties": {
+ "additionalProperties": {
+ "$ref": "UnrecognizedProperty"
+ },
"properties": {
- "additionalProperties": {
- "deprecated": "Unknown platform name",
+ "description": {
"optional": true,
+ "preprocess": "localize",
"type": "string"
},
- "android": {
+ "suggested_key": {
"optional": true,
- "type": "string"
- },
- "chromeos": {
+ "properties": {
+ "additionalProperties": {
+ "deprecated": "Unknown platform name",
+ "optional": true,
+ "type": "string"
+ },
+ "android": {
+ "optional": true,
+ "type": "string"
+ },
+ "chromeos": {
+ "optional": true,
+ "type": "string"
+ },
+ "default": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "ios": {
+ "optional": true,
+ "type": "string"
+ },
+ "linux": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "mac": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "windows": {
+ "$ref": "KeyName",
+ "optional": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "description": "A <em>dictionary object</em> defining one or more commands as <em>name-value</em> pairs, the <em>name</em> being the name of the command and the <em>value</em> being a :ref:`commands.CommandsShortcut`. The <em>name</em> may also be one of the following built-in special shortcuts: \n * <value>_execute_browser_action</value> \n * <value>_execute_compose_action</value> \n * <value>_execute_message_display_action</value>\nExample: <literalinclude>includes/commands/manifest.json<lang>JSON</lang></literalinclude>",
+ "max_manifest_version": 2,
+ "type": "object"
+ },
+ {
+ "additionalProperties": {
+ "additionalProperties": {
+ "$ref": "UnrecognizedProperty"
+ },
+ "properties": {
+ "description": {
"optional": true,
+ "preprocess": "localize",
"type": "string"
},
- "default": {
- "$ref": "KeyName",
- "optional": true
- },
- "ios": {
+ "suggested_key": {
"optional": true,
- "type": "string"
- },
- "linux": {
- "$ref": "KeyName",
- "optional": true
- },
- "mac": {
- "$ref": "KeyName",
- "optional": true
- },
- "windows": {
- "$ref": "KeyName",
- "optional": true
+ "properties": {
+ "additionalProperties": {
+ "deprecated": "Unknown platform name",
+ "optional": true,
+ "type": "string"
+ },
+ "android": {
+ "optional": true,
+ "type": "string"
+ },
+ "chromeos": {
+ "optional": true,
+ "type": "string"
+ },
+ "default": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "ios": {
+ "optional": true,
+ "type": "string"
+ },
+ "linux": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "mac": {
+ "$ref": "KeyName",
+ "optional": true
+ },
+ "windows": {
+ "$ref": "KeyName",
+ "optional": true
+ }
+ },
+ "type": "object"
}
},
"type": "object"
- }
- },
- "type": "object"
- },
- "description": "A <em>dictionary object</em> defining one or more commands as <em>name-value</em> pairs, the <em>name</em> being the name of the command and the <em>value</em> being a :ref:`commands.CommandsShortcut`. The <em>name</em> may also be one of the following built-in special shortcuts: \n * <value>_execute_browser_action</value> \n * <value>_execute_compose_action</value> \n * <value>_execute_message_display_action</value>\nExample: <literalinclude>includes/commands/manifest.json<lang>JSON</lang></literalinclude>",
- "optional": true,
- "type": "object"
+ },
+ "description": "A <em>dictionary object</em> defining one or more commands as <em>name-value</em> pairs, the <em>name</em> being the name of the command and the <em>value</em> being a :ref:`commands.CommandsShortcut`. The <em>name</em> may also be one of the following built-in special shortcuts: \n * <value>_execute_action</value> \n * <value>_execute_compose_action</value> \n * <value>_execute_message_display_action</value>\nExample: <literalinclude>includes/commands/manifest.json<lang>JSON</lang></literalinclude>",
+ "min_manifest_version": 3,
+ "type": "object"
+ }
+ ],
+ "optional": true
}
}
},
@@ -473,7 +651,7 @@
"type": "string"
},
"default_icon": {
- "$ref": "IconPath",
+ "$ref": "manifest.IconPath",
"description": "The paths to one or more icons for the composeAction button.",
"optional": true
},
@@ -484,7 +662,7 @@
"type": "string"
},
"default_popup": {
- "description": "The html document to be opened as a popup when the user clicks on the composeAction button.",
+ "description": "The html document to be opened as a popup when the user clicks on the composeAction button. Ignored for action buttons with type <value>menu</value>.",
"format": "relativeUrl",
"optional": true,
"preprocess": "localize",
@@ -504,6 +682,16 @@
"minItems": 1,
"optional": true,
"type": "array"
+ },
+ "type": {
+ "default": "button",
+ "description": "Specifies the type of the button. Default type is <value>button</value>.",
+ "enum": [
+ "button",
+ "menu"
+ ],
+ "optional": true,
+ "type": "string"
}
},
"type": "object"
@@ -515,7 +703,8 @@
"choices": [
{
"enum": [
- "messagesModify"
+ "messagesModify",
+ "sensitiveDataUpload"
],
"type": "string"
}
@@ -586,7 +775,7 @@
"type": "string"
},
"default_icon": {
- "$ref": "IconPath",
+ "$ref": "manifest.IconPath",
"description": "The paths to one or more icons for the messageDisplayAction button.",
"optional": true
},
@@ -597,7 +786,7 @@
"type": "string"
},
"default_popup": {
- "description": "The html document to be opened as a popup when the user clicks on the messageDisplayAction button.",
+ "description": "The html document to be opened as a popup when the user clicks on the messageDisplayAction button. Ignored for action buttons with type <value>menu</value>.",
"format": "relativeUrl",
"optional": true,
"preprocess": "localize",
@@ -617,6 +806,16 @@
"minItems": 1,
"optional": true,
"type": "array"
+ },
+ "type": {
+ "default": "button",
+ "description": "Specifies the type of the button. Default type is <value>button</value>.",
+ "enum": [
+ "button",
+ "menu"
+ ],
+ "optional": true,
+ "type": "string"
}
},
"type": "object"
@@ -632,7 +831,11 @@
"messagesImport",
"messagesMove",
"messagesRead",
- "messagesTags"
+ "messagesTags",
+ "messagesTagsList",
+ "messagesUpdate",
+ "messagesModifyPermanent",
+ "sensitiveDataUpload"
],
"type": "string"
}
@@ -1184,7 +1387,17 @@
"enum": [
"declarativeNetRequest"
],
- "min_manifest_version": 3,
+ "type": "string"
+ }
+ ]
+ },
+ {
+ "$extend": "OptionalPermission",
+ "choices": [
+ {
+ "enum": [
+ "declarativeNetRequestFeedback"
+ ],
"type": "string"
}
]
@@ -1194,10 +1407,8 @@
"choices": [
{
"enum": [
- "declarativeNetRequestFeedback",
"declarativeNetRequestWithHostAccess"
],
- "min_manifest_version": 3,
"type": "string"
}
]
@@ -1209,7 +1420,6 @@
"additionalProperties": {
"$ref": "UnrecognizedProperty"
},
- "min_manifest_version": 3,
"optional": true,
"properties": {
"rule_resources": {
@@ -1419,7 +1629,7 @@
"id": "ManifestBase",
"properties": {
"applications": {
- "$ref": "BrowserSpecificSettings",
+ "$ref": "DeprecatedApplications",
"description": "The applications property is deprecated, please use 'browser_specific_settings'",
"max_manifest_version": 2,
"optional": true
@@ -1538,6 +1748,14 @@
"$ref": "ExtensionURL"
},
"type": "array"
+ },
+ "type": {
+ "enum": [
+ "module",
+ "classic"
+ ],
+ "optional": true,
+ "type": "string"
}
},
"type": "object"
@@ -1642,19 +1860,25 @@
"optional": true,
"type": "array"
},
+ "options_page": {
+ "$ref": "ExtensionURL",
+ "description": "Alias property for options_ui.page, ignored when options_ui.page is set. When using this property the options page is always opened in a new tab.",
+ "optional": true
+ },
"options_ui": {
"additionalProperties": {
- "deprecated": "An unexpected property was found in the WebExtension manifest",
- "type": "any"
+ "$ref": "UnrecognizedProperty"
},
"optional": true,
"properties": {
"browser_style": {
- "default": true,
+ "description": "Defaults to true in Manifest V2; Deprecated in Manifest V3.",
"optional": true,
"type": "boolean"
},
"chrome_style": {
+ "description": "chrome_style is ignored in Firefox. Its replacement (browser_style) has been deprecated.",
+ "max_manifest_version": 2,
"optional": true,
"type": "boolean"
},
@@ -1701,6 +1925,9 @@
},
{
"items": {
+ "additionalProperties": {
+ "$ref": "UnrecognizedProperty"
+ },
"properties": {
"extension_ids": {
"items": {
@@ -1716,7 +1943,6 @@
}
]
},
- "minItems": 1,
"optional": true,
"type": "array"
},
@@ -1724,7 +1950,6 @@
"items": {
"$ref": "MatchPattern"
},
- "minItems": 1,
"optional": true,
"type": "array"
},
@@ -1732,13 +1957,11 @@
"items": {
"type": "string"
},
- "minItems": 1,
"type": "array"
}
},
"type": "object"
},
- "minItems": 1,
"min_manifest_version": 3,
"postprocess": "webAccessibleMatching",
"type": "array"
@@ -1754,12 +1977,6 @@
"description": "Represents a WebExtension language pack manifest.json file",
"id": "WebExtensionLangpackManifest",
"properties": {
- "homepage_url": {
- "format": "url",
- "optional": true,
- "preprocess": "localize",
- "type": "string"
- },
"langpack_id": {
"pattern": "^[a-zA-Z][a-zA-Z-]+$",
"type": "string"
@@ -1836,12 +2053,6 @@
}
},
"type": "object"
- },
- "homepage_url": {
- "format": "url",
- "optional": true,
- "preprocess": "localize",
- "type": "string"
}
},
"type": "object"
@@ -2057,11 +2268,50 @@
"additionalProperties": {
"type": "any"
},
+ "id": "GeckoAndroidSpecificProperties",
+ "properties": {
+ "strict_max_version": {
+ "optional": true,
+ "type": "string"
+ },
+ "strict_min_version": {
+ "optional": true,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "additionalProperties": {
+ "type": "any"
+ },
+ "id": "DeprecatedApplications",
+ "properties": {
+ "gecko": {
+ "$ref": "FirefoxSpecificProperties",
+ "optional": true
+ },
+ "gecko_android": {
+ "$ref": "GeckoAndroidSpecificProperties",
+ "optional": true,
+ "unsupported": true
+ }
+ },
+ "type": "object"
+ },
+ {
+ "additionalProperties": {
+ "type": "any"
+ },
"id": "BrowserSpecificSettings",
"properties": {
"gecko": {
"$ref": "FirefoxSpecificProperties",
"optional": true
+ },
+ "gecko_android": {
+ "$ref": "GeckoAndroidSpecificProperties",
+ "optional": true
}
},
"type": "object"
@@ -2305,7 +2555,7 @@
"optional": true,
"properties": {
"browser_style": {
- "default": false,
+ "description": "Deprecated in Manifest V3.",
"optional": true,
"type": "boolean"
},
@@ -2510,7 +2760,9 @@
{
"enum": [
"webRequest",
+ "webRequestAuthProvider",
"webRequestBlocking",
+ "webRequestFilterResponse",
"webRequestFilterResponse.serviceWorkerScript"
],
"type": "string"
@@ -2528,8 +2780,8 @@
"name": "onCreated",
"parameters": [
{
- "name": "id",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
},
{
"$ref": "MailAccount",
@@ -2543,8 +2795,8 @@
"name": "onDeleted",
"parameters": [
{
- "name": "id",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
}
],
"type": "function"
@@ -2554,8 +2806,8 @@
"name": "onUpdated",
"parameters": [
{
- "name": "id",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
},
{
"name": "changedValues",
@@ -2610,8 +2862,8 @@
"name": "get",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
},
{
"default": true,
@@ -2664,13 +2916,14 @@
},
{
"async": true,
- "deprecated": "This will be removed. Use :ref:`identities.setDefault` instead.",
+ "deprecated": "Deprecated since Thunderbird 91 and removed in Manifest V3: accounts.setDefaultIdentity() is now available as identities.setDefault.",
"description": "Sets the default identity for an account.",
+ "max_manifest_version": 2,
"name": "setDefaultIdentity",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
},
{
"name": "identityId",
@@ -2681,13 +2934,14 @@
},
{
"async": "callback",
- "deprecated": "This will be removed. Use :ref:`identities.getDefault` instead.",
+ "deprecated": "Deprecated since Thunderbird 91 and removed in Manifest V3: accounts.getDefaultIdentity() is now available as identities.getDefault.",
"description": "Returns the default identity for an account, or <value>null</value> if it is not defined.",
+ "max_manifest_version": 2,
"name": "getDefaultIdentity",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "MailAccountId",
+ "name": "accountId"
},
{
"converterPromiseOptionalNull": true,
@@ -2719,12 +2973,13 @@
"items": {
"$ref": "folders.MailFolder"
},
+ "max_manifest_version": 2,
"optional": true,
"type": "array"
},
"id": {
- "description": "A unique identifier for this account.",
- "type": "string"
+ "$ref": "MailAccountId",
+ "description": "A unique identifier for this account."
},
"identities": {
"description": "The identities associated with this account. The default identity is listed first, others in no particular order.",
@@ -2737,18 +2992,54 @@
"description": "The human-friendly name of this account.",
"type": "string"
},
+ "rootFolder": {
+ "$ref": "folders.MailFolder",
+ "description": "The root folder associated with this account.",
+ "optional": true
+ },
"type": {
"description": "What sort of account this is, e.g. <value>imap</value>, <value>nntp</value>, or <value>pop3</value>.",
"type": "string"
}
},
"type": "object"
+ },
+ {
+ "description": "A unique id representing a :ref:`accounts.MailAccount`.",
+ "id": "MailAccountId",
+ "type": "string"
+ },
+ {
+ "choices": [
+ {
+ "enum": [
+ "imap",
+ "pop3",
+ "nntp",
+ "none"
+ ],
+ "max_manifest_version": 2,
+ "type": "string"
+ },
+ {
+ "enum": [
+ "imap",
+ "pop3",
+ "nntp",
+ "local"
+ ],
+ "min_manifest_version": 3,
+ "type": "string"
+ }
+ ],
+ "description": "The type of an account.",
+ "id": "MailAccountType"
}
]
},
"action": {
"allowedContexts": [],
- "description": "Use an action to put a button in the mail window toolbar. In addition to its icon, an action button can also have a tooltip, a badge, and a popup.",
+ "description": "Use the action API to add a button to Thunderbird's unified toolbar. In addition to its icon, an action button can also have a tooltip, a badge, and a popup.",
"docURL": "https://webextension-api.thunderbird.net/en/latest/browserAction.html",
"events": [
{
@@ -2924,6 +3215,7 @@
"parameters": [
{
"name": "result",
+ "optional": true,
"type": "string"
}
],
@@ -3230,7 +3522,7 @@
},
{
"async": "callback",
- "description": "Enables the action button for a tab. By default, an action button is enabled.",
+ "description": "Enables the action button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well. By default, an action button is enabled.",
"name": "enable",
"parameters": [
{
@@ -3251,7 +3543,7 @@
},
{
"async": "callback",
- "description": "Disables the action button for a tab.",
+ "description": "Disables the action button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well.",
"name": "disable",
"parameters": [
{
@@ -3308,11 +3600,35 @@
"type": "function"
},
{
- "async": true,
- "description": "Opens the action's popup window in the active window.",
+ "async": "callback",
+ "description": "Opens the action's popup window in the specified window. Defaults to the current window. Returns false if the popup could not be opened because the action has no popup, is of type <value>menu</value>, is disabled or has been removed from the toolbar.",
"name": "openPopup",
- "parameters": [],
- "requireUserInput": true,
+ "parameters": [
+ {
+ "description": "An object with information about the popup to open.",
+ "name": "options",
+ "optional": true,
+ "properties": {
+ "windowId": {
+ "description": "Defaults to the current window.",
+ "minimum": -2,
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "boolean"
+ }
+ ],
+ "type": "function"
+ }
+ ],
"returns": {
"converterTypeOverride": "Promise<boolean>"
},
@@ -3427,10 +3743,22 @@
],
"functions": [
{
- "async": true,
+ "async": "callback",
"description": "Opens the address book user interface.",
"name": "openUI",
- "parameters": [],
+ "parameters": [
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "tabs.Tab",
+ "name": "return"
+ }
+ ],
+ "type": "function"
+ }
+ ],
"type": "function"
},
{
@@ -3689,6 +4017,7 @@
"browserAction": {
"$import": "action",
"allowedContexts": [],
+ "description": "Use the browserAction API to add a button to Thunderbird's unified toolbar. In addition to its icon, a browserAction button can also have a tooltip, a badge, and a popup.",
"docURL": "https://webextension-api.thunderbird.net/en/latest/browserAction.html",
"events": [],
"functions": [],
@@ -4332,6 +4661,31 @@
}
],
"type": "function"
+ },
+ {
+ "description": "Fired when a registered command's shortcut is changed.",
+ "name": "onChanged",
+ "parameters": [
+ {
+ "name": "changeInfo",
+ "properties": {
+ "name": {
+ "description": "The name of the shortcut.",
+ "type": "string"
+ },
+ "newShortcut": {
+ "description": "The new shortcut active for this command, or blank if not active.",
+ "type": "string"
+ },
+ "oldShortcut": {
+ "description": "The old shortcut which is no longer active for this command, or blank if the shortcut was previously inactive.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "type": "function"
}
],
"functions": [
@@ -4546,6 +4900,7 @@
"mode": {
"description": "The used save mode.",
"enum": [
+ "autoSave",
"draft",
"template"
],
@@ -4652,11 +5007,10 @@
"name": "beginNew",
"parameters": [
{
+ "$ref": "messages.MessageId",
"description": "If specified, the message or template to edit as a new message.",
- "minimum": 1,
"name": "messageId",
- "optional": true,
- "type": "integer"
+ "optional": true
},
{
"$ref": "ComposeDetails",
@@ -4683,10 +5037,9 @@
"name": "beginReply",
"parameters": [
{
+ "$ref": "messages.MessageId",
"description": "The message to reply to, as retrieved using other APIs.",
- "minimum": 1,
- "name": "messageId",
- "type": "integer"
+ "name": "messageId"
},
{
"enum": [
@@ -4723,10 +5076,9 @@
"name": "beginForward",
"parameters": [
{
+ "$ref": "messages.MessageId",
"description": "The message to forward, as retrieved using other APIs.",
- "minimum": 1,
- "name": "messageId",
- "type": "integer"
+ "name": "messageId"
},
{
"enum": [
@@ -4784,7 +5136,7 @@
},
{
"async": true,
- "description": "Updates the compose window. Only fields that are to be changed should be specified. Currently only a limited amount of information can be set, more will be added in later versions.\n\n**Note:** The compose format of an existing compose window cannot be changed. Since Thunderbird 98, setting conflicting values for ``details.body``, ``details.plainTextBody`` or ``details.isPlaintext`` no longer throw an exception, instead the compose window chooses the matching ``details.body`` or ``details.plainTextBody`` value and ignores the other.",
+ "description": "Updates the compose window. The properties of the given :ref:`compose.ComposeDetails` object will be used to overwrite the current values of the specified compose window, so only properties that are to be changed should be included.\n\nWhen updating any of the array properties (``customHeaders`` and most address fields), make sure to first get the current values to not accidentally remove all existing entries when setting the new value.\n\n**Note:** The compose format of an existing compose window cannot be changed. Since Thunderbird 98, setting conflicting values for ``details.body``, ``details.plainTextBody`` or ``details.isPlaintext`` no longer throws an exception, instead the compose window chooses the matching ``details.body`` or ``details.plainTextBody`` value and ignores the other.",
"name": "setComposeDetails",
"parameters": [
{
@@ -5149,7 +5501,7 @@
{
"properties": {
"id": {
- "description": "The ID of a contact or mailing list from the :doc:`contacts` and :doc:`mailingLists` APIs.",
+ "description": "The ID of a contact or mailing list from the :doc:`contacts` and :doc:`mailingLists`.",
"type": "string"
},
"type": {
@@ -5202,6 +5554,9 @@
"additionalFccFolder": {
"choices": [
{
+ "$ref": "folders.MailFolderId"
+ },
+ {
"$ref": "folders.MailFolder"
},
{
@@ -5215,7 +5570,7 @@
"optional": true
},
"attachVCard": {
- "description": "Wether or not the vCard of the used identity will be attached to the message during send. Note: If the value has not been modified, selecting a different identity will load the default value of the new identity.",
+ "description": "Whether or not the vCard of the used identity will be attached to the message during send. **Note:** If the value has not been modified, selecting a different identity will load the default value of the new identity.",
"optional": true,
"type": "boolean"
},
@@ -5256,7 +5611,7 @@
"type": "array"
},
"deliveryFormat": {
- "description": "Defines the mime format of the sent message (ignored on plain text messages). Defaults to <value>auto</value>, which will send html messages as plain text, if they do not include any formatting, and as <value>both</value> otherwise (a multipart/mixed message).",
+ "description": "Defines the MIME format of the sent message (ignored on plain text messages). Defaults to <value>auto</value>, which will send html messages as plain text, if they do not include any formatting, and as <value>both</value> otherwise (a multipart/mixed message).",
"enum": [
"auto",
"plaintext",
@@ -5277,14 +5632,19 @@
},
"from": {
"$ref": "ComposeRecipient",
- "description": "*Caution*: Setting a value for ``from`` does not change the used identity, it overrides the FROM header. Many email servers do not accept emails where the FROM header does not match the sender identity. Must be set to exactly one valid email address.",
+ "description": "*Caution*: Setting a value for ``from`` does not change the used identity, it overrides the <value>From</value> header. Many email servers do not accept emails where the <value>From</value> header does not match the sender identity. Must be set to exactly one valid email address.",
"optional": true
},
"identityId": {
- "description": "The ID of an identity from the :doc:`accounts` API. The settings from the identity will be used in the composed message. If ``replyTo`` is also specified, the ``replyTo`` property of the identity is overridden. The permission <permission>accountsRead</permission> is required to include the ``identityId``.",
+ "description": "The ID of an identity from the :doc:`accounts`. The settings from the identity will be used in the composed message. If ``replyTo`` is also specified, the ``replyTo`` property of the identity is overridden. The permission <permission>accountsRead</permission> is required to include the ``identityId``.",
"optional": true,
"type": "string"
},
+ "isModified": {
+ "description": "Whether the composer is considered modified by the user. A modified composer asks for confirmation, when it is closed.",
+ "optional": true,
+ "type": "boolean"
+ },
"isPlainText": {
"description": "Whether the message is an HTML message or a plain text message.",
"optional": true,
@@ -5293,17 +5653,16 @@
"newsgroups": {
"choices": [
{
- "description": "A newsgroup name.",
"type": "string"
},
{
- "description": "An array of newsgroup names.",
"items": {
"type": "string"
},
"type": "array"
}
],
+ "description": "A single newsgroup name or an array of newsgroup names.",
"optional": true
},
"overrideDefaultFcc": {
@@ -5314,6 +5673,9 @@
"overrideDefaultFccFolder": {
"choices": [
{
+ "$ref": "folders.MailFolderId"
+ },
+ {
"$ref": "folders.MailFolder"
},
{
@@ -5344,9 +5706,9 @@
"type": "string"
},
"relatedMessageId": {
+ "$ref": "messages.MessageId",
"description": "The id of the original message (in case of draft, template, forward or reply). Read-only. Is <value>null</value> in all other cases or if the original message was opened from file.",
- "optional": true,
- "type": "integer"
+ "optional": true
},
"replyTo": {
"$ref": "ComposeRecipientList",
@@ -5425,8 +5787,7 @@
"id": "CustomHeader",
"properties": {
"name": {
- "description": "Name of a custom header, must have a <value>X-</value> prefix.",
- "pattern": "^X-.*$",
+ "description": "Name of a custom header, must be prefixed by <value>X-</value> (but not by <value>X-Mozilla-</value>) or be one of the explicitly allowed headers (<value>MSIP_Labels</value>)",
"type": "string"
},
"value": {
@@ -5622,6 +5983,7 @@
"parameters": [
{
"name": "result",
+ "optional": true,
"type": "string"
}
],
@@ -5928,7 +6290,7 @@
},
{
"async": "callback",
- "description": "Enables the composeAction button for a tab. By default, a composeAction button is enabled.",
+ "description": "Enables the composeAction button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well. By default, a composeAction button is enabled.",
"name": "enable",
"parameters": [
{
@@ -5949,7 +6311,7 @@
},
{
"async": "callback",
- "description": "Disables the composeAction button for a tab.",
+ "description": "Disables the composeAction button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well.",
"name": "disable",
"parameters": [
{
@@ -6006,11 +6368,35 @@
"type": "function"
},
{
- "async": true,
- "description": "Opens the action's popup window in the active window.",
+ "async": "callback",
+ "description": "Opens the action's popup window in the specified window. Defaults to the current window. Returns false if the popup could not be opened because the action has no popup, is of type <value>menu</value>, is disabled or has been removed from the toolbar.",
"name": "openPopup",
- "parameters": [],
- "requireUserInput": true,
+ "parameters": [
+ {
+ "description": "An object with information about the popup to open.",
+ "name": "options",
+ "optional": true,
+ "properties": {
+ "windowId": {
+ "description": "Defaults to the current window.",
+ "minimum": -2,
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "boolean"
+ }
+ ],
+ "type": "function"
+ }
+ ],
"type": "function"
}
],
@@ -6460,7 +6846,7 @@
"type": "object"
},
{
- "description": "A set of individual properties for a particular contact, and its vCard string. Further information can be found in :ref:`howto_contacts`.",
+ "description": "A set of individual properties for a particular contact, and its vCard string. Further information can be found in :doc:`examples/vcard`.",
"id": "ContactProperties",
"patternProperties": {
"^\\w+$": {
@@ -8999,6 +9385,21 @@
"type": "function"
},
{
+ "description": "Fired when properties of a folder have changed (<value>specialUse</value> and <value>isFavorite</value>).",
+ "name": "onUpdated",
+ "parameters": [
+ {
+ "$ref": "folders.MailFolder",
+ "name": "originalFolder"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "name": "updatedFolder"
+ }
+ ],
+ "type": "function"
+ },
+ {
"description": "Fired when certain information of a folder have changed. Bursts of message count changes are collapsed to a single event.",
"name": "onFolderInfoChanged",
"parameters": [
@@ -9017,19 +9418,236 @@
"functions": [
{
"async": "callback",
+ "description": "Gets folders that match the specified properties, or all folders if no properties are specified.",
+ "name": "query",
+ "parameters": [
+ {
+ "default": {},
+ "name": "queryInfo",
+ "optional": true,
+ "properties": {
+ "accountId": {
+ "$ref": "accounts.MailAccountId",
+ "description": "Limits the search to folders of the account with the specified id.",
+ "optional": true
+ },
+ "canAddMessages": {
+ "description": "Whether the folder supports adding new messages, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canAddSubfolders": {
+ "description": "Whether the folder supports adding new subfolders, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canBeDeleted": {
+ "description": "Whether the folder can be deleted, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canBeRenamed": {
+ "description": "Whether the folder can be renamed, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canDeleteMessages": {
+ "description": "Whether the folder supports deleting messages, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "folderId": {
+ "$ref": "folders.MailFolderId",
+ "description": "Limits the search to the folder with the specified id.",
+ "optional": true
+ },
+ "hasMessages": {
+ "choices": [
+ {
+ "type": "boolean"
+ },
+ {
+ "$ref": "QueryRange"
+ }
+ ],
+ "description": "Whether the folder (excluding subfolders) contains messages, or not. Supports to specify a :ref:`folders.QueryRange` (min/max) instead of a simple boolean value (none/some).",
+ "optional": true
+ },
+ "hasNewMessages": {
+ "choices": [
+ {
+ "type": "boolean"
+ },
+ {
+ "$ref": "QueryRange"
+ }
+ ],
+ "description": "Whether the folder (excluding subfolders) contains new messages, or not. Supports to specify a :ref:`folders.QueryRange` (min/max) instead of a simple boolean value (none/some).",
+ "optional": true
+ },
+ "hasSubFolders": {
+ "choices": [
+ {
+ "type": "boolean"
+ },
+ {
+ "$ref": "QueryRange"
+ }
+ ],
+ "description": "Whether the folder has subfolders, or not. Supports to specify a :ref:`folders.QueryRange` (min/max) instead of a simple boolean value (none/some).",
+ "optional": true
+ },
+ "hasUnreadMessages": {
+ "choices": [
+ {
+ "type": "boolean"
+ },
+ {
+ "$ref": "QueryRange"
+ }
+ ],
+ "description": "Whether the folder (excluding subfolders) contains unread messages, or not. Supports to specify a :ref:`folders.QueryRange` (min/max) instead of a simple boolean value (none/some).",
+ "optional": true
+ },
+ "isFavorite": {
+ "description": "Whether the folder is a favorite folder, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isRoot": {
+ "description": "Whether the folder is a root folder, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isUnified": {
+ "description": "Whether the folder is a unified mailbox folder, or not. Note: Unified mailbox folders are always skipped, unless this property is set to <value>true</value>",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isVirtual": {
+ "description": "Whether the folder is a virtual search folder, or not.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "limit": {
+ "description": "Limits the number of returned folders. If used together with <value>recent</value>, supports being set to :ref:`folders.DEFAULT_MOST_RECENT_LIMIT`",
+ "optional": true,
+ "type": "integer"
+ },
+ "name": {
+ "choices": [
+ {
+ "$ref": "RegularExpression"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Return only folders whose name is matched by the provided string or regular expression.",
+ "optional": true
+ },
+ "path": {
+ "choices": [
+ {
+ "$ref": "RegularExpression"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Return only folders whose path is matched by the provided string or regular expression.",
+ "optional": true
+ },
+ "recent": {
+ "description": "Whether the folder (excluding subfolders) has been used within the last month, or not. The returned folders will be sorted by their recentness.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "specialUse": {
+ "description": "Match only folders with the specified special use (folders have to match all specified uses).",
+ "items": {
+ "$ref": "folders.MailFolderSpecialUse"
+ },
+ "minItems": 1,
+ "optional": true,
+ "type": "array"
+ },
+ "type": {
+ "$ref": "folders.MailFolderSpecialUse",
+ "description": "Deprecated. Match only folders with the specified special use.",
+ "max_manifest_version": 2,
+ "optional": true
+ }
+ },
+ "type": "object"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "items": {
+ "$ref": "folders.MailFolder"
+ },
+ "type": "array"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Returns the specified folder.",
+ "name": "get",
+ "parameters": [
+ {
+ "$ref": "folders.MailFolderId",
+ "name": "folder"
+ },
+ {
+ "default": true,
+ "description": "Specifies whether the returned :ref:`folders.MailFolder` object should include all its nested subfolders . Defaults to <value>true</value>.",
+ "name": "includeSubFolders",
+ "optional": true,
+ "type": "boolean"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "folders.MailFolder"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
"description": "Creates a new subfolder in the specified folder or at the root of the specified account.",
"name": "create",
"parameters": [
{
"choices": [
{
- "$ref": "folders.MailFolder"
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.create() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
},
{
- "$ref": "accounts.MailAccount"
+ "$ref": "accounts.MailAccount",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.create() requires to specify the MailFolderId of the account's rootFolder, instead of a full MailAccount object.",
+ "max_manifest_version": 2
}
],
- "name": "parent"
+ "name": "destination"
},
{
"name": "childName",
@@ -9057,7 +9675,16 @@
"name": "rename",
"parameters": [
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.rename() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"name": "folder"
},
{
@@ -9082,20 +9709,36 @@
},
{
"async": "callback",
- "description": "Moves the given ``sourceFolder`` into the given ``destination``. Throws if the destination already contains a folder with the name of the source folder.",
+ "description": "Moves the given source folder into the given destination folder. Throws if the destination already contains a folder with the name of the source folder.",
"name": "move",
"parameters": [
{
- "$ref": "folders.MailFolder",
- "name": "sourceFolder"
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.move() requires to specify a MailFolderId for its source parameter, instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "name": "source"
},
{
"choices": [
{
- "$ref": "folders.MailFolder"
+ "$ref": "folders.MailFolderId"
},
{
- "$ref": "accounts.MailAccount"
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.move() requires to specify a MailFolderId for its destination parameter, instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ },
+ {
+ "$ref": "accounts.MailAccount",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.move() requires to specify the MailFolderId of the account's rootFolder for its destination parameter, instead of a full MailAccount object.",
+ "max_manifest_version": 2
}
],
"name": "destination"
@@ -9118,20 +9761,36 @@
},
{
"async": "callback",
- "description": "Copies the given ``sourceFolder`` into the given ``destination``. Throws if the destination already contains a folder with the name of the source folder.",
+ "description": "Copies the given source folder into the given destination folder. Throws if the destination already contains a folder with the name of the source folder.",
"name": "copy",
"parameters": [
{
- "$ref": "folders.MailFolder",
- "name": "sourceFolder"
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.copy() requires to specify a MailFolderId for its source parameter, instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "name": "source"
},
{
"choices": [
{
- "$ref": "folders.MailFolder"
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.copy() requires to specify a MailFolderId for its destination parameter, instead of a full MailFolder object.",
+ "max_manifest_version": 2
},
{
- "$ref": "accounts.MailAccount"
+ "$ref": "accounts.MailAccount",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.copy() requires to specify the MailFolderId of the account's rootFolder for its destination parameter, instead of a full MailAccount object.",
+ "max_manifest_version": 2
}
],
"name": "destination"
@@ -9158,7 +9817,16 @@
"name": "delete",
"parameters": [
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.delete() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"name": "folder"
}
],
@@ -9169,12 +9837,57 @@
"type": "function"
},
{
+ "async": true,
+ "description": "Updates properties of a folder.",
+ "name": "update",
+ "parameters": [
+ {
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.update() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "name": "folder"
+ },
+ {
+ "description": "The properties to update.",
+ "name": "updateProperties",
+ "properties": {
+ "isFavorite": {
+ "description": "Sets or clears the favorite status.",
+ "optional": true,
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "permissions": [
+ "accountsFolders"
+ ],
+ "type": "function"
+ },
+ {
"async": "callback",
- "description": "Get additional information about a mail folder.",
+ "description": "Get additional information about a folder.",
"name": "getFolderInfo",
"parameters": [
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.getFolderInfo() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"name": "folder"
},
{
@@ -9192,11 +9905,51 @@
},
{
"async": "callback",
+ "description": "Get capability information about a folder.",
+ "name": "getFolderCapabilities",
+ "parameters": [
+ {
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.getFolderCapabilities() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "name": "folder"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "folders.MailFolderCapabilities"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
"description": "Get all parent folders as a flat ordered array. The first array entry is the direct parent.",
"name": "getParentFolders",
"parameters": [
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.getParentFolders() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"name": "folder"
},
{
@@ -9230,13 +9983,20 @@
{
"choices": [
{
- "$ref": "folders.MailFolder"
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.getSubFolders() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
},
{
- "$ref": "accounts.MailAccount"
+ "$ref": "accounts.MailAccount",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.getSubFolders() requires to specify the MailFolderId of the account's rootFolder, instead of a full MailAccount object.",
+ "max_manifest_version": 2
}
],
- "name": "folderOrAccount"
+ "name": "folder"
},
{
"default": true,
@@ -9260,21 +10020,76 @@
}
],
"type": "function"
+ },
+ {
+ "async": false,
+ "description": "Marks all messages in a folder as read.",
+ "name": "markAsRead",
+ "parameters": [
+ {
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: folders.markAsRead() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "name": "folder"
+ }
+ ],
+ "permissions": [
+ "accountsFolders"
+ ],
+ "type": "function"
}
],
"namespace": "folders",
"permissions": [
"accountsRead"
],
- "properties": {},
+ "properties": {
+ "DEFAULT_MOST_RECENT_LIMIT": {
+ "description": "The number of most recent folders used in Thunderbird's UI. Controled by the <value>mail.folder_widget.max_recent</value> preference.",
+ "value": -1
+ }
+ },
"types": [
{
- "description": "An object describing a mail folder, as returned for example by the :ref:`folders.getParentFolders` or :ref:`folders.getSubFolders` methods, or part of a :ref:`accounts.MailAccount` object, which is returned for example by the :ref:`accounts.list` and :ref:`accounts.get` methods. The ``subFolders`` property is only included if requested.",
+ "description": "An object describing a folder. The ``subFolders`` property is only included if requested.",
"id": "MailFolder",
"properties": {
"accountId": {
- "description": "The account this folder belongs to.",
- "type": "string"
+ "$ref": "accounts.MailAccountId",
+ "description": "The id of the account this folder belongs to.",
+ "optional": true
+ },
+ "id": {
+ "$ref": "folders.MailFolderId",
+ "description": "An identifier for the folder.",
+ "optional": true
+ },
+ "isFavorite": {
+ "description": "Whether this folder is a favorite folder.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isRoot": {
+ "description": "Whether this folder is a root folder.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isUnified": {
+ "description": "Whether this folder is a unified mailbox folder.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isVirtual": {
+ "description": "Whether this folder is a virtual search folder.",
+ "optional": true,
+ "type": "boolean"
},
"name": {
"description": "The human-friendly name of this folder.",
@@ -9285,41 +10100,64 @@
"description": "Path to this folder in the account. Although paths look predictable, never guess a folder's path, as there are a number of reasons why it may not be what you think it is. Use :ref:`folders.getParentFolders` or :ref:`folders.getSubFolders` to obtain hierarchy information.",
"type": "string"
},
+ "specialUse": {
+ "description": "The special use of this folder. A folder can have multiple special uses.",
+ "items": {
+ "$ref": "folders.MailFolderSpecialUse"
+ },
+ "optional": true,
+ "type": "array"
+ },
"subFolders": {
"description": "Subfolders are only included if requested. They will be returned in the same order as used in Thunderbird's folder pane.",
"items": {
- "$ref": "MailFolder"
+ "$ref": "folders.MailFolder"
},
"optional": true,
"type": "array"
},
"type": {
- "description": "The type of folder, for several common types.",
- "enum": [
- "inbox",
- "drafts",
- "sent",
- "trash",
- "templates",
- "archives",
- "junk",
- "outbox"
- ],
- "optional": true,
- "type": "string"
+ "$ref": "folders.MailFolderSpecialUse",
+ "description": "Deprecated. Was used to represent the type of this folder.",
+ "max_manifest_version": 2,
+ "optional": true
}
},
"type": "object"
},
{
- "description": "An object containing additional information about a mail folder.",
+ "description": "A unique id representing a :ref:`folders.MailFolder` throughout a session. Renaming or moving a folder will invalidate its id.",
+ "id": "MailFolderId",
+ "type": "string"
+ },
+ {
+ "description": "An object containing additional information about a folder.",
"id": "MailFolderInfo",
"properties": {
"favorite": {
- "description": "Whether this folder is a favorite folder.",
+ "description": "Deprecated. This information is now available in :ref:`folders.MailFolder`.",
+ "max_manifest_version": 2,
"optional": true,
"type": "boolean"
},
+ "lastUsed": {
+ "$ref": "extensionTypes.Date",
+ "description": "Date the folder was last used (precision: seconds).",
+ "optional": true
+ },
+ "newMessageCount": {
+ "description": "Number of new messages in this folder.",
+ "optional": true,
+ "type": "integer"
+ },
+ "quota": {
+ "description": "Quota information, if available.",
+ "items": {
+ "$ref": "MailFolderQuota"
+ },
+ "optional": true,
+ "type": "array"
+ },
"totalMessageCount": {
"description": "Number of messages in this folder.",
"optional": true,
@@ -9332,6 +10170,113 @@
}
},
"type": "object"
+ },
+ {
+ "description": "An object containing capability information about a folder.",
+ "id": "MailFolderCapabilities",
+ "properties": {
+ "canAddMessages": {
+ "description": "Whether this folder supports adding new messages.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canAddSubfolders": {
+ "description": "Whether this folder supports adding new subfolders.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canBeDeleted": {
+ "description": "Whether this folder can be deleted.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canBeRenamed": {
+ "description": "Whether this folder can be renamed.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "canDeleteMessages": {
+ "description": "Whether this folder supports deleting messages.",
+ "optional": true,
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "description": "Supported values for the special use of a folder.",
+ "enum": [
+ "inbox",
+ "drafts",
+ "sent",
+ "trash",
+ "templates",
+ "archives",
+ "junk",
+ "outbox"
+ ],
+ "id": "MailFolderSpecialUse",
+ "type": "string"
+ },
+ {
+ "description": "An object containing quota information.",
+ "id": "MailFolderQuota",
+ "properties": {
+ "limit": {
+ "description": "The maximum available quota.",
+ "type": "integer"
+ },
+ "type": {
+ "description": "The type of the quota as defined by RFC2087. A <value>STORAGE</value> quota is constraining the available storage in bytes, a <value>MESSAGE</value> quota is constraining the number of storable messages.",
+ "enum": [
+ "STORAGE",
+ "MESSAGE"
+ ],
+ "type": "string"
+ },
+ "unused": {
+ "description": "The currently unused quota.",
+ "type": "integer"
+ },
+ "used": {
+ "description": "The currently used quota.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "description": "An object defining a range.",
+ "id": "QueryRange",
+ "properties": {
+ "max": {
+ "description": "The maximum value required to match the query.",
+ "optional": true,
+ "type": "integer"
+ },
+ "min": {
+ "description": "The minimum value required to match the query.",
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "id": "RegularExpression",
+ "properties": {
+ "flags": {
+ "description": "Supported RegExp flags: <value>i</value> = case insensitive, and/or one of <value>u</value> = unicode support or <value>v</value> = extended unicode support",
+ "optional": true,
+ "pattern": "^(i|u|v|iu|iv|ui|vi)$",
+ "type": "string"
+ },
+ "regexp": {
+ "description": "A regular expression, for example <value>^Projects \\d{4}$</value>.",
+ "type": "string"
+ }
+ },
+ "type": "object"
}
]
},
@@ -9510,9 +10455,9 @@
"name": "list",
"parameters": [
{
+ "$ref": "accounts.MailAccountId",
"name": "accountId",
- "optional": true,
- "type": "string"
+ "optional": true
},
{
"name": "callback",
@@ -9560,8 +10505,8 @@
"name": "create",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "accounts.MailAccountId",
+ "name": "accountId"
},
{
"$ref": "identities.MailIdentity",
@@ -9633,8 +10578,8 @@
"name": "getDefault",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "accounts.MailAccountId",
+ "name": "accountId"
},
{
"converterPromiseOptionalNull": true,
@@ -9656,8 +10601,8 @@
"name": "setDefault",
"parameters": [
{
- "name": "accountId",
- "type": "string"
+ "$ref": "accounts.MailAccountId",
+ "name": "accountId"
},
{
"name": "identityId",
@@ -9677,9 +10622,9 @@
"id": "MailIdentity",
"properties": {
"accountId": {
+ "$ref": "accounts.MailAccountId",
"description": "The id of the :ref:`accounts.MailAccount` this identity belongs to. The ``accountId`` property is read-only.",
- "optional": true,
- "type": "string"
+ "optional": true
},
"composeHtml": {
"description": "If the identity uses HTML as the default compose format.",
@@ -10077,7 +11022,9 @@
"name": "query",
"parameters": [
{
+ "default": {},
"name": "queryInfo",
+ "optional": true,
"properties": {
"active": {
"description": "Whether the tabs are active in their windows.",
@@ -10163,7 +11110,34 @@
"type": "function"
},
{
- "async": true,
+ "async": "callback",
+ "description": "Creates a new mail tab. Standard tab properties can be adjusted via :ref:`tabs.update` after the mail tab has been created. **Note:** A new mail window can be created via :ref:`windows.create`.",
+ "name": "create",
+ "parameters": [
+ {
+ "$ref": "MailTabProperties",
+ "default": {},
+ "name": "createProperties",
+ "optional": true
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "MailTab",
+ "description": "Details about the created mail tab. Will contain the ID of the new tab.",
+ "name": "mailTab",
+ "optional": true
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
"description": "Modifies the properties of a mail tab. Properties that are not specified in ``updateProperties`` are not modified.",
"name": "update",
"parameters": [
@@ -10175,83 +11149,51 @@
"type": "integer"
},
{
- "name": "updateProperties",
- "properties": {
- "displayedFolder": {
- "$ref": "folders.MailFolder",
- "description": "Sets the folder displayed in the tab. The extension must have the <permission>accountsRead</permission> permission to do this.",
+ "$ref": "MailTabProperties",
+ "name": "updateProperties"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "MailTab",
+ "description": "Details about the updated mail tab.",
+ "name": "mailTab",
"optional": true
- },
- "folderPaneVisible": {
- "description": "Shows or hides the folder pane.",
- "optional": true,
- "type": "boolean"
- },
- "layout": {
- "description": "Sets the arrangement of the folder pane, message list pane, and message display pane. Note that setting this applies it to all mail tabs.",
- "enum": [
- "standard",
- "wide",
- "vertical"
- ],
- "optional": true,
- "type": "string"
- },
- "messagePaneVisible": {
- "description": "Shows or hides the message display pane.",
- "optional": true,
- "type": "boolean"
- },
- "sortOrder": {
- "description": "Sorts the list of messages. ``sortType`` must also be given.",
- "enum": [
- "none",
- "ascending",
- "descending"
- ],
- "optional": true,
- "type": "string"
- },
- "sortType": {
- "description": "Sorts the list of messages. ``sortOrder`` must also be given.",
- "enum": [
- "none",
- "date",
- "subject",
- "author",
- "id",
- "thread",
- "priority",
- "status",
- "size",
- "flagged",
- "unread",
- "recipient",
- "location",
- "tags",
- "junkStatus",
- "attachments",
- "account",
- "custom",
- "received",
- "correspondent"
- ],
- "optional": true,
- "type": "string"
- },
- "viewType": {
- "enum": [
- "ungrouped",
- "groupedByThread",
- "groupedBySortType"
- ],
- "optional": true,
- "type": "string"
}
- },
- "type": "object"
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Lists the messages in the current view, honoring sort order and filters.",
+ "name": "getListedMessages",
+ "parameters": [
+ {
+ "description": "Defaults to the active tab of the current window.",
+ "minimum": 1,
+ "name": "tabId",
+ "optional": true,
+ "type": "integer"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "messages.MessageList"
+ }
+ ],
+ "type": "function"
}
],
+ "permissions": [
+ "messagesRead"
+ ],
"type": "function"
},
{
@@ -10295,9 +11237,9 @@
"type": "integer"
},
{
- "description": "The IDs of the messages, which should be selected. The mailTab will switch to the folder of the selected messages. Throws if they belong to different folders. Array can be empty to deselect any currently selected message.",
+ "description": "The IDs of the messages, which should be selected. The mail tab will switch to the folder of the selected messages. Throws if they belong to different folders. Array can be empty to deselect any currently selected message.",
"items": {
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"name": "messageIds",
"type": "array"
@@ -10350,7 +11292,7 @@
"type": "boolean"
},
{
- "$ref": "messages.TagsDetail"
+ "$ref": "messages.tags.TagsDetail"
}
],
"description": "Shows only messages with tags on them.",
@@ -10460,6 +11402,92 @@
"type": "object"
},
{
+ "id": "MailTabProperties",
+ "properties": {
+ "displayedFolder": {
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: MailTabProperties.displayedFolder needs to be specified as a MailFolderId instead of as a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
+ "description": "Sets the folder displayed in the mail tab. Requires the <permission>accountsRead</permission> permission. The previous message selection in the given folder will be restored, if any. This property is ignored, if <value>selectedMessages</value> is specified.",
+ "optional": true
+ },
+ "folderPaneVisible": {
+ "description": "Shows or hides the folder pane.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "layout": {
+ "description": "Sets the arrangement of the folder pane, message list pane, and message display pane. Note that setting this applies it to all mail tabs.",
+ "enum": [
+ "standard",
+ "wide",
+ "vertical"
+ ],
+ "optional": true,
+ "type": "string"
+ },
+ "messagePaneVisible": {
+ "description": "Shows or hides the message display pane.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "sortOrder": {
+ "description": "Sorts the list of messages. ``sortType`` must also be given.",
+ "enum": [
+ "none",
+ "ascending",
+ "descending"
+ ],
+ "optional": true,
+ "type": "string"
+ },
+ "sortType": {
+ "description": "Sorts the list of messages. ``sortOrder`` must also be given.",
+ "enum": [
+ "none",
+ "date",
+ "subject",
+ "author",
+ "id",
+ "thread",
+ "priority",
+ "status",
+ "size",
+ "flagged",
+ "unread",
+ "recipient",
+ "location",
+ "tags",
+ "junkStatus",
+ "attachments",
+ "account",
+ "custom",
+ "received",
+ "correspondent"
+ ],
+ "optional": true,
+ "type": "string"
+ },
+ "viewType": {
+ "enum": [
+ "ungrouped",
+ "groupedByThread",
+ "groupedBySortType"
+ ],
+ "optional": true,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
"id": "QuickFilterTextDetail",
"properties": {
"author": {
@@ -11185,7 +12213,7 @@
"content",
"devtools"
],
- "description": "The menus API allows to add items to Thunderbirds menus. You can choose what types of objects your context menu additions apply to, such as images, hyperlinks, and pages.",
+ "description": "The menus API allows to add items to Thunderbird's menus. You can choose what types of objects your context menu additions apply to, such as images, hyperlinks, and pages.",
"docURL": "https://webextension-api.thunderbird.net/en/latest/menus.html",
"events": [
{
@@ -11244,9 +12272,19 @@
"type": "boolean"
},
"command": {
- "description": "Specifies a command to issue for the context click. Currently supports internal commands <value>_execute_browser_action</value>, <value>_execute_compose_action</value> and <value>_execute_message_display_action</value>.",
- "optional": true,
- "type": "string"
+ "choices": [
+ {
+ "description": "Specifies a command to issue for the context click. Currently supports internal commands <value>_execute_browser_action</value>, <value>_execute_compose_action</value> and <value>_execute_message_display_action</value>.",
+ "max_manifest_version": 2,
+ "type": "string"
+ },
+ {
+ "description": "Specifies a command to issue for the context click. Currently supports internal commands <value>_execute_action</value>, <value>_execute_compose_action</value> and <value>_execute_message_display_action</value>.",
+ "min_manifest_version": 3,
+ "type": "string"
+ }
+ ],
+ "optional": true
},
"contexts": {
"description": "List of contexts this menu item will appear in. Defaults to <value>['page']</value> if not specified.",
@@ -11271,7 +12309,14 @@
"type": "boolean"
},
"icons": {
- "$ref": "manifest.IconPath",
+ "choices": [
+ {
+ "$ref": "MenuIconPath"
+ },
+ {
+ "$ref": "MenuIconDictionary"
+ }
+ ],
"description": "Custom icons to display next to the menu item. Custom icons can only be set for items appearing in submenus.",
"optional": true
},
@@ -11410,7 +12455,14 @@
"type": "boolean"
},
"icons": {
- "$ref": "manifest.IconPath",
+ "choices": [
+ {
+ "$ref": "MenuIconPath"
+ },
+ {
+ "$ref": "MenuIconDictionary"
+ }
+ ],
"optional": "omit-key-if-missing"
},
"onclick": {
@@ -11604,31 +12656,53 @@
},
"types": [
{
- "description": "The different contexts a menu can appear in. Specifying <value>all</value> is equivalent to the combination of all other contexts excluding <value>tab</value> and <value>tools_menu</value>. More information about each context can be found in the `Supported UI Elements <|link-ui-elements|>`__ article on developer.thunderbird.net.",
- "enum": [
- "all",
- "page",
- "frame",
- "selection",
- "link",
- "editable",
- "password",
- "image",
- "video",
- "audio",
- "browser_action",
- "compose_action",
- "message_display_action",
- "tab",
- "message_list",
- "folder_pane",
- "compose_attachments",
- "message_attachments",
- "all_message_attachments",
- "tools_menu"
+ "choices": [
+ {
+ "enum": [
+ "all",
+ "all_message_attachments",
+ "audio",
+ "compose_action",
+ "compose_action_menu",
+ "compose_attachments",
+ "compose_body",
+ "editable",
+ "folder_pane",
+ "frame",
+ "image",
+ "link",
+ "message_attachments",
+ "message_display_action",
+ "message_display_action_menu",
+ "message_list",
+ "page",
+ "password",
+ "selection",
+ "tab",
+ "tools_menu",
+ "video"
+ ],
+ "type": "string"
+ },
+ {
+ "enum": [
+ "browser_action",
+ "browser_action_menu"
+ ],
+ "max_manifest_version": 2,
+ "type": "string"
+ },
+ {
+ "enum": [
+ "action",
+ "action_menu"
+ ],
+ "min_manifest_version": 3,
+ "type": "string"
+ }
],
- "id": "ContextType",
- "type": "string"
+ "description": "The different contexts a menu can appear in. Specifying <value>all</value> is equivalent to the combination of all other contexts excluding <value>tab</value> and <value>tools_menu</value>. More information about each context can be found in the `Supported UI Elements <|link-ui-elements|>`__ article on developer.thunderbird.net.",
+ "id": "ContextType"
},
{
"description": "The type of menu item.",
@@ -11927,6 +13001,30 @@
}
},
"type": "object"
+ },
+ {
+ "choices": [
+ {
+ "format": "imageDataOrStrictRelativeUrl",
+ "type": "string"
+ },
+ {
+ "pattern": "^(moz-extension|blob|http|https):.*$",
+ "type": "string"
+ }
+ ],
+ "description": "Either a <em>string</em> to specify a single icon path to be used for all sizes, or a \n <em>dictionary object</em> to specify paths for multiple icons in different sizes, so the\n icon does not have to be scaled for a device with a different pixel density. Each entry is a\n <em>name-value</em> pair with <em>name</em> being a size and <em>value</em> being a path\n to the icon for the specified size.\n Example: <literalinclude>includes/MenuIconPath.json<lang>JSON</lang></literalinclude>\n \n See the [MDN documentation about choosing icon sizes](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action#choosing_icon_sizes)\n for more information on this.",
+ "id": "MenuIconPath"
+ },
+ {
+ "description": "A <em>dictionary object</em> to specify paths for multiple icons in different sizes,\n so the best matching icon can be used, instead of scaling a standard icon to fit the\n pixel density of the user's display. Each entry is a <em>name-value</em> pair, with\n <em>name</em> being a size and <em>value</em> being a :ref:`menus.MenuIconPath`.\n Example: <literalinclude>includes/IconPath.json<lang>JSON</lang></literalinclude>\n \n See the [MDN documentation about choosing icon sizes](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action#choosing_icon_sizes) for more information on this.",
+ "id": "MenuIconDictionary",
+ "patternProperties": {
+ "^[1-9]\\d*$": {
+ "$ref": "MenuIconPath"
+ }
+ },
+ "type": "object"
}
]
},
@@ -12032,7 +13130,7 @@
"name": "open",
"parameters": [
{
- "description": "Settings for opening the message. Exactly one of messageId or headerMessageId must be specified.",
+ "description": "Settings for opening the message. Exactly one of messageId, headerMessageId or file must be specified.",
"name": "openProperties",
"properties": {
"active": {
@@ -12040,13 +13138,20 @@
"optional": true,
"type": "boolean"
},
+ "file": {
+ "additionalProperties": true,
+ "description": "The DOM file object of a message to be opened.",
+ "isInstanceOf": "File",
+ "optional": true,
+ "type": "object"
+ },
"headerMessageId": {
"description": "The headerMessageId of a message to be opened. Will throw an <em>ExtensionError</em>, if the provided ``headerMessageId`` is unknown or invalid. Not supported for external messages.",
"optional": true,
"type": "string"
},
"location": {
- "description": "Where to open the message. If not specified, the users preference is honoured. Ignored for external messages, which are always opened in a new window.",
+ "description": "Where to open the message. If not specified, the users preference is honoured.",
"enum": [
"tab",
"window"
@@ -12055,10 +13160,9 @@
"type": "string"
},
"messageId": {
+ "$ref": "messages.MessageId",
"description": "The id of a message to be opened. Will throw an <em>ExtensionError</em>, if the provided ``messageId`` is unknown or invalid.",
- "minimum": 1,
- "optional": true,
- "type": "integer"
+ "optional": true
},
"windowId": {
"description": "The id of the window, where the new tab should be created. Defaults to the current window. Only applicable to messages opened in tabs.",
@@ -12267,6 +13371,7 @@
"parameters": [
{
"name": "result",
+ "optional": true,
"type": "string"
}
],
@@ -12573,7 +13678,7 @@
},
{
"async": "callback",
- "description": "Enables the messageDisplayAction button for a tab. By default, a messageDisplayAction button is enabled.",
+ "description": "Enables the messageDisplayAction button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well. By default, a messageDisplayAction button is enabled.",
"name": "enable",
"parameters": [
{
@@ -12594,7 +13699,7 @@
},
{
"async": "callback",
- "description": "Disables the messageDisplayAction button for a tab.",
+ "description": "Disables the messageDisplayAction button for a specific tab (if a ``tabId`` is provided), or for all tabs which do not have a custom enable state. Once the enable state of a tab has been updated individually, all further changes to its state have to be done individually as well.",
"name": "disable",
"parameters": [
{
@@ -12651,11 +13756,35 @@
"type": "function"
},
{
- "async": true,
- "description": "Opens the action's popup window in the active window.",
+ "async": "callback",
+ "description": "Opens the action's popup window in the specified window. Defaults to the current window. Returns false if the popup could not be opened because the action has no popup, is of type <value>menu</value>, is disabled or has been removed from the toolbar.",
"name": "openPopup",
- "parameters": [],
- "requireUserInput": true,
+ "parameters": [
+ {
+ "description": "An object with information about the popup to open.",
+ "name": "options",
+ "optional": true,
+ "properties": {
+ "windowId": {
+ "description": "Defaults to the current window.",
+ "minimum": -2,
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "boolean"
+ }
+ ],
+ "type": "function"
+ }
+ ],
"type": "function"
}
],
@@ -12732,7 +13861,7 @@
"functions": [
{
"async": true,
- "description": "Register a message display script programmatically",
+ "description": "Register a message display script programmatically. **Note:** Registered scripts will only be applied to newly opened messages. To apply the script to already open messages, manually inject your script by calling :ref:`tabs.executeScript` for each of the open <value>messageDisplay</value> tabs.",
"name": "register",
"parameters": [
{
@@ -12768,6 +13897,17 @@
},
"optional": true,
"type": "array"
+ },
+ "runAt": {
+ "default": "document_idle",
+ "description": "Determines when the files specified in css and js are injected. The states directly correspond to <code>Document.readyState</code>: <value>loading</value>, <value>interactive</value> and <value>complete</value>",
+ "enum": [
+ "document_start",
+ "document_end",
+ "document_idle"
+ ],
+ "optional": true,
+ "type": "string"
}
},
"type": "object"
@@ -12859,6 +13999,14 @@
},
{
"description": "Fired when a new message is received, and has been through junk classification and message filters.",
+ "extraParameters": [
+ {
+ "description": "Monitor all folders (including all special use folders as defined by :ref:`folders.MailFolderSpecialUse`) instead of just inbox folders and normal folders.",
+ "name": "monitorAllFolders",
+ "optional": true,
+ "type": "boolean"
+ }
+ ],
"name": "onNewMailReceived",
"parameters": [
{
@@ -12883,7 +14031,16 @@
"name": "list",
"parameters": [
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: messages.list() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"name": "folder"
},
{
@@ -12891,7 +14048,7 @@
"optional": true,
"parameters": [
{
- "$ref": "MessageList"
+ "$ref": "messages.MessageList"
}
],
"type": "function"
@@ -12904,7 +14061,7 @@
},
{
"async": "callback",
- "description": "Returns the next chunk of messages in a list. See :doc:`how-to/messageLists` for more information.",
+ "description": "Returns the next chunk of messages in a list. See :doc:`examples/messageLists` for more information.",
"name": "continueList",
"parameters": [
{
@@ -12916,7 +14073,7 @@
"optional": true,
"parameters": [
{
- "$ref": "MessageList"
+ "$ref": "messages.MessageList"
}
],
"type": "function"
@@ -12925,13 +14082,25 @@
"type": "function"
},
{
+ "async": true,
+ "description": "Finalizes the specified list and terminates any process currently still adding messages.",
+ "name": "abortList",
+ "parameters": [
+ {
+ "name": "messageListId",
+ "type": "string"
+ }
+ ],
+ "type": "function"
+ },
+ {
"async": "callback",
- "description": "Returns a specified message.",
+ "description": "Returns the specified message.",
"name": "get",
"parameters": [
{
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
},
{
"name": "callback",
@@ -12948,12 +14117,24 @@
},
{
"async": "callback",
- "description": "Returns a specified message, including all headers and MIME parts. Throws if the message could not be read, for example due to network issues.",
+ "description": "Returns the specified message, including all headers and MIME parts. Throws if the message could not be read, for example due to network issues.",
"name": "getFull",
"parameters": [
{
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
+ },
+ {
+ "name": "options",
+ "optional": true,
+ "properties": {
+ "decrypt": {
+ "description": "Whether the message should be decrypted. If the message could not be decrypted, its parts are omitted. Defaults to true.",
+ "optional": true,
+ "type": "boolean"
+ }
+ },
+ "type": "object"
},
{
"name": "callback",
@@ -12970,19 +14151,63 @@
},
{
"async": "callback",
- "description": "Returns the unmodified source of a message as a `binary string <|link-binary-string|>`__, which is a simple series of 8-bit values. Throws if the message could not be read, for example due to network issues. If the message contains non-ASCII characters, the body parts in the binary string cannot be read directly and must be decoded according to their character sets. Use :ref:`messages.getFull` to get the correctly decoded parts. Manually decoding the raw message is probably too error-prone, especially if the message contains MIME parts with different character set encodings or attachments.\n\nTo get a readable version of the raw message as it appears in Thunderbird's message source view, it may be sufficient to decode the message according to the character set specified in its main `content-type <|link-content-type|>`__ header (example: <value>text/html; charset=UTF-8</value>) using the following function (see MDN for `supported input encodings <|link-input-encoding|>`__): <literalinclude>includes/messages/decodeBinaryString.js<lang>JavaScript</lang></literalinclude>",
+ "description": "Returns the unmodified source of a message. Throws if the message could not be read, for example due to network issues.",
"name": "getRaw",
"parameters": [
{
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
+ },
+ {
+ "name": "options",
+ "optional": true,
+ "properties": {
+ "data_format": {
+ "choices": [
+ {
+ "description": "The message can either be returned as a DOM File or as a `binary string <|link-binary-string|>`__. The historic default is to return a binary string (kept for backward compatibility). However, it is now recommended to use the ``File`` format, because the DOM File object can be used as-is with the downloads API and has useful methods to access the content, like `File.text() <|link-DOMFile-text|>`__ and `File.arrayBuffer() <|link-DOMFile-arrayBuffer|>`__. Working with binary strings is error prone and needs special handling: <literalinclude>includes/messages/decodeBinaryString.js<lang>JavaScript</lang></literalinclude> (see MDN for `supported input encodings <|link-input-encoding|>`__).",
+ "enum": [
+ "File",
+ "BinaryString"
+ ],
+ "max_manifest_version": 2,
+ "type": "string"
+ },
+ {
+ "description": "The message can either be returned as a DOM File (default) or as a `binary string <|link-binary-string|>`__. It is recommended to use the ``File`` format, because the DOM File object can be used as-is with the downloads API and has useful methods to access the content, like `File.text() <|link-DOMFile-text|>`__ and `File.arrayBuffer() <|link-DOMFile-arrayBuffer|>`__. Working with binary strings is error prone and needs special handling: <literalinclude>includes/messages/decodeBinaryString.js<lang>JavaScript</lang></literalinclude> (see MDN for `supported input encodings <|link-input-encoding|>`__).",
+ "enum": [
+ "File",
+ "BinaryString"
+ ],
+ "min_manifest_version": 3,
+ "type": "string"
+ }
+ ],
+ "optional": true
+ },
+ "decrypt": {
+ "description": "Whether the message should be decrypted. Throws, if the message could not be decrypted.",
+ "optional": true,
+ "type": "boolean"
+ }
+ },
+ "type": "object"
},
{
"name": "callback",
"optional": true,
"parameters": [
{
- "type": "string"
+ "choices": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": true,
+ "isInstanceOf": "File",
+ "type": "object"
+ }
+ ]
}
],
"type": "function"
@@ -12996,8 +14221,8 @@
"name": "listAttachments",
"parameters": [
{
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
},
{
"name": "callback",
@@ -13021,8 +14246,8 @@
"name": "getAttachmentFile",
"parameters": [
{
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
},
{
"name": "partName",
@@ -13045,23 +14270,89 @@
"type": "function"
},
{
+ "async": true,
+ "description": "Deletes the specified attachments and replaces them by placeholder text attachments with meta information about the original attachments and a <value>text/x-moz-deleted</value> content type. This permanently modifies the message.",
+ "name": "deleteAttachments",
+ "parameters": [
+ {
+ "name": "messageId",
+ "type": "integer"
+ },
+ {
+ "description": "An array of attachments, identifying the to be deleted attachments by their <value>partName</value>.",
+ "items": {
+ "pattern": "^\\d+(\\.\\d+)*$",
+ "type": "string"
+ },
+ "minItems": 1,
+ "name": "partNames",
+ "type": "array"
+ }
+ ],
+ "permissions": [
+ "messagesModifyPermanent"
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Opens the specified attachment",
+ "name": "openAttachment",
+ "parameters": [
+ {
+ "$ref": "messages.MessageId",
+ "name": "messageId"
+ },
+ {
+ "name": "partName",
+ "pattern": "^\\d+(\\.\\d+)*$",
+ "type": "string"
+ },
+ {
+ "description": "The ID of the tab associated with the message opening.",
+ "name": "tabId",
+ "type": "integer"
+ }
+ ],
+ "type": "function"
+ },
+ {
"async": "callback",
- "description": "Gets all messages that have the specified properties, or all messages if no properties are specified.",
+ "description": "Gets all messages that have the specified properties, or all messages if no properties are specified. Messages of unified mailbox folders are not included by default (as that could double the amount of returned messages), but explicitly specifying a unified mailbox folder is supported.",
"name": "query",
"parameters": [
{
+ "default": {},
"name": "queryInfo",
+ "optional": true,
"properties": {
+ "accountId": {
+ "$ref": "accounts.MailAccountId",
+ "description": "Limits the search to folders of the account with the specified id.",
+ "optional": true
+ },
"attachment": {
- "description": "If specified, returns only messages with or without attachments.",
- "optional": true,
- "type": "boolean"
+ "choices": [
+ {
+ "type": "boolean"
+ },
+ {
+ "$ref": "QueryRange"
+ }
+ ],
+ "description": "Whether the message has attachments, or not. Supports to specify a :ref:`messages.QueryRange` (min/max) instead of a simple boolean value (none/some).",
+ "optional": true
},
"author": {
"description": "Returns only messages with this value matching the author. The search value is a single email address, a name or a combination (e.g.: <value>Name <[email protected]></value>). The address part of the search value (if provided) must match the author's address completely. The name part of the search value (if provided) must match the author's name partially. All matches are done case-insensitive.",
"optional": true,
"type": "string"
},
+ "autoPaginationTimeout": {
+ "description": "Set the timeout in ms after which results should be returned, even if the nominal number of messages-per-page has not yet been reached. Defaults to <value>1000</value> ms. Setting it to <value>0</value> will disable auto-pagination.",
+ "optional": true,
+ "type": "integer"
+ },
"body": {
"description": "Returns only messages with this value in the body of the mail.",
"optional": true,
@@ -13074,7 +14365,14 @@
},
"folder": {
"$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: messages.queryInfo.folder has been replaced by messages.queryInfo.folderId.",
"description": "Returns only messages from the specified folder. The <permission>accountsRead</permission> permission is required.",
+ "max_manifest_version": 2,
+ "optional": true
+ },
+ "folderId": {
+ "$ref": "folders.MailFolderId",
+ "description": "Returns only messages from the folder with the specified id. The <permission>accountsRead</permission> permission is required.",
"optional": true
},
"fromDate": {
@@ -13098,7 +14396,33 @@
"type": "string"
},
"includeSubFolders": {
- "description": "Search the folder specified by ``queryInfo.folder`` recursively.",
+ "description": "Search the specified folder recursively.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "junk": {
+ "description": "Returns only messages whith the specified junk state.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "junkScore": {
+ "$ref": "QueryRange",
+ "description": "Returns only messages with a junk score in the specified range.",
+ "optional": true
+ },
+ "messagesPerPage": {
+ "description": "Set the nominal number of messages-per-page for this query. Defaults to <value>100</value> messages.",
+ "optional": true,
+ "type": "integer"
+ },
+ "new": {
+ "description": "Returns only messages with the specified new state.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "read": {
+ "description": "Returns only messages with the specified read state.",
+ "min_manifest_version": 3,
"optional": true,
"type": "boolean"
},
@@ -13107,14 +14431,24 @@
"optional": true,
"type": "string"
},
+ "returnMessageListId": {
+ "description": "The <em>messageListId</em> is usually returned together with the first page, after some messages have been found. Enabling this option will change the return value of this function and return the <em>messageListId</em> directly.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "size": {
+ "$ref": "QueryRange",
+ "description": "Returns only messages with a size in the specified byte range.",
+ "optional": true
+ },
"subject": {
- "description": "Returns only messages with this value matching the subject.",
+ "description": "Returns only messages whose subject contains the provided string.",
"optional": true,
"type": "string"
},
"tags": {
- "$ref": "TagsDetail",
- "description": "Returns only messages with the specified tags. For a list of available tags, call the :ref:`messages.listTags` method.",
+ "$ref": "messages.tags.TagsDetail",
+ "description": "Returns only messages with the specified tags. For a list of available tags, call the :ref:`messages.tags.list` method.",
"optional": true
},
"toDate": {
@@ -13129,6 +14463,7 @@
},
"unread": {
"description": "Returns only unread (or read if false) messages.",
+ "max_manifest_version": 2,
"optional": true,
"type": "boolean"
}
@@ -13140,7 +14475,14 @@
"optional": true,
"parameters": [
{
- "$ref": "MessageList"
+ "choices": [
+ {
+ "$ref": "messages.MessageList"
+ },
+ {
+ "type": "string"
+ }
+ ]
}
],
"type": "function"
@@ -13150,19 +14492,21 @@
},
{
"async": true,
- "description": "Marks or unmarks a message as junk, read, flagged, or tagged. Updating external messages will throw an <em>ExtensionError</em>.",
+ "description": "Updates message properties and tags. Updating external messages will throw an <em>ExtensionError</em>.",
"name": "update",
"parameters": [
{
- "minimum": 1,
- "name": "messageId",
- "type": "integer"
+ "$ref": "messages.MessageId",
+ "name": "messageId"
},
{
"$ref": "MessageProperties",
"name": "newProperties"
}
],
+ "permissions": [
+ "messagesUpdate"
+ ],
"type": "function"
},
{
@@ -13173,14 +14517,22 @@
{
"description": "The IDs of the messages to move.",
"items": {
- "minimum": 1,
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"name": "messageIds",
"type": "array"
},
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: messages.move() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"description": "The folder to move the messages to.",
"name": "destination"
}
@@ -13199,14 +14551,22 @@
{
"description": "The IDs of the messages to copy.",
"items": {
- "minimum": 1,
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"name": "messageIds",
"type": "array"
},
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: messages.copy() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"description": "The folder to copy the messages to.",
"name": "destination"
}
@@ -13219,14 +14579,13 @@
},
{
"async": true,
- "description": "Deletes messages permanently, or moves them to the trash folder (honoring the account's deletion behavior settings). Deleting external messages will throw an <em>ExtensionError</em>. The ``skipTrash`` parameter allows immediate permanent deletion, bypassing the trash folder.\n**Note**: Consider using :ref:`messages.move` to manually move messages to the account's trash folder, instead of requesting the overly powerful permission to actually delete messages. The account's trash folder can be extracted as follows: <literalinclude>includes/messages/getTrash.js<lang>JavaScript</lang></literalinclude>",
+ "description": "Deletes messages permanently, or moves them to the trash folder (honoring the account's deletion behavior settings). Deleting external messages will throw an <em>ExtensionError</em>. The ``skipTrash`` parameter allows immediate permanent deletion, bypassing the trash folder.",
"name": "delete",
"parameters": [
{
"description": "The IDs of the messages to delete.",
"items": {
- "minimum": 1,
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"name": "messageIds",
"type": "array"
@@ -13255,7 +14614,16 @@
"type": "object"
},
{
- "$ref": "folders.MailFolder",
+ "choices": [
+ {
+ "$ref": "folders.MailFolderId"
+ },
+ {
+ "$ref": "folders.MailFolder",
+ "deprecated": "Support deprecated since Thunderbird 121 and removed in Manifest V3: messages.import() requires to specify a MailFolderId instead of a full MailFolder object.",
+ "max_manifest_version": 2
+ }
+ ],
"description": "The folder to import the messages into.",
"name": "destination"
},
@@ -13289,8 +14657,7 @@
{
"description": "The IDs of the messages to archive.",
"items": {
- "minimum": 1,
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"name": "messageIds",
"type": "array"
@@ -13303,7 +14670,9 @@
},
{
"async": "callback",
+ "deprecated": "Deprecated since Thunderbird 121 and removed in Manifest V3: messages.listTags() is now available as messages.tags.list().",
"description": "Returns a list of tags that can be set on messages, and their human-friendly name, colour, and sort order.",
+ "max_manifest_version": 2,
"name": "listTags",
"parameters": [
{
@@ -13312,7 +14681,7 @@
"parameters": [
{
"items": {
- "$ref": "MessageTag"
+ "$ref": "messages.tags.MessageTag"
},
"type": "array"
}
@@ -13324,13 +14693,15 @@
},
{
"async": true,
+ "deprecated": "Deprecated since Thunderbird 121 and removed in Manifest V3: messages.createTag() is now available as messages.tags.create().",
"description": "Creates a new message tag. Tagging a message will store the tag's key in the user's message. Throws if the specified tag key is used already.",
+ "max_manifest_version": 2,
"name": "createTag",
"parameters": [
{
- "description": "Unique tag identifier (must use only alphanumeric characters).",
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
"name": "key",
- "pattern": "^[$a-zA-Z0-9]+$",
+ "pattern": "^[^ ()/{%*<>\"]+$",
"type": "string"
},
{
@@ -13339,9 +14710,9 @@
"type": "string"
},
{
- "description": "Tag color in hex format (i.e.: #000080 for navy blue)",
+ "description": "Tag color in hex format (i.e.: <value>#000080</value> for navy blue). Value will be stored as upper case.",
"name": "color",
- "pattern": "^#[0-9a-f]{6}",
+ "pattern": "^#[0-9a-fA-F]{6}",
"type": "string"
}
],
@@ -13352,22 +14723,24 @@
},
{
"async": true,
- "description": "Updates a message tag.",
+ "deprecated": "Deprecated since Thunderbird 121 and removed in Manifest V3: messages.updateTag() is now available as messages.tags.update().",
+ "description": "Updates a message tag. Throws if the specified tag key does not exist.",
+ "max_manifest_version": 2,
"name": "updateTag",
"parameters": [
{
- "description": "Unique tag identifier.",
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
"name": "key",
- "pattern": "^[$a-zA-Z0-9]+$",
+ "pattern": "^[^ ()/{%*<>\"]+$",
"type": "string"
},
{
"name": "updateProperties",
"properties": {
"color": {
- "description": "Tag color in hex format (i.e.: #000080 for navy blue).",
+ "description": "Tag color in hex format (i.e.: #000080 for navy blue). Value will be stored as upper case.",
"optional": "true",
- "pattern": "^#[0-9a-f]{6}",
+ "pattern": "^#[0-9a-fA-F]{6}",
"type": "string"
},
"tag": {
@@ -13386,12 +14759,15 @@
},
{
"async": true,
+ "deprecated": "Deprecated since Thunderbird 121 and removed in Manifest V3: messages.deleteTag() is now available as messages.tags.delete().",
"description": "Deletes a message tag, removing it from the list of known tags. Its key will not be removed from tagged messages, but they will appear untagged. Recreating a deleted tag, will make all former tagged messages appear tagged again.",
+ "max_manifest_version": 2,
"name": "deleteTag",
"parameters": [
{
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
"name": "key",
- "pattern": "^[$a-zA-Z0-9]+$",
+ "pattern": "^[^ ()/{%*<>\"]+$",
"type": "string"
}
],
@@ -13408,6 +14784,12 @@
"properties": {},
"types": [
{
+ "description": "A unique id representing a :ref:`messages.MessageHeader` and the associated message. This id doesn’t refer to the Message-ID email header. It is an internal tracking number that does not remain after a restart. Nor does it follow an email that has been moved to a different folder.",
+ "id": "MessageId",
+ "minimum": 1,
+ "type": "integer"
+ },
+ {
"description": "Basic information about a message.",
"id": "MessageHeader",
"properties": {
@@ -13453,8 +14835,7 @@
"type": "boolean"
},
"id": {
- "minimum": 1,
- "type": "integer"
+ "$ref": "messages.MessageId"
},
"junk": {
"description": "Whether the message has been marked as junk. Always <value>false</value> for news/nntp messages and external messages.",
@@ -13491,7 +14872,7 @@
"type": "string"
},
"tags": {
- "description": "Tags associated with this message. For a list of available tags, call the listTags method.",
+ "description": "Tags associated with this message. For a list of available tags, use :ref:`messages.tags.list`.",
"items": {
"type": "string"
},
@@ -13501,7 +14882,7 @@
"type": "object"
},
{
- "description": "See :doc:`how-to/messageLists` for more information.",
+ "description": "See :doc:`examples/messageLists` for more information.",
"id": "MessageList",
"properties": {
"id": {
@@ -13530,6 +14911,17 @@
"optional": true,
"type": "string"
},
+ "decryptionStatus": {
+ "description": "The decryption status, only available for the root part.",
+ "enum": [
+ "none",
+ "skipped",
+ "success",
+ "fail"
+ ],
+ "optional": true,
+ "type": "string"
+ },
"headers": {
"additionalProperties": {
"items": {
@@ -13537,7 +14929,7 @@
},
"type": "array"
},
- "description": "A <em>dictionary object</em> of part headers as <em>key-value</em> pairs, with the header name as <em>key</em>, and an array of headers as <em>value</em>",
+ "description": "A <em>dictionary object</em> of part headers as <em>key-value</em> pairs, with the header name as <em>key</em>, and an array of headers as <em>value</em>.",
"optional": true,
"type": "object"
},
@@ -13592,7 +14984,7 @@
"type": "boolean"
},
"tags": {
- "description": "Tags associated with this message. For a list of available tags, call the listTags method.",
+ "description": "Tags associated with this message. For a list of available tags, call the :ref:`messages.tags.list` method.",
"items": {
"type": "string"
},
@@ -13603,6 +14995,166 @@
"type": "object"
},
{
+ "description": "Represents an attachment in a message.",
+ "id": "MessageAttachment",
+ "properties": {
+ "contentType": {
+ "description": "The content type of the attachment. A value of <value>text/x-moz-deleted</value> indicates that the original attachment was permanently deleted and replaced by a placeholder text attachment with some meta information about the original attachment.",
+ "type": "string"
+ },
+ "message": {
+ "$ref": "messages.MessageHeader",
+ "description": "A MessageHeader, if this attachment is a message.",
+ "optional": true
+ },
+ "name": {
+ "description": "The name, as displayed to the user, of this attachment. This is usually but not always the filename of the attached file.",
+ "type": "string"
+ },
+ "partName": {
+ "description": "Identifies the MIME part of the message associated with this attachment.",
+ "type": "string"
+ },
+ "size": {
+ "description": "The size in bytes of this attachment.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "description": "An object defining a range.",
+ "id": "QueryRange",
+ "properties": {
+ "max": {
+ "description": "The maximum value required to match the query.",
+ "optional": true,
+ "type": "integer"
+ },
+ "min": {
+ "description": "The minimum value required to match the query.",
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ ]
+ },
+ "messages.tags": {
+ "allowedContexts": [],
+ "docURL": "https://webextension-api.thunderbird.net/en/latest/messages.tags.html",
+ "events": [],
+ "functions": [
+ {
+ "async": "callback",
+ "description": "Returns a list of tags that can be set on messages, and their human-friendly name, colour, and sort order.",
+ "name": "list",
+ "parameters": [
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "items": {
+ "$ref": "messages.tags.MessageTag"
+ },
+ "type": "array"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "permissions": [
+ "messagesTagsList"
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Creates a new message tag. Tagging a message will store the tag's key in the user's message. Throws if the specified tag key is used already.",
+ "name": "create",
+ "parameters": [
+ {
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
+ "name": "key",
+ "pattern": "^[^ ()/{%*<>\"]+$",
+ "type": "string"
+ },
+ {
+ "description": "Human-readable tag name.",
+ "name": "tag",
+ "type": "string"
+ },
+ {
+ "description": "Tag color in hex format (i.e.: #000080 for navy blue). Value will be stored as upper case.",
+ "name": "color",
+ "pattern": "^#[0-9a-fA-F]{6}",
+ "type": "string"
+ }
+ ],
+ "permissions": [
+ "messagesTags"
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Updates a message tag. Throws if the specified tag key does not exist.",
+ "name": "update",
+ "parameters": [
+ {
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
+ "name": "key",
+ "pattern": "^[^ ()/{%*<>\"]+$",
+ "type": "string"
+ },
+ {
+ "name": "updateProperties",
+ "properties": {
+ "color": {
+ "description": "Tag color in hex format (i.e.: #000080 for navy blue). Value will be stored as upper case.",
+ "optional": "true",
+ "pattern": "^#[0-9a-fA-F]{6}",
+ "type": "string"
+ },
+ "tag": {
+ "description": "Human-readable tag name.",
+ "optional": "true",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "permissions": [
+ "messagesTags"
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Deletes a message tag, removing it from the list of known tags. Its key will not be removed from tagged messages, but they will appear untagged. Recreating a deleted tag, will make all former tagged messages appear tagged again.",
+ "name": "delete",
+ "parameters": [
+ {
+ "description": "Unique tag identifier (will be converted to lower case). Must not include <value>()<>{/%*\"</value> or spaces.",
+ "name": "key",
+ "pattern": "^[^ ()/{%*<>\"]+$",
+ "type": "string"
+ }
+ ],
+ "permissions": [
+ "messagesTags"
+ ],
+ "type": "function"
+ }
+ ],
+ "namespace": "messages.tags",
+ "permissions": [],
+ "properties": {},
+ "types": [
+ {
"id": "MessageTag",
"properties": {
"color": {
@@ -13637,7 +15189,7 @@
"type": "string"
},
"tags": {
- "description": "A <em>dictionary object</em> with one or more filter condition as <em>key-value</em> pairs, the <em>key</em> being the tag to filter on, and the <em>value</em> being a boolean expression, requesting whether a message must include (<value>true</value>) or exclude (<value>false</value>) the tag. For a list of available tags, call the :ref:`messages.listTags` method.",
+ "description": "A <em>dictionary object</em> with one or more filter condition as <em>key-value</em> pairs, the <em>key</em> being the tag to filter on, and the <em>value</em> being a boolean expression, requesting whether a message must include (<value>true</value>) or exclude (<value>false</value>) the tag. For a list of available tags, call the :ref:`messages.tags.list` method.",
"patternProperties": {
".*": {
"type": "boolean"
@@ -13647,34 +15199,6 @@
}
},
"type": "object"
- },
- {
- "description": "Represents an attachment in a message.",
- "id": "MessageAttachment",
- "properties": {
- "contentType": {
- "description": "The content type of the attachment.",
- "type": "string"
- },
- "message": {
- "$ref": "messages.MessageHeader",
- "description": "A MessageHeader, if this attachment is a message.",
- "optional": true
- },
- "name": {
- "description": "The name, as displayed to the user, of this attachment. This is usually but not always the filename of the attached file.",
- "type": "string"
- },
- "partName": {
- "description": "Identifies the MIME part of the message associated with this attachment.",
- "type": "string"
- },
- "size": {
- "description": "The size in bytes of this attachment.",
- "type": "integer"
- }
- },
- "type": "object"
}
]
},
@@ -14978,6 +16502,36 @@
],
"type": "function",
"unsupported": true
+ },
+ {
+ "description": "Fired when a runtime performance issue is detected with the extension. Observe this event to be proactively notified of runtime performance problems with the extension.",
+ "name": "onPerformanceWarning",
+ "parameters": [
+ {
+ "name": "details",
+ "properties": {
+ "category": {
+ "$ref": "OnPerformanceWarningCategory",
+ "description": "The performance warning event category, e.g. 'content_script'."
+ },
+ "description": {
+ "description": "An explanation of what the warning means, and hopefully how to address it.",
+ "type": "string"
+ },
+ "severity": {
+ "$ref": "OnPerformanceWarningSeverity",
+ "description": "The performance warning event severity, e.g. 'high'."
+ },
+ "tabId": {
+ "description": "The $(ref:tabs.Tab) that the performance warning relates to, if any.",
+ "optional": true,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "type": "function"
}
],
"functions": [
@@ -15075,12 +16629,12 @@
},
{
"async": "callback",
- "description": "Sets the URL to be visited upon uninstallation. This may be used to clean up server-side data, do analytics, and implement surveys. Maximum 255 characters.",
+ "description": "Sets the URL to be visited upon uninstallation. This may be used to clean up server-side data, do analytics, and implement surveys. Maximum 1023 characters.",
"name": "setUninstallURL",
"parameters": [
{
"description": "URL to be opened after the extension is uninstalled. This URL must have an http: or https: scheme. Set an empty string to not open a new tab upon uninstallation.",
- "maxLength": 255,
+ "maxLength": 1023,
"name": "url",
"optional": true,
"type": "string"
@@ -15607,6 +17161,24 @@
"type": "string"
},
{
+ "description": "The performance warning event category, e.g. 'content_script'.",
+ "enum": [
+ "content_script"
+ ],
+ "id": "OnPerformanceWarningCategory",
+ "type": "string"
+ },
+ {
+ "description": "The performance warning event severity. Will be 'high' for serious and user-visible issues.",
+ "enum": [
+ "low",
+ "medium",
+ "high"
+ ],
+ "id": "OnPerformanceWarningSeverity",
+ "type": "string"
+ },
+ {
"enum": [
"arm",
"x86-32",
@@ -15617,13 +17189,396 @@
}
]
},
+ "sessions": {
+ "allowedContexts": [],
+ "docURL": "https://webextension-api.thunderbird.net/en/latest/sessions.html",
+ "events": [],
+ "functions": [
+ {
+ "async": true,
+ "description": "Store a key/value pair associated with a given tab.",
+ "name": "setTabValue",
+ "parameters": [
+ {
+ "description": "ID of the tab with which you want to associate the data. Error is thrown if ID is invalid.",
+ "name": "tabId",
+ "type": "integer"
+ },
+ {
+ "description": "Key that you can later use to retrieve this particular data value.",
+ "name": "key",
+ "type": "string"
+ },
+ {
+ "name": "value",
+ "type": "string"
+ }
+ ],
+ "returns": {
+ "converterTypeOverride": "Promise<void>"
+ },
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Retrieve a previously stored value for a given tab, given its key.",
+ "name": "getTabValue",
+ "parameters": [
+ {
+ "description": "ID of the tab whose data you are trying to retrieve. Error is thrown if ID is invalid.",
+ "name": "tabId",
+ "type": "integer"
+ },
+ {
+ "description": "Key identifying the particular value to retrieve.",
+ "name": "key",
+ "type": "string"
+ },
+ {
+ "converterPromiseOptional": true,
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "optional": true,
+ "type": "string"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "returns": {
+ "converterTypeOverride": "Promise<string | object | undefined>"
+ },
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Remove a key/value pair from a given tab.",
+ "name": "removeTabValue",
+ "parameters": [
+ {
+ "description": "ID of the tab whose data you are trying to remove. Error is thrown if ID is invalid.",
+ "name": "tabId",
+ "type": "integer"
+ },
+ {
+ "description": "Key identifying the particular value to remove.",
+ "name": "key",
+ "type": "string"
+ }
+ ],
+ "returns": {
+ "converterTypeOverride": "Promise<void>"
+ },
+ "type": "function"
+ }
+ ],
+ "namespace": "sessions",
+ "permissions": [],
+ "properties": {},
+ "types": []
+ },
+ "spaces": {
+ "allowedContexts": [],
+ "docURL": "https://webextension-api.thunderbird.net/en/latest/spaces.html",
+ "events": [],
+ "functions": [
+ {
+ "async": "callback",
+ "description": "Creates a new space and adds its button to the spaces toolbar.",
+ "name": "create",
+ "parameters": [
+ {
+ "description": "The name to assign to this space. May only contain alphanumeric characters and underscores. Must be unique for this extension.",
+ "name": "name",
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "type": "string"
+ },
+ {
+ "description": "The default space url, loaded into a tab when the button in the spaces toolbar is clicked. Supported are <value>https://</value> and <value>http://</value> links, as well as links to WebExtension pages.",
+ "name": "defaultUrl",
+ "type": "string"
+ },
+ {
+ "$ref": "spaces.SpaceButtonProperties",
+ "default": {},
+ "description": "Properties of the button for the new space.",
+ "name": "buttonProperties",
+ "optional": true
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "spaces.Space",
+ "name": "space"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Retrieves details about the specified space.",
+ "name": "get",
+ "parameters": [
+ {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "name": "spaceId",
+ "type": "integer"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "spaces.Space",
+ "name": "space"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Gets all spaces that have the specified properties, or all spaces if no properties are specified.",
+ "name": "query",
+ "parameters": [
+ {
+ "default": {},
+ "name": "queryInfo",
+ "optional": true,
+ "properties": {
+ "extensionId": {
+ "description": "Id of the extension which should own the spaces. The <permission>management</permission> permission is required to be able to match against extension ids.",
+ "optional": true,
+ "type": "string"
+ },
+ "id": {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "optional": true,
+ "type": "integer"
+ },
+ "isBuiltIn": {
+ "description": "Spaces should be default Thunderbird spaces.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "isSelfOwned": {
+ "description": "Spaces should have been created by this extension.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "name": {
+ "description": "The name of the spaces (names are not unique).",
+ "optional": true,
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "name": "callback",
+ "parameters": [
+ {
+ "items": {
+ "$ref": "spaces.Space"
+ },
+ "name": "result",
+ "type": "array"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Removes the specified space, closes all its tabs and removes its button from the spaces toolbar. Throws an exception if the requested space does not exist or was not created by this extension.",
+ "name": "remove",
+ "parameters": [
+ {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "name": "spaceId",
+ "type": "integer"
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": true,
+ "description": "Updates the specified space. Throws an exception if the requested space does not exist or was not created by this extension.",
+ "name": "update",
+ "parameters": [
+ {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "name": "spaceId",
+ "type": "integer"
+ },
+ {
+ "description": "The default space url, loaded into a tab when the button in the spaces toolbar is clicked. Supported are <value>https://</value> and <value>http://</value> links, as well as links to WebExtension pages.",
+ "name": "defaultUrl",
+ "optional": true,
+ "type": "string"
+ },
+ {
+ "$ref": "spaces.SpaceButtonProperties",
+ "description": "Only specified button properties will be updated.",
+ "name": "buttonProperties",
+ "optional": true
+ }
+ ],
+ "type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Opens or switches to the specified space. Throws an exception if the requested space does not exist or was not created by this extension.",
+ "name": "open",
+ "parameters": [
+ {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "name": "spaceId",
+ "type": "integer"
+ },
+ {
+ "description": "The id of the normal window, where the space should be opened. Defaults to the most recent normal window.",
+ "minimum": -2,
+ "name": "windowId",
+ "optional": true,
+ "type": "integer"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "tabs.Tab",
+ "description": "Details about the opened or activated space tab.",
+ "name": "tab",
+ "optional": true
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "namespace": "spaces",
+ "permissions": [],
+ "properties": {},
+ "types": [
+ {
+ "id": "SpaceButtonProperties",
+ "properties": {
+ "badgeBackgroundColor": {
+ "choices": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "ColorArray"
+ }
+ ],
+ "description": "Sets the background color of the badge. Can be specified as an array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is <value>[255, 0, 0, 255]</value>. Can also be a string with an HTML color name (<value>red</value>) or a HEX color value (<value>#FF0000</value> or <value>#F00</value>). Reset when set to an empty string.",
+ "optional": true
+ },
+ "badgeText": {
+ "description": "Sets the badge text for the button in the spaces toolbar. The badge is displayed on top of the icon. Any number of characters can be set, but only about four can fit in the space. Removed when set to an empty string.",
+ "optional": true,
+ "type": "string"
+ },
+ "defaultIcons": {
+ "choices": [
+ {
+ "type": "string"
+ },
+ {
+ "$ref": "manifest.IconPath"
+ }
+ ],
+ "description": "The paths to one or more icons for the button in the spaces toolbar. Defaults to the extension icon, if set to an empty string.",
+ "optional": true
+ },
+ "themeIcons": {
+ "description": "Specifies dark and light icons for the button in the spaces toolbar to be used with themes: The ``light`` icons will be used on dark backgrounds and vice versa. At least the set for <em>16px</em> icons should be specified. The set for <em>32px</em> icons will be used on screens with a very high pixel density, if specified.",
+ "items": {
+ "$ref": "manifest.ThemeIcons"
+ },
+ "optional": true,
+ "type": "array"
+ },
+ "title": {
+ "description": "The title for the button in the spaces toolbar, used in the tooltip of the button and as the displayed name in the overflow menu. Defaults to the name of the extension, if set to an empty string.",
+ "optional": true,
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "description": "An array of four integers in the range [0,255] that make up the RGBA color. For example, opaque red is <value>[255, 0, 0, 255]</value>.",
+ "id": "ColorArray",
+ "items": {
+ "maximum": 255,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ {
+ "id": "Space",
+ "properties": {
+ "extensionId": {
+ "description": "The id of the extension which owns the space. The <permission>management</permission> permission is required to include this property.",
+ "optional": true,
+ "type": "string"
+ },
+ "id": {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "type": "integer"
+ },
+ "isBuiltIn": {
+ "description": "Whether this space is one of the default Thunderbird spaces, or an extension space.",
+ "type": "boolean"
+ },
+ "isSelfOwned": {
+ "description": "Whether this space was created by this extension.",
+ "type": "boolean"
+ },
+ "name": {
+ "description": "The name of the space. Names are unique for a single extension, but different extensions may use the same name.",
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ]
+ },
"spacesToolbar": {
"allowedContexts": [],
"docURL": "https://webextension-api.thunderbird.net/en/latest/spacesToolbar.html",
"events": [],
"functions": [
{
- "async": true,
+ "async": "callback",
"description": "Adds a new button to the spaces toolbar. Throws an exception, if the used ``id`` is not unique within the extension.",
"name": "addButton",
"parameters": [
@@ -15637,17 +17592,31 @@
"$ref": "spacesToolbar.ButtonProperties",
"description": "Properties of the new button. The ``url`` is mandatory.",
"name": "properties"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "description": "The id of the space belonging to the newly created button, as used by the tabs API.",
+ "minimum": 1,
+ "name": "spaceId",
+ "optional": true,
+ "type": "integer"
+ }
+ ],
+ "type": "function"
}
],
"type": "function"
},
{
"async": true,
- "description": "Removes the specified button from the spaces toolbar. Throws an exception if the requested spaces toolbar button does not exist. If the tab of this button is currently open, it will be closed.",
+ "description": "Removes the specified button from the spaces toolbar. Throws an exception if the requested spaces toolbar button does not exist or was not created by this extension. If the tab of this button is currently open, it will be closed.",
"name": "removeButton",
"parameters": [
{
- "description": "The id of the button which is to be removed. May only contain alphanumeric characters and underscores.",
+ "description": "The id of the spaces toolbar button, which is to be removed. May only contain alphanumeric characters and underscores.",
"name": "id",
"pattern": "^[a-zA-Z0-9_]+$",
"type": "string"
@@ -15657,11 +17626,11 @@
},
{
"async": true,
- "description": "Updates properties of the specified spaces toolbar button. Throws an exception if the requested spaces toolbar button does not exist.",
+ "description": "Updates properties of the specified spaces toolbar button. Throws an exception if the requested spaces toolbar button does not exist or was not created by this extension.",
"name": "updateButton",
"parameters": [
{
- "description": "The id of the button which is to be updated. May only contain alphanumeric characters and underscores.",
+ "description": "The id of the spaces toolbar button, which is to be updated. May only contain alphanumeric characters and underscores.",
"name": "id",
"pattern": "^[a-zA-Z0-9_]+$",
"type": "string"
@@ -15673,8 +17642,43 @@
}
],
"type": "function"
+ },
+ {
+ "async": "callback",
+ "description": "Trigger a click on the specified spaces toolbar button. Throws an exception if the requested spaces toolbar button does not exist or was not created by this extension.",
+ "name": "clickButton",
+ "parameters": [
+ {
+ "description": "The id of the spaces toolbar button. May only contain alphanumeric characters and underscores.",
+ "name": "id",
+ "pattern": "^[a-zA-Z0-9_]+$",
+ "type": "string"
+ },
+ {
+ "description": "The id of the normal window, where the spaces toolbar button should be clicked. Defaults to the most recent normal window.",
+ "minimum": -2,
+ "name": "windowId",
+ "optional": true,
+ "type": "integer"
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "tabs.Tab",
+ "description": "Details about the opened or activated tab.",
+ "name": "tab",
+ "optional": true
+ }
+ ],
+ "type": "function"
+ }
+ ],
+ "type": "function"
}
],
+ "max_manifest_version": 2,
"namespace": "spacesToolbar",
"permissions": [],
"properties": {},
@@ -15801,6 +17805,13 @@
}
}
},
+ "session": {
+ "$ref": "StorageArea",
+ "allowedContexts": [
+ "devtools"
+ ],
+ "description": "Items in the <code>session</code> storage area are kept in memory, and only until the either browser or extension is closed or reloaded."
+ },
"sync": {
"$ref": "StorageAreaSync",
"description": "Items in the <code>sync</code> storage area are synced by the browser.",
@@ -16301,6 +18312,12 @@
{
"name": "activeInfo",
"properties": {
+ "previousTabId": {
+ "description": "The ID of the tab that was previously active, if that tab is still open.",
+ "minimum": 0,
+ "optional": true,
+ "type": "integer"
+ },
"tabId": {
"description": "The ID of the tab that has become active.",
"minimum": 0,
@@ -16531,6 +18548,11 @@
"optional": true,
"type": "boolean"
},
+ "cookieStoreId": {
+ "description": "The `CookieStore <|link-cookieStore|>`__ id the new tab should use. Either a custom id created using the `contextualIdentities API <|link-contextualIdentity|>`__, or a built-in one: <value>firefox-default</value>, <value>firefox-container-1</value>, <value>firefox-container-2</value>, <value>firefox-container-3</value>, <value>firefox-container-4</value>, <value>firefox-container-5</value>. **Note:** The naming pattern was deliberately not changed for Thunderbird, but kept for compatibility reasons.",
+ "optional": true,
+ "type": "string"
+ },
"index": {
"description": "The position the tab should take in the window. The provided value will be clamped to between zero and the number of tabs in the window.",
"minimum": 0,
@@ -16545,7 +18567,7 @@
"unsupported": true
},
"url": {
- "description": "The URL to navigate the tab to initially. Fully-qualified URLs must include a scheme (i.e. <value>http://www.google.com</value>, not <value>www.google.com</value>). Relative URLs will be relative to the current page within the extension.",
+ "description": "The URL to navigate the tab to initially. If the URL points to a content page (a web page, an extension page or a registered WebExtension protocol handler page), the tab will navigate to the requested page. All other URLs will be opened externally after creating an empty tab. Fully-qualified URLs must include a scheme (i.e. <value>http://www.google.com</value>, not <value>www.google.com</value>). Relative URLs will be relative to the root of the extension. ",
"optional": true,
"type": "string"
},
@@ -16607,13 +18629,30 @@
"name": "query",
"parameters": [
{
+ "default": {},
"name": "queryInfo",
+ "optional": true,
"properties": {
"active": {
"description": "Whether the tabs are active in their windows.",
"optional": true,
"type": "boolean"
},
+ "cookieStoreId": {
+ "choices": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "The `CookieStore <|link-cookieStore|>`__ id(s) used by the tabs. Either custom ids created using the `contextualIdentities API <|link-contextualIdentity|>`__, or built-in ones: <value>firefox-default</value>, <value>firefox-container-1</value>, <value>firefox-container-2</value>, <value>firefox-container-3</value>, <value>firefox-container-4</value>, <value>firefox-container-5</value>. **Note:** The naming pattern was deliberately not changed for Thunderbird, but kept for compatibility reasons.",
+ "optional": true
+ },
"currentWindow": {
"description": "Whether the tabs are in the current window.",
"optional": true,
@@ -16636,10 +18675,17 @@
"type": "boolean"
},
"mailTab": {
- "description": "Whether the tab is a Thunderbird 3-pane tab.",
+ "description": "Whether the tab is a Thunderbird 3-pane tab. If specified, the ``queryInfo.type`` property will be ignored",
+ "max_manifest_version": 2,
"optional": true,
"type": "boolean"
},
+ "spaceId": {
+ "description": "The id of the space the tabs should belong to.",
+ "minimum": 1,
+ "optional": true,
+ "type": "integer"
+ },
"status": {
"$ref": "TabStatus",
"description": "Whether the tabs have completed loading.",
@@ -16651,9 +18697,19 @@
"type": "string"
},
"type": {
- "description": "Match tabs against the given Tab.type (see :ref:`tabs.Tab`). Ignored if ``queryInfo.mailTab`` is specified.",
- "optional": true,
- "type": "string"
+ "choices": [
+ {
+ "$ref": "TabType"
+ },
+ {
+ "items": {
+ "$ref": "TabType"
+ },
+ "type": "array"
+ }
+ ],
+ "description": "Match tabs against the given tab type or types.",
+ "optional": true
},
"url": {
"choices": [
@@ -16717,12 +18773,12 @@
"name": "updateProperties",
"properties": {
"active": {
- "description": "Set this to <value>true</value>, if the tab should be active. Does not affect whether the window is focused (see :ref:`windows.update`). Setting this to <value>false</value> has no effect.",
+ "description": "Set this to <value>true</value>, if the tab should become active. Does not affect whether the window is focused (see :ref:`windows.update`). Setting this to <value>false</value> has no effect.",
"optional": true,
"type": "boolean"
},
"url": {
- "description": "A URL to navigate the tab to. Only applicable for <value>content</value> tabs and active <value>mail</value> tabs.",
+ "description": "A URL of a page to load. If the URL points to a content page (a web page, an extension page or a registered WebExtension protocol handler page), the tab will navigate to the requested page. All other URLs will be opened externally without changing the tab. **Note:** This function will throw an error, if a content page is loaded into a non-content tab (its type must be either <value>content</value> or <value>mail</value>).",
"optional": true,
"type": "string"
}
@@ -16747,7 +18803,7 @@
},
{
"async": "callback",
- "description": "Moves one or more tabs to a new position within its window, or to a new window. Note that tabs can only be moved to and from windows of type <value>normal</value>.",
+ "description": "Moves one or more tabs to a new position within its current window, or to a different window. Note that tabs can only be moved to and from windows of type <value>normal</value>.",
"name": "move",
"parameters": [
{
@@ -16771,7 +18827,7 @@
"name": "moveProperties",
"properties": {
"index": {
- "description": "The position to move the window to. <value>-1</value> will place the tab at the end of the window.",
+ "description": "The position to move the tab to. <value>-1</value> will place the tab at the end of the window.",
"minimum": -1,
"type": "integer"
},
@@ -16789,19 +18845,12 @@
"optional": true,
"parameters": [
{
- "choices": [
- {
- "$ref": "Tab"
- },
- {
- "items": {
- "$ref": "Tab"
- },
- "type": "array"
- }
- ],
"description": "Details about the moved tabs.",
- "name": "tabs"
+ "items": {
+ "$ref": "Tab"
+ },
+ "name": "tabs",
+ "type": "array"
}
],
"type": "function"
@@ -16811,7 +18860,7 @@
},
{
"async": "callback",
- "description": "Reload a tab.",
+ "description": "Reload a tab. Only applicable for tabs which display a content page.",
"name": "reload",
"parameters": [
{
@@ -16981,6 +19030,11 @@
"description": "Whether the tab is active in its window. (Does not necessarily mean the window is focused.)",
"type": "boolean"
},
+ "cookieStoreId": {
+ "description": "The `CookieStore <|link-cookieStore|>`__ id used by the tab. Either a custom id created using the `contextualIdentities API <|link-contextualIdentity|>`__, or a built-in one: <value>firefox-default</value>, <value>firefox-container-1</value>, <value>firefox-container-2</value>, <value>firefox-container-3</value>, <value>firefox-container-4</value>, <value>firefox-container-5</value>. **Note:** The naming pattern was deliberately not changed for Thunderbird, but kept for compatibility reasons.",
+ "optional": true,
+ "type": "string"
+ },
"favIconUrl": {
"description": "The URL of the tab's favicon. This property is only present if the extension's manifest includes the <permission>tabs</permission> permission. It may also be an empty string if the tab is loading.",
"optional": true,
@@ -17011,6 +19065,7 @@
},
"mailTab": {
"description": "Whether the tab is a 3-pane tab.",
+ "max_manifest_version": 2,
"optional": true,
"type": "boolean"
},
@@ -17021,6 +19076,12 @@
"type": "boolean",
"unsupported": true
},
+ "spaceId": {
+ "description": "The id of the space.",
+ "minimum": 1,
+ "optional": true,
+ "type": "integer"
+ },
"status": {
"description": "Either <value>loading</value> or <value>complete</value>.",
"optional": true,
@@ -17035,21 +19096,8 @@
"type": "string"
},
"type": {
- "enum": [
- "addressBook",
- "calendar",
- "calendarEvent",
- "calendarTask",
- "chat",
- "content",
- "mail",
- "messageCompose",
- "messageDisplay",
- "special",
- "tasks"
- ],
- "optional": true,
- "type": "string"
+ "$ref": "TabType",
+ "optional": true
},
"url": {
"description": "The URL the tab is displaying. This property is only present if the extension's manifest includes the <permission>tabs</permission> permission.",
@@ -17083,6 +19131,24 @@
"type": "string"
},
{
+ "description": "Tab types supported by the tabs API.",
+ "enum": [
+ "addressBook",
+ "calendar",
+ "calendarEvent",
+ "calendarTask",
+ "chat",
+ "content",
+ "mail",
+ "messageCompose",
+ "messageDisplay",
+ "special",
+ "tasks"
+ ],
+ "id": "TabType",
+ "type": "string"
+ },
+ {
"description": "The type of a window. Under some circumstances a Window may not be assigned a type property.",
"enum": [
"normal",
@@ -17702,15 +19768,11 @@
"items": {
"$ref": "TransitionQualifier"
},
- "optional": true,
- "type": "array",
- "unsupported": true
+ "type": "array"
},
"transitionType": {
"$ref": "TransitionType",
- "description": "Cause of the navigation.",
- "optional": true,
- "unsupported": true
+ "description": "Cause of the navigation."
},
"url": {
"type": "string"
@@ -17936,15 +19998,11 @@
"items": {
"$ref": "TransitionQualifier"
},
- "optional": true,
- "type": "array",
- "unsupported": true
+ "type": "array"
},
"transitionType": {
"$ref": "TransitionType",
- "description": "Cause of the navigation.",
- "optional": true,
- "unsupported": true
+ "description": "Cause of the navigation."
},
"url": {
"type": "string"
@@ -18018,15 +20076,11 @@
"items": {
"$ref": "TransitionQualifier"
},
- "optional": true,
- "type": "array",
- "unsupported": true
+ "type": "array"
},
"transitionType": {
"$ref": "TransitionType",
- "description": "Cause of the navigation.",
- "optional": true,
- "unsupported": true
+ "description": "Cause of the navigation."
},
"url": {
"type": "string"
@@ -19370,7 +21424,7 @@
"asyncBlocking"
],
"id": "OnAuthRequiredOptions",
- "postprocess": "webRequestBlockingPermissionRequired",
+ "postprocess": "webRequestBlockingOrAuthProviderPermissionRequired",
"type": "string"
},
{
@@ -19681,6 +21735,26 @@
],
"type": "string"
},
+ "usedDelegatedCredentials": {
+ "description": "True if the TLS connection used Delegated Credentials.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "usedEch": {
+ "description": "True if the TLS connection used Encrypted Client Hello.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "usedOcsp": {
+ "description": "True if the TLS connection made OCSP requests.",
+ "optional": true,
+ "type": "boolean"
+ },
+ "usedPrivateDns": {
+ "description": "True if the TLS connection used a privacy-preserving DNS transport like DNS-over-HTTPS.",
+ "optional": true,
+ "type": "boolean"
+ },
"weaknessReasons": {
"description": "list of reasons that cause the request to be considered weak, if state is \"weak\"",
"items": {
@@ -20030,6 +22104,11 @@
"optional": true,
"type": "boolean"
},
+ "cookieStoreId": {
+ "description": "The CookieStoreId to use for all tabs that were created when the window is opened.",
+ "optional": true,
+ "type": "string"
+ },
"focused": {
"description": "If true, opens an active window. If false, opens an inactive window.",
"optional": true,
@@ -20092,7 +22171,7 @@
"type": "array"
}
],
- "description": "A URL or array of URLs to open as tabs in the window. Fully-qualified URLs must include a scheme (i.e. <value>http://www.google.com</value>, not <value>www.google.com</value>). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.",
+ "description": "A URL to be opened in a popup window, ignored in all other window types. This may also be an array, but only the first element is used (popup windows may not have multiple tabs). If the URL points to a content page (a web page, an extension page or a registered WebExtension protocol handler page), the popup window will navigate to the requested page. All other URLs will be opened externally after creating an empty popup window. Fully-qualified URLs must include a scheme (i.e. <value>http://www.google.com</value>, not <value>www.google.com</value>). Relative URLs will be relative to the root of the extension. Defaults to the New Tab Page.",
"optional": true
},
"width": {
@@ -20242,9 +22321,6 @@
"enum": [
"normal",
"popup",
- "panel",
- "app",
- "devtools",
"messageCompose",
"messageDisplay"
],
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment