Bug 1222284 - Part 2: Replace setFinishedCallback with waitForMessage for browser tests, r=btseng

For all tests depend on testFinishedCallback() function, the following had been changed:
* waitForExplicitFinish() will be replaced with add_task().
* gBrowser.selectedBrowser.addEventListener() will be replaced with waitForMessage().
* testFinishedCallback, testResult, and testException will be unified to testResult.
This commit is contained in:
Shawn Huang 2017-07-20 15:10:30 +08:00
parent 4841b5cf60
commit 3fba265811
10 changed files with 126 additions and 286 deletions

View File

@ -18,85 +18,46 @@ const testPageURL2 = "http://" + domains[1] + addPath;
const testPageURL3 = "http://" + domains[0] + getPath;
const testPageURL4 = "http://" + domains[1] + getPath;
function test()
{
add_task(async function test1() {
requestLongerTimeout(2);
waitForExplicitFinish();
// Avoids the prompt
setPermission(testPageURL1, "indexedDB");
setPermission(testPageURL2, "indexedDB");
executeSoon(test1);
}
function test1()
{
// Set database version for domain 1
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(result, exception) {
ok(result == 11, "Set version on database in " + testPageURL1);
ok(!exception, "No exception");
gBrowser.removeCurrentTab();
gBrowser.selectedBrowser.loadURI(testPageURL1);
await waitForMessage(11, gBrowser);
gBrowser.removeCurrentTab();
});
executeSoon(test2);
});
}, {capture: true, once: true});
content.location = testPageURL1;
}
function test2()
{
add_task(async function test2() {
// Set database version for domain 2
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(result, exception) {
ok(result == 11, "Set version on database in " + testPageURL2);
ok(!exception, "No exception");
gBrowser.removeCurrentTab();
gBrowser.selectedBrowser.loadURI(testPageURL2);
await waitForMessage(11, gBrowser);
gBrowser.removeCurrentTab();
});
executeSoon(test3);
});
}, {capture: true, once: true});
content.location = testPageURL2;
}
function test3()
{
add_task(async function test3() {
// Remove database from domain 2
ForgetAboutSite.removeDataFromDomain(domains[1]).then(() => {
setPermission(testPageURL4, "indexedDB");
executeSoon(test4);
});
}
});
function test4()
{
add_task(async function test4() {
// Get database version for domain 1
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(result, exception) {
ok(result == 11, "Got correct version on database in " + testPageURL3);
ok(!exception, "No exception");
gBrowser.removeCurrentTab();
gBrowser.selectedBrowser.loadURI(testPageURL3);
await waitForMessage(11, gBrowser);
gBrowser.removeCurrentTab();
});
executeSoon(test5);
});
}, {capture: true, once: true});
content.location = testPageURL3;
}
function test5()
{
add_task(async function test5() {
// Get database version for domain 2
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(result, exception) {
ok(result == 1, "Got correct version on database in " + testPageURL4);
ok(!exception, "No exception");
gBrowser.removeCurrentTab();
executeSoon(finish);
});
}, {capture: true, once: true});
content.location = testPageURL4;
}
gBrowser.selectedBrowser.loadURI(testPageURL4);
await waitForMessage(1, gBrowser);
gBrowser.removeCurrentTab();
});

View File

