<!DOCTYPE HTML> <html> <head> <title>Test for SpecialPowers.loadChromeScript</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); var url = SimpleTest.getTestFileURL("SpecialPowersLoadChromeScript.js"); var script = SpecialPowers.loadChromeScript(url); var MESSAGE = { bar: true }; script.addMessageListener("bar", function (message) { is(JSON.stringify(message), JSON.stringify(MESSAGE), "received back message from the chrome script"); checkAssert(); }); function checkAssert() { script.sendAsyncMessage("valid-assert"); script.addMessageListener("valid-assert-done", endOfTest); } function endOfTest() { script.destroy(); SimpleTest.finish(); } script.sendAsyncMessage("foo", MESSAGE); /* * [0][0] is because we're using one real message listener in SpecialPowersObserverAPI.js * and dispatching that to multiple _chromeScriptListeners. The outer array comes * from the message manager since there can be multiple real listeners. The inner * array is for the return values of _chromeScriptListeners. */ is(script.sendSyncMessage("sync-message")[0][0], "Received a synchronous message.", "Check sync return value"); </script> </pre> </body> </html>