summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/mochitest/test_hanging.html
blob: c8ea936cec71d23461b2796d161d721025195ab7 (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
60
61
62
63
<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>