{
  "test_description_template": "Referrer Policy: Expects %(expectation)s for %(subresource)s to %(origin)s origin and %(redirection)s redirection from %(source_scheme)s context.",
  "test_page_title_template": "Referrer-Policy: %(title)s",
  "specification": [
    {
      // unset-referrer-policy
      "title": "Referrer Policy is not explicitly defined",
      "description": "Check that referrer URL follows the strict-origin-when-cross-origin policy when no explicit Referrer Policy is set.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policies",
      "test_expansion": [
        {
          // same-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-insecure
          "expansion": "override",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "swap-origin",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": "cross-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // upgrade-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // downgrade-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // same-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-secure
          "expansion": "override",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "swap-origin",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": null,
          "redirection": "*",
          "origin": "cross-https",
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // meta tag default
      "title": "<meta rel=referrer> is set to the legacy keyword 'default'",
      "description": "Check that the 'default' legacy keyword results in behavior equivalent to the default policy (currently strict-origin-when-cross-origin)",
      "specification_url": "https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element",
      "test_expansion": [
        {
          // same-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-insecure
          "expansion": "override",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "swap-origin",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": "cross-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // upgrade-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // downgrade-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // same-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-secure
          "expansion": "override",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "swap-origin",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "default",
          "redirection": "*",
          "origin": "cross-https",
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // no-referrer
      "title": "Referrer Policy is set to 'no-referrer'",
      "description": "Check that sub-resource never gets the referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer",
      "test_expansion": [
        {
          // generic
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "no-referrer",
          "redirection": "*",
          "origin": "*",
          "subresource": "*",
          "expectation": "omitted"
        }
      ]
    },
    {
      // meta tag never
      "title": "<meta rel=referrer> is set to the legacy value 'never'",
      "description": "Check that the legacy <meta> value 'never' is equivalent to the 'no-referrer' policy",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer",
      "test_expansion": [
        {
          // generic
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "never",
          "redirection": "*",
          "origin": "*",
          "subresource": "*",
          "expectation": "omitted"
        }
      ]
    },
    {
      // no-referrer-when-downgrade
      "title": "Referrer Policy is set to 'no-referrer-when-downgrade'",
      "description": "Check that non a priori insecure subresource gets the full Referrer URL. A priori insecure subresource gets no referrer information.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer-when-downgrade",
      "test_expansion": [
        {
          // insecure-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "no-referrer-when-downgrade",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // upgrade-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "no-referrer-when-downgrade",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // downgrade-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "no-referrer-when-downgrade",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // secure-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "no-referrer-when-downgrade",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "stripped-referrer"
        }
      ]
    },
    {
      // origin
      "title": "Referrer Policy is set to 'origin'",
      "description": "Check that all subresources in all casses get only the origin portion of the referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-origin",
      "test_expansion": [
        {
          // generic
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin",
          "redirection": "*",
          "origin": "*",
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // same-origin
      "title": "Referrer Policy is set to 'same-origin'",
      "description": "Check that cross-origin subresources get no referrer information and same-origin get the stripped referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-same-origin",
      "test_expansion": [
        {
          // same-origin-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "same-origin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-secure-default
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "same-origin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-insecure
          "expansion": "override",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "same-origin",
          "redirection": "swap-origin",
          "origin": [
            "same-http",
            "same-https"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // cross-origin
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "same-origin",
          "redirection": "*",
          "origin": [
            "cross-http",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "omitted"
        }
      ]
    },
    {
      // origin-when-cross-origin
      "title": "Referrer Policy is set to 'origin-when-cross-origin'",
      "description": "Check that cross-origin subresources get the origin portion of the referrer URL and same-origin get the stripped referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-origin-when-cross-origin",
      "test_expansion": [
        {
          // same-origin-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-secure-default
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-upgrade
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // same-origin-downgrade
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // same-origin-insecure
          "expansion": "override",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "swap-origin",
          "origin": [
            "same-http",
            "same-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-origin
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "origin-when-cross-origin",
          "redirection": "*",
          "origin": [
            "cross-http",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // meta tag origin-when-crossorigin
      "title": "<meta rel=referrer> is set to the legacy value 'origin-when-crossorigin'",
      "description": "Check that the legacy <meta> value 'origin-when-crossorigin' is equivalent to the 'origin-when-cross-origin' policy",
      "specification_url": "https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element",
      "test_expansion": [
        {
          // same-origin-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-secure-default
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-origin-upgrade
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // same-origin-downgrade
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // same-origin-insecure
          "expansion": "override",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "swap-origin",
          "origin": [
            "same-http",
            "same-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-origin
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "origin-when-crossorigin",
          "redirection": "*",
          "origin": [
            "cross-http",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // strict-origin
      "title": "Referrer Policy is set to 'strict-origin'",
      "description": "Check that non a priori insecure subresource gets only the origin portion of the referrer URL. A priori insecure subresource gets no referrer information.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-strict-origin",
      "test_expansion": [
        {
          // insecure-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // upgrade-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // downgrade-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // secure-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // strict-origin-when-cross-origin
      "title": "Referrer Policy is set to 'strict-origin-when-cross-origin'",
      "description": "Check that a priori insecure subresource gets no referrer information. Otherwise, cross-origin subresources get the origin portion of the referrer URL and same-origin get the stripped referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-strict-origin-when-cross-origin",
      "test_expansion": [
        {
          // same-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-insecure
          "expansion": "override",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "swap-origin",
          "origin": "same-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-insecure
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": "cross-http",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // upgrade-protocol
          "expansion": "default",
          "source_scheme": "http",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": [
            "same-https",
            "cross-https"
          ],
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // downgrade-protocol
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": [
            "same-http",
            "cross-http"
          ],
          "subresource": "*",
          "expectation": "omitted"
        },
        {
          // same-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "stripped-referrer"
        },
        {
          // same-secure
          "expansion": "override",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "swap-origin",
          "origin": "same-https",
          "subresource": "*",
          "expectation": "origin"
        },
        {
          // cross-secure
          "expansion": "default",
          "source_scheme": "https",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "strict-origin-when-cross-origin",
          "redirection": "*",
          "origin": "cross-https",
          "subresource": "*",
          "expectation": "origin"
        }
      ]
    },
    {
      // unsafe-url
      "title": "Referrer Policy is set to 'unsafe-url'",
      "description": "Check that all sub-resources get the stripped referrer URL.",
      "specification_url": "https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-unsafe-url",
      "test_expansion": [
        {
          // generic
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "*",
          "delivery_value": "unsafe-url",
          "redirection": "*",
          "origin": "*",
          "subresource": "*",
          "expectation": "stripped-referrer"
        }
      ]
    },
    {
      // meta tag always
      "title": "<meta rel=referrer> is set to the legacy value 'always'",
      "description": "Check that the legacy <meta> value 'always' is equivalent to the 'unsafe-url' policy",
      "specification_url": "https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element",
      "test_expansion": [
        {
          // generic
          "expansion": "default",
          "source_scheme": "*",
          "source_context_list": "*",
          "delivery_type": "meta",
          "delivery_value": "always",
          "redirection": "*",
          "origin": "*",
          "subresource": "*",
          "expectation": "stripped-referrer"
        }
      ]
    }
  ],
  "delivery_key": "referrerPolicy",
  "excluded_tests": [
    {
      // upgraded-protocol-workers
      "expansion": "*",
      "source_scheme": "http",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "origin": [
        "same-https",
        "cross-https"
      ],
      "subresource": [
        "worker-classic",
        "worker-module",
        "sharedworker-classic",
        "sharedworker-module"
      ],
      "expectation": "*"
    },
    {
      // mixed-content-insecure-subresources
      "expansion": "*",
      "source_scheme": "https",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "origin": [
        "same-http",
        "same-http-downgrade",
        "cross-http",
        "cross-http-downgrade",
        "same-ws",
        "same-ws-downgrade",
        "cross-ws",
        "cross-ws-downgrade"
      ],
      "subresource": "*",
      "expectation": "*"
    },
    {
      // overhead-for-redirection
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": [
        "keep-origin",
        "swap-origin"
      ],
      "origin": "*",
      "subresource": [
        "a-tag",
        "area-tag"
      ],
      "expectation": "*"
    },
    {
      // source-https-unsupported-by-web-platform-tests-runners
      "expansion": "*",
      "source_scheme": "https",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "origin": "*",
      "subresource": "*",
      "expectation": "*"
    },
    {
      // <link rel=noreferrer>'s delivery_value should be no-referrer
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "rel-noref",
      "delivery_value": [
        null,
        "no-referrer-when-downgrade",
        "same-origin",
        "origin",
        "origin-when-cross-origin",
        "strict-origin",
        "strict-origin-when-cross-origin",
        "unsafe-url"
      ],
      "redirection": "*",
      "origin": "*",
      "subresource": "*",
      "expectation": "*"
    },
    {
      // redirections that referrer-policy tests don't care
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": [
        "keep-scheme",
        "swap-scheme",
        "downgrade"
      ],
      "origin": "*",
      "subresource": "*",
      "expectation": "*"
    },
    {
      // origins that referrer-policy tests don't care
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "origin": [
        "same-http-downgrade",
        "cross-http-downgrade",
        "same-ws-downgrade",
        "cross-ws-downgrade"
      ],
      "subresource": "*",
      "expectation": "*"
    },
    {
      // subresource values not yet tested
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": "*",
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "subresource": [
        "area-tag",
        "audio-tag",
        "beacon",
        "link-css-tag",
        "link-prefetch-tag",
        "object-tag",
        "picture-tag",
        "sharedworker-import",
        "sharedworker-import-data",
        "video-tag",
        "websocket",
        "worker-import",
        "worker-import-data",
        "worklet-animation",
        "worklet-animation-import-data",
        "worklet-audio",
        "worklet-audio-import-data",
        "worklet-layout",
        "worklet-layout-import-data",
        "worklet-paint",
        "worklet-paint-import-data"
      ],
      "origin": "*",
      "expectation": "*"
    },
    {
      // source_context_list values not yet tested
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": [
        "iframe-blank-inherit",
        "sharedworker-classic",
        "sharedworker-classic-data",
        "sharedworker-module",
        "sharedworker-module-data",
        "worker-classic-data",
        "worker-module-data"
      ],
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "subresource": "*",
      "origin": "*",
      "expectation": "*"
    },
    // Skip some nested source_context_lists for faster tests.
    {
      "expansion": "*",
      "source_scheme": "*",
      "source_context_list": [
        "iframe",
        "srcdoc",
        "srcdoc-inherit"
      ],
      "delivery_type": "*",
      "delivery_value": "*",
      "redirection": "*",
      "subresource": "script-tag-dynamic-import",
      "origin": "*",
      "expectation": "*"
    },
  ],
  "source_context_schema": {
    "supported_delivery_type": {
      "top": [
        "meta",
        "http-rp"
      ],
      "iframe": [
        "meta",
        "http-rp"
      ],
      "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": {
      // List of elements that support "attr" delivery type can be followed
      // from the cross reference of:
      // https://html.spec.whatwg.org/C/#referrer-policy-attribute
      "a-tag": [
        "attr",
        "rel-noref"
      ],
      "area-tag": [
        "attr"
      ],
      "audio-tag": [],
      "beacon": [],
      // Fetch API supports `init["referrerPolicy"]` in `Request`:
      // https://fetch.spec.whatwg.org/#dom-request.
      // TODO(https://github.com/web-platform-tests/wpt/issues/21815):
      // Add support for this. Currently `common.sub.js` doesn't support this.
      "fetch": [],
      "iframe-tag": [
        "attr"
      ],
      "img-tag": [
        "attr"
      ],
      // TODO(https://github.com/web-platform-tests/wpt/issues/21815):
      // Support "attr" in the following `<link>`-related subresources.
      // The current referrrer-policy test helper doesn't support
      // checking referrer results via <link> elements.
      "link-css-tag": [],
      "link-prefetch-tag": [],
      "object-tag": [],
      // `<img>` supports referrerpolicy attribute,
      // so `<img>` inside `<picture>` also supports the attribute.
      // TODO(https://github.com/web-platform-tests/wpt/issues/21815):
      // Support this.
      "picture-tag": [],
      "script-tag": [
        "attr"
      ],
      "script-tag-dynamic-import": [
        // The policy set to the <script referrerpolicy> attribute is used for
        // dynamic imports initiated from the script, passed as referencing
        // script's fetch options.
        // https://html.spec.whatwg.org/multipage/webappapis.html#hostimportmoduledynamically(referencingscriptormodule,-modulerequest,-promisecapability)
        "attr"
      ],
      "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": [
      "attr",
      "rel-noref",
      "http-rp",
      "meta"
    ],
    "delivery_value": [
      null,
      "no-referrer",
      "no-referrer-when-downgrade",
      "same-origin",
      "origin",
      "origin-when-cross-origin",
      "strict-origin",
      "strict-origin-when-cross-origin",
      "unsafe-url",
      "default",
      "always",
      "never",
      "origin-when-crossorigin"
    ],
    "expectation": [
      "omitted",
      "origin",
      "stripped-referrer"
    ]
  }
}
