diff --git a/dom/browser-element/mochitest/browserElement_CopyPaste.js b/dom/browser-element/mochitest/browserElement_CopyPaste.js index 39989b25503b..a5f625f93018 100644 --- a/dom/browser-element/mochitest/browserElement_CopyPaste.js +++ b/dom/browser-element/mochitest/browserElement_CopyPaste.js @@ -10,14 +10,17 @@ browserElementTestHelpers.setEnabledPref(true); browserElementTestHelpers.setSelectionChangeEnabledPref(true); browserElementTestHelpers.addPermission(); const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); + var gTextarea = null; var mm; -var iframe; +var iframeOuter; +var iframeInner; var state = 0; var stateMeaning; var defaultData; var pasteData; var focusScript; +var createEmbededFrame = false; function copyToClipboard(str) { gTextarea.value = str; @@ -46,30 +49,47 @@ function getScriptForSetFocus() { } function runTest() { - iframe = document.createElement('iframe'); - iframe.setAttribute('mozbrowser', 'true'); - document.body.appendChild(iframe); + iframeOuter = document.createElement('iframe'); + iframeOuter.setAttribute('mozbrowser', 'true'); + if (createEmbededFrame) { + iframeOuter.src = "file_NestedFramesOuter_CopyPaste.html"; + } + document.body.appendChild(iframeOuter); gTextarea = document.createElement('textarea'); document.body.appendChild(gTextarea); - mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + iframeOuter.addEventListener("mozbrowserloadend", function onloadend(e) { + iframeOuter.removeEventListener("mozbrowserloadend", onloadend); - iframe.addEventListener("mozbrowserloadend", function onloadend(e) { - iframe.removeEventListener("mozbrowserloadend", onloadend); - dispatchTest(e); + if (createEmbededFrame) { + var contentWin = SpecialPowers.wrap(iframeOuter) + .QueryInterface(SpecialPowers.Ci.nsIFrameLoaderOwner) + .frameLoader.docShell.contentViewer.DOMDocument.defaultView; + var contentDoc = contentWin.document; + iframeInner = contentDoc.getElementById('iframeInner'); + iframeInner.addEventListener("mozbrowserloadend", function onloadendinner(e) { + iframeInner.removeEventListener("mozbrowserloadend", onloadendinner); + mm = SpecialPowers.getBrowserFrameMessageManager(iframeInner); + dispatchTest(e); + }); + } else { + iframeInner = iframeOuter; + mm = SpecialPowers.getBrowserFrameMessageManager(iframeInner); + dispatchTest(e); + } }); } function doCommand(cmd) { - Services.obs.notifyObservers({wrappedJSObject: iframe}, + Services.obs.notifyObservers({wrappedJSObject: SpecialPowers.unwrap(iframeInner)}, 'copypaste-docommand', cmd); } function dispatchTest(e) { - iframe.addEventListener("mozbrowserloadend", function onloadend2(e) { - iframe.removeEventListener("mozbrowserloadend", onloadend2); - iframe.focus(); + iframeInner.addEventListener("mozbrowserloadend", function onloadend2(e) { + iframeInner.removeEventListener("mozbrowserloadend", onloadend2); + iframeInner.focus(); SimpleTest.executeSoon(function() { testSelectAll(e); }); }); @@ -77,7 +97,7 @@ function dispatchTest(e) { case 0: // test for textarea defaultData = "Test for selection change event"; pasteData = "from parent "; - iframe.src = "data:text/html,
" + + iframeInner.src = "data:text/html," + "" + "" + ""; @@ -87,7 +107,7 @@ function dispatchTest(e) { case 1: // test for input text defaultData = "Test for selection change event"; pasteData = "from parent "; - iframe.src = "data:text/html," + + iframeInner.src = "data:text/html," + "" + "" + ""; @@ -97,7 +117,7 @@ function dispatchTest(e) { case 2: // test for input number defaultData = "12345"; pasteData = "67890"; - iframe.src = "data:text/html," + + iframeInner.src = "data:text/html," + "" + "" + ""; @@ -107,7 +127,7 @@ function dispatchTest(e) { case 3: // test for div contenteditable defaultData = "Test for selection change event"; pasteData = "from parent "; - iframe.src = "data:text/html," + + iframeInner.src = "data:text/html," + "file_NestedFramesOuter_CopyPaste.html
+ + + diff --git a/dom/browser-element/mochitest/mochitest.ini b/dom/browser-element/mochitest/mochitest.ini index 50af96cd3f72..e61b0c95a3d0 100644 --- a/dom/browser-element/mochitest/mochitest.ini +++ b/dom/browser-element/mochitest/mochitest.ini @@ -113,6 +113,7 @@ support-files = file_inputmethod.html file_post_request.html file_wyciwyg.html + file_NestedFramesOuter_CopyPaste.html # Note: browserElementTestHelpers.js looks at the test's filename to determine # whether the test should be OOP. "_oop_" signals OOP, "_inproc_" signals in