core(target-manager): only listen to LH sessions (#14385)

This commit is contained in:
Adam Raine 2022-09-30 15:18:14 -07:00 коммит произвёл GitHub
Родитель 9d5c067419
Коммит bf8df465bc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 27 добавлений и 44 удалений

Просмотреть файл

@ -9,7 +9,7 @@
import {Buffer} from 'buffer';
import log from 'lighthouse-logger';
import {Browser} from 'puppeteer-core/lib/esm/puppeteer/common/Browser.js';
import {CDPBrowser} from 'puppeteer-core/lib/esm/puppeteer/common/Browser.js';
import {Connection as PptrConnection} from 'puppeteer-core/lib/esm/puppeteer/common/Connection.js';
import lighthouse, {legacyNavigation} from '../../core/index.js';
@ -48,7 +48,7 @@ async function getPageFromConnection(connection) {
connection.channel_.root_.transport_
);
const browser = await Browser._create(
const browser = await CDPBrowser._create(
'chrome',
pptrConnection,
[] /* contextIds */,

Просмотреть файл

@ -117,6 +117,7 @@ class TargetManager extends ProtocolEventEmitter {
// @ts-expect-error - pptr currently typed only for single arg emits.
const protocolListener = trueProtocolListener;
cdpSession.on('*', protocolListener);
cdpSession.on('sessionattached', this._onSessionAttached);
const targetWithSession = {
target: target.targetInfo,
@ -176,12 +177,6 @@ class TargetManager extends ProtocolEventEmitter {
this._rootCdpSession.on('Page.frameNavigated', this._onFrameNavigated);
const rootConnection = this._rootCdpSession.connection();
if (!rootConnection) {
throw new Error('Connection has been closed.');
}
rootConnection.on('sessionattached', this._onSessionAttached);
await this._rootCdpSession.send('Page.enable');
// Start with the already attached root session.
@ -193,11 +188,10 @@ class TargetManager extends ProtocolEventEmitter {
*/
async disable() {
this._rootCdpSession.off('Page.frameNavigated', this._onFrameNavigated);
// No need to remove listener if connection is already closed.
this._rootCdpSession.connection()?.off('sessionattached', this._onSessionAttached);
for (const {cdpSession, protocolListener} of this._targetIdToTargets.values()) {
cdpSession.off('*', protocolListener);
cdpSession.off('sessionattached', this._onSessionAttached);
}
this._enabled = false;

Просмотреть файл

@ -6,7 +6,7 @@
import {EventEmitter} from 'events';
import {CDPSession} from 'puppeteer-core/lib/cjs/puppeteer/common/Connection.js';
import {CDPSessionImpl} from 'puppeteer-core/lib/cjs/puppeteer/common/Connection.js';
import {TargetManager} from '../../../gather/driver/target-manager.js';
import {createMockCdpSession} from '../mock-driver.js';
@ -77,8 +77,8 @@ describe('TargetManager', () => {
.mockResponse('Runtime.runIfWaitingForDebugger');
await targetManager.enable();
expect(sessionMock.connection().on).toHaveBeenCalled();
const sessionListener = sessionMock.connection().on.mock.calls[0][1];
expect(sessionMock.on).toHaveBeenCalled();
const sessionListener = sessionMock.on.mock.calls[3][1];
// Original, attach.
expect(sendMock.findAllInvocations('Target.getTargetInfo')).toHaveLength(1);
@ -230,7 +230,6 @@ describe('TargetManager', () => {
await targetManager.disable();
expect(sessionMock.off).toHaveBeenCalled();
expect(sessionMock.connection().off).toHaveBeenCalled();
});
});
@ -248,7 +247,7 @@ describe('TargetManager', () => {
const mockCdpConnection = new MockCdpConnection();
/** @type {LH.Puppeteer.CDPSession} */
// @ts-expect-error - close enough to the real thing.
const cdpSession = new CDPSession(mockCdpConnection, '', sessionId);
const cdpSession = new CDPSessionImpl(mockCdpConnection, '', sessionId);
return cdpSession;
}
@ -277,9 +276,7 @@ describe('TargetManager', () => {
.mockResponse('Target.setAutoAttach')
.mockResponse('Runtime.runIfWaitingForDebugger');
const rootConnection = rootSession.connection();
if (!rootConnection) throw new Error('no connection');
rootConnection.emit('sessionattached', iframeSession);
rootSession.emit('sessionattached', iframeSession);
// Wait for iframe session to be attached.
await new Promise(resolve => setTimeout(resolve, 0));

Просмотреть файл

@ -6,7 +6,7 @@
import {EventEmitter} from 'events';
import {CDPSession} from 'puppeteer/lib/cjs/puppeteer/common/Connection.js';
import {CDPSessionImpl} from 'puppeteer-core/lib/cjs/puppeteer/common/Connection.js';
import {ProtocolSession} from '../../gather/session.js';
import {
@ -29,7 +29,7 @@ describe('ProtocolSession', () => {
beforeEach(() => {
// @ts-expect-error - Individual mock functions are applied as necessary.
puppeteerSession = new CDPSession({_rawSend: fnAny(), send: fnAny()}, '', 'root');
puppeteerSession = new CDPSessionImpl({_rawSend: fnAny(), send: fnAny()}, '', 'root');
session = new ProtocolSession(puppeteerSession);
});

Просмотреть файл

@ -166,7 +166,7 @@
"pako": "^2.0.3",
"preact": "^10.7.2",
"pretty-json-stringify": "^0.0.2",
"puppeteer": "^16.1.0",
"puppeteer": "^18.0.5",
"resolve": "^1.20.0",
"rollup": "^2.52.7",
"rollup-plugin-node-resolve": "^5.2.0",
@ -202,7 +202,7 @@
"open": "^8.4.0",
"parse-cache-control": "1.0.1",
"ps-list": "^8.0.0",
"puppeteer-core": "^16.1.0",
"puppeteer-core": "^18.0.5",
"robots-parser": "^3.0.0",
"semver": "^5.3.0",
"speedline-core": "^1.4.3",

Просмотреть файл

@ -173,7 +173,8 @@ describe('Lighthouse Viewer', () => {
});
it('should support swapping locales', async () => {
function queryLocaleState() {
async function queryLocaleState() {
await viewerPage.waitForSelector('.lh-locale-selector');
return viewerPage.$$eval('.lh-locale-selector', (elems) => {
const selectEl = elems[0];
const optionEls = [...selectEl.querySelectorAll('option')];

Просмотреть файл

@ -2923,7 +2923,7 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
devtools-protocol@0.0.1019158, devtools-protocol@0.0.1034970:
devtools-protocol@0.0.1034970, devtools-protocol@0.0.1036444:
version "0.0.1034970"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1034970.tgz#edbbdfee461def49bff61fa8780138ce4a1e105f"
integrity sha512-kC7Wo+7z+Bo202DVB7qVqccreL+RpcGk/6eCrpM1qj2azag6UCMg05GL3ty2adg8CXWFpUGdMeyFJfIN8lQtgw==
@ -3643,7 +3643,7 @@ find-up@^2.0.0, find-up@^2.1.0:
dependencies:
locate-path "^2.0.0"
find-up@^4.0.0, find-up@^4.1.0:
find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@ -5856,13 +5856,6 @@ pirates@^4.0.4:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
pkg-dir@4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
dependencies:
find-up "^4.0.0"
pkg-dir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
@ -5986,17 +5979,16 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
puppeteer-core@^16.1.0:
version "16.1.0"
resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-16.1.0.tgz#0485312363e6e1d65889d4b31de677bd36f872e4"
integrity sha512-Eu9FCqdWU2PU/RY53sa+JTsbFiQg5fJyaHX5DP0WZ4+lVLVdMfR9dwPimRkSl9NEcArm7lZMpiDlVCYelE90ZA==
puppeteer-core@^18.0.5:
version "18.0.5"
resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-18.0.5.tgz#c37e0f52e92f1c91bf56cebc5a718f00698a5566"
integrity sha512-JM83vUAmWdzZfUEDTGlkSdGFq0/TiVbFjQrb6BJVeLJAWVYlkO4YvyFAaTWdCM5Kz+ovg4g7xOSAU4FRh4Cv/w==
dependencies:
cross-fetch "3.1.5"
debug "4.3.4"
devtools-protocol "0.0.1019158"
devtools-protocol "0.0.1036444"
extract-zip "2.0.1"
https-proxy-agent "5.0.1"
pkg-dir "4.2.0"
progress "2.0.3"
proxy-from-env "1.1.0"
rimraf "3.0.2"
@ -6004,17 +5996,16 @@ puppeteer-core@^16.1.0:
unbzip2-stream "1.4.3"
ws "8.8.1"
puppeteer@^16.1.0:
version "16.1.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-16.1.0.tgz#06a32dc347c94642601017fbf83e1d37379b9651"
integrity sha512-lhykJLbH2bbBaP3NfYI2Vj0T4ctrdfVdEVf8glZITPnLfqrJ0nfUzAYuIz5YcA79k5lmFKANIhEXex+jQChU3g==
puppeteer@^18.0.5:
version "18.0.5"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-18.0.5.tgz#873223b17b92345182c5b5e8cfbd6f3117f1547d"
integrity sha512-s4erjxU0VtKojPvF+KvLKG6OHUPw7gO2YV1dtOsoryyCbhrs444fXb4QZqGWuTv3V/rgSCUzeixxu34g0ZkSMA==
dependencies:
cross-fetch "3.1.5"
debug "4.3.4"
devtools-protocol "0.0.1019158"
devtools-protocol "0.0.1036444"
extract-zip "2.0.1"
https-proxy-agent "5.0.1"
pkg-dir "4.2.0"
progress "2.0.3"
proxy-from-env "1.1.0"
rimraf "3.0.2"