<!DOCTYPE html>
<meta charset=utf-8>
<title>cssom-view - scrollingElement</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<iframe id="quirksframe"></iframe>
<iframe id="nonquirksframe"></iframe>
<div id="log"></div>
<script>
async_test(function() {
  var quirksFrame = document.getElementById("quirksframe");
  quirksFrame.onload = this.step_func_done(function() {
    var quirksDoc = quirksFrame.contentDocument;
    assert_equals(quirksDoc.compatMode, "BackCompat", "Should be in quirks mode.");
    assert_not_equals(quirksDoc.body, null, "Should have a body element");

    // Tests for quirks mode document.
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body,
      "scrollingElement in quirks mode should default to body element.");

    quirksDoc.documentElement.style.overflow = "scroll";
    quirksDoc.body.style.overflow = "scroll";
    assert_equals(quirksDoc.scrollingElement, null,
      "scrollingElement in quirks mode should be null if overflow of body and root element isn't visible.");
    quirksDoc.documentElement.style.overflow = "visible";
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
    quirksDoc.documentElement.style.overflow = "scroll";
    quirksDoc.body.style.overflow = "visible";
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
    quirksDoc.documentElement.style.overflow = "visible";
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);

    quirksDoc.body.style.display = "none";
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body)
    quirksDoc.body.style.display = "block";
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);

    quirksDoc.documentElement.appendChild(quirksDoc.createElement("body"));
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
    assert_equals(quirksDoc.scrollingElement, quirksDoc.getElementsByTagName("body")[0]);
    quirksDoc.documentElement.removeChild(quirksDoc.documentElement.lastChild);
    assert_equals(quirksDoc.scrollingElement, quirksDoc.body);

    quirksDoc.documentElement.removeChild(quirksDoc.body);
    assert_equals(quirksDoc.scrollingElement, null);
    quirksDoc.documentElement.appendChild(quirksDoc.createElementNS("foobarNS", "body"));
    assert_equals(quirksDoc.scrollingElement, null);

    quirksDoc.removeChild(quirksDoc.documentElement);
    assert_equals(quirksDoc.scrollingElement, null);

    quirksDoc.appendChild(quirksDoc.createElementNS("foobarNS", "html"));
    quirksDoc.documentElement.appendChild(quirksDoc.createElement("body"));
    assert_equals(quirksDoc.scrollingElement, null);

    quirksDoc.removeChild(quirksDoc.documentElement);
    quirksDoc.appendChild(quirksDoc.createElement("body"));
    assert_equals(quirksDoc.scrollingElement, null);
  });
  quirksFrame.src =
    URL.createObjectURL(new Blob([""], { type: "text/html" }));
}, "scrollingElement in quirks mode");

async_test(function() {
  var nonQuirksFrame = document.getElementById("nonquirksframe");
  nonQuirksFrame.onload = this.step_func_done(function() {
    var nonQuirksDoc = nonQuirksFrame.contentDocument;
    assert_equals(nonQuirksDoc.compatMode, "CSS1Compat", "Should be in standards mode.");
    assert_not_equals(nonQuirksDoc.body, null, "Should have a body element");

    assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement,
      "scrollingElement in standards mode should be the document element.");
    nonQuirksDoc.documentElement.style.overflow = "scroll";
    nonQuirksDoc.body.style.overflow = "scroll";
    assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement);

    nonQuirksDoc.removeChild(nonQuirksDoc.documentElement);
    assert_equals(nonQuirksDoc.scrollingElement, null);
    nonQuirksDoc.appendChild(nonQuirksDoc.createElement("foobar"));
    assert_equals(nonQuirksDoc.scrollingElement.localName, "foobar");
  });
  nonQuirksFrame.src =
    URL.createObjectURL(new Blob(["<!doctype html>"], { type: "text/html" }));
}, "scrollingElement in no-quirks mode");
</script>
