消息系统模式

文档

有关 消息系统 的更多信息。

消息

Firefox 消息系统处理的每种消息类型都有 JSON 模式。

它们共同组合到 消息实验 中,通过一个 脚本。这是用于针对消息功能的 Nimbus 实验的模式。所有传入的消息实验都将根据此模式进行验证。

模式更改

要将新的消息类型添加到消息实验模式中

  1. 添加您的消息模板模式。

    您的消息模板模式至少只需要定义以下字段

    • template:一个字符串字段,用于定义消息的标识符。这必须是 constenum 字段。

      例如,Spotlight 的 template 字段如下所示

      { "type": "string", "const": "spotlight" }
      
    • content:一个对象字段,用于定义您每个消息的唯一内容。

    如果您的消息需要 targeting,则必须添加一个 targeting 字段。

    如果您的消息支持触发,则可以使用定义来引用 MessageTrigger 共享定义

    groupsfrequencypriority 字段将自动由您的消息继承。

  2. 确保模式具有 $id 成员。这允许引用(例如,{ "$ref": "#!/$defs/Foo" })在捆绑的模式中工作。有关更多信息,请参阅有关 捆绑 JSON 模式 的文档。

  3. make-schemas.py 中的列表中添加新的模式。

  4. 通过运行构建新的模式

    cd browser/components/asrouter/content-src/schemas/
    ../../../../../mach python make-schemas.py
    
  5. 提交结果。

同样,如果您正在修改消息模式,则必须重新构建生成的模式

cd browser/components/asrouter/content-src/schemas/
../../../../../mach python make-schemas.py

如果您不这样做,Firefox MS 模式 CI 作业 将失败。

您可以通过以下方式在本地运行此操作

cd browser/components/asrouter/content-src/schemas/
../../../../../mach xpcshell extract-test-corpus.js
../../../../../mach python make-schemas.py --check

此测试将重新生成模式并将其与 MessagingExperiment.schema.json 进行比较。如果存在差异,它将失败。该测试还将使用 Experimenter 使用的相同模式验证器验证树内消息列表,以确保我们的模式与 Experimenter 兼容。

共享定义

某些定义在多个模式之间共享。为了避免在它们之间复制和粘贴定义,然后必须手动保持它们更新,我们将它们保存在一个包含这些定义的通用模式中:FxMsCommon.schema.json。任何将在多个模式中重复使用的定义都应添加到通用模式中,该模式的定义将捆绑到生成的模式中。所有对通用模式的引用都将在生成的模式中重写。

此文件中列出的定义为

  • Message,它定义了每个 FxMS 消息中存在的通用字段;

  • MessageTrigger,它定义了一种可能触发向用户呈现消息的方法;

  • localizableText,用于可以使用字符串或字符串 ID(用于翻译目的)的情况;以及

  • localizedText,用于需要字符串 ID 的情况。

以下是在消息模式中使用 localizableText 定义的示例

{
  "type": "object",
  "properties": {
    "message": {
      "$ref": "file:///FxMSCommon.schema.json#/$defs/localizableText"
      "description": "The message as a string or string ID"
    },
  }
}

模式测试

我们在树内有测试(Test_CFRMessageProviderTest_OnboardingMessageProviderTest_PanelTestProvider),它们使用生成的模式验证现有消息。

我们还对确保模式在 Experimenter 中正常工作进行了兼容性测试。 Experimenter 使用不同的 JSON 模式验证库,该库在 Firefox MS 模式 CI 作业 中重复使用。此测试使用与 Experimenter 相同的 JSON 模式验证库和配置验证来自 CFRMessageProviderOnboardingMessageProviderPanelTestProvider 的测试语料库。

请参阅 以上内容,了解如何运行这些测试。

触发器和操作