Bug 1132566 - Make test e10s compatible: browser_privatebrowsing_cookieacceptdialog.js. r=billm, a=test-only

This commit is contained in:
Steven MacLeod
2015-03-05 11:06:10 -05:00
parent 6e19dd1c31
commit 93c82afc7d
2 changed files with 114 additions and 107 deletions

View File

@@ -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);
});

View File

@@ -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.