Source code

Revision control

Copy as Markdown

Other Tools

{
"title": "ExtensionDoorhanger",
"description": "A template with a heading, addon icon, title and description. No markup allowed.",
"allOf": [
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "Attribute used for different groups of messages from the same provider"
},
"layout": {
"type": "string",
"description": "Attribute used for different groups of messages from the same provider",
"enum": ["short_message", "icon_and_message", "addon_recommendation"]
},
"anchor_id": {
"type": "string",
"description": "A DOM element ID that the pop-over will be anchored."
},
"bucket_id": {
"type": "string",
"description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting."
},
"skip_address_bar_notifier": {
"type": "boolean",
"description": "Skip the 'Recommend' notifier and show directly."
},
"persistent_doorhanger": {
"type": "boolean",
"description": "Prevent the doorhanger from being dismissed if user interacts with the page or switches between applications."
},
"notification_text": {
"description": "The text in the small blue chicklet that appears in the URL bar. This can be a reference to a localized string in Firefox or just a plain string."
},
"info_icon": {
"type": "object",
"description": "The small icon displayed in the top right corner of the pop-over. Should be 19x19px, svg or png. Defaults to a small question mark.",
"properties": {
"label": {
"oneOf": [
{
"type": "object",
"properties": {
"attributes": {
"type": "object",
"properties": {
"tooltiptext": {
"description": "Text for button tooltip used to provide information about the doorhanger."
}
},
"required": ["tooltiptext"]
}
},
"required": ["attributes"]
},
{
}
]
},
"sumo_path": {
"type": "string",
"description": "Last part of the path in the URL to the support page with the information about the doorhanger.",
"examples": ["extensionpromotions", "extensionrecommendations"]
}
}
},
"learn_more": {
"type": "string",
"description": "Last part of the path in the SUMO URL to the support page with the information about the doorhanger.",
"examples": ["extensionpromotions", "extensionrecommendations"]
},
"heading_text": {
"description": "The larger heading text displayed in the pop-over. This can be a reference to a localized string in Firefox or just a plain string."
},
"icon": {
"$ref": "#/$defs/linkUrl",
"description": "The icon displayed in the pop-over. Should be 32x32px or 64x64px and png/svg."
},
"icon_dark_theme": {
"type": "string",
"description": "Pop-over icon, dark theme variant. Should be 32x32px or 64x64px and png/svg."
},
"icon_class": {
"type": "string",
"description": "CSS class of the pop-over icon."
},
"addon": {
"description": "Addon information including AMO URL.",
"type": "object",
"properties": {
"id": {
"$ref": "#/$defs/plainText",
"description": "Unique addon ID"
},
"title": {
"$ref": "#/$defs/plainText",
"description": "Addon name"
},
"author": {
"$ref": "#/$defs/plainText",
"description": "Addon author"
},
"icon": {
"$ref": "#/$defs/linkUrl",
"description": "The icon displayed in the pop-over. Should be 64x64px and png/svg."
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"description": "Star rating"
},
"users": {
"type": "integer",
"minimum": 0,
"description": "Installed users"
},
"amo_url": {
"$ref": "#/$defs/linkUrl",
"description": "Link that offers more information related to the addon."
}
},
"required": ["title", "author", "icon", "amo_url"]
},
"text": {
"description": "The body text displayed in the pop-over. This can be a reference to a localized string in Firefox or just a plain string."
},
"descriptionDetails": {
"description": "Additional information and steps on how to use",
"type": "object",
"properties": {
"steps": {
"description": "Array of string_ids",
"type": "array",
"items": {
"description": "Id of string to localized addon description"
}
}
},
"required": ["steps"]
},
"buttons": {
"description": "The label and functionality for the buttons in the pop-over.",
"type": "object",
"properties": {
"primary": {
"type": "object",
"properties": {
"label": {
"type": "object",
"oneOf": [
{
"properties": {
"value": {
"$ref": "#/$defs/plainText",
"description": "Button label override used when a localized version is not available."
},
"attributes": {
"type": "object",
"properties": {
"accesskey": {
"type": "string",
"description": "A single character to be used as a shortcut key for the secondary button. This should be one of the characters that appears in the button label."
}
},
"required": ["accesskey"],
"description": "Button attributes."
}
},
"required": ["value", "attributes"]
},
{
}
],
"description": "Id of localized string or message override."
},
"action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Action dispatched by the button."
},
"data": {
"properties": {
"url": {
"type": "string",
"$comment": "This is dynamically generated from the addon.id. See CFRPageActions.jsm",
"description": "URL used in combination with the primary action dispatched."
}
}
}
}
}
}
},
"secondary": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "object",
"oneOf": [
{
"properties": {
"value": {
"allOf": [
{ "$ref": "#/$defs/plainText" },
{
"description": "Button label override used when a localized version is not available."
}
]
},
"attributes": {
"type": "object",
"properties": {
"accesskey": {
"type": "string",
"description": "A single character to be used as a shortcut key for the secondary button. This should be one of the characters that appears in the button label."
}
},
"required": ["accesskey"],
"description": "Button attributes."
}
},
"required": ["value", "attributes"]
},
{
"properties": {
"string_id": {
"allOf": [
{ "$ref": "#/$defs/plainText" },
{
"description": "Id of localized string for button"
}
]
}
},
"required": ["string_id"]
}
],
"description": "Id of localized string or message override."
},
"action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Action dispatched by the button."
},
"data": {
"properties": {
"url": {
"allOf": [
{ "$ref": "#/$defs/linkUrl" },
{
"description": "URL used in combination with the primary action dispatched."
}
]
}
}
}
}
}
}
}
}
}
}
},
"additionalProperties": true,
"required": [
"layout",
"bucket_id",
"heading_text",
"text",
"buttons"
],
"if": {
"properties": {
"skip_address_bar_notifier": {
"anyOf": [
{ "const": "false" },
{ "const": null }
]
}
}
},
"then": {
"required": ["category", "notification_text"]
}
},
"template": {
"type": "string",
"enum": ["cfr_doorhanger", "milestone_message"]
}
},
"additionalProperties": true,
"required": ["targeting", "trigger"],
"$defs": {
"plainText": {
"description": "Plain text (no HTML allowed)",
"type": "string"
},
"linkUrl": {
"description": "Target for links or buttons",
"type": "string",
"format": "uri"
}
}
}