summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/chrome/test_xrayic.xhtml
blob: fd9ab8f7b3513230ce10b3d08d51da7af594a5ef (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1355109
-->
<window title="Mozilla Bug 1355109"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>

  <!-- test results are displayed in the html:body -->
  <body xmlns="http://www.w3.org/1999/xhtml">
  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=758415"
     target="_blank">Mozilla Bug 758415</a>
  </body>

  <!-- test code goes here -->
  <script type="application/javascript">
  <![CDATA[

  SimpleTest.waitForExplicitFinish();

  // Import our test JSM. We first strip the filename off
  // the chrome url, then append the jsm filename.
  var base = /.*\//.exec(window.location.href)[0];
  ChromeUtils.import(base + "file_expandosharing.jsm");

  // Wait for all child frames to load.
  var gLoadCount = 0;
  function frameLoaded() {
    if (++gLoadCount == window.frames.length)
      go();
  }

  function go() {
    testSandbox(1);
    testSandbox(100);
    testSandbox(1000);
    SimpleTest.finish();
  }

  function testSandbox(iterations) {
    // Create an expanded principal sandbox to get xrays with exclusive
    // expandos.
    var sandbox = new Cu.Sandbox(["https://test1.example.org",
                                  "https://test2.example.org"]);
    sandbox.iframeWindows = new sandbox.Array();
    for (let iframe of document.getElementsByTagName('iframe')) {
        sandbox.iframeWindows.push(iframe.contentWindow);
    }
    Cu.evalInSandbox(testClassName.toSource(), sandbox);
    Cu.evalInSandbox(testIC.toSource(), sandbox);
    is(Cu.evalInSandbox("testIC(" + iterations + ");", sandbox), true, "sandbox test");
  }

  // This is in a separate function to provide a common source location for ICs.
  function testClassName(obj, expected) {
    var className = obj.className;
    if (className != expected)
        throw new Error("Got " + className + ", expected " + expected);
  }

  function testIC(iterations) {
    for (var i = 0; i < this.iframeWindows.length; i++) {
      var win = this.iframeWindows[i];
      var spans = win.document.getElementsByTagName('span');
      for (var j = 0; j < spans.length; j++) {
        var span = spans[j];
        for (var k = 0; k < iterations; k++)
          testClassName(span, "iamaspan");
        Object.defineProperty(span, "className", { value: "what" });
        testClassName(span, "what");
      }
    }
    return true;
  }
  ]]>
  </script>
  <iframe id="inlineFrame1" onload="frameLoaded();" type="content" src="https://test1.example.org/tests/js/xpconnect/tests/mochitest/file_xrayic.html" />
  <iframe id="inlineFrame2" onload="frameLoaded();" type="content" src="https://test1.example.org/tests/js/xpconnect/tests/mochitest/file_xrayic.html" />
</window>