diff --git a/src/DevtoolsUtils.ts b/src/DevtoolsUtils.ts index 7a4abe9dc..98463007c 100644 --- a/src/DevtoolsUtils.ts +++ b/src/DevtoolsUtils.ts @@ -7,6 +7,7 @@ import {PuppeteerDevToolsConnection} from './DevToolsConnectionAdapter.js'; import {Mutex} from './Mutex.js'; import {DevTools} from './third_party/index.js'; +import {NetworkManager} from '../node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js'; import type { Browser, ConsoleMessage, @@ -144,6 +145,7 @@ const DEFAULT_FACTORY: TargetUniverseFactoryFn = async (page: Page) => { const targetManager = universe.context.get(DevTools.TargetManager); targetManager.observeModels(DevTools.DebuggerModel, SKIP_ALL_PAUSES); + targetManager.observeModels(NetworkManager, DISABLE_NETWORK); const target = targetManager.createTarget( 'main', @@ -172,6 +174,23 @@ const SKIP_ALL_PAUSES = { }, }; +// Not recording network requests in the DevTools universe. +// +// The network requests are collected through pptr and there isn't a use case for +// enabling devtools SDK's network domain. +// +// If enabled, the NetworkManager collects NetworkRequests that are not properly +// deleted when the page navigates away. See http://b/493046293 for context (internal). +const DISABLE_NETWORK = { + modelAdded(model: NetworkManager): void { + void model.target().networkAgent().invoke_disable(); + }, + + modelRemoved(): void { + // Do nothing. + }, +}; + /** * Constructed from Runtime.ExceptionDetails of an uncaught error. * diff --git a/tests/DevtoolsUtils.test.ts b/tests/DevtoolsUtils.test.ts index 8f9aa3794..dfc3ef020 100644 --- a/tests/DevtoolsUtils.test.ts +++ b/tests/DevtoolsUtils.test.ts @@ -12,15 +12,20 @@ import sinon from 'sinon'; import {UniverseManager} from '../src/DevtoolsUtils.js'; import {DevTools} from '../src/third_party/index.js'; import type {Browser, Target} from '../src/third_party/index.js'; +import {Events as NetworkManagerEvents, NetworkManager} from '../node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js'; +import {serverHooks} from './server.js'; import { getMockBrowser, getMockPage, + html, mockListener, withBrowser, } from './utils.js'; describe('UniverseManager', () => { + const server = serverHooks(); + afterEach(() => { sinon.restore(); }); @@ -86,4 +91,25 @@ describe('UniverseManager', () => { sinon.assert.notCalled(pausedSpy); }); }); + + it('disables network domain', async () => { + server.addHtmlRoute('/test', html`
Test
`); + + await withBrowser(async (browser, page) => { + const manager = new UniverseManager(browser); + await manager.init([page]); + const targetUniverse = manager.get(page); + assert.ok(targetUniverse); + + const networkManager = targetUniverse.target.model(NetworkManager); + assert.ok(networkManager); + + const requestStartedSpy = sinon.stub(); + networkManager.addEventListener(NetworkManagerEvents.RequestStarted as any, requestStartedSpy); + + await page.goto(server.getRoute('/test')); + + sinon.assert.notCalled(requestStartedSpy); + }); + }); });