<!DOCTYPE html> <html> <head> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <script type="text/javascript"> const Cc = SpecialPowers.Cc; const Ci = SpecialPowers.Ci; const Cu = SpecialPowers.Cu; const {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); const HELPERAPP_DIALOG_CID = SpecialPowers.wrap(SpecialPowers.Components) .ID(Cc["@mozilla.org/helperapplauncherdialog;1"].number); const HELPERAPP_DIALOG_CONTRACT_ID = "@mozilla.org/helperapplauncherdialog;1"; const MOCK_HELPERAPP_DIALOG_CID = SpecialPowers.wrap(SpecialPowers.Components) .ID("{391832c8-5232-4676-b838-cc8ad373f3d8}"); var registrar = SpecialPowers.wrap(Components).manager .QueryInterface(Ci.nsIComponentRegistrar); var helperAppDlgPromise = new Promise(function(resolve) { var mockHelperAppService; function HelperAppLauncherDialog() { } HelperAppLauncherDialog.prototype = { show: function(aLauncher, aWindowContext, aReason) { ok(true, "Whether showing Dialog"); resolve(); registrar.unregisterFactory(MOCK_HELPERAPP_DIALOG_CID, mockHelperAppService); }, QueryInterface: XPCOMUtils.generateQI([Ci.nsIHelperAppLauncherDialog]) }; mockHelperAppService = XPCOMUtils._getFactory(HelperAppLauncherDialog); registrar.registerFactory(MOCK_HELPERAPP_DIALOG_CID, "", HELPERAPP_DIALOG_CONTRACT_ID, mockHelperAppService); }); add_task(function*() { let promise = new Promise(function(resolve) { let iframe = document.createElement("iframe"); iframe.onload = function() { is(iframe.contentDocument.getElementById("edit").innerText, "abc", "load iframe source"); resolve(); }; iframe.id = "testframe"; iframe.src = "data:text/html,<div id=edit contenteditable=true>abc</div>"; document.body.appendChild(iframe); }); yield promise; let iframe = document.getElementById("testframe"); let docShell = SpecialPowers.wrap(iframe.contentWindow) .QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIWebNavigation) .QueryInterface(Ci.nsIDocShell); ok(docShell.hasEditingSession, "Should have editing session"); document.getElementById("testframe").src = "data:application/octet-stream,TESTCONTENT"; yield helperAppDlgPromise; ok(docShell.hasEditingSession, "Should have editing session"); }); </script> </body> </html>