<head>
  <title>Plugin hanging</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" src="plugin-utils.js"></script>

<body>
  <script class="testbody" type="application/javascript">
  SimpleTest.waitForExplicitFinish();
  setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);

  window.frameLoaded = function frameLoaded_toCrash() {
    SimpleTest.expectChildProcessCrash();

    // the default timeout is annoying high for mochitest runs
    var timeoutPref = "dom.ipc.plugins.timeoutSecs";
    SpecialPowers.setIntPref(timeoutPref, 5);

    var iframe = document.getElementById('iframe1');
    var p = iframe.contentDocument.getElementById('plugin1');

    p.setColor("FFFF00FF");

    try {
      p.hang();
      ok(false, "p.hang() should throw an exception");
    }
    catch (e) {
      ok(true, "p.hang() should throw an exception");
    }

    try {
      p.setColor("FFFF0000");
      ok(false, "p.setColor should throw after the plugin crashes");
    }
    catch (e) {
      ok(true, "p.setColor should throw after the plugin crashes");
    }

    window.frameLoaded = function reloaded() {
      var p = iframe.contentDocument.getElementById('plugin1');
      try {
        p.setColor('FF00FF00');
        ok(true, "Reloading worked");
      }
      catch (e) {
        ok(false, "Reloading didn't give us a usable plugin");
      }

      try {
        SpecialPowers.clearUserPref(timeoutPref);
      }
      catch(e) {
        ok(false, "Couldn't reset timeout pref");
      }

      SimpleTest.finish();
    }

    iframe.contentWindow.location.reload();
  }

  </script>
  <iframe id="iframe1" src="crashing_subpage.html" width="600" height="600"></iframe>