Skip to content

Commit 6e2c68e

Browse files
kblokclaude
andauthored
Implement upstream PR #14862: Target.asPage returns same Page instance (#3410)
Ports puppeteer/puppeteer#14862. BidiPageTarget/BidiFrameTarget return cached page instead of creating new instance. CdpPageTarget.AsPageAsync() returns existing PageTask page when available. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f00cafe commit 6e2c68e

3 files changed

Lines changed: 17 additions & 6 deletions

File tree

lib/PuppeteerSharp/Bidi/BidiFrameTarget.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public override Task<IPage> PageAsync()
5252
return Task.FromResult<IPage>(_page);
5353
}
5454

55-
public override Task<IPage> AsPageAsync()
56-
=> Task.FromResult(BidiPage.From((BidiBrowserContext)_frame.Page.BrowserContext, _frame.BrowsingContext) as IPage);
55+
public override Task<IPage> AsPageAsync() => Task.FromResult<IPage>(_frame.Page as BidiPage);
5756

5857
public override Task<ICDPSession> CreateCDPSessionAsync() => throw new PuppeteerException("Not supported");
5958
}

lib/PuppeteerSharp/Bidi/BidiPageTarget.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ internal class BidiPageTarget(BidiPage page) : Target
4141

4242
public override Task<IPage> PageAsync() => Task.FromResult<IPage>(page);
4343

44-
public override Task<IPage> AsPageAsync()
45-
#pragma warning disable CA2000
46-
=> Task.FromResult(BidiPage.From((BidiBrowserContext)page.BrowserContext, page.BidiMainFrame.BrowsingContext) as IPage);
47-
#pragma warning restore CA2000
44+
public override Task<IPage> AsPageAsync() => Task.FromResult<IPage>(page);
4845

4946
public override Task<ICDPSession> CreateCDPSessionAsync()
5047
=> page.CreateCDPSessionAsync();

lib/PuppeteerSharp/Cdp/CdpPageTarget.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ internal CdpPageTarget(
2929

3030
internal Task<Page> PageTask { get; set; }
3131

32+
/// <inheritdoc/>
33+
public override async Task<IPage> AsPageAsync()
34+
{
35+
if (PageTask != null)
36+
{
37+
var page = await PageTask.ConfigureAwait(false);
38+
if (page != null)
39+
{
40+
return page;
41+
}
42+
}
43+
44+
return await base.AsPageAsync().ConfigureAwait(false);
45+
}
46+
3247
/// <inheritdoc/>
3348
public override async Task<IPage> PageAsync()
3449
{

0 commit comments

Comments
 (0)