Bug 1132566 - Make test e10s compatible: browser_privatebrowsing_cookieacceptdialog.js. r=billm, a=test-only
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
// This test makes sure that private browsing mode disables the "remember"
|
// This test makes sure that private browsing mode disables the "remember"
|
||||||
// option in the cookie accept dialog.
|
// option in the cookie accept dialog.
|
||||||
|
|
||||||
function test() {
|
add_task(function* test() {
|
||||||
// initialization
|
// initialization
|
||||||
const TEST_URL = "http://mochi.test:8888/browser/browser/components/" +
|
const TEST_URL = "http://mochi.test:8888/browser/browser/components/" +
|
||||||
"privatebrowsing/test/browser/" +
|
"privatebrowsing/test/browser/" +
|
||||||
@@ -14,36 +14,8 @@ function test() {
|
|||||||
let cp = Cc["@mozilla.org/embedcomp/cookieprompt-service;1"].
|
let cp = Cc["@mozilla.org/embedcomp/cookieprompt-service;1"].
|
||||||
getService(Ci.nsICookiePromptService);
|
getService(Ci.nsICookiePromptService);
|
||||||
|
|
||||||
waitForExplicitFinish();
|
|
||||||
|
|
||||||
function checkRememberOption(expectedDisabled, aWindow, callback) {
|
|
||||||
function observer(aSubject, aTopic, aData) {
|
|
||||||
if (aTopic != "domwindowopened")
|
|
||||||
return;
|
|
||||||
|
|
||||||
Services.ww.unregisterNotification(observer);
|
|
||||||
let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
|
|
||||||
win.addEventListener("load", function onLoad(event) {
|
|
||||||
win.removeEventListener("load", onLoad, false);
|
|
||||||
|
|
||||||
executeSoon(function () {
|
|
||||||
let doc = win.document;
|
|
||||||
let remember = doc.getElementById("persistDomainAcceptance");
|
|
||||||
ok(remember, "The remember checkbox should exist");
|
|
||||||
|
|
||||||
if (expectedDisabled)
|
|
||||||
is(remember.getAttribute("disabled"), "true",
|
|
||||||
"The checkbox should be disabled");
|
|
||||||
else
|
|
||||||
ok(!remember.hasAttribute("disabled"),
|
|
||||||
"The checkbox should not be disabled");
|
|
||||||
|
|
||||||
waitForWindowClose(win, callback);
|
|
||||||
});
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
Services.ww.registerNotification(observer);
|
|
||||||
|
|
||||||
|
function openCookieDialog(aWindow) {
|
||||||
let remember = {};
|
let remember = {};
|
||||||
const time = (new Date("Jan 1, 2030")).getTime() / 1000;
|
const time = (new Date("Jan 1, 2030")).getTime() / 1000;
|
||||||
let cookie = {
|
let cookie = {
|
||||||
@@ -67,95 +39,90 @@ function test() {
|
|||||||
throw Cr.NS_ERROR_NO_INTERFACE;
|
throw Cr.NS_ERROR_NO_INTERFACE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
cp.cookieDialog(aWindow, cookie, "mozilla.org", 10, false, remember);
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkSettingDialog(aIsPrivateWindow, aWindow, aCallback) {
|
executeSoon(function () {
|
||||||
let selectedBrowser = aWindow.gBrowser.selectedBrowser;
|
cp.cookieDialog(aWindow, cookie, "mozilla.org", 10, false, remember);
|
||||||
|
});
|
||||||
|
return BrowserTestUtils.domWindowOpened();
|
||||||
|
};
|
||||||
|
|
||||||
function onLoad() {
|
|
||||||
if (aWindow.content.location.href != TEST_URL) {
|
|
||||||
selectedBrowser.loadURI(TEST_URL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
selectedBrowser.removeEventListener("load", onLoad, true);
|
|
||||||
Services.ww.unregisterNotification(observer);
|
|
||||||
|
|
||||||
ok(aIsPrivateWindow,
|
function checkRememberOption(expectedDisabled, aWindow) {
|
||||||
"Confirm setting dialog is not displayed for private window");
|
return Task.spawn(function* () {
|
||||||
|
let dialogWin = yield openCookieDialog(aWindow);
|
||||||
|
|
||||||
executeSoon(aCallback);
|
yield new Promise(resolve => {
|
||||||
}
|
dialogWin.addEventListener("load", function onLoad(event) {
|
||||||
selectedBrowser.addEventListener("load", onLoad, true);
|
dialogWin.removeEventListener("load", onLoad, false);
|
||||||
|
resolve();
|
||||||
function observer(aSubject, aTopic, aData) {
|
}, false);
|
||||||
if (aTopic != "domwindowopened")
|
|
||||||
return;
|
|
||||||
selectedBrowser.removeEventListener("load", onLoad, true);
|
|
||||||
Services.ww.unregisterNotification(observer);
|
|
||||||
ok(!aIsPrivateWindow,
|
|
||||||
"Confirm setting dialog is displayed for normal window");
|
|
||||||
let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
|
|
||||||
executeSoon(function () {
|
|
||||||
info("Wait for window close");
|
|
||||||
waitForWindowClose(win, aCallback);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
Services.ww.registerNotification(observer);
|
|
||||||
|
|
||||||
selectedBrowser.loadURI(TEST_URL);
|
let doc = dialogWin.document;
|
||||||
}
|
let remember = doc.getElementById("persistDomainAcceptance");
|
||||||
|
ok(remember, "The remember checkbox should exist");
|
||||||
|
|
||||||
let windowsToClose = [];
|
if (expectedDisabled)
|
||||||
function testOnWindow(aIsPrivate, aCallback) {
|
is(remember.getAttribute("disabled"), "true",
|
||||||
whenNewWindowLoaded({private: aIsPrivate}, function(aWin) {
|
"The checkbox should be disabled");
|
||||||
windowsToClose.push(aWin);
|
else
|
||||||
let selectedBrowser = aWin.gBrowser.selectedBrowser;
|
ok(!remember.hasAttribute("disabled"),
|
||||||
selectedBrowser.addEventListener("load", function onLoad() {
|
"The checkbox should not be disabled");
|
||||||
if (aWin.content.location.href != BLANK_URL) {
|
|
||||||
selectedBrowser.loadURI(BLANK_URL);
|
yield BrowserTestUtils.closeWindow(dialogWin);
|
||||||
return;
|
|
||||||
}
|
|
||||||
selectedBrowser.removeEventListener("load", onLoad, true);
|
|
||||||
executeSoon(function() aCallback(aWin));
|
|
||||||
}, true);
|
|
||||||
selectedBrowser.loadURI(BLANK_URL);
|
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
registerCleanupFunction(function() {
|
function checkSettingDialog(aIsPrivateWindow, aWindow) {
|
||||||
Services.prefs.clearUserPref("network.cookie.lifetimePolicy");
|
return Task.spawn(function* () {
|
||||||
windowsToClose.forEach(function(aWin) {
|
let dialogOpened = false;
|
||||||
aWin.close();
|
let promiseDialogClosed = null;
|
||||||
|
|
||||||
|
function observer(subject, topic, data) {
|
||||||
|
if (topic != "domwindowopened") { return; }
|
||||||
|
Services.ww.unregisterNotification(observer);
|
||||||
|
dialogOpened = true;
|
||||||
|
|
||||||
|
promiseDialogClosed = BrowserTestUtils.closeWindow(
|
||||||
|
subject.QueryInterface(Ci.nsIDOMWindow));
|
||||||
|
}
|
||||||
|
Services.ww.registerNotification(observer);
|
||||||
|
|
||||||
|
let selectedBrowser = aWindow.gBrowser.selectedBrowser;
|
||||||
|
selectedBrowser.loadURI(TEST_URL);
|
||||||
|
yield BrowserTestUtils.browserLoaded(selectedBrowser);;
|
||||||
|
|
||||||
|
if (dialogOpened) {
|
||||||
|
ok(!aIsPrivateWindow,
|
||||||
|
"Setting dialog shown, confirm normal window");
|
||||||
|
} else {
|
||||||
|
Services.ww.unregisterNotification(observer);
|
||||||
|
ok(aIsPrivateWindow,
|
||||||
|
"Confirm setting dialog is not displayed for private window");
|
||||||
|
}
|
||||||
|
|
||||||
|
yield promiseDialogClosed;
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
// Ask all cookies
|
// Ask all cookies
|
||||||
Services.prefs.setIntPref("network.cookie.lifetimePolicy", 1);
|
Services.prefs.setIntPref("network.cookie.lifetimePolicy", 1);
|
||||||
|
|
||||||
testOnWindow(false, function(aWin) {
|
let win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||||
info("Test on public window");
|
info("Test on public window");
|
||||||
checkRememberOption(false, aWin, function() {
|
|
||||||
checkSettingDialog(false, aWin, function() {
|
|
||||||
testOnWindow(true, function(aPrivWin) {
|
|
||||||
info("Test on private window");
|
|
||||||
checkRememberOption(true, aPrivWin, function() {
|
|
||||||
checkSettingDialog(true, aPrivWin, finish);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function waitForWindowClose(aWin, aCallback) {
|
yield checkRememberOption(false, win);
|
||||||
function observer(aSubject, aTopic, aData) {
|
yield checkSettingDialog(false, win);
|
||||||
if (aTopic == "domwindowclosed") {
|
|
||||||
info("Window closed");
|
let privateWin = yield BrowserTestUtils.openNewBrowserWindow({private: true});
|
||||||
Services.ww.unregisterNotification(observer);
|
info("Test on private window");
|
||||||
executeSoon(aCallback);
|
|
||||||
}
|
yield checkRememberOption(true, privateWin);
|
||||||
}
|
yield checkSettingDialog(true, privateWin);
|
||||||
Services.ww.registerNotification(observer);
|
|
||||||
aWin.close();
|
|
||||||
}
|
// Cleanup
|
||||||
|
Services.prefs.clearUserPref("network.cookie.lifetimePolicy");
|
||||||
|
yield BrowserTestUtils.closeWindow(win);
|
||||||
|
yield BrowserTestUtils.closeWindow(privateWin);
|
||||||
|
});
|
||||||
|
|||||||
@@ -59,6 +59,23 @@ this.BrowserTestUtils = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Promise}
|
||||||
|
* A Promise which resolves when a "domwindowopened" notification
|
||||||
|
* has been fired by the window watcher.
|
||||||
|
*/
|
||||||
|
domWindowOpened() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
function observer(subject, topic, data) {
|
||||||
|
if (topic != "domwindowopened") { return; }
|
||||||
|
|
||||||
|
Services.ww.unregisterNotification(observer);
|
||||||
|
resolve(subject.QueryInterface(Ci.nsIDOMWindow));
|
||||||
|
}
|
||||||
|
Services.ww.registerNotification(observer);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Object} options
|
* @param {Object} options
|
||||||
* {
|
* {
|
||||||
@@ -89,6 +106,29 @@ this.BrowserTestUtils = {
|
|||||||
subject => subject == win).then(() => win);
|
subject => subject == win).then(() => win);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes a window.
|
||||||
|
*
|
||||||
|
* @param {Window}
|
||||||
|
* A window to close.
|
||||||
|
*
|
||||||
|
* @return {Promise}
|
||||||
|
* Resolves when the provided window has been closed.
|
||||||
|
*/
|
||||||
|
closeWindow(win) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
function observer(subject, topic, data) {
|
||||||
|
if (topic == "domwindowclosed" && subject === win) {
|
||||||
|
Services.ww.unregisterNotification(observer);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Services.ww.registerNotification(observer);
|
||||||
|
win.close();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waits a specified number of miliseconds for a specified event to be
|
* Waits a specified number of miliseconds for a specified event to be
|
||||||
* fired on a specified element.
|
* fired on a specified element.
|
||||||
|
|||||||
Reference in New Issue
Block a user