summaryrefslogtreecommitdiffstats
path: root/dom/html/test/browser_bug1108547.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/html/test/browser_bug1108547.js')
-rw-r--r--dom/html/test/browser_bug1108547.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/dom/html/test/browser_bug1108547.js b/dom/html/test/browser_bug1108547.js
new file mode 100644
index 0000000000..4949827086
--- /dev/null
+++ b/dom/html/test/browser_bug1108547.js
@@ -0,0 +1,149 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+requestLongerTimeout(2);
+
+function test() {
+ waitForExplicitFinish();
+
+ runPass("file_bug1108547-2.html", function () {
+ runPass("file_bug1108547-3.html", function () {
+ finish();
+ });
+ });
+}
+
+function runPass(getterFile, finishedCallback) {
+ var rootDir = "http://mochi.test:8888/browser/dom/html/test/";
+ var testBrowser;
+ var privateWin;
+
+ function whenDelayedStartupFinished(win, callback) {
+ let topic = "browser-delayed-startup-finished";
+ Services.obs.addObserver(function onStartup(aSubject) {
+ if (win != aSubject) {
+ return;
+ }
+
+ Services.obs.removeObserver(onStartup, topic);
+ executeSoon(callback);
+ }, topic);
+ }
+
+ // First, set the cookie in a normal window.
+ gBrowser.selectedTab = BrowserTestUtils.addTab(
+ gBrowser,
+ rootDir + "file_bug1108547-1.html"
+ );
+ BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(
+ afterOpenCookieSetter
+ );
+
+ function afterOpenCookieSetter() {
+ gBrowser.removeCurrentTab();
+
+ // Now, open a private window.
+ privateWin = OpenBrowserWindow({ private: true });
+ whenDelayedStartupFinished(privateWin, afterPrivateWindowOpened);
+ }
+
+ function afterPrivateWindowOpened() {
+ // In the private window, open the getter file, and wait for a new tab to be opened.
+ privateWin.gBrowser.selectedTab = BrowserTestUtils.addTab(
+ privateWin.gBrowser,
+ rootDir + getterFile
+ );
+ testBrowser = privateWin.gBrowser.selectedBrowser;
+ privateWin.gBrowser.tabContainer.addEventListener(
+ "TabOpen",
+ onNewTabOpened,
+ true
+ );
+ }
+
+ function fetchResult() {
+ return SpecialPowers.spawn(testBrowser, [], function () {
+ return content.document.getElementById("result").textContent;
+ });
+ }
+
+ function onNewTabOpened() {
+ // When the new tab is opened, wait for it to load.
+ privateWin.gBrowser.tabContainer.removeEventListener(
+ "TabOpen",
+ onNewTabOpened,
+ true
+ );
+ BrowserTestUtils.browserLoaded(
+ privateWin.gBrowser.tabs[privateWin.gBrowser.tabs.length - 1]
+ .linkedBrowser
+ )
+ .then(fetchResult)
+ .then(onNewTabLoaded);
+ }
+
+ function onNewTabLoaded(result) {
+ // Now, ensure that the private tab doesn't have access to the cookie set in normal mode.
+ is(result, "", "Shouldn't have access to the cookies");
+
+ // We're done with the private window, close it.
+ privateWin.close();
+
+ // Clear all cookies.
+ Cc["@mozilla.org/cookiemanager;1"]
+ .getService(Ci.nsICookieManager)
+ .removeAll();
+
+ // Open a new private window, this time to set a cookie inside it.
+ privateWin = OpenBrowserWindow({ private: true });
+ whenDelayedStartupFinished(privateWin, afterPrivateWindowOpened2);
+ }
+
+ function afterPrivateWindowOpened2() {
+ // In the private window, open the setter file, and wait for it to load.
+ privateWin.gBrowser.selectedTab = BrowserTestUtils.addTab(
+ privateWin.gBrowser,
+ rootDir + "file_bug1108547-1.html"
+ );
+ BrowserTestUtils.browserLoaded(privateWin.gBrowser.selectedBrowser).then(
+ afterOpenCookieSetter2
+ );
+ }
+
+ function afterOpenCookieSetter2() {
+ // We're done with the private window now, close it.
+ privateWin.close();
+
+ // Now try to read the cookie in a normal window, and wait for a new tab to be opened.
+ gBrowser.selectedTab = BrowserTestUtils.addTab(
+ gBrowser,
+ rootDir + getterFile
+ );
+ testBrowser = gBrowser.selectedBrowser;
+ gBrowser.tabContainer.addEventListener("TabOpen", onNewTabOpened2, true);
+ }
+
+ function onNewTabOpened2() {
+ // When the new tab is opened, wait for it to load.
+ gBrowser.tabContainer.removeEventListener("TabOpen", onNewTabOpened2, true);
+ BrowserTestUtils.browserLoaded(
+ gBrowser.tabs[gBrowser.tabs.length - 1].linkedBrowser
+ )
+ .then(fetchResult)
+ .then(onNewTabLoaded2);
+ }
+
+ function onNewTabLoaded2(result) {
+ // Now, ensure that the normal tab doesn't have access to the cookie set in private mode.
+ is(result, "", "Shouldn't have access to the cookies");
+
+ // Remove both of the tabs opened here.
+ gBrowser.removeCurrentTab();
+ gBrowser.removeCurrentTab();
+
+ privateWin = null;
+ testBrowser = null;
+
+ finishedCallback();
+ }
+}