michael@0: /* Any copyright is dedicated to the public domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test the setVisible property for mozbrowser michael@0: "use strict"; michael@0: michael@0: SimpleTest.waitForExplicitFinish(); michael@0: browserElementTestHelpers.setEnabledPref(true); michael@0: browserElementTestHelpers.addPermission(); michael@0: michael@0: var iframeScript = function() { michael@0: content.document.addEventListener("visibilitychange", function() { michael@0: sendAsyncMessage('test:visibilitychange', { michael@0: hidden: content.document.hidden michael@0: }); michael@0: }, false); michael@0: } michael@0: michael@0: function runTest() { michael@0: var mm; michael@0: var numEvents = 0; michael@0: var iframe1 = document.createElement('iframe'); michael@0: SpecialPowers.wrap(iframe1).mozbrowser = true; michael@0: iframe1.src = 'data:text/html,1'; michael@0: michael@0: document.body.appendChild(iframe1); michael@0: michael@0: function recvVisibilityChanged(msg) { michael@0: msg = SpecialPowers.wrap(msg); michael@0: numEvents++; michael@0: if (numEvents === 1) { michael@0: ok(true, 'iframe recieved visibility changed'); michael@0: ok(msg.json.hidden === true, 'hidden attribute correctly set'); michael@0: iframe1.setVisible(false); michael@0: iframe1.setVisible(true); michael@0: } else if (numEvents === 2) { michael@0: ok(msg.json.hidden === false, 'hidden attribute correctly set'); michael@0: // Allow some time in case we generate too many events michael@0: setTimeout(function() { michael@0: mm.removeMessageListener('test:visibilitychange', recvVisibilityChanged); michael@0: SimpleTest.finish(); michael@0: }, 100); michael@0: } else { michael@0: ok(false, 'Too many visibilitychange events'); michael@0: } michael@0: } michael@0: michael@0: function iframeLoaded() { michael@0: testGetVisible(); michael@0: } michael@0: michael@0: function testGetVisible() { michael@0: iframe1.setVisible(false); michael@0: iframe1.getVisible().onsuccess = function(evt) { michael@0: ok(evt.target.result === false, 'getVisible() responds false after setVisible(false)'); michael@0: michael@0: iframe1.setVisible(true); michael@0: iframe1.getVisible().onsuccess = function(evt) { michael@0: ok(evt.target.result === true, 'getVisible() responds true after setVisible(true)'); michael@0: testVisibilityChanges(); michael@0: }; michael@0: }; michael@0: } michael@0: michael@0: function testVisibilityChanges() { michael@0: mm = SpecialPowers.getBrowserFrameMessageManager(iframe1); michael@0: mm.addMessageListener('test:visibilitychange', recvVisibilityChanged); michael@0: mm.loadFrameScript('data:,(' + iframeScript.toString() + ')();', false); michael@0: iframe1.setVisible(false); michael@0: } michael@0: michael@0: iframe1.addEventListener('mozbrowserloadend', iframeLoaded); michael@0: } michael@0: michael@0: addEventListener('testready', runTest);