1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/browser-element/mochitest/browserElement_SetVisible.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,75 @@ 1.4 +/* Any copyright is dedicated to the public domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +// Test the setVisible property for mozbrowser 1.8 +"use strict"; 1.9 + 1.10 +SimpleTest.waitForExplicitFinish(); 1.11 +browserElementTestHelpers.setEnabledPref(true); 1.12 +browserElementTestHelpers.addPermission(); 1.13 + 1.14 +var iframeScript = function() { 1.15 + content.document.addEventListener("visibilitychange", function() { 1.16 + sendAsyncMessage('test:visibilitychange', { 1.17 + hidden: content.document.hidden 1.18 + }); 1.19 + }, false); 1.20 +} 1.21 + 1.22 +function runTest() { 1.23 + var mm; 1.24 + var numEvents = 0; 1.25 + var iframe1 = document.createElement('iframe'); 1.26 + SpecialPowers.wrap(iframe1).mozbrowser = true; 1.27 + iframe1.src = 'data:text/html,1'; 1.28 + 1.29 + document.body.appendChild(iframe1); 1.30 + 1.31 + function recvVisibilityChanged(msg) { 1.32 + msg = SpecialPowers.wrap(msg); 1.33 + numEvents++; 1.34 + if (numEvents === 1) { 1.35 + ok(true, 'iframe recieved visibility changed'); 1.36 + ok(msg.json.hidden === true, 'hidden attribute correctly set'); 1.37 + iframe1.setVisible(false); 1.38 + iframe1.setVisible(true); 1.39 + } else if (numEvents === 2) { 1.40 + ok(msg.json.hidden === false, 'hidden attribute correctly set'); 1.41 + // Allow some time in case we generate too many events 1.42 + setTimeout(function() { 1.43 + mm.removeMessageListener('test:visibilitychange', recvVisibilityChanged); 1.44 + SimpleTest.finish(); 1.45 + }, 100); 1.46 + } else { 1.47 + ok(false, 'Too many visibilitychange events'); 1.48 + } 1.49 + } 1.50 + 1.51 + function iframeLoaded() { 1.52 + testGetVisible(); 1.53 + } 1.54 + 1.55 + function testGetVisible() { 1.56 + iframe1.setVisible(false); 1.57 + iframe1.getVisible().onsuccess = function(evt) { 1.58 + ok(evt.target.result === false, 'getVisible() responds false after setVisible(false)'); 1.59 + 1.60 + iframe1.setVisible(true); 1.61 + iframe1.getVisible().onsuccess = function(evt) { 1.62 + ok(evt.target.result === true, 'getVisible() responds true after setVisible(true)'); 1.63 + testVisibilityChanges(); 1.64 + }; 1.65 + }; 1.66 + } 1.67 + 1.68 + function testVisibilityChanges() { 1.69 + mm = SpecialPowers.getBrowserFrameMessageManager(iframe1); 1.70 + mm.addMessageListener('test:visibilitychange', recvVisibilityChanged); 1.71 + mm.loadFrameScript('data:,(' + iframeScript.toString() + ')();', false); 1.72 + iframe1.setVisible(false); 1.73 + } 1.74 + 1.75 + iframe1.addEventListener('mozbrowserloadend', iframeLoaded); 1.76 +} 1.77 + 1.78 +addEventListener('testready', runTest);