content: {
    "$defs": {
      "CFRUrlbarChiclet": {
        "$id": "file:///CFRUrlbarChiclet.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template with a chiclet button with text.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "action": {
                "additionalProperties": true,
                "properties": {
                  "url": {
                    "description": "The page to open when the button is clicked.",
                    "format": "moz-url-format",
                    "type": "string"
                  },
                  "where": {
                    "description": "Should it open in a new tab or the current tab",
                    "enum": [
                      "current",
                      "tabshifted"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "url",
                  "where"
                ],
                "type": "object"
              },
              "active_color": {
                "description": "Background color of the button",
                "type": "string"
              },
              "bucket_id": {
                "description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting.",
                "type": "string"
              },
              "category": {
                "description": "Attribute used for different groups of messages from the same provider",
                "type": "string"
              },
              "layout": {
                "description": "Describes how content should be displayed.",
                "enum": [
                  "chiclet_open_url"
                ],
                "type": "string"
              },
              "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."
              }
            },
            "required": [
              "layout",
              "category",
              "bucket_id",
              "notification_text",
              "action"
            ],
            "type": "object"
          },
          "template": {
            "const": "cfr_urlbar_chiclet",
            "type": "string"
          }
        },
        "required": [
          "targeting",
          "trigger"
        ],
        "title": "CFRUrlbarChiclet",
        "type": "object"
      },
      "ExtensionDoorhanger": {
        "$defs": {
          "linkUrl": {
            "description": "Target for links or buttons",
            "format": "uri",
            "type": "string"
          },
          "plainText": {
            "description": "Plain text (no HTML allowed)",
            "type": "string"
          }
        },
        "$id": "file:///ExtensionDoorhanger.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template with a heading, addon icon, title and description. No markup allowed.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "if": {
              "properties": {
                "skip_address_bar_notifier": {
                  "anyOf": [
                    {
                      "const": "false"
                    },
                    {
                      "const": null
                    }
                  ]
                }
              }
            },
            "properties": {
              "addon": {
                "description": "Addon information including AMO URL.",
                "properties": {
                  "amo_url": {
                    "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/linkUrl",
                    "description": "Link that offers more information related to the addon."
                  },
                  "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."
                  },
                  "id": {
                    "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
                    "description": "Unique addon ID"
                  },
                  "rating": {
                    "description": "Star rating",
                    "type": "string"
                  },
                  "title": {
                    "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
                    "description": "Addon name"
                  },
                  "users": {
                    "description": "Installed users",
                    "type": "string"
                  }
                },
                "required": [
                  "title",
                  "author",
                  "icon",
                  "amo_url"
                ],
                "type": "object"
              },
              "alt_anchor_id": {
                "description": "An alternate DOM element ID that the pop-over will be anchored.",
                "type": "string"
              },
              "anchor_id": {
                "description": "A DOM element ID that the pop-over will be anchored.",
                "type": "string"
              },
              "bucket_id": {
                "description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting.",
                "type": "string"
              },
              "buttons": {
                "description": "The label and functionality for the buttons in the pop-over.",
                "properties": {
                  "primary": {
                    "properties": {
                      "action": {
                        "properties": {
                          "data": {
                            "properties": {
                              "url": {
                                "$comment": "This is dynamically generated from the addon.id. See CFRPageActions.jsm",
                                "description": "URL used in combination with the primary action dispatched.",
                                "type": "string"
                              }
                            }
                          },
                          "type": {
                            "description": "Action dispatched by the button.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "label": {
                        "description": "Id of localized string or message override.",
                        "oneOf": [
                          {
                            "properties": {
                              "attributes": {
                                "description": "Button attributes.",
                                "properties": {
                                  "accesskey": {
                                    "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.",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "accesskey"
                                ],
                                "type": "object"
                              },
                              "value": {
                                "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText",
                                "description": "Button label override used when a localized version is not available."
                              }
                            },
                            "required": [
                              "value",
                              "attributes"
                            ]
                          },
                          {
                            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
                          }
                        ],
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "secondary": {
                    "items": {
                      "properties": {
                        "action": {
                          "properties": {
                            "data": {
                              "properties": {
                                "url": {
                                  "allOf": [
                                    {
                                      "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/linkUrl"
                                    },
                                    {
                                      "description": "URL used in combination with the primary action dispatched."
                                    }
                                  ]
                                }
                              }
                            },
                            "type": {
                              "description": "Action dispatched by the button.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "label": {
                          "description": "Id of localized string or message override.",
                          "oneOf": [
                            {
                              "properties": {
                                "attributes": {
                                  "description": "Button attributes.",
                                  "properties": {
                                    "accesskey": {
                                      "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.",
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "accesskey"
                                  ],
                                  "type": "object"
                                },
                                "value": {
                                  "allOf": [
                                    {
                                      "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText"
                                    },
                                    {
                                      "description": "Button label override used when a localized version is not available."
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "value",
                                "attributes"
                              ]
                            },
                            {
                              "properties": {
                                "string_id": {
                                  "allOf": [
                                    {
                                      "$ref": "file:///ExtensionDoorhanger.schema.json#/$defs/plainText"
                                    },
                                    {
                                      "description": "Id of localized string for button"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "string_id"
                              ]
                            }
                          ],
                          "type": "object"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "category": {
                "description": "Attribute used for different groups of messages from the same provider",
                "type": "string"
              },
              "descriptionDetails": {
                "description": "Additional information and steps on how to use",
                "properties": {
                  "steps": {
                    "description": "Array of string_ids",
                    "items": {
                      "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText",
                      "description": "Id of string to localized addon description"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "steps"
                ],
                "type": "object"
              },
              "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_class": {
                "description": "CSS class of the pop-over icon.",
                "type": "string"
              },
              "icon_dark_theme": {
                "description": "Pop-over icon, dark theme variant. Should be 32x32px or 64x64px and png/svg.",
                "type": "string"
              },
              "info_icon": {
                "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": [
                      {
                        "properties": {
                          "attributes": {
                            "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"
                            ],
                            "type": "object"
                          }
                        },
                        "required": [
                          "attributes"
                        ],
                        "type": "object"
                      },
                      {
                        "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
                      }
                    ]
                  },
                  "sumo_path": {
                    "description": "Last part of the path in the URL to the support page with the information about the doorhanger.",
                    "examples": [
                      "extensionpromotions",
                      "extensionrecommendations"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "layout": {
                "description": "Attribute used for different groups of messages from the same provider",
                "enum": [
                  "short_message",
                  "icon_and_message",
                  "addon_recommendation"
                ],
                "type": "string"
              },
              "learn_more": {
                "description": "Last part of the path in the SUMO URL to the support page with the information about the doorhanger.",
                "examples": [
                  "extensionpromotions",
                  "extensionrecommendations"
                ],
                "type": "string"
              },
              "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."
              },
              "persistent_doorhanger": {
                "description": "Prevent the doorhanger from being dismissed if user interacts with the page or switches between applications.",
                "type": "boolean"
              },
              "show_in_private_browsing": {
                "description": "Whether to allow the message to be shown in private browsing mode. Defaults to false.",
                "type": "boolean"
              },
              "skip_address_bar_notifier": {
                "description": "Skip the 'Recommend' notifier and show directly.",
                "type": "boolean"
              },
              "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."
              }
            },
            "required": [
              "layout",
              "bucket_id",
              "heading_text",
              "text",
              "buttons"
            ],
            "then": {
              "required": [
                "category",
                "notification_text"
              ]
            },
            "type": "object"
          },
          "template": {
            "enum": [
              "cfr_doorhanger",
              "milestone_message"
            ],
            "type": "string"
          }
        },
        "required": [
          "targeting",
          "trigger"
        ],
        "title": "ExtensionDoorhanger",
        "type": "object"
      },
      "InfoBar": {
        "$defs": {
          "linkUrl": {
            "description": "Target for links or buttons",
            "format": "uri",
            "type": "string"
          },
          "plainText": {
            "description": "Plain text (no HTML allowed)",
            "type": "string"
          }
        },
        "$id": "file:///InfoBar.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template with an image, test and buttons.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "buttons": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "accessKey": {
                      "description": "Keyboard shortcut letter.",
                      "type": "string"
                    },
                    "action": {
                      "additionalProperties": true,
                      "properties": {
                        "data": {
                          "type": "object"
                        },
                        "type": {
                          "description": "Action dispatched by the button.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "type"
                      ],
                      "type": "object"
                    },
                    "label": {
                      "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                      "description": "The text label of the button."
                    },
                    "primary": {
                      "description": "Is this the primary button?",
                      "type": "boolean"
                    },
                    "supportPage": {
                      "description": "A page title on SUMO to link to",
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "action"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "priority": {
                "description": "Infobar priority level https://searchfox.org/mozilla-central/rev/3aef835f6cb12e607154d56d68726767172571e4/toolkit/content/widgets/notificationbox.js#387",
                "exclusiveMaximum": 10,
                "minumum": 0,
                "type": "number"
              },
              "text": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "The text show in the notification box."
              },
              "type": {
                "description": "Should the message be global (persisted across tabs) or local (disappear when switching to a different tab).",
                "enum": [
                  "global",
                  "tab"
                ],
                "type": "string"
              }
            },
            "required": [
              "text",
              "buttons"
            ],
            "type": "object"
          },
          "template": {
            "const": "infobar",
            "type": "string"
          }
        },
        "required": [
          "targeting",
          "trigger"
        ],
        "title": "InfoBar",
        "type": "object"
      },
      "Message": {
        "additionalProperties": true,
        "dependentRequired": {
          "content": [
            "id",
            "template"
          ],
          "template": [
            "id",
            "content"
          ]
        },
        "properties": {
          "frequency": {
            "description": "An object containing frequency cap information for a message.",
            "properties": {
              "custom": {
                "description": "An array of custom frequency cap definitions.",
                "items": {
                  "description": "A frequency cap definition containing time and max impression information",
                  "properties": {
                    "cap": {
                      "description": "The maximum impressions for the message within the defined period.",
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "period": {
                      "description": "Period of time in milliseconds (e.g. 86400000 for one day)",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "period",
                    "cap"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "lifetime": {
                "description": "The maximum lifetime impressions for a message.",
                "maximum": 100,
                "minimum": 1,
                "type": "integer"
              }
            },
            "type": "object"
          },
          "groups": {
            "description": "Array of preferences used to control `enabled` status of the group. If any is `false` the group is disabled.",
            "items": {
              "description": "Preference name",
              "type": "string"
            },
            "type": "array"
          },
          "id": {
            "description": "The message identifier",
            "type": "string"
          },
          "order": {
            "description": "The order in which messages should be shown. Messages will be shown in increasing order.",
            "type": "integer"
          },
          "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"
          },
          "provider": {
            "description": "An identifier for the provider of this message, such as \"cfr\" or \"preview\".",
            "type": "string"
          },
          "targeting": {
            "description": "A JEXL expression representing targeting information",
            "type": "string"
          },
          "template": {
            "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"
            ],
            "type": "string"
          },
          "trigger": {
            "description": "An action to trigger potentially showing the message",
            "properties": {
              "id": {
                "description": "A string identifying the trigger action",
                "type": "string"
              },
              "params": {
                "description": "An optional array of string parameters for the trigger action",
                "items": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "string"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        },
        "type": "object"
      },
      "MultiMessage": {
        "description": "An object containing an array of messages.",
        "properties": {
          "messages": {
            "description": "An array of messages.",
            "items": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/TemplatedMessage"
            },
            "type": "array"
          },
          "template": {
            "const": "multi",
            "type": "string"
          }
        },
        "required": [
          "template",
          "messages"
        ],
        "type": "object"
      },
      "NewtabPromoMessage": {
        "$id": "file:///NewtabPromoMessage.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "Message shown on the private browsing newtab page.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "allOf": [
              {
                "if": {
                  "properties": {
                    "promoEnabled": {
                      "const": true
                    }
                  },
                  "required": [
                    "promoEnabled"
                  ]
                },
                "then": {
                  "required": [
                    "promoButton"
                  ]
                }
              },
              {
                "if": {
                  "properties": {
                    "infoEnabled": {
                      "const": true
                    }
                  },
                  "required": [
                    "infoEnabled"
                  ]
                },
                "then": {
                  "if": {
                    "properties": {
                      "infoTitleEnabled": {
                        "const": true
                      }
                    },
                    "required": [
                      "infoTitleEnabled"
                    ]
                  },
                  "required": [
                    "infoLinkText"
                  ],
                  "then": {
                    "required": [
                      "infoTitle"
                    ]
                  }
                }
              }
            ],
            "properties": {
              "hideDefault": {
                "description": "Should we hide the default promo after the experiment promo is dismissed.",
                "type": "boolean"
              },
              "infoBody": {
                "description": "Text content in the info section.",
                "type": "string"
              },
              "infoEnabled": {
                "description": "Should we show the info section.",
                "type": "boolean"
              },
              "infoIcon": {
                "description": "Icon shown in the left side of the info section. Default is the private browsing icon.",
                "type": "string"
              },
              "infoLinkText": {
                "description": "Text for the link in the info section.",
                "type": "string"
              },
              "infoLinkUrl": {
                "description": "URL for the info section link.",
                "format": "moz-url-format",
                "type": "string"
              },
              "infoTitle": {
                "description": "Is the title in the info section enabled.",
                "type": "string"
              },
              "infoTitleEnabled": {
                "description": "Is the title in the info section enabled.",
                "type": "boolean"
              },
              "promoButton": {
                "properties": {
                  "action": {
                    "additionalProperties": true,
                    "properties": {
                      "data": {
                        "type": "object"
                      },
                      "type": {
                        "description": "Action dispatched by the button.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "action"
                ],
                "type": "object"
              },
              "promoEnabled": {
                "description": "Should we show the promo section.",
                "type": "boolean"
              },
              "promoHeader": {
                "description": "The title of the promo section.",
                "type": "string"
              },
              "promoImageLarge": {
                "description": "URL for image used on the left side of the promo box, larger, showcases some feature. Default off.",
                "format": "uri",
                "type": "string"
              },
              "promoImageSmall": {
                "description": "URL for image used on the right side of the promo box, smaller, usually a logo. Default off.",
                "format": "uri",
                "type": "string"
              },
              "promoLinkText": {
                "description": "The text of the link in the promo box.",
                "type": "string"
              },
              "promoLinkType": {
                "description": "Type of promo link type. Possible values: link, button. Default is link.",
                "enum": [
                  "link",
                  "button"
                ],
                "type": "string"
              },
              "promoSectionStyle": {
                "description": "Sets the position of the promo section. Possible values are: top, below-search, bottom. Default bottom.",
                "enum": [
                  "top",
                  "below-search",
                  "bottom"
                ],
                "type": "string"
              },
              "promoTitle": {
                "description": "The text content of the promo section.",
                "type": "string"
              },
              "promoTitleEnabled": {
                "description": "Should we show text content in the promo section.",
                "type": "boolean"
              },
              "promoType": {
                "description": "Promo type used to determine if promo should show to a given user",
                "enum": [
                  "FOCUS",
                  "VPN",
                  "PIN",
                  "COOKIE_BANNERS",
                  "OTHER"
                ],
                "type": "string"
              }
            },
            "type": "object"
          },
          "template": {
            "const": "pb_newtab",
            "type": "string"
          }
        },
        "required": [
          "targeting"
        ],
        "title": "PBNewtabPromoMessage",
        "type": "object"
      },
      "ProtectionsPanelMessage": {
        "$id": "file:///ProtectionsPanelMessage.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A message shown in the protections panel.",
        "properties": {
          "content": {
            "additionalProperties": false,
            "dependantSchemas": {
              "cta_type": [
                "link_text"
              ],
              "cta_url": [
                "link_text"
              ],
              "cta_where": [
                "link_text"
              ],
              "link_text": [
                "cta_type",
                "cta_url"
              ]
            },
            "properties": {
              "body": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "The body of the message."
              },
              "cta_type": {
                "description": "The type of URL open action.",
                "enum": [
                  "OPEN_URL",
                  "OPEN_PROTECTION_REPORT",
                  "OPEN_ABOUT_PAGE"
                ],
                "type": "string"
              },
              "cta_url": {
                "description": "The URL to open when the call to action is clicked",
                "format": "moz-url-format",
                "type": "string"
              },
              "cta_where": {
                "description": "How to open the cta.",
                "enum": [
                  "current",
                  "tabshifted",
                  "tab",
                  "save",
                  "window"
                ],
                "type": "string"
              },
              "link_text": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "The text of the call to action link."
              },
              "title": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "The message title."
              }
            },
            "required": [
              "title",
              "body"
            ],
            "type": "object"
          },
          "template": {
            "const": "protections_panel",
            "type": "string"
          },
          "trigger": {
            "const": {
              "id": "protectionsPanelOpen"
            },
            "description": "An action to trigger potentially showing the message. The action ID `protectionsPanelOpen` is required."
          }
        },
        "required": [
          "content",
          "template",
          "trigger"
        ],
        "title": "ProtectionsPanelMessage",
        "type": "object"
      },
      "Spotlight": {
        "$id": "file:///Spotlight.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template with an image, title, content and two buttons.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "backdrop": {
                "description": "Background css behind modal content",
                "type": "string"
              },
              "disableHistoryUpdates": {
                "description": "Don't alter the browser session's history stack - used with messaging surfaces like Feature Callouts",
                "type": "boolean"
              },
              "logo": {
                "additionalProperties": true,
                "properties": {
                  "imageId": {
                    "description": "The ID for a remotely hosted image",
                    "type": "string"
                  },
                  "imageURL": {
                    "description": "URL for image to use with the content",
                    "type": "string"
                  },
                  "size": {
                    "description": "The logo size.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "screens": {
                "description": "Collection of individual screen content",
                "type": "array"
              },
              "startScreen": {
                "description": "Index of first screen to show from message, defaulting to 0",
                "type": "integer"
              },
              "template": {
                "const": "multistage",
                "description": "Specify the layout template for the Spotlight",
                "type": "string"
              },
              "transitions": {
                "description": "Show transitions within and between screens",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "template": {
            "description": "Specify whether the surface is shown as a Spotlight modal or an in-surface Feature Callout dialog",
            "enum": [
              "spotlight",
              "feature_callout"
            ],
            "type": "string"
          }
        },
        "required": [
          "targeting"
        ],
        "title": "Spotlight",
        "type": "object"
      },
      "TemplatedMessage": {
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "cfr_urlbar_chiclet"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/CFRUrlbarChiclet"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "cfr_doorhanger",
                    "milestone_message"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ExtensionDoorhanger"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "infobar"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/InfoBar"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "pb_newtab"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/NewtabPromoMessage"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "protections_panel"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ProtectionsPanelMessage"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "spotlight",
                    "feature_callout"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Spotlight"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "toast_notification"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ToastNotification"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "toolbar_badge"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/ToolbarBadgeMessage"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "update_action"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/UpdateAction"
            }
          },
          {
            "if": {
              "properties": {
                "template": {
                  "enum": [
                    "whatsnew_panel_message"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "template"
              ],
              "type": "object"
            },
            "then": {
              "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/WhatsNewMessage"
            }
          }
        ],
        "description": "An FxMS message of one of a variety of types.",
        "type": "object"
      },
      "ToastNotification": {
        "$id": "file:///ToastNotification.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template for toast notifications displayed by the Alert service.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "actions": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "action": {
                      "description": "Opaque identifer that identifies action.",
                      "type": "string"
                    },
                    "iconURL": {
                      "description": "URL of an icon to display with the action.",
                      "format": "uri",
                      "type": "string"
                    },
                    "title": {
                      "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                      "description": "The action text to be shown to the user."
                    },
                    "windowsSystemActivationType": {
                      "description": "Whether to have Windows process the given `action`.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "action",
                    "title"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "body": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "Id of localized string or message override of toast notification body"
              },
              "data": {
                "description": "Arbitrary data associated with the toast notification.",
                "type": "object"
              },
              "icon_url": {
                "description": "The URL of the image used as an icon of the toast notification.",
                "format": "moz-url-format",
                "type": "string"
              },
              "image_url": {
                "description": "The URL of an image to be displayed as part of the notification.",
                "format": "moz-url-format",
                "type": "string"
              },
              "launch_url": {
                "description": "The URL to launch when the notification or an action button is clicked.",
                "format": "moz-url-format",
                "type": "string"
              },
              "requireInteraction": {
                "description": "Whether the toast notification should remain active until the user clicks or dismisses it, rather than closing automatically.",
                "type": "boolean"
              },
              "tag": {
                "description": "An identifying tag for the toast notification.",
                "type": "string"
              },
              "title": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "Id of localized string or message override of toast notification title"
              }
            },
            "required": [
              "title",
              "body"
            ],
            "type": "object"
          },
          "template": {
            "const": "toast_notification",
            "type": "string"
          }
        },
        "required": [
          "content",
          "targeting",
          "template",
          "trigger"
        ],
        "title": "ToastNotification",
        "type": "object"
      },
      "ToolbarBadgeMessage": {
        "$id": "file:///ToolbarBadgeMessage.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template that specifies to which element in the browser toolbar to add a notification.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "action": {
                "additionalProperties": true,
                "description": "Optional action to take in addition to showing the notification",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "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'"
              },
              "delay": {
                "description": "Optional delay in ms after which to show the notification",
                "type": "number"
              },
              "target": {
                "type": "string"
              }
            },
            "required": [
              "target"
            ],
            "type": "object"
          },
          "template": {
            "const": "toolbar_badge",
            "type": "string"
          }
        },
        "required": [
          "targeting"
        ],
        "title": "ToolbarBadgeMessage",
        "type": "object"
      },
      "UpdateAction": {
        "$id": "file:///UpdateAction.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template for messages that execute predetermined actions.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "action": {
                "additionalProperties": true,
                "description": "Optional action to take in addition to showing the notification",
                "properties": {
                  "data": {
                    "description": "Additional data provided as argument when executing the action",
                    "properties": {
                      "expireDelta": {
                        "description": "Expiration timestamp to be used as argument to the action",
                        "type": "number"
                      },
                      "url": {
                        "description": "URL data to be used as argument to the action",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "data"
                ],
                "type": "object"
              }
            },
            "required": [
              "action"
            ],
            "type": "object"
          },
          "template": {
            "const": "update_action",
            "type": "string"
          }
        },
        "required": [
          "targeting"
        ],
        "title": "UpdateActionMessage",
        "type": "object"
      },
      "WhatsNewMessage": {
        "$id": "file:///WhatsNewMessage.schema.json",
        "$schema": "https://json-schema.org/draft/2019-09/schema",
        "additionalProperties": true,
        "allOf": [
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/Message"
          }
        ],
        "description": "A template for the messages that appear in the What's New panel.",
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "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"
              },
              "bucket_id": {
                "description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting.",
                "type": "string"
              },
              "cta_type": {
                "description": "Type of url open action",
                "enum": [
                  "OPEN_URL",
                  "OPEN_ABOUT_PAGE",
                  "OPEN_PROTECTION_REPORT"
                ]
              },
              "cta_url": {
                "description": "Target URL for the What's New message.",
                "format": "moz-url-format",
                "type": "string"
              },
              "cta_where": {
                "description": "How to open the cta: new window, tab, focused, unfocused.",
                "enum": [
                  "current",
                  "tabshifted",
                  "tab",
                  "save",
                  "window"
                ]
              },
              "icon_alt": {
                "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizableText",
                "description": "Alt text for image."
              },
              "icon_url": {
                "description": "(optional) URL for the What's New message icon.",
                "format": "uri",
                "type": "string"
              },
              "layout": {
                "description": "Different message layouts",
                "enum": [
                  "tracking-protections"
                ]
              },
              "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"
              },
              "published_date": {
                "description": "The date/time (number of milliseconds elapsed since January 1, 1970 00:00:00 UTC) the message was published.",
                "type": "integer"
              },
              "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"
              },
              "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"
              }
            },
            "required": [
              "published_date",
              "title",
              "body",
              "cta_url",
              "bucket_id"
            ],
            "type": "object"
          },
          "template": {
            "const": "whatsnew_panel_message",
            "type": "string"
          }
        },
        "required": [
          "order"
        ],
        "title": "WhatsNewMessage",
        "type": "object"
      },
      "localizableText": {
        "description": "Either a raw string or an object containing the string_id of the localized text",
        "oneOf": [
          {
            "description": "The string to be rendered.",
            "type": "string"
          },
          {
            "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/localizedText"
          }
        ]
      },
      "localizedText": {
        "properties": {
          "string_id": {
            "description": "Id of localized string to be rendered.",
            "type": "string"
          }
        },
        "required": [
          "string_id"
        ],
        "type": "object"
      }
    },
    "$id": "resource://activity-stream/schemas/MessagingExperiment.schema.json",
    "$schema": "https://json-schema.org/draft/2019-09/schema",
    "description": "A Firefox Messaging System message.",
    "else": {
      "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/TemplatedMessage"
    },
    "if": {
      "properties": {
        "template": {
          "const": "multi"
        }
      },
      "required": [
        "template"
      ],
      "type": "object"
    },
    "then": {
      "$ref": "resource://activity-stream/schemas/MessagingExperiment.schema.json#/$defs/MultiMessage"
    },
    "title": "Messaging Experiment"
  }