<?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=990353 --> <window title="Mozilla Bug 990353" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" 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=990353" target="_blank">Mozilla Bug 990353</a> </body> <!-- test code goes here --> <script type="application/javascript"> <![CDATA[ /** Test for Bug 990353 **/ SimpleTest.waitForExplicitFinish(); const Cu = Components.utils; function canary() { var someBitOfSource = 42; } var gLoadCount = 0; function frameLoaded() { switch (++gLoadCount) { case 1: ok(/sourceless/.test(window[0].canary.toSource()), "System function should be sourceless: " + window[0].canary.toSource()); ok(/sourceless/.test(window[0].onload.toSource()), "System event handler should be sourceless: " + window[0].onload.toSource()); var sb = new Cu.Sandbox('http://www.example.com', { discardSource: true }); Cu.evalInSandbox('function canary() { var someBitOfSource = 42; }', sb); ok(/sourceless/.test(sb.canary.toSource()), "Function from sandbox with explicit discarding should be sourceless"); try { window[0].throwSomething(); ok(false, "should have thrown"); } catch (e) { ok(/some error/.test(e), "Threw exception as expected: " + e); ok(/throwSomething/.test(e.stack), "Exception stack trace works: " + e.stack); } window[0].location = "http://example.org/tests/js/xpconnect/tests/chrome/file_discardSystemSource.html"; break; case 2: ok(/someBitOfSource/.test(Cu.waiveXrays(window[0]).canary.toSource()), "Content function should have source"); ok(/someBitOfSource/.test(Cu.waiveXrays(window[0]).onload.toSource()), "Content event handler should have source"); testWorker(); break; } } function testWorker() { var worker = new window[0].wrappedJSObject.Worker('worker_discardSystemSource.js'); worker.onmessage = function(evt) { ok(/someBitOfSource/.test(evt.data), "Non-chrome worker should have source: " + evt.data); var chromeWorker = new Worker('worker_discardSystemSource.js'); chromeWorker.onmessage = function(evt) { ok(/sourceless/.test(evt.data), "Chrome worker should not have source: " + evt.data); SimpleTest.finish(); } } } function go() { // We should have our own source, because the pref wasn't enabled when we // were loaded. ok(/someBitOfSource/.test(canary.toSource()), "Should have own source"); window[0].frameElement.onload = frameLoaded; window[0].location = "file_discardSystemSource.html"; } addLoadEvent(function() { SpecialPowers.pushPrefEnv({set: [['javascript.options.discardSystemSource', true]]}, go); }); ]]> </script> <iframe></iframe> </window>