<!DOCTYPE html>
<html>
<head>
<title>Embedded Enforcement: Subsumption Algorithm - Basic implementation.</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="support/testharness-helper.sub.js"></script>
</head>
<body>
  <script>
    // Note that the returned csp should always allow execution of an
    // inline script with nonce "abc" (as returned by
    // support/echo-policy-multiple.py), otherwise the test might
    // return false negatives.
    var tests = [
      { "name": "If there is no required csp, iframe should load.",
        "required_csp": null,
        "returned_csp": null,
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Iframe with empty returned CSP should be blocked.",
        "required_csp": "style-src 'none';",
        "returned_csp": null,
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Iframe with matching CSP should load.",
        "required_csp": "style-src 'none'; script-src 'unsafe-inline'",
        "returned_csp": "style-src 'none'; script-src 'unsafe-inline'",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Iframe with more restricting CSP should load.",
        "required_csp": "script-src 'nonce-abc' 'nonce-123'",
        "returned_csp": "script-src 'nonce-abc'",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Iframe with less restricting CSP should be blocked.",
        "required_csp": "style-src 'none'; script-src 'none'",
        "returned_csp": "style-src 'none'; script-src 'self' 'nonce-abc'",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Iframe with a different CSP should be blocked.",
        "required_csp": "script-src 'nonce-abc' 'nonce-123'",
        "returned_csp": "style-src 'none'",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Iframe with a matching and more restrictive ports should load.",
        "required_csp": "frame-src http://c.com:443 http://b.com",
        "returned_csp": "frame-src http://b.com:80 http://c.com:443",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Host wildcard *.a.com does not match a.com",
        "required_csp": "frame-src http://*.a.com",
        "returned_csp": "frame-src http://a.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Host intersection with wildcards is computed correctly.",
        "required_csp": "frame-sr 'none'",
        "returned_csp": "frame-src http://a.com",
        "returned_csp_2": "frame-src http://*.a.com",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Iframe should load even if the ports are different but are default for the protocols.",
        "required_csp": "frame-src http://b.com:80",
        "returned_csp": "child-src https://b.com:443",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Iframe should block if intersection allows sources which are not in required_csp.",
        "required_csp": "style-src http://*.example.com:*",
        "returned_csp": "style-src http://*.com:*",
        "returned_csp_2": "style-src http://*.com http://*.example.com:*",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Iframe should block if intersection allows sources which are not in required_csp (other ordering).",
        "required_csp": "style-src http://*.example.com:*",
        "returned_csp": "style-src http://*.com:*",
        "returned_csp_2": "style-src http://*.example.com:* http://*.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Iframe should load if intersection allows only sources which are in required_csp.",
        "required_csp": "style-src http://*.example.com",
        "returned_csp": "style-src http://*.example.com:*",
        "returned_csp_2": "style-src http://*.com",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Removed plugin-types directive should be ignored.",
        "required_csp": "plugin-types application/pdf",
        "returned_csp": null,
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Removed plugin-types directive should be ignored 2.",
        "required_csp": "plugin-types application/pdf application/x-java-applet",
        "returned_csp": "plugin-types application/pdf",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Removed plugin-types directive should be ignored 3.",
        "required_csp": "style-src 'none'; plugin-types application/pdf",
        "returned_csp": null,
        "expected": IframeLoad.EXPECT_BLOCK },
    ];

    tests.forEach(test => {
      async_test(t =>  {
        var url = generateUrlWithPolicies(Host.CROSS_ORIGIN, test.returned_csp);
        if (test.returned_csp_2)
          url.searchParams.append("policy2", test.returned_csp_2);
        assert_iframe_with_csp(t, url, test.required_csp, test.expected, test.name, null);
      }, test.name);
    });
  </script>
</body>
</html>
