<!DOCTYPE html>
<meta charset="utf-8">
<title>Whenever `srcdoc` attribute is set, changed, or removed, the UA must process the &lt;iframe> attributes</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element:process-the-iframe-attributes-2">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
function createIFrameWithBlobSrc() {
  var iframe = document.createElement("iframe");
  iframe.src = URL.createObjectURL(new Blob(["src"], {type: "text/html"}));
  return iframe;
}

async_test(function(t) {
  var iframe = createIFrameWithBlobSrc();
  var isAdded = false;
  iframe.onload = t.step_func(function() {
    assert_equals(iframe.contentDocument.location.protocol, "blob:");
    assert_equals(iframe.contentDocument.body.textContent, "src");

    iframe.onload = t.step_func_done(function() {
      assert_false(isAdded);
      assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
      assert_equals(iframe.contentDocument.body.textContent, "srcdoc");
    });

    iframe.setAttribute("srcdoc", "srcdoc");
    isAdded = true;
  });

  document.body.appendChild(iframe);
}, "Adding `srcdoc` attribute triggers attributes processing");

async_test(function(t) {
  var iframe = createIFrameWithBlobSrc();
  var isChanged = false;
  iframe.srcdoc = "old";
  iframe.onload = t.step_func(function() {
    assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
    assert_equals(iframe.contentDocument.body.textContent, "old");

    iframe.onload = t.step_func_done(function() {
      assert_false(isChanged);
      assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
      assert_equals(iframe.contentDocument.body.textContent, "new");
    });

    iframe.srcdoc = "new";
    isChanged = true;
  });

  document.body.appendChild(iframe);
}, "Changing `srcdoc` (via property) triggers attributes processing");

async_test(function(t) {
  var iframe = createIFrameWithBlobSrc();
  var isRemoved = false;
  iframe.srcdoc = "srcdoc";
  iframe.onload = t.step_func(function() {
    assert_equals(iframe.contentDocument.location.href, "about:srcdoc");
    assert_equals(iframe.contentDocument.body.textContent, "srcdoc");

    iframe.onload = t.step_func_done(function() {
      assert_false(isRemoved);
      assert_equals(iframe.contentDocument.location.protocol, "blob:");
      assert_equals(iframe.contentDocument.body.textContent, "src");
    });

    iframe.removeAttribute("srcdoc");
    isRemoved = true;
  });

  document.body.appendChild(iframe);
}, "Removing `srcdoc` attribute triggers attributes processing");
</script>
