<!DOCTYPE html>
<meta charset=utf-8>
<title>cssom-view - scrolling quirks VS nonquirks mode</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
  iframe {
    width: 300px;
    height: 500px;
  }
</style>
<iframe id="quirksframe"></iframe>
<iframe id="nonquirksframe"></iframe>
<div id="log"></div>
<script>
function setBodyContent(body)  {
  // Hide scrollbars and remove body margin to make measures more reliable.
  body.style.overflow = "hidden";
  body.style.margin = 0;

  // Add an orange border to the body.
  body.style.borderWidth = "10px 0px 0px 20px";
  body.style.borderColor = "orange";
  body.style.borderStyle = "solid";

  // Create a 700x900 box with a green border.
  body.innerHTML = "<div id='content' style='border-width: 30px 0px 0px 40px; border-style: solid; border-color: green; width: 660px; height: 870px; background: linear-gradient(135deg, red, blue);'></div>";
}

var quirksModeTest = async_test("Execution of tests in quirks mode");
var quirksFrame = document.getElementById("quirksframe");
quirksFrame.onload = function() {
  var doc = quirksFrame.contentDocument;
  setBodyContent(doc.body);
  var content = doc.getElementById("content");

  quirksModeTest.step(function () {
    assert_equals(doc.compatMode, "BackCompat", "Should be in quirks mode.");
  });

  test(function () {
    assert_equals(doc.scrollingElement, doc.body, "scrollingElement should be HTML body");
  }, "scrollingElement in quirks mode");

  test(function () {
    doc.documentElement.scroll(50, 60);
    assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0");
  }, "scroll() on the root element in quirks mode");

  test(function () {
    doc.documentElement.scrollBy(10, 20);
    assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0");
  }, "scrollBy() on the root element in quirks mode");

  test(function () {
    doc.documentElement.scrollLeft = 70;
    doc.documentElement.scrollTop = 80;
    assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0");
  }, "scrollLeft/scrollTop on the root element in quirks mode");

  test(function () {
    assert_equals(doc.documentElement.scrollWidth, 720, "scrollWidth should be 720");
    assert_equals(doc.documentElement.scrollHeight, 910, "scrollHeight should be 910");
  }, "scrollWidth/scrollHeight on the root element in quirks mode");

  test(function () {
    assert_equals(doc.documentElement.clientWidth, 300, "clientWidth should be 300");
    assert_equals(doc.documentElement.clientHeight, 910, "clientHeight should be 910");
  }, "clientWidth/clientHeight on the root element in quirks mode");

  test(function () {
    doc.body.scroll(90, 100);
    assert_equals(doc.body.scrollLeft, 90, "scrollLeft should be 90");
    assert_equals(doc.body.scrollTop, 100, "scrollTop should be 100");
  }, "scroll() on the HTML body element in quirks mode");

  test(function () {
    doc.body.scrollBy(10, 20);
    assert_equals(doc.body.scrollLeft, 100, "scrollLeft should be 100");
    assert_equals(doc.body.scrollTop, 120, "scrollTop should be 120");
  }, "scrollBy() on the HTML body element in quirks mode");

  test(function () {
    doc.body.scrollLeft = 120;
    doc.body.scrollTop = 110;
    assert_equals(doc.body.scrollLeft, 120, "scrollLeft should be 120");
    assert_equals(doc.body.scrollTop, 110, "scrollTop should be 110");
  }, "scrollLeft/scrollTop on the HTML body element in quirks mode");

  test(function () {
    assert_equals(doc.body.scrollWidth, 720, "scrollWidth should be 720");
    assert_equals(doc.body.scrollHeight, 910, "scrollHeight should be 910");
  }, "scrollWidth/scrollHeight on the HTML body element in quirks mode");

  test(function () {
    assert_equals(doc.body.clientWidth, 300, "clientWidth should be 300");
    assert_equals(doc.body.clientHeight, 500, "clientHeight should be 500");
  }, "clientWidth/clientHeight on the HTML body element in quirks mode");

  test(function () {
    doc.scrollingElement.scroll(0, 0);
    content.scrollLeft = 130;
    content.scrollTop = 140;
    assert_equals(content.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(content.scrollTop, 0, "scrollTop should be 0");
  }, "scrollLeft/scrollRight of the content in quirks mode");

  test(function () {
    assert_equals(content.scrollWidth, 660, "scrollWidth should be 660");
    assert_equals(content.scrollHeight, 870, "scrollHeight should be 870");
  }, "scrollWidth/scrollHeight of the content in quirks mode");

  test(function () {
    assert_equals(content.clientWidth, 660, "clientWidth should be 660");
    assert_equals(content.clientHeight, 870, "clientHeight should be 870");
  }, "clientWidth/clientHeight of the content in quirks mode");

  quirksModeTest.done();
}
quirksFrame.src = URL.createObjectURL(new Blob([""], { type: "text/html" }));

var nonQuirksModeTest = async_test("Execution of tests in non-quirks mode");
var nonQuirksFrame = document.getElementById("nonquirksframe");
nonQuirksFrame.onload = function() {
  var doc = nonQuirksFrame.contentDocument;
  setBodyContent(doc.body);
  var content = doc.getElementById("content");

  nonQuirksModeTest.step(function() {
    assert_equals(doc.compatMode, "CSS1Compat", "Should be in standards mode.");
  });

  test(function () {
    assert_equals(doc.scrollingElement, doc.documentElement, "scrollingElement should be documentElement");
  }, "scrollingElement in non-quirks mode");

  test(function () {
    doc.documentElement.scroll(50, 60);
    assert_equals(doc.documentElement.scrollLeft, 50, "scrollLeft should be 50");
    assert_equals(doc.documentElement.scrollTop, 60, "scrollTop should be 60");
  }, "scroll() on the root element in non-quirks mode");

  test(function () {
    doc.documentElement.scrollBy(10, 20);
    assert_equals(doc.documentElement.scrollLeft, 60, "scrollLeft should be 60");
    assert_equals(doc.documentElement.scrollTop, 80, "scrollTop should be 80");
  }, "scrollBy() on the root element in non-quirks mode");

  test(function () {
    doc.documentElement.scrollLeft = 70;
    doc.documentElement.scrollTop = 80;
    assert_equals(doc.documentElement.scrollLeft, 70, "scrollLeft should be 70");
    assert_equals(doc.documentElement.scrollTop, 80, "scrollTop should be 80");
  }, "scrollLeft/scrollTop on the root element in non-quirks mode");

  test(function () {
    assert_equals(doc.documentElement.scrollWidth, 720, "scrollWidth should be 720");
    assert_equals(doc.documentElement.scrollHeight, 910, "scrollHeight should be 910");
  }, "scrollWidth/scrollHeight on the root element in non-quirks mode");

  test(function () {
    assert_equals(doc.documentElement.clientWidth, 300, "clientWidth should be 300");
    assert_equals(doc.documentElement.clientHeight, 500, "clientHeight should be 500");
  }, "clientWidth/clientHeight on the root element in non-quirks mode");

  test(function () {
    doc.body.scroll(90, 100);
    assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0");
  }, "scroll() on the HTML body element in non-quirks mode");

  test(function () {
    doc.body.scrollBy(10, 20);
    assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0");
  }, "scrollBy() on the HTML body element in non-quirks mode");

  test(function () {
    doc.body.scrollLeft = 120;
    doc.body.scrollTop = 110;
    assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0");
  }, "scrollLeft/scrollTop on the HTML body element in non-quirks mode");

  test(function () {
    assert_equals(doc.body.scrollWidth, 700, "scrollWidth should be 700");
    assert_equals(doc.body.scrollHeight, 900, "scrollHeight should be 900");
  }, "scrollWidth/scrollHeight on the HTML body element in non-quirks mode");

  test(function () {
    assert_equals(doc.body.clientWidth, 280, "clientWidth should be 280");
    assert_equals(doc.body.clientHeight, 900, "clientHeight should be 900");
  }, "clientWidth/clientHeight on the HTML body element in non-quirks mode");

  test(function () {
    doc.scrollingElement.scroll(0, 0);
    content.scrollLeft = 130;
    content.scrollTop = 140;
    assert_equals(content.scrollLeft, 0, "scrollLeft should be 0");
    assert_equals(content.scrollTop, 0, "scrollTop should be 0");
  }, "scrollLeft/scrollRight of the content in non-quirks mode");

  test(function () {
    assert_equals(content.scrollWidth, 660, "scrollWidth should be 660");
    assert_equals(content.scrollHeight, 870, "scrollHeight should be 870");
  }, "scrollWidth/scrollHeight of the content in non-quirks mode");

  test(function () {
    assert_equals(content.clientWidth, 660, "clientWidth should be ");
    assert_equals(content.clientHeight, 870, "clientHeight should be 870");
  }, "clientWidth/clientHeight of the content in non-quirks mode");

  nonQuirksModeTest.done();
}
nonQuirksFrame.src = URL.createObjectURL(new Blob(["<!doctype html>"], { type: "text/html" }));

</script>
