michael@0: /* Any copyright is dedicated to the public domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test if DOMRequest returned by an iframe gets an error callback when michael@0: // the iframe is not in the DOM. michael@0: "use strict"; michael@0: michael@0: SimpleTest.waitForExplicitFinish(); michael@0: browserElementTestHelpers.setEnabledPref(true); michael@0: browserElementTestHelpers.addPermission(); michael@0: michael@0: function runTest() { michael@0: var iframe1 = document.createElement('iframe'); michael@0: SpecialPowers.wrap(iframe1).mozbrowser = true; michael@0: iframe1.src = 'data:text/html,' + michael@0: 'hello'; michael@0: document.body.appendChild(iframe1); michael@0: michael@0: function testIframe(beforeRun, isErrorExpected, nextTest) { michael@0: return function() { michael@0: var error = false; michael@0: if (beforeRun) michael@0: beforeRun(); michael@0: function testEnd() { michael@0: is(isErrorExpected, error); michael@0: SimpleTest.executeSoon(nextTest); michael@0: } michael@0: michael@0: var domRequest = iframe1.getScreenshot(1000, 1000); michael@0: domRequest.onsuccess = function(e) { michael@0: testEnd(); michael@0: } michael@0: domRequest.onerror = function(e) { michael@0: error = true; michael@0: testEnd(); michael@0: } michael@0: }; michael@0: } michael@0: michael@0: function iframeLoadedHandler() { michael@0: iframe1.removeEventListener('mozbrowserloadend', iframeLoadedHandler); michael@0: // Test 1: iframe is in the DOM. michael@0: // Test 2: iframe is removed from the DOM. michael@0: // Test 3: iframe is added back into the DOM. michael@0: var test3 = testIframe( michael@0: function() { michael@0: document.body.appendChild(iframe1); michael@0: }, false, michael@0: function() { michael@0: SimpleTest.finish(); michael@0: }) michael@0: ; michael@0: var test2 = testIframe(function() { michael@0: document.body.removeChild(iframe1); michael@0: }, true, test3); michael@0: var test1 = testIframe(null, false, test2); michael@0: SimpleTest.executeSoon(test1); michael@0: } michael@0: michael@0: iframe1.addEventListener('mozbrowserloadend', iframeLoadedHandler); michael@0: } michael@0: michael@0: addEventListener('testready', runTest);