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>
|