summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/mochitest/test_bug406541.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/test/mochitest/test_bug406541.html')
-rw-r--r--dom/plugins/test/mochitest/test_bug406541.html100
1 files changed, 100 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_bug406541.html b/dom/plugins/test/mochitest/test_bug406541.html
new file mode 100644
index 000000000..6ce9d4554
--- /dev/null
+++ b/dom/plugins/test/mochitest/test_bug406541.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<html>
+<head>
+ <title>Test for Bug 406541</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="plugin-utils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+</head>
+<body>
+<script type="application/x-child-payload" id="child-payload">
+ // This is injected into the file:/// origin iframe, see below.
+
+ // appletA should spawn, appletB, with a codebase outside the temp directory,
+ // should not.
+ var appletA = document.createElement("applet");
+ var appletB = document.createElement("applet");
+ var appletC = document.createElement("applet");
+ appletA.type = appletB.type = appletC.type = "application/x-java-test";
+ appletB.setAttribute("codebase", "file:///");
+ appletC.setAttribute("codebase", "./subdir_bug406541/");
+ document.body.appendChild(appletA);
+ document.body.appendChild(appletB);
+ document.body.appendChild(appletC);
+ function isSpawned(plugin) {
+ try {
+ var x = plugin.getJavaCodebase();
+ return true;
+ } catch (e) {}
+ return false;
+ }
+ window.parent.postMessage({ "A": isSpawned(appletA),
+ "B": isSpawned(appletB),
+ "C": isSpawned(appletC) }, "*");
+</script>
+<script type="application/javascript">
+ SimpleTest.waitForExplicitFinish();
+ setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED,
+ "Java Test Plug-in");
+ SpecialPowers.pushPrefEnv({ "set": [
+ ['plugin.java.mime', 'application/x-java-test']
+ ] }, runTest);
+
+ function runTest() {
+ // Create a empty file and point an iframe at it
+ var Cc = SpecialPowers.Cc;
+ var Ci = SpecialPowers.Ci;
+ var file = Cc["@mozilla.org/file/directory_service;1"]
+ .getService(Ci.nsIProperties)
+ .get("TmpD", Ci.nsIFile);
+ var subdir = Cc["@mozilla.org/file/directory_service;1"]
+ .getService(Ci.nsIProperties)
+ .get("TmpD", Ci.nsIFile);
+ file.append("test_bug406541.html");
+ file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
+ subdir.append("subdir_bug406541");
+ subdir.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0600);
+
+ var i = document.createElement("iframe");
+ var loaded = false;
+ i.addEventListener("load", function initialLoad() {
+ if (!loaded) {
+ // Once loaded, use special powers to point it at the file
+ SpecialPowers.wrap(i.contentWindow).location.href = "file://" + file.path;
+ loaded = true;
+ } else {
+ // Inject the child-payload script to the file:/// origin. Let it test
+ // applet spawning and send the results in a postMessage. (Because I
+ // couldn't get SpecialPowers to let me touch applets cross-origin, then
+ // gave up.)
+ var innerdoc = SpecialPowers.wrap(i.contentWindow).document;
+ var s = innerdoc.createElement("script");
+ s.type = "text/javascript";
+ s.textContent = document.getElementById("child-payload").textContent;
+ var finished = false;
+ window.onmessage = function(message) {
+ ok(message.data.A, "Plugin A should spawn");
+ ok(!message.data.B, "Plugin B should NOT spawn");
+ ok(message.data.C, "Plugin C should spawn");
+ file.remove(false);
+ subdir.remove(false);
+ finished = true;
+ SimpleTest.finish();
+ };
+ innerdoc.body.appendChild(s);
+
+ SimpleTest.executeSoon(function() {
+ if (!finished) {
+ ok(finished, "Should have received callback by now");
+ SimpleTest.finish();
+ }
+ });
+ }
+ }, false);
+ document.body.appendChild(i);
+ }
+</script>
+</body>
+</html>