waitForWindow()/waitForDialog() test function tweaks

- Give any window onload functions time to run before running
  waitForWindow()
- Allow custom dialog URI in waitForDialog
This commit is contained in:
Dan Stillman 2015-06-23 04:21:54 -04:00
parent 3f475f25b6
commit b602cc4bd2

View file

@ -74,21 +74,24 @@ function waitForWindow(uri, callback) {
var win = ev.target.docShell var win = ev.target.docShell
.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow); .getInterface(Components.interfaces.nsIDOMWindow);
if (callback) { // Give window code time to run on load
try { setTimeout(function () {
// If callback is a promise, wait for it if (callback) {
let maybePromise = callback(win); try {
if (maybePromise && maybePromise.then) { // If callback is a promise, wait for it
maybePromise.then(() => deferred.resolve(win)).catch(e => deferred.reject(e)); let maybePromise = callback(win);
if (maybePromise && maybePromise.then) {
maybePromise.then(() => deferred.resolve(win)).catch(e => deferred.reject(e));
return;
}
}
catch (e) {
deferred.reject(e);
return; return;
} }
} }
catch (e) { deferred.resolve(win);
deferred.reject(e); });
return;
}
}
deferred.resolve(win);
} }
}; };
var winobserver = {"observe":function(subject, topic, data) { var winobserver = {"observe":function(subject, topic, data) {
@ -109,8 +112,8 @@ function waitForWindow(uri, callback) {
* @param {String} [button='accept'] - Button in dialog to press (e.g., 'cancel', 'extra1') * @param {String} [button='accept'] - Button in dialog to press (e.g., 'cancel', 'extra1')
* @return {Promise} * @return {Promise}
*/ */
function waitForDialog(onOpen, button='accept') { function waitForDialog(onOpen, button='accept', url) {
return waitForWindow("chrome://global/content/commonDialog.xul", Zotero.Promise.method(function (dialog, deferred) { return waitForWindow(url || "chrome://global/content/commonDialog.xul", Zotero.Promise.method(function (dialog, deferred) {
var failure = false; var failure = false;
if (onOpen) { if (onOpen) {
try { try {