<!DOCTYPE html>
<html>
<head>
<title>Embedded Enforcement: Subsumption Algorithm - Host parts in host source expressions.</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="support/testharness-helper.sub.js"></script>
</head>
<body>
  <script>
    var tests = [
      { "name": "Host must match.",
        "required_csp": "img-src http://c.com",
        "returned_csp": "img-src http://b.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Hosts without wildcards must match.",
        "required_csp": "img-src http://c.com:* http://inner.b.com",
        "returned_csp": "img-src http://b.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "More specific subdomain should not match.",
        "required_csp": "img-src http://c.com:* http://b.com",
        "returned_csp": "img-src http://inner.b.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "Specified host should not match a wildcard host.",
        "required_csp": "img-src http://c.com:* http://inner.b.com",
        "returned_csp": "img-src http://*.b.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "A wildcard host should match a more specific host.",
        "required_csp": "img-src http://c.com:* http://*.b.com",
        "returned_csp": "img-src https://inner.b.com",
        "expected": IframeLoad.EXPECT_LOAD },
    ];

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