Skip to content

Commit

Permalink
do not dispose temp profile on browser restart (closes DevExpress#4554)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexKamaev committed Dec 14, 2021
1 parent 20280f4 commit 5921bbf
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
10 changes: 7 additions & 3 deletions src/browser/connection/index.ts
Expand Up @@ -59,6 +59,10 @@ interface ProviderMetaInfoOptions {
appendToUserAgent?: boolean;
}

export interface BrowserCloseData {
isRestarting?: boolean;
}

export interface BrowserInfo {
alias: string;
browserName: string;
Expand Down Expand Up @@ -213,12 +217,12 @@ export default class BrowserConnection extends EventEmitter {
}
}

private async _closeBrowser (): Promise<void> {
private async _closeBrowser (data: BrowserCloseData = {}): Promise<void> {
if (!this.idle)
await promisifyEvent(this, 'idle');

try {
await this.provider.closeBrowser(this.id);
await this.provider.closeBrowser(this.id, data);
}
catch (err) {
// NOTE: A warning would be really nice here, but it can't be done while log is stored in a task.
Expand Down Expand Up @@ -278,7 +282,7 @@ export default class BrowserConnection extends EventEmitter {
let isTimeoutExpired = false;
let timeout: NodeJS.Timeout | null = null;

const restartPromise = timeLimit(this._closeBrowser(), this.BROWSER_CLOSE_TIMEOUT, { rejectWith: new TimeoutError() })
const restartPromise = timeLimit(this._closeBrowser({ isRestarting: true }), this.BROWSER_CLOSE_TIMEOUT, { rejectWith: new TimeoutError() })
.catch(err => this.debugLogger(err))
.then(() => this._runBrowser());

Expand Down
4 changes: 2 additions & 2 deletions src/browser/provider/built-in/dedicated/chrome/index.js
Expand Up @@ -73,7 +73,7 @@ export default {
this._setUserAgentMetaInfoForEmulatingDevice(browserId, runtimeInfo.config);
},

async closeBrowser (browserId) {
async closeBrowser (browserId, data = {}) {
const runtimeInfo = this.openedBrowsers[browserId];

if (runtimeInfo.browserClient.isHeadlessTab())
Expand All @@ -84,7 +84,7 @@ export default {
if (OS.mac || runtimeInfo.config.headless)
await stopLocalChrome(runtimeInfo);

if (runtimeInfo.tempProfileDir)
if (runtimeInfo.tempProfileDir && !data.isRestarting)
await runtimeInfo.tempProfileDir.dispose();

delete this.openedBrowsers[browserId];
Expand Down
6 changes: 3 additions & 3 deletions src/browser/provider/index.ts
Expand Up @@ -3,7 +3,7 @@ import browserTools from 'testcafe-browser-tools';
import OS from 'os-family';
import { dirname } from 'path';
import makeDir from 'make-dir';
import BrowserConnection from '../connection';
import BrowserConnection, { BrowserCloseData } from '../connection';
import delay from '../../utils/delay';
import {
GET_IS_SERVICE_WORKER_ENABLED,
Expand Down Expand Up @@ -322,14 +322,14 @@ export default class BrowserProvider {
await this._ensureBrowserWindowParameters(browserId);
}

public async closeBrowser (browserId: string): Promise<void> {
public async closeBrowser (browserId: string, data: BrowserCloseData): Promise<void> {
const canUseDefaultWindowActions = await this.canUseDefaultWindowActions(browserId);
const customActionsInfo = await this.hasCustomActionForBrowser(browserId);
const hasCustomCloseBrowser = customActionsInfo.hasCloseBrowser;
const usePluginsCloseBrowser = hasCustomCloseBrowser || !canUseDefaultWindowActions;

if (usePluginsCloseBrowser)
await this.plugin.closeBrowser(browserId);
await this.plugin.closeBrowser(browserId, data);
else
await this._closeLocalBrowser(browserId);

Expand Down

0 comments on commit 5921bbf

Please sign in to comment.