playwright-core
Advanced tools
Comparing version
@@ -345,3 +345,8 @@ "use strict"; | ||
return; | ||
helper_1.assert(this._browserContextId, 'Non-incognito profiles cannot be closed!'); | ||
if (!this._browserContextId) { | ||
// Default context is only created in 'persistent' mode and closing it should close | ||
// the browser. | ||
await this._browser.close(); | ||
return; | ||
} | ||
await this._browser._session.send('Target.disposeBrowserContext', { browserContextId: this._browserContextId }); | ||
@@ -348,0 +353,0 @@ this._browser._contexts.delete(this._browserContextId); |
@@ -252,3 +252,8 @@ "use strict"; | ||
return; | ||
helper_1.assert(this._browserContextId, 'Non-incognito profiles cannot be closed!'); | ||
if (!this._browserContextId) { | ||
// Default context is only created in 'persistent' mode and closing it should close | ||
// the browser. | ||
await this._browser.close(); | ||
return; | ||
} | ||
await this._browser._connection.send('Browser.removeBrowserContext', { browserContextId: this._browserContextId }); | ||
@@ -255,0 +260,0 @@ this._browser._contexts.delete(this._browserContextId); |
@@ -48,4 +48,2 @@ "use strict"; | ||
const browser = await crBrowser_1.CRBrowser.connect(transport, false, options && options.slowMo); | ||
// Hack: for typical launch scenario, ensure that close waits for actual process termination. | ||
browser.close = () => browserServer.close(); | ||
browser['__server__'] = browserServer; | ||
@@ -59,3 +57,3 @@ return browser; | ||
const { timeout = 30000 } = options || {}; | ||
const { browserServer, transport } = await this._launchServer(options, 'persistent', userDataDir); | ||
const { transport } = await this._launchServer(options, 'persistent', userDataDir); | ||
const browser = await crBrowser_1.CRBrowser.connect(transport, true); | ||
@@ -69,4 +67,2 @@ const browserContext = browser._defaultContext; | ||
await helper_1.helper.waitWithTimeout(firstPage, 'first page', timeout); | ||
// Hack: for typical launch scenario, ensure that close waits for actual process termination. | ||
browserContext.close = () => browserServer.close(); | ||
return browserContext; | ||
@@ -127,9 +123,11 @@ } | ||
browserWSEndpoint = match[1]; | ||
browserServer = new browserServer_1.BrowserServer(launchedProcess, gracefullyClose, browserWSEndpoint); | ||
return { browserServer }; | ||
} | ||
else { | ||
transport = new pipeTransport_1.PipeTransport(launchedProcess.stdio[3], launchedProcess.stdio[4]); | ||
browserWSEndpoint = null; | ||
// For local launch scenario close will terminate the browser process. | ||
transport = new pipeTransport_1.PipeTransport(launchedProcess.stdio[3], launchedProcess.stdio[4], () => browserServer.close()); | ||
browserServer = new browserServer_1.BrowserServer(launchedProcess, gracefullyClose, null); | ||
return { browserServer, transport }; | ||
} | ||
browserServer = new browserServer_1.BrowserServer(launchedProcess, gracefullyClose, browserWSEndpoint); | ||
return { browserServer, transport }; | ||
} | ||
@@ -136,0 +134,0 @@ async connect(options) { |
@@ -24,8 +24,9 @@ /** | ||
private _waitForNextTask; | ||
private readonly _closeCallback; | ||
onmessage?: (message: string) => void; | ||
onclose?: () => void; | ||
constructor(pipeWrite: NodeJS.WritableStream, pipeRead: NodeJS.ReadableStream); | ||
constructor(pipeWrite: NodeJS.WritableStream, pipeRead: NodeJS.ReadableStream, closeCallback: () => void); | ||
send(message: string): void; | ||
close(): void; | ||
_dispatch(buffer: Buffer): void; | ||
close(): void; | ||
} |
@@ -22,9 +22,11 @@ "use strict"; | ||
class PipeTransport { | ||
constructor(pipeWrite, pipeRead) { | ||
constructor(pipeWrite, pipeRead, closeCallback) { | ||
this._pendingMessage = ''; | ||
this._waitForNextTask = platform_1.makeWaitForNextTask(); | ||
this._pipeWrite = pipeWrite; | ||
this._closeCallback = closeCallback; | ||
this._eventListeners = [ | ||
helper_1.helper.addEventListener(pipeRead, 'data', buffer => this._dispatch(buffer)), | ||
helper_1.helper.addEventListener(pipeRead, 'close', () => { | ||
helper_1.helper.removeEventListeners(this._eventListeners); | ||
if (this.onclose) | ||
@@ -43,2 +45,5 @@ this.onclose.call(null); | ||
} | ||
close() { | ||
this._closeCallback(); | ||
} | ||
_dispatch(buffer) { | ||
@@ -68,10 +73,4 @@ let end = buffer.indexOf('\0'); | ||
} | ||
close() { | ||
this._pipeWrite = null; | ||
helper_1.helper.removeEventListeners(this._eventListeners); | ||
if (this.onclose) | ||
this.onclose.call(null); | ||
} | ||
} | ||
exports.PipeTransport = PipeTransport; | ||
//# sourceMappingURL=pipeTransport.js.map |
@@ -59,4 +59,2 @@ "use strict"; | ||
const browser = await wkBrowser_1.WKBrowser.connect(transport, options && options.slowMo); | ||
// Hack: for typical launch scenario, ensure that close waits for actual process termination. | ||
browser.close = () => browserServer.close(); | ||
browser['__server__'] = browserServer; | ||
@@ -70,9 +68,6 @@ return browser; | ||
const { timeout = 30000 } = options || {}; | ||
const { browserServer, transport } = await this._launchServer(options, 'persistent', userDataDir); | ||
const { transport } = await this._launchServer(options, 'persistent', userDataDir); | ||
const browser = await wkBrowser_1.WKBrowser.connect(transport, undefined, true); | ||
await helper_1.helper.waitWithTimeout(browser._waitForFirstPageTarget(), 'first page', timeout); | ||
// Hack: for typical launch scenario, ensure that close waits for actual process termination. | ||
const browserContext = browser._defaultContext; | ||
browserContext.close = () => browserServer.close(); | ||
return browserContext; | ||
return browser._defaultContext; | ||
} | ||
@@ -126,4 +121,7 @@ async _launchServer(options = {}, launchType, userDataDir, port) { | ||
}); | ||
transport = new pipeTransport_1.PipeTransport(launchedProcess.stdio[3], launchedProcess.stdio[4]); | ||
// For local launch scenario close will terminate the browser process. | ||
transport = new pipeTransport_1.PipeTransport(launchedProcess.stdio[3], launchedProcess.stdio[4], () => browserServer.close()); | ||
browserServer = new browserServer_1.BrowserServer(launchedProcess, gracefullyClose, launchType === 'server' ? await wrapTransportWithWebSocket(transport, port || 0) : null); | ||
if (launchType === 'server') | ||
return { browserServer }; | ||
return { browserServer, transport }; | ||
@@ -328,3 +326,3 @@ } | ||
}); | ||
socket.on('close', () => { | ||
socket.on('close', socket.__closeListener = () => { | ||
for (const [pageProxyId, s] of pageProxyIds) { | ||
@@ -348,4 +346,6 @@ if (s === socket) | ||
transport.onclose = () => { | ||
for (const socket of sockets) | ||
for (const socket of sockets) { | ||
socket.removeListener('close', socket.__closeListener); | ||
socket.close(undefined, 'Browser disconnected'); | ||
} | ||
server.close(); | ||
@@ -352,0 +352,0 @@ transport.onmessage = undefined; |
@@ -52,7 +52,7 @@ "use strict"; | ||
_onDisconnect() { | ||
for (const context of this._contexts.values()) | ||
context._browserClosed(); | ||
for (const wkPage of this._wkPages.values()) | ||
wkPage.dispose(); | ||
this._wkPages.clear(); | ||
for (const context of this._contexts.values()) | ||
context._browserClosed(); | ||
this.emit(events_1.Events.Browser.Disconnected); | ||
@@ -271,3 +271,8 @@ } | ||
return; | ||
helper_1.assert(this._browserContextId, 'Non-incognito profiles cannot be closed!'); | ||
if (!this._browserContextId) { | ||
// Default context is only created in 'persistent' mode and closing it should close | ||
// the browser. | ||
await this._browser.close(); | ||
return; | ||
} | ||
await this._browser._browserSession.send('Browser.deleteContext', { browserContextId: this._browserContextId }); | ||
@@ -274,0 +279,0 @@ this._browser._contexts.delete(this._browserContextId); |
@@ -27,6 +27,6 @@ /** | ||
export declare class WKConnection { | ||
private readonly _transport; | ||
private readonly _onDisconnect; | ||
private _lastId; | ||
private readonly _transport; | ||
private _closed; | ||
private _onDisconnect; | ||
_debugFunction: (message: string) => void; | ||
@@ -33,0 +33,0 @@ readonly browserSession: WKSession; |
{ | ||
"name": "playwright-core", | ||
"version": "0.11.1-next.1583796504588", | ||
"version": "0.11.1-next.1583805691762", | ||
"description": "A high-level API to automate web browsers", | ||
@@ -5,0 +5,0 @@ "repository": "github:Microsoft/playwright", |
Sorry, the diff of this file is too big to display
2441648
0.03%57230
0.05%