Skip to content

Commit

Permalink
add back beforeunload
Browse files Browse the repository at this point in the history
  • Loading branch information
NivedhaSenthil committed May 24, 2024
1 parent 101d51d commit 0adb1d5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
12 changes: 11 additions & 1 deletion lib/connection.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,23 @@ const connect_to_cri = async (target, options = {}) => {
return initCRI(tgt, numRetries, options);
};

const closeConnection = async () => {
const closeConnection = async (promisesToBeResolvedBeforeCloseBrowser) => {
if (_client) {
// remove listeners other than JS dialog for beforeUnload on client first to stop executing them when closing
await _client.removeAllListeners();
pageHandler.addJavascriptDialogOpeningListener();
if (!defaultConfig.firefox) {
await pageHandler.closePage();

await new Promise((resolve) => {
let timeout = setTimeout(() => {
resolve();
}, defaultConfig.retryTimeout);
Promise.all(promisesToBeResolvedBeforeCloseBrowser).then(() => {
clearTimeout(timeout);
resolve();
});
});
}
}
defaultConfig.connectedToRemoteBrowser ? await _client.Browser.close() : await closeBrowser();
Expand Down
23 changes: 16 additions & 7 deletions lib/taiko.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ module.exports.closeBrowser = async () => {

const _closeBrowser = async () => {
fetchHandler.resetInterceptors();
await closeConnection();
await closeConnection(promisesToBeResolvedBeforeCloseBrowser);
};

/**
Expand Down Expand Up @@ -2223,11 +2223,7 @@ module.exports.confirm = (message, callback) => dialog('confirm', message, callb
*
* @param {function} callback - Action to perform. Accept/Dismiss.
*/
module.exports.beforeunload = () => {
console.warn(
'beforeunload handler is not supported any more refer https://developer.chrome.com/docs/web-platform/deprecating-unload',
);
};
module.exports.beforeunload = (callback) => dialog('beforeunload', '', callback);

/**
* Evaluates script on element matching the given selector.
Expand Down Expand Up @@ -2520,8 +2516,18 @@ module.exports.getConfig = getConfig;
*/
module.exports.setConfig = setConfig;

const promisesToBeResolvedBeforeCloseBrowser = [];

const dialog = (dialogType, dialogMessage, callback) => {
validate();
let resolver = null;
if (dialogType === 'beforeunload') {
promisesToBeResolvedBeforeCloseBrowser.push(
new Promise((resolve) => {
resolver = resolve;
}),
);
}
let eventName = '';
if (isFunction(dialogMessage)) {
eventName = dialogType;
Expand All @@ -2530,7 +2536,10 @@ const dialog = (dialogType, dialogMessage, callback) => {
eventName = createJsDialogEvent(dialogMessage, dialogType);
eventRegexMap.set(eventName, new RegExp(dialogMessage));
}
return eventHandler.once(eventName, callback);
return eventHandler.once(eventName, async (args) => {
await callback(args);
resolver && resolver();
});
};

const createJsDialogEvent = (message, dType) => {
Expand Down
4 changes: 1 addition & 3 deletions test/unit-tests/beforeunload.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ let {
let { createHtml, removeFile, openBrowserArgs } = require('./test-util');
const test_name = 'beforeunload';

// TODO: Skip this test and remove the unload functionality
// Refer:https://developer.chrome.com/docs/web-platform/deprecating-unload
xdescribe(test_name, () => {
describe(test_name, () => {
let filePath, filePath1;
let called = false;
before(async () => {
Expand Down

0 comments on commit 0adb1d5

Please sign in to comment.