summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/mochitest/test_hanging.html
blob: b6dd1b12a771cc66591d78694b44e4a26e578ab8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<head>
  <title>Plugin hanging</title>
  <script 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 p1 = iframe.contentDocument.getElementById("plugin1");
      try {
        p1.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>