puppeteer icon indicating copy to clipboard operation
puppeteer copied to clipboard

[Bug]: interceptedRequest.respond hangs the browser until worker timeout

Open DurandA opened this issue 6 months ago • 0 comments

Minimal, reproducible example

import puppeteer from "@cloudflare/puppeteer";

interface Env {
    MYBROWSER: Fetcher;
}

export default {
    async fetch(request, env): Promise<Response> {
        const browser = await puppeteer.launch(env.MYBROWSER);

        const page = await browser.newPage();

        await page.setRequestInterception(true);
        page.on('request', (interceptedRequest) => {
            if (interceptedRequest.isInterceptResolutionHandled()) return;
            if (interceptedRequest.url().endsWith('.png'))
                interceptedRequest.respond({
                    status: 200,
                    contentType: 'image/png',
                    body: Buffer.from('iVBORw0KGgoAAAANSUhEUgAAADAAAAAlAQAAAAAsYlcCAAAACklEQVR4AWMYBQABAwABRUEDtQAAAABJRU5ErkJggg==', 'base64')
                });
            else interceptedRequest.continue();
        });

        await page.goto('https://google.com');
        let img = (await page.screenshot()) as Buffer;
        await browser.close();

        return new Response(img, {
            headers: {
                "content-type": "image/jpeg",
            },
        });
    },
} satisfies ExportedHandler<Env>;

Error string

ce: Navigation timeout of 30000 ms exceeded

Bug behavior

  • [ ] Flaky
  • [ ] PDF

Background

No response

Expectation

interceptedRequest.respond() should works as in the upstream Puppeer.

Reality

As soon as interceptedRequest.respond() is called, the browser hangs until timeout.

Puppeteer configuration file (if used)

No response

Puppeteer version

@cloudflare/[email protected]

DurandA avatar Aug 11 '24 00:08 DurandA