From 148d759a4c694ffd48852f4c8c7d37d47518e46e Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 21 May 2024 12:49:47 -0700 Subject: [PATCH] fix(chromium): do not fetch intercepted request body from network (#30938) Fixes https://github.com/microsoft/playwright/issues/30760 --- .../src/server/chromium/crNetworkManager.ts | 6 +++++ tests/page/page-request-fulfill.spec.ts | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/packages/playwright-core/src/server/chromium/crNetworkManager.ts b/packages/playwright-core/src/server/chromium/crNetworkManager.ts index 6411457a32..3752a5c06f 100644 --- a/packages/playwright-core/src/server/chromium/crNetworkManager.ts +++ b/packages/playwright-core/src/server/chromium/crNetworkManager.ts @@ -376,6 +376,10 @@ export class CRNetworkManager { if (response.body || !expectedLength) return Buffer.from(response.body, response.base64Encoded ? 'base64' : 'utf8'); + // Make sure no network requests sent while reading the body for fulfilled requests. + if (request._route?._fulfilled) + return Buffer.from(''); + // For hello, world!`); }); + +it('should not go to the network for fulfilled requests body', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/30760' }, +}, async ({ page, server, browserName }) => { + await page.route('**/one-style.css', async route => { + return route.fulfill({ + status: 404, + contentType: 'text/plain', + body: 'Not Found! (mocked)', + }); + }); + + let serverHit = false; + server.setRoute('/one-style.css', (req, res) => { + serverHit = true; + res.setHeader('Content-Type', 'text/css'); + res.end('body { background-color: green; }'); + }); + + const responsePromise = page.waitForResponse('**/one-style.css'); + await page.goto(server.PREFIX + '/one-style.html'); + const response = await responsePromise; + const body = await response.body(); + expect(body).toBeTruthy(); + expect(serverHit).toBe(false); +}); +