<!DOCTYPE html>
<title>Test fenced frame sandbox adoption</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>
promise_test(async() => {
  const fenced_frame_loaded_key = token();

  const iframe = document.createElement('iframe');
  iframe.setAttribute('sandbox', 'allow-same-origin');
  document.body.append(iframe);

  const inner_document = iframe.contentDocument;
  const fenced_frame = inner_document.createElement('fencedframe');
  // The `inner_document` is not suitable to host a fenced frame because its
  // sandbox flags are too strict.
  inner_document.body.append(fenced_frame);

  // Per https://dom.spec.whatwg.org/#concept-node-append, this will adopt the
  // inner fenced frame into the outer (main frame) document.
  document.body.append(fenced_frame);
  fenced_frame.config =
      new FencedFrameConfig(generateURL(
          'resources/fenced-frame-loaded.html', [fenced_frame_loaded_key]));
  const response = await nextValueFromServer(fenced_frame_loaded_key);
  assert_equals(response, "fenced frame loaded",
                "The inner frame should be loaded.");
}, "Adopting a fenced frame from a too-strict document to a suitable " +
   "document leaves the frame in a functional state");
</script>
</body>
