зеркало из https://github.com/mozilla/gecko-dev.git
150 строки
4.3 KiB
JavaScript
150 строки
4.3 KiB
JavaScript
/* 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();
|
|
}
|
|
}
|