fix: wait for video to finish when persistent context closes (#6664)

This commit is contained in:
Yury Semikhatsky 2021-05-19 23:26:10 +00:00 committed by GitHub
parent e679d99421
commit 2ef47b95f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 5 deletions

View File

@ -24,7 +24,6 @@ import { RecentLogsCollector } from '../utils/debugLogger';
import * as registry from '../utils/registry'; import * as registry from '../utils/registry';
import { SdkObject } from './instrumentation'; import { SdkObject } from './instrumentation';
import { Artifact } from './artifact'; import { Artifact } from './artifact';
import { kBrowserClosedError } from '../utils/errors';
export interface BrowserProcess { export interface BrowserProcess {
onclose?: ((exitCode: number | null, signal: string | null) => void); onclose?: ((exitCode: number | null, signal: string | null) => void);
@ -120,9 +119,6 @@ export abstract class Browser extends SdkObject {
context._browserClosed(); context._browserClosed();
if (this._defaultContext) if (this._defaultContext)
this._defaultContext._browserClosed(); this._defaultContext._browserClosed();
for (const video of this._idToVideo.values())
video.artifact.reportFinished(kBrowserClosedError);
this._idToVideo.clear();
this.emit(Browser.Events.Disconnected); this.emit(Browser.Events.Disconnected);
} }

View File

@ -15,6 +15,7 @@
* limitations under the License. * limitations under the License.
*/ */
import { kBrowserClosedError } from '../../utils/errors';
import { assert } from '../../utils/utils'; import { assert } from '../../utils/utils';
import { Browser, BrowserOptions } from '../browser'; import { Browser, BrowserOptions } from '../browser';
import { assertBrowserContextIsNotOwned, BrowserContext, validateBrowserContextOptions, verifyGeolocation } from '../browserContext'; import { assertBrowserContextIsNotOwned, BrowserContext, validateBrowserContextOptions, verifyGeolocation } from '../browserContext';
@ -56,7 +57,7 @@ export class FFBrowser extends Browser {
this._connection = connection; this._connection = connection;
this._ffPages = new Map(); this._ffPages = new Map();
this._contexts = new Map(); this._contexts = new Map();
this._connection.on(ConnectionEvents.Disconnected, () => this._didClose()); this._connection.on(ConnectionEvents.Disconnected, () => this._onDisconnect());
this._connection.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this)); this._connection.on('Browser.attachedToTarget', this._onAttachedToTarget.bind(this));
this._connection.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this)); this._connection.on('Browser.detachedFromTarget', this._onDetachedFromTarget.bind(this));
this._connection.on('Browser.downloadCreated', this._onDownloadCreated.bind(this)); this._connection.on('Browser.downloadCreated', this._onDownloadCreated.bind(this));
@ -136,6 +137,13 @@ export class FFBrowser extends Browser {
_onVideoRecordingFinished(payload: Protocol.Browser.videoRecordingFinishedPayload) { _onVideoRecordingFinished(payload: Protocol.Browser.videoRecordingFinishedPayload) {
this._takeVideo(payload.screencastId)?.reportFinished(); this._takeVideo(payload.screencastId)?.reportFinished();
} }
_onDisconnect() {
for (const video of this._idToVideo.values())
video.artifact.reportFinished(kBrowserClosedError);
this._idToVideo.clear();
this._didClose();
}
} }
export class FFBrowserContext extends BrowserContext { export class FFBrowserContext extends BrowserContext {

View File

@ -26,6 +26,7 @@ import * as types from '../types';
import { Protocol } from './protocol'; import { Protocol } from './protocol';
import { kPageProxyMessageReceived, PageProxyMessageReceivedPayload, WKConnection, WKSession } from './wkConnection'; import { kPageProxyMessageReceived, PageProxyMessageReceivedPayload, WKConnection, WKSession } from './wkConnection';
import { WKPage } from './wkPage'; import { WKPage } from './wkPage';
import { kBrowserClosedError } from '../../utils/errors';
const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.2 Safari/605.1.15'; const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.2 Safari/605.1.15';
const BROWSER_VERSION = '14.2'; const BROWSER_VERSION = '14.2';
@ -72,6 +73,9 @@ export class WKBrowser extends Browser {
_onDisconnect() { _onDisconnect() {
for (const wkPage of this._wkPages.values()) for (const wkPage of this._wkPages.values())
wkPage.dispose(true); wkPage.dispose(true);
for (const video of this._idToVideo.values())
video.artifact.reportFinished(kBrowserClosedError);
this._idToVideo.clear();
this._didClose(); this._didClose();
} }