<!doctype html><!-- webkit-test-runner [ experimental: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>