@ -16,7 +16,7 @@
let event = yield undefined;
if (event.type == "error") {
testException = event.target.error.name;
testResult = event.target.error.name;
}
else {
let db = event.target.result;

View File

@ -16,7 +16,7 @@
let event = yield undefined;
if (event.type == "error") {
testException = event.target.error.name;
testResult = event.target.error.name;
}
else {
let db = event.target.result;

View File

@ -23,7 +23,7 @@
testResult = event.target.result instanceof IDBDatabase;
}
else {
testException = event.target.error.name;
testResult = event.target.error.name;
}
event.preventDefault();

View File

@ -7,80 +7,56 @@ const testPageURL = "http://mochi.test:8888/browser/" +
"dom/indexedDB/test/browser_permissionsPrompt.html";
const notificationID = "indexedDB-permissions-prompt";
function test()
{
waitForExplicitFinish();
add_task(async function test1() {
// We want a prompt.
removePermission(testPageURL, "indexedDB");
executeSoon(test1);
}
function test1()
{
info("creating tab");
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(isIDBDatabase, exception) {
ok(isIDBDatabase,
"First database creation was successful");
ok(!exception, "No exception");
is(getPermission(testPageURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
executeSoon(test2);
});
registerPopupEventHandler("popupshowing", function() {
ok(true, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(true, "prompt shown");
triggerMainCommand(this);
});
registerPopupEventHandler("popuphidden", function() {
ok(true, "prompt hidden");
});
}, {capture: true, once: true});
registerPopupEventHandler("popupshowing", function() {
ok(true, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(true, "prompt shown");
triggerMainCommand(this);
});
registerPopupEventHandler("popuphidden", function() {
ok(true, "prompt hidden");
});
info("loading test page: " + testPageURL);
content.location = testPageURL;
}
gBrowser.selectedBrowser.loadURI(testPageURL);
function test2()
{
await waitForMessage(true, gBrowser);
is(getPermission(testPageURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
});
add_task(async function test2() {
info("creating tab");
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(isIDBDatabase, exception) {
ok(isIDBDatabase,
"First database creation was successful");
ok(!exception, "No exception");
is(getPermission(testPageURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
unregisterAllPopupEventHandlers();
removePermission(testPageURL, "indexedDB");
executeSoon(finish);
});
registerPopupEventHandler("popupshowing", function() {
ok(false, "Shouldn't show a popup this time");
});
registerPopupEventHandler("popupshown", function() {
ok(false, "Shouldn't show a popup this time");
});
registerPopupEventHandler("popuphidden", function() {
ok(false, "Shouldn't show a popup this time");
});
}, {capture: true, once: true});
registerPopupEventHandler("popupshowing", function() {
ok(false, "Shouldn't show a popup this time");
});
registerPopupEventHandler("popupshown", function() {
ok(false, "Shouldn't show a popup this time");
});
registerPopupEventHandler("popuphidden", function() {
ok(false, "Shouldn't show a popup this time");
});
info("loading test page: " + testPageURL);
content.location = testPageURL;
}
gBrowser.selectedBrowser.loadURI(testPageURL);
await waitForMessage(true, gBrowser);
is(getPermission(testPageURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
unregisterAllPopupEventHandlers();
removePermission(testPageURL, "indexedDB");
});

View File

@ -7,36 +7,6 @@ const testPageURL = "http://mochi.test:8888/browser/" +
"dom/indexedDB/test/browser_permissionsPrompt.html";
const notificationID = "indexedDB-permissions-prompt";
function waitForMessage(aMessage, browser) {
return new Promise((resolve, reject) => {
/* eslint-disable no-undef */
function contentScript() {
addEventListener("message", function(event) {
sendAsyncMessage("testLocal:exception",
{exception: event.data});
}, {once: true}, true);
}
/* eslint-enable no-undef */
let script = "data:,(" + contentScript.toString() + ")();";
let mm = browser.selectedBrowser.messageManager;
mm.addMessageListener("testLocal:exception", function listener(msg) {
mm.removeMessageListener("testLocal:exception", listener);
mm.removeDelayedFrameScript(script);
is(msg.data.exception, aMessage, "received " + aMessage);
if (msg.data.exception == aMessage) {
resolve();
} else {
reject();
}
});
mm.loadFrameScript(script, true);
});
}
add_task(async function test1() {
removePermission(testPageURL, "indexedDB");

View File

@ -9,79 +9,55 @@ const testSharedWorkerURL = "http://mochi.test:8888/browser/" +
"dom/indexedDB/test/browser_permissionsSharedWorker.html";
const notificationID = "indexedDB-permissions-prompt";
function test()
{
waitForExplicitFinish();
executeSoon(test1);
}
function test1()
{
add_task(async function test1() {
// We want a prompt.
removePermission(testWorkerURL, "indexedDB");
registerPopupEventHandler("popupshowing", function() {
ok(true, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(true, "prompt shown");
triggerMainCommand(this);
});
registerPopupEventHandler("popuphidden", function() {
ok(true, "prompt hidden");
});
info("creating tab");
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(isIDBDatabase, exception) {
ok(isIDBDatabase, "First database creation was successful");
ok(!exception, "No exception");
is(getPermission(testWorkerURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
executeSoon(test2);
});
registerPopupEventHandler("popupshowing", function() {
ok(true, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(true, "prompt shown");
triggerMainCommand(this);
});
registerPopupEventHandler("popuphidden", function() {
ok(true, "prompt hidden");
});
}, {capture: true, once: true});
info("loading test page: " + testWorkerURL);
content.location = testWorkerURL;
}
gBrowser.selectedBrowser.loadURI(testWorkerURL);
function test2()
{
await waitForMessage("ok", gBrowser);
is(getPermission(testWorkerURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.ALLOW_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
});
add_task(async function test2() {
// We want a prompt.
removePermission(testSharedWorkerURL, "indexedDB");
registerPopupEventHandler("popupshowing", function() {
ok(false, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(false, "prompt shown");
});
registerPopupEventHandler("popuphidden", function() {
ok(false, "prompt hidden");
});
info("creating tab");
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
setFinishedCallback(function(isIDBDatabase, exception) {
ok(!isIDBDatabase, "First database creation was successful");
ok(exception, "No exception");
is(getPermission(testSharedWorkerURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.UNKNOWN_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
executeSoon(finish);
});
registerPopupEventHandler("popupshowing", function() {
ok(false, "prompt showing");
});
registerPopupEventHandler("popupshown", function() {
ok(false, "prompt shown");
});
registerPopupEventHandler("popuphidden", function() {
ok(false, "prompt hidden");
});
}, {capture: true, once: true});
info("loading test page: " + testSharedWorkerURL);
content.location = testSharedWorkerURL;
}
gBrowser.selectedBrowser.loadURI(testSharedWorkerURL);
await waitForMessage("InvalidStateError", gBrowser);
is(getPermission(testSharedWorkerURL, "indexedDB"),
Components.interfaces.nsIPermissionManager.UNKNOWN_ACTION,
"Correct permission set");
gBrowser.removeCurrentTab();
});

View File

@ -7,21 +7,16 @@
<title>Indexed Database Test</title>
<script type="text/javascript">
// testFinishedCallback is expected to be set in the scope by head.js.
/* global testFinishedCallback */
let testIsIDBDatabase;
let testException;
function runTest() {
let w = new SharedWorker("browser_permissionsSharedWorker.js");
w.port.onmessage = function(e) {
let message;
if (e.data.status == "success") {
testIsIDBDatabase = e.data.isIDBDatabase;
message = "ok";
} else {
testException = e.data.error;
message = e.data.error;
}
setTimeout(testFinishedCallback, 0, testIsIDBDatabase, testException);
postMessage(message, "*");
}
const name = window.location.pathname + "_sharedWorker";

View File

@ -7,21 +7,16 @@
<title>Indexed Database Test</title>
<script type="text/javascript">
// testFinishedCallback is expected to be set in the scope by head.js.
/* global testFinishedCallback */
let testIsIDBDatabase;
let testException;
function runTest() {
let w = new Worker("browser_permissionsWorker.js");
w.onmessage = function(e) {
let message;
if (e.data.status == "success") {
testIsIDBDatabase = e.data.isIDBDatabase;
message = "ok";
} else {
testException = e.data.error;
message = e.data.error;
}
setTimeout(testFinishedCallback, 0, testIsIDBDatabase, testException);
postMessage(message, "*");
}
const name = window.location.pathname;

View File

@ -7,62 +7,29 @@ const testPageURL = "http://mochi.test:8888/browser/" +
"dom/indexedDB/test/browser_permissionsPrompt.html";
const notificationID = "indexedDB-permissions-prompt";
function test()
{
waitForExplicitFinish();
add_task(async function test1() {
// Avoids the actual prompt
setPermission(testPageURL, "indexedDB");
executeSoon(test1);
}
function test1()
{
info("creating tab");
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", function() {
if (content.location != testPageURL) {
content.location = testPageURL;
return;
}
gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
setFinishedCallback(function(isIDBDatabase, exception) {
ok(isIDBDatabase,
"First database creation was successful");
ok(!exception, "No exception");
gBrowser.removeCurrentTab();
info("loading test page: " + testPageURL);
gBrowser.selectedBrowser.loadURI(testPageURL);
executeSoon(test2);
});
}, true);
content.location = testPageURL;
}
await waitForMessage(true, gBrowser);
gBrowser.removeCurrentTab();
});
function test2()
{
var win = OpenBrowserWindow({private: true});
win.addEventListener("load", function() {
executeSoon(() => test3(win));
}, {once: true});
registerCleanupFunction(() => win.close());
}
add_task(async function test2() {
info("creating private window");
let win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
function test3(win)
{
info("creating tab");
win.gBrowser.selectedTab = win.gBrowser.addTab();
win.gBrowser.selectedBrowser.addEventListener("load", function() {
if (win.content.location != testPageURL) {
win.content.location = testPageURL;
return;
}
win.gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
setFinishedCallback(function(isIDBDatabase, exception) {
ok(!isIDBDatabase, "No database");
is(exception, "InvalidStateError", "Correct exception");
win.gBrowser.removeCurrentTab();
executeSoon(finish);
}, win);
}, true);
win.content.location = testPageURL;
}
win.gBrowser.selectedBrowser.loadURI(testPageURL);
await waitForMessage("InvalidStateError", win.gBrowser);
win.gBrowser.removeCurrentTab();
await BrowserTestUtils.closeWindow(win);
win = null;
});