Skip to content

Commit

Permalink
Add WorkerTarget and OtherTarget (#2315)
Browse files Browse the repository at this point in the history
  • Loading branch information
kblok authored Sep 14, 2023
1 parent d6a2106 commit dfac7b3
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 30 deletions.
18 changes: 15 additions & 3 deletions lib/PuppeteerSharp/Browser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -479,25 +479,37 @@ private Target CreateTarget(TargetInfo targetInfo, CDPSession session)
context = _defaultContext;
}

Func<bool, Task<CDPSession>> createSession = (bool isAutoAttachEmulated) => Connection.CreateSessionAsync(targetInfo, isAutoAttachEmulated);

if (IsPageTargetFunc(targetInfo))
{
return new PageTarget(
targetInfo,
session,
context,
TargetManager,
(bool isAutoAttachEmulated) => Connection.CreateSessionAsync(targetInfo, isAutoAttachEmulated),
createSession,
IgnoreHTTPSErrors,
DefaultViewport,
ScreenshotTaskQueue);
}

return new Target(
if (targetInfo.Type == TargetType.ServiceWorker || targetInfo.Type == TargetType.SharedWorker)
{
return new WorkerTarget(
targetInfo,
session,
context,
TargetManager,
createSession);
}

return new OtherTarget(
targetInfo,
session,
context,
TargetManager,
(bool isAutoAttachEmulated) => Connection.CreateSessionAsync(targetInfo, isAutoAttachEmulated));
createSession);
}
}
}
12 changes: 12 additions & 0 deletions lib/PuppeteerSharp/OtherTarget.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using System.Threading.Tasks;

namespace PuppeteerSharp
{
internal class OtherTarget : Target
{
public OtherTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> createSession) : base(targetInfo, session, context, targetManager, createSession)
{
}
}
}
2 changes: 1 addition & 1 deletion lib/PuppeteerSharp/PageTarget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public override async Task<IPage> PageAsync()
{
if (PageTask == null)
{
var session = Session ?? await SessionFactory(true).ConfigureAwait(false);
var session = Session ?? await SessionFactory(false).ConfigureAwait(false);

PageTask = Page.CreateAsync(
session,
Expand Down
27 changes: 1 addition & 26 deletions lib/PuppeteerSharp/Target.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ namespace PuppeteerSharp
[DebuggerDisplay("Target {Type} - {Url}")]
public class Target : ITarget
{
private Task<Worker> _workerTask;

internal Target(
TargetInfo targetInfo,
CDPSession session,
Expand Down Expand Up @@ -73,20 +71,7 @@ internal Target(
public virtual Task<IPage> PageAsync() => Task.FromResult<IPage>(null);

/// <inheritdoc/>
public Task<Worker> WorkerAsync()
{
if (TargetInfo.Type != TargetType.ServiceWorker && TargetInfo.Type != TargetType.SharedWorker)
{
return Task.FromResult<Worker>(null);
}

if (_workerTask == null)
{
_workerTask = WorkerInternalAsync();
}

return _workerTask;
}
public virtual Task<Worker> WorkerAsync() => Task.FromResult<Worker>(null);

/// <inheritdoc/>
public async Task<ICDPSession> CreateCDPSessionAsync() => await SessionFactory(false).ConfigureAwait(false);
Expand Down Expand Up @@ -114,15 +99,5 @@ protected virtual void CheckIfInitialized()
IsInitialized = true;
InitializedTaskWrapper.TrySetResult(true);
}

private async Task<Worker> WorkerInternalAsync()
{
var client = Session ?? await SessionFactory(false).ConfigureAwait(false);
return new Worker(
client,
TargetInfo.Url,
(_, _, _) => Task.CompletedTask,
_ => { });
}
}
}
31 changes: 31 additions & 0 deletions lib/PuppeteerSharp/WorkerTarget.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System;
using System.Threading.Tasks;

namespace PuppeteerSharp
{
internal class WorkerTarget : Target
{
private Task<Worker> _workerTask;

public WorkerTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> sessionFactory) : base(targetInfo, session, context, targetManager, sessionFactory)
{
}

/// <inheritdoc/>
public override Task<Worker> WorkerAsync()
{
_workerTask ??= WorkerInternalAsync();
return _workerTask;
}

private async Task<Worker> WorkerInternalAsync()
{
var client = Session ?? await SessionFactory(false).ConfigureAwait(false);
return new Worker(
client,
TargetInfo.Url,
(_, _, _) => Task.CompletedTask,
_ => { });
}
}
}

0 comments on commit dfac7b3

Please sign in to comment.