Source code

Revision control

Copy as Markdown

Other Tools

{
"title": "Messaging Experiment",
"description": "A Firefox Messaging System message.",
"if": {
"type": "object",
"properties": {
"template": {
"const": "multi"
}
},
"required": [
"template"
]
},
"then": {
},
"else": {
},
"$defs": {
"CFRUrlbarChiclet": {
"title": "CFRUrlbarChiclet",
"description": "A template with a chiclet button with text.",
"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": "Describes how content should be displayed.",
"enum": [
"chiclet_open_url"
]
},
"bucket_id": {
"type": "string",
"description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting."
},
"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."
},
"active_color": {
"type": "string",
"description": "Background color of the button"
},
"action": {
"type": "object",
"properties": {
"url": {
"description": "The page to open when the button is clicked.",
"type": "string",
"format": "moz-url-format"
},
"where": {
"description": "Should it open in a new tab or the current tab",
"type": "string",
"enum": [
"current",
"tabshifted"
]
}
},
"additionalProperties": true,
"required": [
"url",
"where"
]
}
},
"additionalProperties": true,
"required": [
"layout",
"category",
"bucket_id",
"notification_text",
"action"
]
},
"template": {
"type": "string",
"const": "cfr_urlbar_chiclet"
}
},
"required": [
"targeting",
"trigger"
]
},
"ExtensionDoorhanger": {
"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."
},
"alt_anchor_id": {
"type": "string",
"description": "An alternate 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."
},
"show_in_private_browsing": {
"type": "boolean",
"description": "Whether to allow the message to be shown in private browsing mode. Defaults to false."
},
"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": {
"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": {
"description": "Unique addon ID"
},
"title": {
"description": "Addon name"
},
"author": {
"description": "Addon author"
},
"icon": {
"description": "The icon displayed in the pop-over. Should be 64x64px and png/svg."
},
"rating": {
"type": "string",
"description": "Star rating"
},
"users": {
"type": "string",
"description": "Installed users"
},
"amo_url": {
"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": {
"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.sys.mjs",
"description": "URL used in combination with the primary action dispatched."
}
}
}
}
}
}
},
"secondary": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "object",
"oneOf": [
{
"properties": {
"value": {
"allOf": [
{
},
{
"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": [
{
},
{
"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": [
{
},
{
"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"
}
}
},
"InfoBar": {
"title": "InfoBar",
"description": "A template with an image, test and buttons.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Should the message be global (persisted across tabs) or local (disappear when switching to a different tab).",
"enum": [
"global",
"tab"
]
},
"text": {
"description": "The text show in the notification box."
},
"priority": {
"type": "number",
"minumum": 0,
"exclusiveMaximum": 10
},
"buttons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"description": "The text label of the button."
},
"primary": {
"type": "boolean",
"description": "Is this the primary button?"
},
"accessKey": {
"type": "string",
"description": "Keyboard shortcut letter."
},
"action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Action dispatched by the button."
},
"data": {
"type": "object"
}
},
"required": [
"type"
],
"additionalProperties": true
},
"supportPage": {
"type": "string",
"description": "A page title on SUMO to link to"
}
},
"required": [
"label",
"action"
],
"additionalProperties": true
}
}
},
"additionalProperties": true,
"required": [
"text",
"buttons"
]
},
"template": {
"type": "string",
"const": "infobar"
}
},
"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"
}
}
},
"NewtabPromoMessage": {
"title": "PBNewtabPromoMessage",
"description": "Message shown on the private browsing newtab page.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"hideDefault": {
"type": "boolean",
"description": "Should we hide the default promo after the experiment promo is dismissed."
},
"infoEnabled": {
"type": "boolean",
"description": "Should we show the info section."
},
"infoIcon": {
"type": "string",
"description": "Icon shown in the left side of the info section. Default is the private browsing icon."
},
"infoTitle": {
"type": "string",
"description": "Is the title in the info section enabled."
},
"infoTitleEnabled": {
"type": "boolean",
"description": "Is the title in the info section enabled."
},
"infoBody": {
"type": "string",
"description": "Text content in the info section."
},
"infoLinkText": {
"type": "string",
"description": "Text for the link in the info section."
},
"infoLinkUrl": {
"type": "string",
"description": "URL for the info section link.",
"format": "moz-url-format"
},
"promoEnabled": {
"type": "boolean",
"description": "Should we show the promo section."
},
"promoType": {
"type": "string",
"description": "Promo type used to determine if promo should show to a given user",
"enum": [
"FOCUS",
"VPN",
"PIN",
"COOKIE_BANNERS",
"OTHER"
]
},
"promoSectionStyle": {
"type": "string",
"description": "Sets the position of the promo section. Possible values are: top, below-search, bottom. Default bottom.",
"enum": [
"top",
"below-search",
"bottom"
]
},
"promoTitle": {
"type": "string",
"description": "The text content of the promo section."
},
"promoTitleEnabled": {
"type": "boolean",
"description": "Should we show text content in the promo section."
},
"promoLinkText": {
"type": "string",
"description": "The text of the link in the promo box."
},
"promoHeader": {
"type": "string",
"description": "The title of the promo section."
},
"promoButton": {
"type": "object",
"properties": {
"action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Action dispatched by the button."
},
"data": {
"type": "object"
}
},
"required": [
"type"
],
"additionalProperties": true
}
},
"required": [
"action"
]
},
"promoLinkType": {
"type": "string",
"description": "Type of promo link type. Possible values: link, button. Default is link.",
"enum": [
"link",
"button"
]
},
"promoImageLarge": {
"type": "string",
"description": "URL for image used on the left side of the promo box, larger, showcases some feature. Default off.",
"format": "uri"
},
"promoImageSmall": {
"type": "string",
"description": "URL for image used on the right side of the promo box, smaller, usually a logo. Default off.",
"format": "uri"
}
},
"additionalProperties": true,
"allOf": [
{
"if": {
"properties": {
"promoEnabled": {
"const": true
}
},
"required": [
"promoEnabled"
]
},
"then": {
"required": [
"promoButton"
]
}
},
{
"if": {
"properties": {
"infoEnabled": {
"const": true
}
},
"required": [
"infoEnabled"
]
},
"then": {
"required": [
"infoLinkText"
],
"if": {
"properties": {
"infoTitleEnabled": {
"const": true
}
},
"required": [
"infoTitleEnabled"
]
},
"then": {
"required": [
"infoTitle"
]
}
}
}
]
},
"template": {
"type": "string",
"const": "pb_newtab"
}
},
"additionalProperties": true,
"required": [
"targeting"
]
},
"Spotlight": {
"title": "Spotlight",
"description": "A template with an image, title, content and two buttons.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"template": {
"type": "string",
"description": "Specify the layout template for the Spotlight",
"const": "multistage"
},
"backdrop": {
"type": "string",
"description": "Background css behind modal content"
},
"logo": {
"type": "object",
"properties": {
"imageURL": {
"type": "string",
"description": "URL for image to use with the content"
},
"imageId": {
"type": "string",
"description": "The ID for a remotely hosted image"
},
"size": {
"type": "string",
"description": "The logo size."
}
},
"additionalProperties": true
},
"screens": {
"type": "array",
"description": "Collection of individual screen content"
},
"transitions": {
"type": "boolean",
"description": "Show transitions within and between screens"
},
"disableHistoryUpdates": {
"type": "boolean",
"description": "Don't alter the browser session's history stack - used with messaging surfaces like Feature Callouts"
},
"startScreen": {
"type": "integer",
"description": "Index of first screen to show from message, defaulting to 0"
},
"no-rdm": {
"type": "boolean",
"description": "If true, prevents the spotlight from entering responsive design mode at widths less than 800px"
}
},
"additionalProperties": true
},
"template": {
"type": "string",
"description": "Specify whether the surface is shown as a Spotlight modal or an in-surface Feature Callout dialog",
"enum": [
"spotlight",
"feature_callout"
]
}
},
"additionalProperties": true,
"required": [
"targeting"
]
},
"ToastNotification": {
"title": "ToastNotification",
"description": "A template for toast notifications displayed by the Alert service.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"title": {
"description": "Id of localized string or message override of toast notification title"
},
"body": {
"description": "Id of localized string or message override of toast notification body"
},
"icon_url": {
"description": "The URL of the image used as an icon of the toast notification.",
"type": "string",
"format": "moz-url-format"
},
"image_url": {
"description": "The URL of an image to be displayed as part of the notification.",
"type": "string",
"format": "moz-url-format"
},
"launch_url": {
"description": "The URL to launch when the notification or an action button is clicked.",
"type": "string",
"format": "moz-url-format"
},
"launch_action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "The launch action to be performed when Firefox is launched."
},
"data": {
"type": "object"
}
},
"required": [
"type"
],
"additionalProperties": true
},
"requireInteraction": {
"type": "boolean",
"description": "Whether the toast notification should remain active until the user clicks or dismisses it, rather than closing automatically."
},
"tag": {
"type": "string",
"description": "An identifying tag for the toast notification."
},
"data": {
"type": "object",
"description": "Arbitrary data associated with the toast notification."
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"description": "The action text to be shown to the user."
},
"action": {
"type": "string",
"description": "Opaque identifer that identifies action."
},
"iconURL": {
"type": "string",
"format": "uri",
"description": "URL of an icon to display with the action."
},
"windowsSystemActivationType": {
"type": "boolean",
"description": "Whether to have Windows process the given `action`."
},
"launch_action": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "The launch action to be performed when Firefox is launched."
},
"data": {
"type": "object"
}
},
"required": [
"type"
],
"additionalProperties": true
}
},
"required": [
"action",
"title"
],
"additionalProperties": true
}
}
},
"additionalProperties": true,
"required": [
"title",
"body"
]
},
"template": {
"type": "string",
"const": "toast_notification"
}
},
"required": [
"content",
"targeting",
"template",
"trigger"
],
"additionalProperties": true
},
"ToolbarBadgeMessage": {
"title": "ToolbarBadgeMessage",
"description": "A template that specifies to which element in the browser toolbar to add a notification.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"target": {
"type": "string"
},
"action": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": true,
"required": [
"id"
],
"description": "Optional action to take in addition to showing the notification"
},
"delay": {
"type": "number",
"description": "Optional delay in ms after which to show the notification"
},
"badgeDescription": {
"description": "This is used in combination with the badged button to offer a text based alternative to the visual badging. Example 'New Feature: What's New'"
}
},
"additionalProperties": true,
"required": [
"target"
]
},
"template": {
"type": "string",
"const": "toolbar_badge"
}
},
"additionalProperties": true,
"required": [
"targeting"
]
},
"UpdateAction": {
"title": "UpdateActionMessage",
"description": "A template for messages that execute predetermined actions.",
"allOf": [
{
}
],
"type": "object",
"properties": {
"content": {
"type": "object",
"properties": {
"action": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"data": {
"type": "object",
"description": "Additional data provided as argument when executing the action",
"properties": {
"url": {
"type": "string",
"description": "URL data to be used as argument to the action"
},
"expireDelta": {
"type": "number",
"description": "Expiration timestamp to be used as argument to the action"
}
}
}
},
"additionalProperties": true,
"description": "Optional action to take in addition to showing the notification",
"required": [
"id",
"data"
]
}
},
"additionalProperties": true,
"required": [
"action"
]
},
"template": {
"type": "string",
"const": "update_action"
}
},
"required": [
"targeting"
]
},
"Message": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The message identifier"
},
"groups": {
"description": "Array of preferences used to control `enabled` status of the group. If any is `false` the group is disabled.",
"type": "array",
"items": {
"type": "string",
"description": "Preference name"
}
},
"template": {
"type": "string",
"description": "Which messaging template this message is using.",
"enum": [
"cfr_urlbar_chiclet",
"cfr_doorhanger",
"milestone_message",
"infobar",
"pb_newtab",
"spotlight",
"feature_callout",
"toast_notification",
"toolbar_badge",
"update_action"
]
},
"frequency": {
"type": "object",
"description": "An object containing frequency cap information for a message.",
"properties": {
"lifetime": {
"type": "integer",
"description": "The maximum lifetime impressions for a message.",
"minimum": 1,
"maximum": 100
},
"custom": {
"type": "array",
"description": "An array of custom frequency cap definitions.",
"items": {
"description": "A frequency cap definition containing time and max impression information",
"type": "object",
"properties": {
"period": {
"type": "integer",
"description": "Period of time in milliseconds (e.g. 86400000 for one day)"
},
"cap": {
"type": "integer",
"description": "The maximum impressions for the message within the defined period.",
"minimum": 1,
"maximum": 100
}
},
"required": [
"period",
"cap"
]
}
}
}
},
"priority": {
"description": "The priority of the message. If there are two competing messages to show, the one with the highest priority will be shown",
"type": "integer"
},
"order": {
"description": "The order in which messages should be shown. Messages will be shown in increasing order.",
"type": "integer"
},
"targeting": {
"description": "A JEXL expression representing targeting information",
"type": "string"
},
"trigger": {
"description": "An action to trigger potentially showing the message",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A string identifying the trigger action"
},
"params": {
"type": "array",
"description": "An optional array of string parameters for the trigger action",
"items": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
]
}
}
},
"required": [
"id"
]
},
"provider": {
"description": "An identifier for the provider of this message, such as \"cfr\" or \"preview\".",
"type": "string"
}
},
"additionalProperties": true,
"dependentRequired": {
"content": [
"id",
"template"
],
"template": [
"id",
"content"
]
}
},
"localizedText": {
"type": "object",
"properties": {
"string_id": {
"description": "Id of localized string to be rendered.",
"type": "string"
}
},
"required": [
"string_id"
]
},
"localizableText": {
"description": "Either a raw string or an object containing the string_id of the localized text",
"oneOf": [
{
"type": "string",
"description": "The string to be rendered."
},
{
}
]
},
"TemplatedMessage": {
"description": "An FxMS message of one of a variety of types.",
"type": "object",
"allOf": [
{
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"cfr_urlbar_chiclet"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"cfr_doorhanger",
"milestone_message"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"infobar"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"pb_newtab"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"spotlight",
"feature_callout"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"toast_notification"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"toolbar_badge"
]
}
},
"required": [
"template"
]
},
"then": {
}
},
{
"if": {
"type": "object",
"properties": {
"template": {
"type": "string",
"enum": [
"update_action"
]
}
},
"required": [
"template"
]
},
"then": {
}
}
]
},
"MultiMessage": {
"description": "An object containing an array of messages.",
"type": "object",
"properties": {
"template": {
"type": "string",
"const": "multi"
},
"messages": {
"type": "array",
"description": "An array of messages.",
"items": {
}
}
},
"required": [
"template",
"messages"
]
}
}
}