mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
Do not leave dangling promises when sending messages over protocol (#742)
It's very bad to have 'unhandled promise rejection' that can't be handled in user code. These errors will exit node process in a near future. This patch avoids 'unhandled promise rejection' while sending protocol messages. This patch: - introduces `puppeteer:error` debug scope and starts using it for all swalloed errors. - makes sure that every `client.send` method is either awaited or its errors are handled. - starts return promises from Request.continue() and Request.abort(). - starts swallow errors from Request.contine() and Request.abort(). The last is the most important part of the patch. Since `Request.continue()` might try to continue canceled request, we should disregard the error. Fixes #627.
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
const debugError = require('debug')(`puppeteer:error`);
|
||||
/** @type {?Map<string, boolean>} */
|
||||
let apiCoverage = null;
|
||||
class Helper {
|
||||
@@ -94,12 +95,11 @@ class Helper {
|
||||
static async releaseObject(client, remoteObject) {
|
||||
if (!remoteObject.objectId)
|
||||
return;
|
||||
try {
|
||||
await client.send('Runtime.releaseObject', {objectId: remoteObject.objectId});
|
||||
} catch (e) {
|
||||
await client.send('Runtime.releaseObject', {objectId: remoteObject.objectId}).catch(error => {
|
||||
// Exceptions might happen in case of a page been navigated or closed.
|
||||
// Swallow these since they are harmless and we don't leak anything in this case.
|
||||
}
|
||||
debugError(error);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -217,4 +217,7 @@ class Helper {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Helper;
|
||||
module.exports = {
|
||||
helper: Helper,
|
||||
debugError
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user