<!doctype html><!-- webkit-test-runner [ RequestIdleCallbackEnabled=true ] -->
<meta charset=utf-8>
<title>multiple calls to requestIdleCallback</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id="log"></div>
<script>
  let option = {timeout: 50};

  async_test(function (t) {
    assert_false(document.hidden, "document.hidden must exist and be false to run this test properly");
    var counter = 0;
    function f(c) {
      assert_equals(counter, c);
      if (counter === 49) {
        t.done();
      }

      ++counter;
    }
    for (var i = 0; i < 100; ++i) {
      let j = i;
      window.requestIdleCallback(t.step_func(function () { f(j) }), option);
    }
  }, "requestIdleCallback callbacks should be invoked in order (called iteratively)");

  async_test(function (t) {
    assert_false(document.hidden, "document.hidden must exist and be false to run this test properly");
    var counter = 0;

    function f(c) {
      assert_equals(counter, c);
      if (counter === 49) {
        t.done();
      }

      ++counter;
      window.requestIdleCallback(t.step_func(function () { f(c + 1) }), option);
    }

    window.requestIdleCallback(t.step_func(function () { f(0) }), option);
  }, "requestIdleCallback callbacks should be invoked in order (called recursively)");

  let generateIdlePeriods = _ => requestAnimationFrame(generateIdlePeriods);
  generateIdlePeriods();
</script>
