<!DOCTYPE html>
<title>Test cookies accessed from a Fenced Frame Tree</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/utils.js"></script>
<script src="/common/utils.js"></script>

<body>
<script>
const cookie_value_key = token();
const kAssertion = "Cookie accessed from unique fenced frame tree partition ";
const kAssertion_outer = "Cookie values changed in the fenced frame tree should not impact the outer frame";

async function runTest(test_type) {
  document.cookie = 'A=outer; SameSite=Lax';
  document.cookie = 'B=outer; SameSite=None; Secure';
  const fenced_frame =
    attachFencedFrame(generateURL(
    `resources/unique-cookie-partition-inner.https.html`,
    [cookie_value_key, test_type]));

  result = await nextValueFromServer(cookie_value_key);
  switch (test_type) {
    case "top-level fenced frame":
      assert_equals(result, "F=fenced; C=fenced; D=fenced; E=fenced", kAssertion + test_type);
      break;
    case "nested iframe":
      assert_equals(result, "F=fenced; C=fenced; D=fenced; G=nested_in_fenced_frame; E=fenced", kAssertion + test_type);
      break;
    case "nested fenced frame":
      assert_equals(result, "G=nested_in_fenced_frame", kAssertion + test_type);
      break;
  }

  // The cookie values changed in the fenced frame tree should not impact the outer frame.
  const result_outer_frame = document.cookie;
  assert_equals(result_outer_frame, "A=outer; B=outer", kAssertion_outer);

  // Clean up the fenced frame
  document.body.removeChild(fenced_frame);
}

promise_test(async () => {
  return runTest("top-level fenced frame");
}, "Cookie access from top-level fenced frame");

promise_test(async () => {
  return runTest("nested iframe");
}, "Cookie access from iframe nested in a fenced frame");

promise_test(async () => {
  return runTest("nested fenced frame");
}, "Cookie access from nested fenced frame");
</script>
</body>
