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:
16
test/test.js
16
test/test.js
@@ -17,7 +17,7 @@
|
||||
const fs = require('fs');
|
||||
const rm = require('rimraf').sync;
|
||||
const path = require('path');
|
||||
const helper = require('../lib/helper');
|
||||
const {helper} = require('../lib/helper');
|
||||
if (process.env.COVERAGE)
|
||||
helper.recordPublicAPICoverage();
|
||||
console.log('Testing on Node', process.version);
|
||||
@@ -986,6 +986,20 @@ describe('Page', function() {
|
||||
expect(requests.length).toBe(2);
|
||||
expect(requests[1].response().status).toBe(404);
|
||||
}));
|
||||
it('should not throw "Invalid Interception Id" if the request was cancelled', SX(async function() {
|
||||
await page.setContent('<iframe></iframe>');
|
||||
await page.setRequestInterceptionEnabled(true);
|
||||
let request = null;
|
||||
page.on('request', async r => request = r);
|
||||
page.$eval('iframe', (frame, url) => frame.src = url, EMPTY_PAGE),
|
||||
// Wait for request interception.
|
||||
await waitForEvents(page, 'request');
|
||||
// Delete frame to cause request to be canceled.
|
||||
await page.$eval('iframe', frame => frame.remove());
|
||||
let error = null;
|
||||
await request.continue().catch(e => error = e);
|
||||
expect(error).toBe(null);
|
||||
}));
|
||||
});
|
||||
|
||||
describe('Page.Events.Dialog', function() {
|
||||
|
||||
Reference in New Issue
Block a user