{
  "test_description_template": "Mixed-Content: Expects %(expectation)s for %(subresource)s to %(origin)s origin and %(redirection)s redirection from %(source_scheme)s context.",
  "test_page_title_template": "Mixed-Content: %(title)s",
  "specification": [
    {
      // optionally-blockable
      "title": "Optionally-blockable content",
      "description": "Test behavior of optionally-blockable content",
      "specification_url": "http://www.w3.org/TR/mixed-content/#category-optionally-blockable",
      "test_expansion": [
        {
          // opt-in-blocks
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "opt-in",
          "redirection": "*",
          "subresource": [
            "audio-tag",
            "img-tag",
            "video-tag"
          ],
          "origin": [
            "cross-http",
            "same-http"
          ],
          "expectation": "blocked"
        },
        {
          // opt-in-blocks-redirects
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "opt-in",
          "redirection": "swap-scheme",
          "subresource": [
            "audio-tag",
            "img-tag",
            "video-tag"
          ],
          "origin": [
            "same-https",
            "cross-https"
          ],
          "expectation": "blocked"
        },
        {
          // no-opt-in-allows
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "subresource": [
            "audio-tag",
            "img-tag",
            "video-tag"
          ],
          "origin": [
            "cross-http",
            "same-http"
          ],
          "expectation": "allowed"
        }
      ]
    },
    {
      // blockable
      "title": "Blockable content",
      "description": "Test behavior of blockable content.",
      "specification_url": "http://www.w3.org/TR/mixed-content/#category-blockable",
      "test_expansion": [
        {
          // opt-in-blocks
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "opt-in",
          "redirection": "*",
          "subresource": [
            "a-tag",
            "beacon",
            "fetch",
            "link-css-tag",
            "link-prefetch-tag",
            "object-tag",
            "picture-tag",
            "script-tag",
            "sharedworker-classic",
            "sharedworker-import",
            "sharedworker-import-data",
            "sharedworker-module",
            "websocket",
            "worker-classic",
            "worker-import",
            "worker-import-data",
            "worker-module",
            "worklet-animation",
            "worklet-animation-import-data",
            "worklet-audio",
            "worklet-audio-import-data",
            "worklet-layout",
            "worklet-layout-import-data",
            "worklet-paint",
            "worklet-paint-import-data",
            "xhr"
          ],
          "origin": [
            "cross-http",
            "same-http"
          ],
          "expectation": "blocked"
        },
        {
          // opt-in-blocks-redirects
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "opt-in",
          "redirection": "swap-scheme",
          "subresource": [
            "a-tag",
            "beacon",
            "fetch",
            "link-css-tag",
            "link-prefetch-tag",
            "object-tag",
            "picture-tag",
            "script-tag",
            "sharedworker-classic",
            "sharedworker-import",
            "sharedworker-import-data",
            "sharedworker-module",
            "websocket",
            "worker-classic",
            "worker-import",
            "worker-import-data",
            "worker-module",
            "worklet-animation",
            "worklet-animation-import-data",
            "worklet-audio",
            "worklet-audio-import-data",
            "worklet-layout",
            "worklet-layout-import-data",
            "worklet-paint",
            "worklet-paint-import-data",
            "xhr"
          ],
          "origin": [
            "same-https",
            "cross-https"
          ],
          "expectation": "blocked"
        },
        {
          // no-opt-in-blocks
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "subresource": [
            "a-tag",
            "beacon",
            "fetch",
            "link-css-tag",
            "link-prefetch-tag",
            "object-tag",
            "picture-tag",
            "script-tag",
            "sharedworker-classic",
            "sharedworker-import",
            "sharedworker-import-data",
            "sharedworker-module",
            "websocket",
            "worker-classic",
            "worker-import",
            "worker-import-data",
            "worker-module",
            "worklet-animation",
            "worklet-animation-import-data",
            "worklet-audio",
            "worklet-audio-import-data",
            "worklet-layout",
            "worklet-layout-import-data",
            "worklet-paint",
            "worklet-paint-import-data",
            "xhr"
          ],
          "origin": [
            "cross-http",
            "same-http"
          ],
          "expectation": "blocked"
        },
        {
          // ws-downgrade-blocks
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "*",
          "redirection": "*",
          "subresource": "websocket",
          "origin": [
            "cross-ws",
            "same-ws"
          ],
          "expectation": "blocked"
        }
      ]
    },
    {
      // allowed
      "title": "Allowed content",
      "description": "Test behavior of allowed content.",
      "specification_url": "http://www.w3.org/TR/mixed-content/",
      "test_expansion": [
        {
          // allowed
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "*",
          "redirection": [
            "no-redirect",
            "keep-scheme"
          ],
          "subresource": "*",
          "origin": [
            "same-https"
          ],
          "expectation": "allowed"
        },
        {
          // websocket-allowed
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "*",
          "redirection": [
            "no-redirect",
            "keep-scheme"
          ],
          "subresource": "websocket",
          "origin": [
            "same-wss"
          ],
          "expectation": "allowed"
        }
      ]
    }
  ],
  "delivery_key": "mixedContent",
  "excluded_tests": [
    {
      // Skip-redundant-no-opt-in
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": [
        // In certain source_context_lists (workers),
        // this is not redundant because <meta> is not supported.
        "top",
        "srcdoc-inherit",
        "iframe",
        "iframe-blank-inherit",
        "worker-classic-data",
        "worker-module-data",
        "sharedworker-classic-data",
        "sharedworker-module-data"
      ],
      "delivery_type": "http-rp",
      "delivery_value": null,
      "redirection": "*",
      "subresource": "*",
      "origin": "*",
      "expectation": "*"
    },
    {
      // Skip-redundant-for-opt-in-method
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "meta",
      "delivery_value": "opt-in",
      "redirection": [
        "keep-scheme",
        "swap-scheme"
      ],
      "subresource": "*",
      "origin": "*",
      "expectation": "*"
    },
    {
      // source_context_list values not yet tested
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": [
        "req",
        "srcdoc-inherit",
        "srcdoc",
        "iframe",
        "iframe-blank-inherit"
      ],
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "subresource": "*",
      "origin": "*",
      "expectation": "*"
    },
    {
      // subresource values not yet tested
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "subresource": [
        "a-tag",
        "area-tag",
        "iframe-tag",
      ],
      "origin": "*",
      "expectation": "*"
    },
    {
      // redirections that mixed-content tests don't care
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": [
        "keep-origin",
        "swap-origin",
        "downgrade"
      ],
      "origin": "*",
      "subresource": "*",
      "expectation": "*"
    },
  ],
  "source_context_schema": {
    "supported_delivery_type": {
      "top": [
        "http-rp",
        "meta"
      ],
      "iframe": [
        "http-rp",
        "meta"
      ],
      "iframe-blank": [
        "meta"
      ],
      "srcdoc": [
        "meta"
      ],
      "worker-classic": [
        "http-rp"
      ],
      "worker-module": [
        "http-rp"
      ],
      "worker-classic-data": [],
      "worker-module-data": [],
      "sharedworker-classic": [
        "http-rp"
      ],
      "sharedworker-module": [
        "http-rp"
      ],
      "sharedworker-classic-data": [],
      "sharedworker-module-data": []
    }
  },
  "subresource_schema": {
    "supported_delivery_type": {
      "a-tag": [],
      "area-tag": [],
      "audio-tag": [],
      "beacon": [],
      "fetch": [],
      "iframe-tag": [],
      "img-tag": [],
      "link-css-tag": [],
      "link-prefetch-tag": [],
      "object-tag": [],
      "picture-tag": [],
      "script-tag": [],
      "script-tag-dynamic-import": [],
      "sharedworker-classic": [],
      "sharedworker-import": [],
      "sharedworker-import-data": [],
      "sharedworker-module": [],
      "video-tag": [],
      "websocket": [],
      "worker-classic": [],
      "worker-import": [],
      "worker-import-data": [],
      "worker-module": [],
      "worklet-animation": [],
      "worklet-animation-import-data": [],
      "worklet-audio": [],
      "worklet-audio-import-data": [],
      "worklet-layout": [],
      "worklet-layout-import-data": [],
      "worklet-paint": [],
      "worklet-paint-import-data": [],
      "xhr": []
    }
  },
  "test_expansion_schema": {
    "delivery_type": [
      "http-rp",
      "meta"
    ],
    "delivery_value": [
      null,
      "opt-in"
    ],
    "expectation": [
      "allowed",
      "blocked"
    ]
  }
}
