Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
_ => { });
}
}
}