forked from mirrors/gecko-dev
1601 lines
53 KiB
JSON
1601 lines
53 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "resource://activity-stream/schemas/MessagingExperiment.schema.json",
|
|
"title": "Messaging Experiment",
|
|
"description": "A Firefox Messaging System message.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"cfr_urlbar_chiclet"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/CFRUrlbarChiclet"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"cfr_doorhanger",
|
|
"milestone_message"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ExtensionDoorhanger"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"infobar"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/InfoBar"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"pb_newtab"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/NewtabPromoMessage"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"protections_panel"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ProtectionsPanelMessage"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"spotlight",
|
|
"feature_callout"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Spotlight"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"toast_notification"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ToastNotification"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"toolbar_badge"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ToolbarBadgeMessage"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"update_action"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/UpdateAction"
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"type": "object",
|
|
"properties": {
|
|
"template": {
|
|
"type": "string",
|
|
"enum": [
|
|
"whatsnew_panel_message"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"template"
|
|
]
|
|
},
|
|
"then": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/WhatsNewMessage"
|
|
}
|
|
}
|
|
],
|
|
"$defs": {
|
|
"CFRUrlbarChiclet": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///CFRUrlbarChiclet.schema.json",
|
|
"title": "CFRUrlbarChiclet",
|
|
"description": "A template with a chiclet button with text.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///ExtensionDoorhanger.schema.json",
|
|
"title": "ExtensionDoorhanger",
|
|
"description": "A template with a heading, addon icon, title and description. No markup allowed.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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."
|
|
},
|
|
"notification_text": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Text for button tooltip used to provide information about the doorhanger."
|
|
}
|
|
},
|
|
"required": [
|
|
"tooltiptext"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"attributes"
|
|
]
|
|
},
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
|
|
}
|
|
]
|
|
},
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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": "file:///ExtensionDoorhanger.schema.json#/$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": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
|
|
"description": "Unique addon ID"
|
|
},
|
|
"title": {
|
|
"$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
|
|
"description": "Addon name"
|
|
},
|
|
"author": {
|
|
"$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
|
|
"description": "Addon author"
|
|
},
|
|
"icon": {
|
|
"$ref": "file:///ExtensionDoorhanger.schema.json#/$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": "file:///ExtensionDoorhanger.schema.json#/$defs/linkUrl",
|
|
"description": "Link that offers more information related to the addon."
|
|
}
|
|
},
|
|
"required": [
|
|
"title",
|
|
"author",
|
|
"icon",
|
|
"amo_url"
|
|
]
|
|
},
|
|
"text": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText",
|
|
"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": "file:///ExtensionDoorhanger.schema.json#/$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"
|
|
]
|
|
},
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
|
|
}
|
|
],
|
|
"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": "file:///ExtensionDoorhanger.schema.json#/$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": "file:///ExtensionDoorhanger.schema.json#/$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": "file:///ExtensionDoorhanger.schema.json#/$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"
|
|
}
|
|
}
|
|
},
|
|
"InfoBar": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///InfoBar.schema.json",
|
|
"title": "InfoBar",
|
|
"description": "A template with an image, test and buttons.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "The text show in the notification box."
|
|
},
|
|
"priority": {
|
|
"description": "Infobar priority level https://searchfox.org/mozilla-central/rev/3aef835f6cb12e607154d56d68726767172571e4/toolkit/content/widgets/notificationbox.js#387",
|
|
"type": "number",
|
|
"minumum": 0,
|
|
"exclusiveMaximum": 10
|
|
},
|
|
"buttons": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"label": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///NewtabPromoMessage.schema.json",
|
|
"title": "PBNewtabPromoMessage",
|
|
"description": "Message shown on the private browsing newtab page.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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",
|
|
"RALLY",
|
|
"VPN",
|
|
"PIN",
|
|
"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"
|
|
]
|
|
},
|
|
"ProtectionsPanelMessage": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///ProtectionsPanelMessage.schema.json",
|
|
"title": "ProtectionsPanelMessage",
|
|
"description": "A message shown in the protections panel.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {
|
|
"description": "The message title.",
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText"
|
|
},
|
|
"body": {
|
|
"description": "The body of the message.",
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText"
|
|
},
|
|
"link_text": {
|
|
"description": "The text of the call to action link.",
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText"
|
|
},
|
|
"cta_type": {
|
|
"description": "The type of URL open action.",
|
|
"type": "string",
|
|
"enum": [
|
|
"OPEN_URL",
|
|
"OPEN_PROTECTION_REPORT",
|
|
"OPEN_ABOUT_PAGE"
|
|
]
|
|
},
|
|
"cta_url": {
|
|
"description": "The URL to open when the call to action is clicked",
|
|
"type": "string",
|
|
"format": "moz-url-format"
|
|
},
|
|
"cta_where": {
|
|
"description": "How to open the cta.",
|
|
"type": "string",
|
|
"enum": [
|
|
"current",
|
|
"tabshifted",
|
|
"tab",
|
|
"save",
|
|
"window"
|
|
]
|
|
}
|
|
},
|
|
"dependantSchemas": {
|
|
"link_text": [
|
|
"cta_type",
|
|
"cta_url"
|
|
],
|
|
"cta_type": [
|
|
"link_text"
|
|
],
|
|
"cta_url": [
|
|
"link_text"
|
|
],
|
|
"cta_where": [
|
|
"link_text"
|
|
]
|
|
},
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"title",
|
|
"body"
|
|
]
|
|
},
|
|
"template": {
|
|
"type": "string",
|
|
"const": "protections_panel"
|
|
},
|
|
"trigger": {
|
|
"description": "An action to trigger potentially showing the message. The action ID `protectionsPanelOpen` is required.",
|
|
"const": {
|
|
"id": "protectionsPanelOpen"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"content",
|
|
"template",
|
|
"trigger"
|
|
],
|
|
"additionalProperties": true
|
|
},
|
|
"Spotlight": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///Spotlight.schema.json",
|
|
"title": "Spotlight",
|
|
"description": "A template with an image, title, content and two buttons.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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"
|
|
}
|
|
},
|
|
"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": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///ToastNotification.schema.json",
|
|
"title": "ToastNotification",
|
|
"description": "A template for toast notifications displayed by the Alert service.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Id of localized string or message override of toast notification title"
|
|
},
|
|
"body": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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"
|
|
},
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"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`."
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"title"
|
|
],
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": true,
|
|
"required": [
|
|
"title",
|
|
"body"
|
|
]
|
|
},
|
|
"template": {
|
|
"type": "string",
|
|
"const": "toast_notification"
|
|
}
|
|
},
|
|
"required": [
|
|
"content",
|
|
"targeting",
|
|
"template",
|
|
"trigger"
|
|
],
|
|
"additionalProperties": true
|
|
},
|
|
"ToolbarBadgeMessage": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///ToolbarBadgeMessage.schema.json",
|
|
"title": "ToolbarBadgeMessage",
|
|
"description": "A template that specifies to which element in the browser toolbar to add a notification.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText",
|
|
"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": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///UpdateAction.schema.json",
|
|
"title": "UpdateActionMessage",
|
|
"description": "A template for messages that execute predetermined actions.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"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"
|
|
]
|
|
},
|
|
"WhatsNewMessage": {
|
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
"$id": "file:///WhatsNewMessage.schema.json",
|
|
"title": "WhatsNewMessage",
|
|
"description": "A template for the messages that appear in the What's New panel.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
|
|
}
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"content": {
|
|
"type": "object",
|
|
"properties": {
|
|
"layout": {
|
|
"description": "Different message layouts",
|
|
"enum": [
|
|
"tracking-protections"
|
|
]
|
|
},
|
|
"bucket_id": {
|
|
"type": "string",
|
|
"description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting."
|
|
},
|
|
"published_date": {
|
|
"type": "integer",
|
|
"description": "The date/time (number of milliseconds elapsed since January 1, 1970 00:00:00 UTC) the message was published."
|
|
},
|
|
"title": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Id of localized string or message override of What's New message title"
|
|
},
|
|
"subtitle": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Id of localized string or message override of What's New message subtitle"
|
|
},
|
|
"body": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Id of localized string or message override of What's New message body"
|
|
},
|
|
"link_text": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "(optional) Id of localized string or message override of What's New message link text"
|
|
},
|
|
"cta_url": {
|
|
"description": "Target URL for the What's New message.",
|
|
"type": "string",
|
|
"format": "moz-url-format"
|
|
},
|
|
"cta_type": {
|
|
"description": "Type of url open action",
|
|
"enum": [
|
|
"OPEN_URL",
|
|
"OPEN_ABOUT_PAGE",
|
|
"OPEN_PROTECTION_REPORT"
|
|
]
|
|
},
|
|
"cta_where": {
|
|
"description": "How to open the cta: new window, tab, focused, unfocused.",
|
|
"enum": [
|
|
"current",
|
|
"tabshifted",
|
|
"tab",
|
|
"save",
|
|
"window"
|
|
]
|
|
},
|
|
"icon_url": {
|
|
"description": "(optional) URL for the What's New message icon.",
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"icon_alt": {
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
|
|
"description": "Alt text for image."
|
|
}
|
|
},
|
|
"additionalProperties": true,
|
|
"required": [
|
|
"published_date",
|
|
"title",
|
|
"body",
|
|
"cta_url",
|
|
"bucket_id"
|
|
]
|
|
},
|
|
"template": {
|
|
"type": "string",
|
|
"const": "whatsnew_panel_message"
|
|
}
|
|
},
|
|
"required": [
|
|
"order"
|
|
],
|
|
"additionalProperties": true
|
|
},
|
|
"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",
|
|
"protections_panel",
|
|
"spotlight",
|
|
"feature_callout",
|
|
"toast_notification",
|
|
"toolbar_badge",
|
|
"update_action",
|
|
"whatsnew_panel_message"
|
|
]
|
|
},
|
|
"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": {
|
|
"id": [
|
|
"content",
|
|
"template"
|
|
],
|
|
"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."
|
|
},
|
|
{
|
|
"$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|