<!doctype html>
<html>
<head>
  <meta charset=utf-8>
  <title>Set 'secure' cookie from `document.cookie` on a secure page</title>
  <meta name=help href="https://tools.ietf.org/html/draft-west-leave-secure-cookies-alone">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/cookies/resources/testharness-helpers.js"></script>
</head>
<body>
<div id=log></div>
<script>
  var tests = [
    [
      "'secure' cookie visible in `document.cookie`",
      function () {
        document.cookie = "secure_from_secure_dom=1; secure; path=/";
        assert_not_equals(document.cookie.match(/secure_from_secure_dom=1/), null);
        this.done();
      }
    ],
    [
      "'secure' cookie visible in HTTP request",
      function () {
        document.cookie = "secure_from_secure_dom=1; secure; path=/";
        assert_not_equals(document.cookie.match(/secure_from_secure_dom=1/), null);
        fetch("https://{{host}}:{{ports[https][0]}}/cookies/resources/echo-json.py",
              { "credentials": "include" })
          .then(this.step_func(function (r) {
            return r.json();
          }))
          .then(this.step_func_done(function (j) {
            assert_equals(j["secure_from_secure_dom"], "secure_from_secure_dom=1");
          }));
      }
    ]
  ];

  function clearKnownCookie() {
    document.cookie = "secure_from_secure_dom=0; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/";
  }

  executeTestsSerially(tests, clearKnownCookie, clearKnownCookie);
</script>
</body>
</html>
