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:
Andrey Lushnikov
2017-09-11 16:21:51 -07:00
committed by GitHub
parent f11e09d0d4
commit 0bea42bd8c
14 changed files with 61 additions and 29 deletions

View File

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