Skip to content

Commit 71892b4

Browse files
committed
Revert "feat: do not wait for first page in non-persistent mode (#939)"
This reverts commit a567123. Reason for revert: WK-Win fails to start if we start talking over the pipe too early.
1 parent c15534f commit 71892b4

File tree

8 files changed

+18
-19
lines changed

8 files changed

+18
-19
lines changed

src/chromium/crBrowser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export class CRBrowser extends platform.EventEmitter implements Browser {
4646
const connection = new CRConnection(SlowMoTransport.wrap(transport, slowMo));
4747
const browser = new CRBrowser(connection);
4848
await connection.rootSession.send('Target.setDiscoverTargets', { discover: true });
49+
await browser.waitForTarget(t => t.type() === 'page');
4950
return browser;
5051
}
5152

src/firefox/ffBrowser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class FFBrowser extends platform.EventEmitter implements Browser {
3939
const connection = new FFConnection(SlowMoTransport.wrap(transport, slowMo));
4040
const browser = new FFBrowser(connection);
4141
await connection.send('Target.enable');
42+
await browser._waitForTarget(t => t.type() === 'page');
4243
return browser;
4344
}
4445

src/server/chromium.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import * as util from 'util';
2222
import { BrowserFetcher, OnProgressCallback, BrowserFetcherOptions } from '../server/browserFetcher';
2323
import { DeviceDescriptors } from '../deviceDescriptors';
2424
import * as types from '../types';
25-
import { assert, helper } from '../helper';
25+
import { assert } from '../helper';
2626
import { CRBrowser } from '../chromium/crBrowser';
2727
import * as platform from '../platform';
2828
import { TimeoutError } from '../errors';
@@ -65,10 +65,8 @@ export class Chromium implements BrowserType {
6565
}
6666

6767
async launchPersistent(userDataDir: string, options?: LaunchOptions): Promise<BrowserContext> {
68-
const { timeout = 30000 } = options || {};
6968
const { browserServer, transport } = await this._launchServer(options, 'persistent', userDataDir);
7069
const browser = await CRBrowser.connect(transport!);
71-
await helper.waitWithTimeout(browser.waitForTarget(t => t.type() === 'page'), 'first page', timeout);
7270
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
7371
const browserContext = browser._defaultContext;
7472
browserContext.close = () => browserServer.close();

src/server/firefox.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import * as os from 'os';
2727
import * as path from 'path';
2828
import * as util from 'util';
2929
import { TimeoutError } from '../errors';
30-
import { assert, helper } from '../helper';
30+
import { assert } from '../helper';
3131
import { LaunchOptions, BrowserArgOptions, BrowserType } from './browserType';
3232
import { ConnectOptions, LaunchType } from '../browser';
3333
import { BrowserServer } from './browserServer';
@@ -75,10 +75,8 @@ export class Firefox implements BrowserType {
7575
}
7676

7777
async launchPersistent(userDataDir: string, options?: LaunchOptions): Promise<BrowserContext> {
78-
const { timeout = 30000 } = options || {};
7978
const { browserServer, transport } = await this._launchServer(options, 'persistent', userDataDir);
8079
const browser = await FFBrowser.connect(transport!);
81-
await helper.waitWithTimeout(browser._waitForTarget(t => t.type() === 'page'), 'first page', timeout);
8280
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
8381
const browserContext = browser._defaultContext;
8482
browserContext.close = () => browserServer.close();

src/server/webkit.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import * as path from 'path';
2828
import * as platform from '../platform';
2929
import * as util from 'util';
3030
import * as os from 'os';
31-
import { assert, helper } from '../helper';
31+
import { assert } from '../helper';
3232
import { kBrowserCloseMessageId } from '../webkit/wkConnection';
3333
import { LaunchOptions, BrowserArgOptions, BrowserType } from './browserType';
3434
import { ConnectionTransport } from '../transport';
@@ -77,10 +77,8 @@ export class WebKit implements BrowserType {
7777
}
7878

7979
async launchPersistent(userDataDir: string, options?: LaunchOptions): Promise<BrowserContext> {
80-
const { timeout = 30000 } = options || {};
8180
const { browserServer, transport } = await this._launchServer(options, 'persistent', userDataDir);
8281
const browser = await WKBrowser.connect(transport!);
83-
await helper.waitWithTimeout(browser._waitForFirstPageTarget(), 'first page', timeout);
8482
// Hack: for typical launch scenario, ensure that close waits for actual process termination.
8583
const browserContext = browser._defaultContext;
8684
browserContext.close = () => browserServer.close();

src/webkit/wkBrowser.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ export class WKBrowser extends platform.EventEmitter implements Browser {
4343

4444
static async connect(transport: ConnectionTransport, slowMo: number = 0): Promise<WKBrowser> {
4545
const browser = new WKBrowser(SlowMoTransport.wrap(transport, slowMo));
46+
// TODO: figure out the timeout.
47+
await browser._waitForFirstPageTarget(30000);
4648
return browser;
4749
}
4850

@@ -93,9 +95,9 @@ export class WKBrowser extends platform.EventEmitter implements Browser {
9395
return createPageInNewContext(this, options);
9496
}
9597

96-
async _waitForFirstPageTarget(): Promise<void> {
98+
async _waitForFirstPageTarget(timeout: number): Promise<void> {
9799
assert(!this._pageProxies.size);
98-
return this._firstPageProxyPromise;
100+
await helper.waitWithTimeout(this._firstPageProxyPromise, 'firstPageProxy', timeout);
99101
}
100102

101103
_onPageProxyCreated(event: Protocol.Browser.pageProxyCreatedPayload) {

test/chromium/chromium.spec.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,17 @@ module.exports.describe = function({testRunner, expect, playwright, FFOX, CHROMI
153153
expect(browser.pageTarget(page).opener()).toBe(null);
154154
});
155155
it('should close all belonging targets once closing context', async function({browser, newContext}) {
156-
const targets = async (context) => (await browser.targets()).filter(t => t.type() === 'page' && t.context() === context);
156+
const targets = async () => (await browser.targets()).filter(t => t.type() === 'page');
157+
// There is one page in a default profile and one page created by test harness.
158+
expect((await targets()).length).toBe(2);
157159

158160
const context = await newContext();
159161
await context.newPage();
160-
expect((await targets(context)).length).toBe(1);
162+
expect((await targets()).length).toBe(3);
161163
expect((await context.pages()).length).toBe(1);
162164

163165
await context.close();
164-
expect((await targets(context)).length).toBe(0);
166+
expect((await targets()).length).toBe(2);
165167
});
166168
});
167169

test/chromium/launcher.spec.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,11 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
5757
describe('Browser target events', function() {
5858
it('should work', async({server}) => {
5959
const browser = await playwright.launch(defaultBrowserOptions);
60-
const context = await browser.newContext();
6160
const events = [];
62-
browser.on('targetcreated', target => target.context() === context && events.push('CREATED'));
63-
browser.on('targetchanged', target => target.context() === context && events.push('CHANGED'));
64-
browser.on('targetdestroyed', target => target.context() === context && events.push('DESTROYED'));
65-
const page = await context.newPage();
61+
browser.on('targetcreated', () => events.push('CREATED'));
62+
browser.on('targetchanged', () => events.push('CHANGED'));
63+
browser.on('targetdestroyed', () => events.push('DESTROYED'));
64+
const page = await browser.newPage();
6665
await page.goto(server.EMPTY_PAGE);
6766
await page.close();
6867
expect(events).toEqual(['CREATED', 'CHANGED', 'DESTROYED']);

0 commit comments

Comments
 (0)