<!DOCTYPE HTML>
<html>
<head>
    <title>Video element src attribute must match src list - positive test</title>
    <meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-inline'; media-src http://{{domains[www2]}}:{{ports[http][0]}}/ 'self'; connect-src 'self';">
    <script src='/resources/testharness.js'></script>
    <script src='/resources/testharnessreport.js'></script>
</head>
<body>
    <h1>Video element in media-src list - redirect test</h1>
    <div id='log'></div>

  <p>This test tests a buggy interaction in Chrome 46.  Two hosts (self and www2) are both allowed
    as media-src, but only one (self) is allowed for connect-src.  If a video src starts on
    an allowed host (self), and is redirected to another allowed media-src host, it should succeed. But a bug
    causes the redirect to be done in a fetch context to which connect-src is being applied instead, so
    the load is blocked. (This test passes in Firefox 45, modulo an event listener not firing.)</p>

  <script>
    var src_test = async_test("In-policy async video src");
    var src_redir_test = async_test("in-policy async video src w/redir")
    var source_test = async_test("In-policy async video source element");
    var source_redir_test = async_test("In-policy async video source element w/redir");

    var t_spv = async_test("Should not fire policy violation events");
    var test_count = 4;
    window.addEventListener("securitypolicyviolation", t_spv.unreached_func("Should not have fired any event"));

    function media_loaded(t) {
      t.done();
      if (--test_count <= 0) {
        t_spv.done();
      }
    }

    function media_error_handler(t) {
      t.step( function () {
          assert_unreached("Media error handler shouldn't be triggered for allowed domain.");
      });
      t.done();
    }
  </script>

    <video id="videoObject" width="320" height="240" controls
           onloadeddata="media_loaded(source_test)">
        <source id="videoSourceObject"
                type="video/ogg"
                onerror="media_error_handler(source_test)"
                src="http://{{domains[www2]}}:{{ports[http][0]}}/media/A4.ogv">
    </video>

    <video id="videoObject2" width="320" height="240" controls
           onerror="media_error_handler(src_test)"
           onloadeddata="media_loaded(src_test)"
           src="http://{{domains[www2]}}:{{ports[http][0]}}/media/A4.ogv">

    <video id="videoObject3" width="320" height="240" controls
           onloadeddata="media_loaded(source_redir_test)">
        <source id="videoSourceObject"
                type="video/ogg"
                onerror="media_error_handler(source_test)"
                src="/common/redirect.py?location=http://{{domains[www2]}}:{{ports[http][0]}}/media/A4.ogv">
    </video>

    <video id="videoObject2" width="320" height="240" controls
           onerror="media_error_handler(src_redir_test)"
           onloadeddata="media_loaded(src_redir_test)"
           src="/common/redirect.py?location=http://{{domains[www2]}}:{{ports[http][0]}}/media/A4.ogv">

</body>
</html>
