mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
fix(Navigation): do not race with security error for navigation (#1237)
Currently, NavigationWatcher listens to lifecycle events from Page domain and security events from Security domain. However, the events are dispatched from different processes in browser: - Page's lifecycle events are dispatched from renderer process - Security events are dispatched from browser process This makes for the undefined order between events and results in NavigationWatcher reporting different failuer messages, based on the event order. This patch stops relying on security errors in navigation watcher and instead switches to request failure codes for the main resource. Fixes #1195
This commit is contained in:
@@ -20,16 +20,14 @@ class NavigatorWatcher {
|
||||
/**
|
||||
* @param {!Puppeteer.Session} client
|
||||
* @param {string} frameId
|
||||
* @param {boolean} ignoreHTTPSErrors
|
||||
* @param {!Object=} options
|
||||
*/
|
||||
constructor(client, frameId, ignoreHTTPSErrors, options = {}) {
|
||||
constructor(client, frameId, options = {}) {
|
||||
console.assert(options.networkIdleTimeout === undefined, 'ERROR: networkIdleTimeout option is no longer supported.');
|
||||
console.assert(options.networkIdleInflight === undefined, 'ERROR: networkIdleInflight option is no longer supported.');
|
||||
console.assert(options.waitUntil !== 'networkidle', 'ERROR: "networkidle" option is no longer supported. Use "networkidle2" instead');
|
||||
this._client = client;
|
||||
this._frameId = frameId;
|
||||
this._ignoreHTTPSErrors = ignoreHTTPSErrors;
|
||||
this._timeout = typeof options.timeout === 'number' ? options.timeout : 30000;
|
||||
let waitUntil = ['load'];
|
||||
if (Array.isArray(options.waitUntil))
|
||||
@@ -56,13 +54,6 @@ class NavigatorWatcher {
|
||||
navigationPromises.push(watchdog);
|
||||
}
|
||||
|
||||
if (!this._ignoreHTTPSErrors) {
|
||||
const certificateError = new Promise(fulfill => {
|
||||
this._eventListeners.push(helper.addEventListener(this._client, 'Security.certificateError', fulfill));
|
||||
}).then(error => 'SSL Certificate error: ' + error.errorType);
|
||||
navigationPromises.push(certificateError);
|
||||
}
|
||||
|
||||
this._eventListeners.push(helper.addEventListener(this._client, 'Page.lifecycleEvent', this._onLifecycleEvent.bind(this)));
|
||||
const pendingEventsFired = new Promise(fulfill => this._pendingEventsCallback = fulfill);
|
||||
navigationPromises.push(pendingEventsFired);
|
||||
|
||||
Reference in New Issue
Block a user