/* Any copyright is dedicated to the public domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /* global browserElementTestHelpers */ SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("testing mozbrowser data: navigation is blocked"); browserElementTestHelpers.setEnabledPref(true); browserElementTestHelpers.addPermission(); // make sure top level data: URI navigations are blocked. const PREF = "security.data_uri.block_toplevel_data_uri_navigations"; browserElementTestHelpers._setPref(PREF, true); const INNER = "foo"; const DATA_URI = "data:text/html," + INNER + ""; const HTTP_URI = "browserElement_DataURILoad.html"; function runTest1() { let frame = document.createElement("iframe"); frame.setAttribute("mozbrowser", "true"); frame.src = DATA_URI; document.body.appendChild(frame); let wrappedFrame = SpecialPowers.wrap(frame); // wait for 1000ms and check that the data: URI did not load setTimeout(function() { isnot(wrappedFrame.contentWindow.document.body.innerHTML, INNER, "data: URI navigation should be blocked"); runTest2(); }, 1000); } function runTest2() { let frame = document.createElement("iframe"); frame.setAttribute("mozbrowser", "true"); frame.src = HTTP_URI; document.body.appendChild(frame); let wrappedFrame = SpecialPowers.wrap(frame); wrappedFrame.addEventListener("mozbrowserloadend", function onloadend(e) { ok(wrappedFrame.contentWindow.document.location.href.endsWith(HTTP_URI), "http: URI navigation should be allowed"); frame.src = DATA_URI; // wait for 1000ms and check that the data: URI did not load setTimeout(function() { isnot(wrappedFrame.contentWindow.document.body.innerHTML, INNER, "data: URI navigation should be blocked"); SimpleTest.finish(); }, 1000); }, {once: true}); } addEventListener("testready", runTest1);