<!DOCTYPE html>
<meta charset="utf-8">
<title>document.domain and removed iframe interaction</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<!-- This is a test for https://crbug.com/1095145 where window
     properties become undefined for document.domain-using removed
     iframes -->

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

<script>
"use strict";

promise_test(t => {
  return new Promise(resolve => {
    const iframe = document.createElement("iframe");
    iframe.onload = t.step_func(() => {
      const { contentWindow } = iframe;
      assert_equals(contentWindow.status, "");
      resolve();
    });
    iframe.src = "/common/blank.html";
    document.body.append(iframe);
  });
}, "No removal, no document.domain");

promise_test(t => {
  return new Promise(resolve => {
    const iframe = document.createElement("iframe");
    iframe.onload = t.step_func(() => {
      const { contentWindow } = iframe;
      iframe.remove();
      assert_equals(contentWindow.status, "");
      resolve();
    });
    iframe.src = "/common/blank.html";
    document.body.append(iframe);
  });
}, "Removal, no document.domain");

promise_test(t => {
  return new Promise(resolve => {
    const iframe = document.createElement("iframe");
    iframe.onload = t.step_func(() => {
      document.domain = document.domain;
      const { contentWindow } = iframe;
      assert_equals(contentWindow.status, "");
      resolve();
    });
    iframe.src = "resources/document-domain-setter.html";
    document.body.append(iframe);
  });
}, "No removal, document.domain");

promise_test(t => {
  return new Promise(resolve => {
    const iframe = document.createElement("iframe");
    iframe.onload = t.step_func(() => {
      document.domain = document.domain; // technically we already did this above
      const { contentWindow } = iframe;
      iframe.remove();
      assert_equals(contentWindow.status, "");
      resolve();
    });
    iframe.src = "resources/document-domain-setter.html";
    document.body.append(iframe);
  });
}, "Removal, document.domain");

</script>
