diff options
Diffstat (limited to 'layout/style/test/test_crash_with_content_policy.html')
-rw-r--r-- | layout/style/test/test_crash_with_content_policy.html | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/layout/style/test/test_crash_with_content_policy.html b/layout/style/test/test_crash_with_content_policy.html new file mode 100644 index 0000000000..119ee0b53a --- /dev/null +++ b/layout/style/test/test_crash_with_content_policy.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Crashtests for style system with content policy</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> +</head> +<body> +<iframe id="iframe"></iframe> +<script> +const TESTS = [ + "file_bug1381233.html", +]; + +const Cc = SpecialPowers.Cc; +const Ci = SpecialPowers.Ci; + +var policyID = SpecialPowers.wrap(SpecialPowers.Components).ID("{b80e19d0-878f-d41b-2654-194714a4115c}"); +var policyName = "@mozilla.org/testpolicy;1"; +var policy = { + // nsISupports implementation + QueryInterface: function(iid) { + + iid = SpecialPowers.wrap(iid); + if (iid.equals(Ci.nsISupports) || + iid.equals(Ci.nsIFactory) || + iid.equals(Ci.nsIContentPolicy)) + return this; + + throw SpecialPowers.Cr.NS_ERROR_NO_INTERFACE; + }, + + // nsIFactory implementation + createInstance: function(outer, iid) { + return this.QueryInterface(iid); + }, + + // nsIContentPolicy implementation + shouldLoad: function(contentLocation, loadInfo, mimeTypeGuess) { + info(`shouldLoad is invoked for ${SpecialPowers.wrap(contentLocation).spec}`); + return Ci.nsIContentPolicy.ACCEPT; + }, + shouldProcess: function(contentLocation, loadInfo, mimeTypeGuess) { + return Ci.nsIContentPolicy.ACCEPT; + } +} +policy = SpecialPowers.wrapCallbackObject(policy); + +// Register content policy +var componentManager = SpecialPowers.wrap(SpecialPowers.Components).manager + .QueryInterface(Ci.nsIComponentRegistrar); +componentManager.registerFactory(policyID, "Test content policy", policyName, policy); +var categoryManager = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager); +categoryManager.addCategoryEntry("content-policy", policyName, policyName, false, true); + + +SimpleTest.waitForExplicitFinish(); + +async function runTests() { + let iframe = document.getElementById("iframe"); + for (let test of TESTS) { + iframe.src = test; + await new Promise(resolve => { + iframe.onload = resolve; + }); + ok(true, `${test} doesn't crash`); + } + categoryManager.deleteCategoryEntry("content-policy", policyName, false); + componentManager.unregisterFactory(policyID, policy); + SimpleTest.finish(); +} +runTests(); +</script> +</body> +</html> |