<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Request clone</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#request">
    <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="../resources/utils.js"></script>
  </head>
  <body>
    <script>
      var headers = new Headers({"name" : "value"});
      var emptyHeaders = new Headers();

      var initValuesDict = {"method" : "POST",
                            // Referrer is not supported due to privacy concerns.
                            //"referrer" : "http://{{host}}:{{ports[http][0]}}/",
                            //"referrerPolicy" : "origin",
                            "mode" : "same-origin",
                            "credentials" : "include",
                            "cache" : "no-cache",
                            "redirect" : "error",
                            "integrity" : "Request's Integrity",
                            "headers" : headers,
                            "body" : "Request's body"
      };

      var expectedInitialized = {"method" : "POST",
                                 // Referrer is not supported due to privacy concerns.
                                 //"referrer" : "http://{{host}}:{{ports[http][0]}}/",
                                 //"referrerPolicy" : "origin",
                                 "mode" : "same-origin",
                                 "credentials" : "include",
                                 "cache" : "no-cache",
                                 "redirect" : "error",
                                 "integrity" : "Request's Integrity",
                                 "headers" : headers,
                                 "body" : "Request's body"
      };

      test(function() {
        var RequestInitialized = new Request("", initValuesDict);
        var requestToCheck = RequestInitialized.clone();
        checkRequest(requestToCheck, expectedInitialized);
      }, "Check cloning a request");

      test(function() {
        var initialRequest = new Request("", {"headers" : new Headers({"a": "1", "b" : "2"})});
        var request = initialRequest.clone();
        assert_equals(request.headers.get("a"), "1", "cloned request should have header 'a'");
        assert_equals(request.headers.get("b"), "2", "cloned request should have header 'b'");

        initialRequest.headers.delete("a");
        assert_equals(request.headers.get("a"), "1", "cloned request should still have header 'a'");

        request.headers.delete("a");
        assert_equals(initialRequest.headers.get("b"), "2", "initial request should have header 'b'");

      }, "Check cloning a request copies the headers");

    </script>
  </body>
</html>
