<!DOCTYPE html>
<meta charset="utf-8">
<title>A non-isolated child at a given origin causes future children to also be non-isolated even after the iframe is removed</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<div id="log"></div>

<script type="module">
import {
  insertIframe,
  testSameAgentCluster,
  testDifferentAgentClusters,
  testOriginIsolationRestricted
} from "./resources/helpers.mjs";

let frame1;
promise_setup(async () => {
  frame1 = await insertIframe("{{hosts[][www]}}");
});

// Since they're different-origin, the parent's isolation request is respected,
// as is the child's non-request. So the parent ends up in the origin-keyed
// agent cluster and the child ends up in the site-keyed one.
testDifferentAgentClusters([self, 0], "Before");
testOriginIsolationRestricted(self, true, "parent");
testOriginIsolationRestricted(0, false, "child1");

promise_test(async () => {
  frame1.remove();

  await insertIframe("{{hosts[][www]}}", "?1");
  await insertIframe("{{hosts[][www1]}}");
}, "Remove the iframe and insert new ones");

// Because of the historical presence of a non-isolated {{hosts[][www]}} iframe,
// the origin isolation request for child 2 will be ignored. So,
// child 2 and child 3 both end up in the site-keyed agent cluster.
testDifferentAgentClusters([self, 0], "Parent to child2");
testDifferentAgentClusters([self, 1], "Parent to child3");
testSameAgentCluster([0, 1], "child2 to child3");
testSameAgentCluster([1, 0], "child3 to child2");

testOriginIsolationRestricted(0, false, "child2");
testOriginIsolationRestricted(1, false, "child3");
</script>
