1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/browser-element/mochitest/browserElement_TopBarrier.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,78 @@ 1.4 +/* Any copyright is dedicated to the public domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +// Test that an <iframe mozbrowser> is a window.{top,parent,frameElement} barrier. 1.8 +"use strict"; 1.9 + 1.10 +SimpleTest.waitForExplicitFinish(); 1.11 +browserElementTestHelpers.setEnabledPref(true); 1.12 +browserElementTestHelpers.addPermission(); 1.13 + 1.14 +var iframe; 1.15 +function runTest() { 1.16 + iframe = document.createElement('iframe'); 1.17 + iframe.addEventListener('mozbrowserloadend', function() { 1.18 + try { 1.19 + outerIframeLoaded(); 1.20 + } catch(e) { 1.21 + dump("Got error: " + e + '\n'); 1.22 + } 1.23 + }); 1.24 + SpecialPowers.wrap(iframe).mozbrowser = true; 1.25 + iframe.src = 'data:text/html,Outer iframe <iframe id="inner-iframe"></iframe>'; 1.26 + // For kicks, this test uses a display:none iframe. This shouldn't make a 1.27 + // difference in anything. 1.28 + iframe.style.display = 'none'; 1.29 + document.body.appendChild(iframe); 1.30 +} 1.31 + 1.32 +var numMsgReceived = 0; 1.33 +function outerIframeLoaded() { 1.34 + var injectedScript = 1.35 + "data:,function is(a, b, desc) { \ 1.36 + if (a == b) { \ 1.37 + sendAsyncMessage('test:test-pass', desc); \ 1.38 + } else { \ 1.39 + sendAsyncMessage('test:test-fail', desc + ' ' + a + ' != ' + b); \ 1.40 + } \ 1.41 + } \ 1.42 + is(content.window.top, content.window, 'top'); \ 1.43 + is(content.window.content, content.window, 'content'); \ 1.44 + is(content.window.parent, content.window, 'parent'); \ 1.45 + is(content.window.frameElement, null, 'frameElement'); \ 1.46 + var innerIframe = content.document.getElementById('inner-iframe'); \ 1.47 + var innerWindow = innerIframe.contentWindow; \ 1.48 + is(innerWindow.top, content.window, 'inner top'); \ 1.49 + is(innerWindow.content, content.window, 'inner content'); \ 1.50 + is(innerWindow.parent, content.window, 'inner parent'); \ 1.51 + is(innerWindow.frameElement, innerIframe, 'inner frameElement');" 1.52 + 1.53 + var mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.54 + 1.55 + function onRecvTestPass(msg) { 1.56 + numMsgReceived++; 1.57 + ok(true, msg.json); 1.58 + } 1.59 + mm.addMessageListener('test:test-pass', onRecvTestPass); 1.60 + 1.61 + function onRecvTestFail(msg) { 1.62 + numMsgReceived++; 1.63 + ok(false, msg.json); 1.64 + } 1.65 + mm.addMessageListener('test:test-fail', onRecvTestFail); 1.66 + 1.67 + mm.loadFrameScript(injectedScript, /* allowDelayedLoad = */ false); 1.68 + 1.69 + waitForMessages(6); 1.70 +} 1.71 + 1.72 +function waitForMessages(num) { 1.73 + if (numMsgReceived < num) { 1.74 + SimpleTest.executeSoon(function() { waitForMessages(num); }); 1.75 + return; 1.76 + } 1.77 + 1.78 + SimpleTest.finish(); 1.79 +} 1.80 + 1.81 +addEventListener('testready', runTest);