<!DOCTYPE html>
<html>
<head>
<title>Embedded Enforcement: Subsumption Algorithm - Scheme 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": "`https` is more restrictive than `http`.", 
        "required_csp": "img-src http://c.com:* https://b.com", 
        "returned_csp": "img-src http://b.com",
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "The reverse allows iframe be to be loaded.", 
        "required_csp": "img-src http://c.com:* http://b.com", 
        "returned_csp": "img-src https://b.com",
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "Matching `https` protocols.", 
        "required_csp": "img-src http://c.com:* https://b.com", 
        "returned_csp": "img-src https://b.com", 
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "`http:` should subsume all host source expressions with this protocol.", 
        "required_csp": "img-src http:", 
        "returned_csp": "img-src http://c.com:* https://b.com http://c.com", 
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "`http:` should subsume all host source expressions with `https:`.", 
        "required_csp": "img-src http:", 
        "returned_csp": "img-src https://c.com:* https://b.com http://c.com", 
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "`http:` does not subsume other protocols.", 
        "required_csp": "img-src http:", 
        "returned_csp": "img-src https://c.com:* wss://b.com http://c.com", 
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "If scheme source is present in returned csp, it must be specified in required csp too.", 
        "required_csp": "img-src https://c.com:* wss://b.com http://c.com", 
        "returned_csp": "img-src http:", 
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "`http:` subsumes other `http:` source expression.", 
        "required_csp": "img-src http:", 
        "returned_csp": "img-src http: https://c.com:* https://b.com http://c.com", 
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "`http:` subsumes other `https:` source expression and expressions with `http:`.", 
        "required_csp": "img-src http:", 
        "returned_csp": "img-src https: https://c.com:* http://b.com", 
        "expected": IframeLoad.EXPECT_LOAD },
      { "name": "All scheme sources must be subsumed.", 
        "required_csp": "img-src http: wss:", 
        "returned_csp": "img-src https: ws:", 
        "expected": IframeLoad.EXPECT_BLOCK },
      { "name": "All scheme sources are subsumed by their stronger variants.", 
        "required_csp": "img-src http: wss:", 
        "returned_csp": "img-src https: wss:", 
        "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>
