diff options
Diffstat (limited to 'dom/plugins/test/mochitest/test_privatemode_perwindowpb.xul')
-rw-r--r-- | dom/plugins/test/mochitest/test_privatemode_perwindowpb.xul | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_privatemode_perwindowpb.xul b/dom/plugins/test/mochitest/test_privatemode_perwindowpb.xul new file mode 100644 index 000000000..ae6c9d292 --- /dev/null +++ b/dom/plugins/test/mochitest/test_privatemode_perwindowpb.xul @@ -0,0 +1,120 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window title="NPAPI Private Mode Tests" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" /> + <script type="application/javascript" + src="chrome://mochikit/content/chrome-harness.js" /> + <script type="application/javascript" src="plugin-utils.js"></script> + <script type="application/javascript"> + setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED); + </script> +<body xmlns="http://www.w3.org/1999/xhtml" onload="runTests()"> +<embed id="plugin1" type="application/x-test" width="200" height="200"></embed> +<embed id="plugin2" type="application/x-test" width="200" height="200"></embed> +</body> +<script class="testbody" type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); + +var Cc = Components.classes; +var Ci = Components.interfaces; + +function runTests() { + // Allow all cookies, then run the actual tests + SpecialPowers.pushPrefEnv({"set": [["network.cookie.cookieBehavior", 0]]}, runTestsCallback); +} + +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +Components.utils.import("resource://gre/modules/Services.jsm"); + +function whenDelayedStartupFinished(aWindow, aCallback) { + Services.obs.addObserver(function observer(aSubject, aTopic) { + if (aWindow == aSubject) { + Services.obs.removeObserver(observer, aTopic); + SimpleTest.executeSoon(aCallback); + } + }, "browser-delayed-startup-finished", false); +} + +function runTestsCallback() { + var pluginElement1 = document.getElementById("plugin1"); + var pluginElement2 = document.getElementById("plugin2"); + + var state1 = false; + var state2 = false; + var exceptionThrown = false; + + try { + state1 = pluginElement1.queryPrivateModeState(); + state2 = pluginElement2.queryPrivateModeState(); + } catch (e) { + exceptionThrown = true; + } + is(exceptionThrown, false, "Exception thrown getting private mode state."); + is(state1, false, "Browser returned incorrect private mode state."); + is(state2, false, "Browser returned incorrect private mode state."); + + pluginElement1.setCookie("foo"); + is(pluginElement1.getCookie(), "foo", "Cookie was set and retrieved correctly in public mode."); + + // open a window with private mode and get the references of the elements. + var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation) + .QueryInterface(Ci.nsIDocShellTreeItem) + .rootTreeItem + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindow); + var contentPage = getRootDirectory(window.location.href) + "privatemode_perwindowpb.xul"; + + function testOnWindow(aIsPrivate, aCallback) { + var win = mainWindow.OpenBrowserWindow({private: aIsPrivate}); + whenDelayedStartupFinished(win, function () { + win.addEventListener("DOMContentLoaded", function onInnerLoad() { + if (win.content.location.href == "about:privatebrowsing") { + win.gBrowser.loadURI(contentPage); + return; + } + win.removeEventListener("DOMContentLoaded", onInnerLoad, true); + win.gBrowser.selectedBrowser.focus(); + SimpleTest.executeSoon(function() { aCallback(win); }); + }, true); + SimpleTest.executeSoon(function() { win.gBrowser.loadURI(contentPage); }); + }); + } + + testOnWindow(true, function(aWin) { + pluginElement1 = aWin.gBrowser.contentDocument.getElementById("plugin1"); + pluginElement2 = aWin.gBrowser.contentDocument.getElementById("plugin2"); + + var officialState1, officialState2; + try { + officialState1 = pluginElement1.queryPrivateModeState(); + officialState2 = pluginElement2.queryPrivateModeState(); + } catch (e) { + exceptionThrown = true; + } + is(exceptionThrown, false, "Exception thrown getting private mode state."); + is(officialState1, true, "Querying private mode reported incorrectly"); + is(officialState2, true, "Querying private mode reported incorrectly"); + + // It would be nice to assert that we don't see the public cookie in private mode, + // but the NPAPI complains when the resulting string is empty. + // is(pluginElement1.getCookie(), "", "Public cookie was not retrieved in private mode."); + pluginElement1.setCookie("bar"); + is(pluginElement1.getCookie(), "bar", "Cookie was set and retrieved correctly in private mode."); + + aWin.close(); + + pluginElement1 = document.getElementById("plugin1"); + is(pluginElement1.getCookie(), "foo", "Private cookie was not retrieved in public mode."); + + SimpleTest.finish(); + }); +} +]]> +</script> +</window> |